<?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>57600</bug_id>
          <alias>sam</alias>
          <creation_ts>2011-03-31 17:38:18 -0700</creation_ts>
          <short_desc>cross-origin XMLHttpRequest doesn&apos;t work with redirect</short_desc>
          <delta_ts>2015-09-15 13:59:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>XML</component>
          <version>525.x (Safari 3.2)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>76198</blocked>
    
    <blocked>82964</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Samir">samirsha</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>adam</cc>
    
    <cc>aestes</cc>
    
    <cc>annevk</cc>
    
    <cc>ap</cc>
    
    <cc>bbudge</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpaddock</cc>
    
    <cc>eric</cc>
    
    <cc>japhet</cc>
    
    <cc>jochen</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xKhorasan+webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>377573</commentid>
    <comment_count>0</comment_count>
    <who name="Samir">samirsha</who>
    <bug_when>2011-03-31 17:38:18 -0700</bug_when>
    <thetext>Steps:
1. Setup two origins blah.domain.com and blah2.domain.com
1. Enable CORS (Cross Origin Resource Sharing)  support on blah2 web server side by setting appropriate Access-Control-Allow-Origin: blah.origin.com
2. Do XHR (synchronous) HTTP POST call to blah2.domain.com/index1.htm from a page on blah.domain.com
3. Return a 302 redirect to blah2.domain.com/index2.htm from blah2 server

XHR returns &quot;NETWORK_ERR: XMLHttpRequest Exception 101&quot;. 

According to CORS spec, this should have worked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395340</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-29 10:35:05 -0700</bug_when>
    <thetext>&lt;rdar://problem/9359014&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535277</commentid>
    <comment_count>2</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-01-12 16:20:38 -0800</bug_when>
    <thetext>also doesn&apos;t work with async XHRs:

http://samples.msdn.microsoft.com/ietestcenter/CORS/CORS_014.htm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535666</commentid>
    <comment_count>3</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-01-13 07:37:47 -0800</bug_when>
    <thetext>I&apos;d propose to make ResourceHandle::loadResourceSynchronously take a ResourceHandleClient, and have FrameLoader implement ResourceHandleClient

That way, FrameLoader is notified of redirects and can do the access control checks

wdyt?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535934</commentid>
    <comment_count>4</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-01-13 13:11:33 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; I&apos;d propose to make ResourceHandle::loadResourceSynchronously take a ResourceHandleClient, and have FrameLoader implement ResourceHandleClient
&gt; 
&gt; That way, FrameLoader is notified of redirects and can do the access control checks
&gt; 
&gt; wdyt?

I&apos;d rather add a ResourceLoader::loadResourceSynchronously() and have FrameLoader call that than make FrameLoader a ResourceHandleClient. FrameLoader implemeneting ResourceHandeClient feels like a layering violation to me, but maybe others disagree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535945</commentid>
    <comment_count>5</comment_count>
      <attachid>122489</attachid>
    <who name="">jochen</who>
    <bug_when>2012-01-13 13:25:12 -0800</bug_when>
    <thetext>Created attachment 122489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535946</commentid>
    <comment_count>6</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-01-13 13:26:12 -0800</bug_when>
    <thetext>I added a test for starters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536074</commentid>
    <comment_count>7</comment_count>
      <attachid>122489</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-13 16:13:54 -0800</bug_when>
    <thetext>Comment on attachment 122489
Patch

Clearing flags on attachment: 122489

Committed r105009: &lt;http://trac.webkit.org/changeset/105009&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536075</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-13 16:13:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536148</commentid>
    <comment_count>9</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-01-13 23:14:46 -0800</bug_when>
    <thetext>not yet fixed, that was just a test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537343</commentid>
    <comment_count>10</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2012-01-17 14:08:00 -0800</bug_when>
    <thetext>Looking at the code, it seems like the natural place to check access control after a redirect would be in DocumentThreadableLoader. There&apos;s a FIXME there that states:

bool DocumentThreadableLoader::isAllowedRedirect(const KURL&amp; url)
{
    if (m_options.crossOriginRequestPolicy == AllowCrossOriginRequests)
        return true;

    // FIXME: We need to implement access control for each redirect. This will require some refactoring though, because the code
    // that processes redirects doesn&apos;t know about access control and expects a synchronous answer from its client about whether
    // a redirect should proceed.
    return m_sameOriginRequest &amp;&amp; securityOrigin()-&gt;canRequest(url);
}

In reading the CORS standard, it sounds like redirects should be transparent under access control, which means we would not call the synchronous client callback. In fact, we would hide the fact that the redirect happened at all. Hopefully, that would reduce the amount of refactoring required to make this work.

(In reply to comment #9)
&gt; not yet fixed, that was just a test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537372</commentid>
    <comment_count>11</comment_count>
      <attachid>122819</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-01-17 14:57:43 -0800</bug_when>
    <thetext>Created attachment 122819
work in progress for fixing CORS redirects

I made an attempt at fixing this a couple of months ago (see attachment).

I didn&apos;t clean it up and post it for review because chromium is missing some plumbing for this to work correctly (see codereview.chromium.org/8589032) and I got distracted in the middle of fixing the chromium issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537781</commentid>
    <comment_count>12</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-01-18 04:56:59 -0800</bug_when>
    <thetext>ok, assigning to you then, Nate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538301</commentid>
    <comment_count>13</comment_count>
      <attachid>123030</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2012-01-18 16:12:36 -0800</bug_when>
    <thetext>Created attachment 123030
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538305</commentid>
    <comment_count>14</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2012-01-18 16:15:39 -0800</bug_when>
    <thetext>I&apos;ve added a proposed patch that modifies DocumentThreadableLoader to allow redirects. The basic approach is to intercept the redirect and start the load over with the new request. One of the issues is that this request is assembled by the browser, and may contain headers that aren&apos;t allowed by CORS. I added methods to remove these headers to ResourceRequestBase, but it might be better to have a method that removes all forbidden headers. However, that seemed like it might not be appropriate to implement on ResourceRequestBase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538311</commentid>
    <comment_count>15</comment_count>
      <attachid>123030</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-18 16:22:01 -0800</bug_when>
    <thetext>Comment on attachment 123030
Proposed Patch

Please include xhr-cors-redirect.html in the patch.

I suspect that one test is likely not enough. A good - although extremely time consuming - way to come up with more tests is to look through working group discussions about changes in the spec. If something was not obvious to spec authors, it should be explicitly tested by us.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538329</commentid>
    <comment_count>16</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2012-01-18 16:49:58 -0800</bug_when>
    <thetext>I think the first patch on this bug contains xhr-cors-redirect.html and was reviewed, landed, and closed. I agree that more tests are needed, and will expand the patch. I may also have to change the existing test / expectations.

I would be interested in general comments about the suitability of the approach, potential problems, and security concerns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538339</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-18 17:09:44 -0800</bug_when>
    <thetext>Indeed - not sure why it got landed separately, but it confused me.

What was the reason to choose this design? If possible, it would be much better to let low level machinery take care of generating a new request, as it already does for non-CORS requests. There are many tricky cases, e.g. for whether credentials should be carried over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538353</commentid>
    <comment_count>18</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2012-01-18 17:32:57 -0800</bug_when>
    <thetext>The new request is generated at a lower level and passed up the loader stack. DocumentThreadableLoader only removes some headers so the request can pass the CORS request checks, and then restarts the load using the new request as if it was the original.

The header that causes problems in my manual testing was &quot;User-Agent&quot;, added by FrameLoader. I could reduce the patch to only add a &apos;clearHttpUserAgent&apos; method to ResourceRequestBase, but it seems safer to add methods for all browser-added headers and remove them all before kicking off the new request (only when using access control).

It seems natural to me that this redirect logic be in DocumentThreadableLoader, since that is where URL loads with access control are made.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539878</commentid>
    <comment_count>19</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2012-01-20 16:04:10 -0800</bug_when>
    <thetext>The first patch for this bug committed layout tests for this functionality that don&apos;t work. The redirect response has the access control headers, but the final response for the redirected request doesn&apos;t, so it will fail.

I&apos;ve added some .php and .cgi files and modified xmlhttprequest/access-control-and-redirects.html to test my patch. In the process, I noticed that there are tests (xmlhttprequest/redirect-xxx.html) that seem to expect CORS redirects to fail in cases where the spec says they should succeed. Alexey, could I get more guidance from you on what work needs to be done to get a solid test suite for this new feature? Are there tests that should be deleted, rewritten, or re-baselined? I&apos;m thinking a good approach is to use redirect.php and write a bunch of redirect-xxx.html tests to request URLs that redirect to existing .php and .cgi resources.

From my reading of the spec, it seems like we want the following:
1) Simple requests that redirect should succeed or fail as if the redirect never happened (the loader just restarts when it gets the redirect, with the new URL). The redirect should be transparent to the XHR.
2) CORS requests with preflight that redirect should fail (either preflight or actual request).

I&apos;d like to approach this conservatively, opening up redirects only where the spec is clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539896</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-20 16:20:05 -0800</bug_when>
    <thetext>&gt; In the process, I noticed that there are tests (xmlhttprequest/redirect-xxx.html) that 
&gt; seem to expect CORS redirects to fail in cases where the spec says they should succeed.

If you have a specific example you&apos;d like me to comment on, I can look into its history.

&gt; Alexey, could I get more guidance from you on what work needs to be done to get
&gt; a solid test suite for this new feature? Are there tests that should be deleted, 
&gt; rewritten, or re-baselined?

I&apos;m pretty sure that we don&apos;t have a complete test suite. For example, it&apos;s likely completely untested what happens with credentials on redirect. I do encourage you to take at least a brief look at working group discussions.

Existing tests that disagree with new behavior should be deleted or updated, depending on whether the case they&apos;re testing (as explained in each test&apos;s description) is still meaningful. Just changing results from &quot;PASS&quot; to &quot;FAIL&quot; would not be a correct course of action.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540933</commentid>
    <comment_count>21</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2012-01-23 16:11:14 -0800</bug_when>
    <thetext>I haven&apos;t been able to find &quot;working group discussions&quot; on CORS using web search. Can you provide a link?

Also, while looking at the CORS standard, I noticed there is &quot;Latest Editor Version&quot; which appears to contain changes to the standard:

http://www.w3.org/TR/2009/WD-cors-20090317/

In particular, there is a &quot;follow redirects flag&quot; which allows the client to control this behavior. There is no corresponding new value on XMLHttpRequest. I&apos;m wondering if I should try to add this to ThreadableLoaderOptions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540946</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-23 16:26:09 -0800</bug_when>
    <thetext>Try search like &lt;http://www.google.com/search?q=XHR+redirect+public-webapps&gt;, e.g. &lt;http://lists.w3.org/Archives/Public/public-webapps/2010JulSep/0655.html&gt; or &lt;http://old.nabble.com/-XHR2--Redirects-(was%3A-Re%3A--whatwg--unexpected-use-of-the-CORS--specification)-td26372946.html&gt;.

Generally, latest editor&apos;s version is what we want to implement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552506</commentid>
    <comment_count>23</comment_count>
      <attachid>123030</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-08 14:43:28 -0800</bug_when>
    <thetext>Comment on attachment 123030
Proposed Patch

What&apos;s the status of this patch?  Is this ready for review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552524</commentid>
    <comment_count>24</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-02-08 15:10:52 -0800</bug_when>
    <thetext>I think that we&apos;re waiting for it to be reconciled with editor&apos;s draft, and for more test coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552666</commentid>
    <comment_count>25</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2012-02-08 17:19:47 -0800</bug_when>
    <thetext>The code needs to be updated and I am still working on the tests. There are a bunch of existing tests that expect redirects to fail that need to be modified or converted to test the redirect steps as described in the editor&apos;s working draft.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552681</commentid>
    <comment_count>26</comment_count>
      <attachid>123030</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-08 17:35:42 -0800</bug_when>
    <thetext>Comment on attachment 123030
Proposed Patch

Ok.  I&apos;m going to clear the review flag from this patch then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561088</commentid>
    <comment_count>27</comment_count>
      <attachid>128009</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2012-02-21 11:35:42 -0800</bug_when>
    <thetext>Created attachment 128009
Proposed Patch

Updating the patch. This patch is closer to how I read the CORS editor&apos;s draft as it stands today. It passes all current layout tests except access-control-and-redirects.html of course. I am working on a test plan.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561266</commentid>
    <comment_count>28</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-21 15:15:41 -0800</bug_when>
    <thetext>&gt; Updating the patch. This patch is closer to how I read the CORS editor&apos;s draft as it stands today. It passes all current layout tests except access-control-and-redirects.html of course. I am working on a test plan.

The shape of this patch looks good.  I haven&apos;t done a detailed comparison with the spec.  Would you like me to do that now, or should I wait for a future version of this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561304</commentid>
    <comment_count>29</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2012-02-21 15:50:39 -0800</bug_when>
    <thetext>I think it&apos;s ready for checking against the spec (editor&apos;s draft). I don&apos;t know of any divergence, so it would be great if you&apos;d have a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562262</commentid>
    <comment_count>30</comment_count>
      <attachid>128267</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2012-02-22 12:38:46 -0800</bug_when>
    <thetext>Created attachment 128267
Preliminary Patch

The previous patch incorrectly allows non-simple cross-origin requests to redirect (after the preflight). Added a m_simpleCrossOriginRequest field and test this rather than that m_actualRequest in non-null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584831</commentid>
    <comment_count>31</comment_count>
      <attachid>133157</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2012-03-21 17:50:47 -0700</bug_when>
    <thetext>Created attachment 133157
Proposed Patch

Ready for review comments. I still need to rebaseline the existing access-control-and-redirects.html tests for the async case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584876</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-21 18:36:27 -0700</bug_when>
    <thetext>Attachment 133157 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/http...&quot; exit_code: 1
Source/WebCore/loader/DocumentThreadableLoader.cpp:192:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584886</commentid>
    <comment_count>33</comment_count>
      <attachid>133166</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2012-03-21 19:01:57 -0700</bug_when>
    <thetext>Created attachment 133166
Proposed Patch

Added test expectations and fixed style.

The existing access-control-and-redirects.html test doesn&apos;t appear to need rebaselining. Sync loads still fail and async ones appear to fail because the redirect doesn&apos;t pass the access control check as it has no CORS headers. We might still want to update the test.

An earlier attachment to this issue added some tests but we should probably remove those now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584925</commentid>
    <comment_count>34</comment_count>
      <attachid>133166</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-21 20:30:03 -0700</bug_when>
    <thetext>Comment on attachment 133166
Proposed Patch

Attachment 133166 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12070796

New failing tests:
http/tests/security/xhr-cors-redirect.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584951</commentid>
    <comment_count>35</comment_count>
      <attachid>133166</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-21 21:21:34 -0700</bug_when>
    <thetext>Comment on attachment 133166
Proposed Patch

Attachment 133166 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12070809

New failing tests:
http/tests/security/xhr-cors-redirect.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584987</commentid>
    <comment_count>36</comment_count>
      <attachid>133166</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-21 22:36:04 -0700</bug_when>
    <thetext>Comment on attachment 133166
Proposed Patch

Why do you mark these r+?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585201</commentid>
    <comment_count>37</comment_count>
      <attachid>133245</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2012-03-22 06:29:36 -0700</bug_when>
    <thetext>Created attachment 133245
Proposed Patch

Sorry, my mistake. I meant to select R? of course.

I updated the patch to remove the previously committed test, as what it intends to test is more thoroughly covered by the new test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586439</commentid>
    <comment_count>38</comment_count>
      <attachid>133245</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-23 09:48:05 -0700</bug_when>
    <thetext>Comment on attachment 133245
Proposed Patch

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

&gt; Source/WebCore/ChangeLog:4
&gt; +        DocumentThreadableLoader follows the CORS redirect steps when asynchronously loading a
&gt; +        cross origin request with access control.

You might consider adding a link to the spec in the ChangeLog.  Traditionally, we use the line above the bug URL for the title of the bug and then put a description like this under the bug URL (after a blank line), but this way works too.

&gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:185
&gt; +            allowRedirect =
&gt; +                SchemeRegistry::shouldTreatURLSchemeAsCORSEnabled(request.url().protocol())

WebKit would usually merge these two lines.

&gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:201
&gt; +            if (!originalOrigin.get()-&gt;isSameSchemeHostPort(requestOrigin.get()))

This line is pretty subtle.  One complication that we need to worry about that the spec doesn&apos;t need to worry about is &quot;universal&quot; origins that can access any URL...  However, in that case, we won&apos;t be in the UseAccessControl codepath, so I think this is actually correct.

nit: originalOrigin.get()-&gt;isSameSchemeHostPort can be written as originalOrigin-&gt;isSameSchemeHostPort because RefPtr overloads operator-&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586467</commentid>
    <comment_count>39</comment_count>
      <attachid>133508</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2012-03-23 10:30:53 -0700</bug_when>
    <thetext>Created attachment 133508
Proposed Patch

Addressed Adam&apos;s comments and redid the ChangeLogs.

One interesting result of this patch is that same origin XHRs which receive cross origin redirects still fail. This is because XHRs have &apos;withCredentials&apos; set to &apos;true&apos; when they begin to load a same origin request. Once they receive a redirect to a cross origin URL, they always fail, since the security origin gets set to a globally unique id and that plus &apos;allowCredentials&apos; causes the access control check to fail.

We could fix this by clearing this flag (on the loader) but that might be confusing. A surprising (to me) result of this work is that of the 9 test cases, only 1 succeeds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586475</commentid>
    <comment_count>40</comment_count>
      <attachid>133508</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-23 10:44:43 -0700</bug_when>
    <thetext>Comment on attachment 133508
Proposed Patch

This patch looks good to me.  Let&apos;s give Alexey a chance to comment before we land it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588586</commentid>
    <comment_count>41</comment_count>
      <attachid>133508</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-26 23:07:51 -0700</bug_when>
    <thetext>Comment on attachment 133508
Proposed Patch

Rejecting attachment 133508 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

ERROR: /mnt/git/webkit-commit-queue/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/12146303</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588589</commentid>
    <comment_count>42</comment_count>
      <attachid>133508</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-26 23:13:31 -0700</bug_when>
    <thetext>Comment on attachment 133508
Proposed Patch

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

&gt; Source/WebCore/ChangeLog:5
&gt; +        cross-origin XMLHttpRequest doesn&apos;t work with redirect
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=57600
&gt; +

You need to leave the &quot;Reviewed by NOBODY (OOPS!).&quot; line in the ChangeLog for the bots to be smart enough to fill it out for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588590</commentid>
    <comment_count>43</comment_count>
      <attachid>133983</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-26 23:15:24 -0700</bug_when>
    <thetext>Created attachment 133983
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588620</commentid>
    <comment_count>44</comment_count>
      <attachid>133983</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-27 00:39:07 -0700</bug_when>
    <thetext>Comment on attachment 133983
Patch for landing

Clearing flags on attachment: 133983

Committed r112217: &lt;http://trac.webkit.org/changeset/112217&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588621</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-27 00:39:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593973</commentid>
    <comment_count>46</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2012-04-02 16:12:41 -0700</bug_when>
    <thetext>This broke the H&amp;R Block tax website. See &lt;https://bugs.webkit.org/show_bug.cgi?id=82964&gt; for details.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122489</attachid>
            <date>2012-01-13 13:25:12 -0800</date>
            <delta_ts>2012-03-26 23:15:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57600-20120113222509.patch</filename>
            <type>text/plain</type>
            <size>4150</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0ODI3CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNmJkY2Q5YzE5NjYzN2E0OTU2ZmM0
NDM1YmM0ZDY5MDliZWI1MWNiYS4uNzdlYTRjYTliMzk2ZWVjYTZmM2JjNDJiNGNkNjZmYmNjZGQz
NjJiNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAxLTEzICBKb2NoZW4gRWlzaW5nZXIg
IDxqb2NoZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBhIHRlc3QgZm9yIGNyb3NzLW9y
aWdpbiBYTUxIdHRwUmVxdWVzdCBhbmQgQ09SUyAod2hpY2ggZG9lc24ndCB3b3JrIGN1cnJlbnRs
eSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NjAw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRw
L3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jb3JzLXJlZGlyZWN0LnBocDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvZW1wdHkuaHRtbDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94aHItY29ycy1yZWRpcmVjdC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveGhyLWNvcnMtcmVkaXJl
Y3QuaHRtbDogQWRkZWQuCisKIDIwMTItMDEtMTIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDQ4
MDUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNl
cy9jb3JzLXJlZGlyZWN0LnBocCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVz
b3VyY2VzL2NvcnMtcmVkaXJlY3QucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgzNTcwYmMxZDdmZTYwMzgzNDI5
MzAzYmE3ZTI1NTk1NGIyMTI5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jb3JzLXJlZGlyZWN0LnBocApAQCAtMCwwICsxLDQg
QEAKKzw/cGhwCitoZWFkZXIoIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbjogaHR0cDovLzEy
Ny4wLjAuMTo4MDAwIik7CitoZWFkZXIoIkxvY2F0aW9uOiBodHRwOi8vbG9jYWxob3N0OjgwMDAv
c2VjdXJpdHkvcmVzb3VyY2VzL2VtcHR5Lmh0bWwiKTsKKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9lbXB0eS5odG1sIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvZW1wdHkuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
OGVjZGNiNzk1YzMzZDZhYjdiYmI0M2Y2NDc5NDdkZWZjYTU2MzRkCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvZW1wdHkuaHRtbApA
QCAtMCwwICsxIEBACis8aHRtbD48L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3hoci1jb3JzLXJlZGlyZWN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveGhyLWNvcnMtcmVkaXJlY3QtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ1ZmE1OGFlZTMzOWNlYTYwMDk3YzM0YjQyNjdjMzNlZmQ1ODg3MWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hoci1jb3JzLXJl
ZGlyZWN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDcgQEAKK1Rlc3QgdGhhdCBhIGNyb3NzLW9y
aWdpbiBYSFIgaW52b2x2aW5nIHJlZGlyZWN0cyB3b3JrcyBjb3JyZWN0bHkuIElmIHRoaXMgdGVz
dCBwYXNzZXMsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzLgorCitDdXJy
ZW50bHkgbm90IHdvcmtpbmcsIHNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzU3NjAwCisKK0ZBSUw6
IHN5bmMgWEhSIGZhaWxlZAorRkFJTDogYXN5bmMgWEhSIGZhaWxlZAorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hoci1jb3JzLXJlZGlyZWN0Lmh0bWwgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hoci1jb3JzLXJlZGlyZWN0Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmJhMjUxMDEzMzBjMmM5OGZkZTAyNTZjYmIxZDk1OWY3YjdiOTE2MgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveGhyLWNvcnMtcmVk
aXJlY3QuaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworfQorCitmdW5jdGlvbiBsb2cobXNnKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImxvZyIpLmlubmVySFRNTCArPSBtc2cgKyAiPGJyPiI7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKSB7
CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHZhciB1cmwgPSAiaHR0
cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3Jlc291cmNlcy9jb3JzLXJlZGlyZWN0LnBocD9u
by1jYWNoZSI7CisgICAgeGhyLm9wZW4oIkdFVCIsIHVybCwgZmFsc2UpOworICAgIHRyeSB7Cisg
ICAgICAgIHhoci5zZW5kKG51bGwpOworCisgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkK
KyAgICAgICAgICAgIGxvZygiUEFTUzogc3luYyBYSFIgc3VjY2Vzc2Z1bCIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBsb2coIkZBSUw6IHN5bmMgWEhSIGZhaWxlZCIpOworICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgbG9nKCJGQUlMOiBzeW5jIFhIUiBmYWlsZWQiKTsKKyAgICB9CisK
KyAgICB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICB4aHIub3BlbigiR0VUIiwgdXJs
LCB0cnVlKTsKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlZCA9IGZ1bmN0aW9uKGUpIHsKKyAg
ICAgICAgaWYgKHhoci5yZWFkeXN0YXRlID09IDQpIHsKKyAgICAgICAgICAgIGlmICh4aHIuc3Rh
dHVzID09IDIwMCkKKyAgICAgICAgICAgICAgICBsb2coIlBBU1M6IGFzeW5jIFhIUiBzdWNjZXNz
ZnVsIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9nKCJGQUlMOiBhc3lu
YyBYSFIgZmFpbGVkIik7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgbG9nKCJGQUlMOiBhc3luYyBYSFIgZmFpbGVkIik7CisgICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7CisgICAgfTsKKyAgICB4aHIuc2VuZChudWxsKTsKK30KKzwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgorPHA+CitUZXN0IHRoYXQgYSBjcm9zcy1vcmln
aW4gWEhSIGludm9sdmluZyByZWRpcmVjdHMgd29ya3MgY29ycmVjdGx5LiBJZiB0aGlzIHRlc3QK
K3Bhc3NlcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMuCis8L3A+Cis8
cD4KK0N1cnJlbnRseSBub3Qgd29ya2luZywgc2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvNTc2MDAK
KzwvcD4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122819</attachid>
            <date>2012-01-17 14:57:43 -0800</date>
            <delta_ts>2012-03-26 23:15:11 -0700</delta_ts>
            <desc>work in progress for fixing CORS redirects</desc>
            <filename>cors2.txt</filename>
            <type>text/plain</type>
            <size>22096</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyLmgJKHJldmlzaW9uIDk5NDI5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
VGhyZWFkYWJsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxMiBAQAogICAg
ICAgICAgICAgTG9hZEFzeW5jaHJvbm91c2x5CiAgICAgICAgIH07CiAKKyAgICAgICAgZW51bSBD
T1JTUmVxdWVzdFBvbGljeSB7CisgICAgICAgICAgICBBbGxvd1JlcXVlc3RXaXRob3V0UHJlZmxp
Z2h0LAorICAgICAgICAgICAgQWxsb3dSZXF1ZXN0V2l0aFByZWZsaWdodCwKKyAgICAgICAgICAg
IEJsb2NrUmVxdWVzdAorICAgICAgICB9OworCiAgICAgICAgIERvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcihEb2N1bWVudCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBCbG9ja2luZ0JlaGF2aW9y
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYp
OwogCiAgICAgICAgIHZvaWQgY2xlYXJSZXNvdXJjZSgpOwpAQCAtODksMTMgKzk1LDEyIEBACiAg
ICAgICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmco
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSk7CiAgICAgICAgIHZv
aWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7Ci0gICAgICAgIHZvaWQgbWFrZVNpbXBs
ZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
OwogICAgICAgICB2b2lkIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCk7CiAgICAgICAgIHZvaWQgcHJlZmxpZ2h0
U3VjY2VzcygpOwotICAgICAgICB2b2lkIHByZWZsaWdodEZhaWx1cmUoY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgZXJyb3JEZXNjcmlwdGlvbik7CisgICAgICAgIHZvaWQgZmFpbHVy
ZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBlcnJvckRlc2NyaXB0aW9uKTsKIAog
ICAgICAgICB2b2lkIGxvYWRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlY3VyaXR5
Q2hlY2tQb2xpY3kpOwotICAgICAgICBib29sIGlzQWxsb3dlZFJlZGlyZWN0KGNvbnN0IEtVUkwm
KTsKKyAgICAgICAgQ09SU1JlcXVlc3RQb2xpY3kgY2FuUmVxdWVzdChSZXNvdXJjZVJlcXVlc3Qm
LCBTdHJpbmcmIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKTsKIAogICAgICAgICBTZWN1
cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKIApAQCAtMTAzLDcgKzEwOCw3IEBA
CiAgICAgICAgIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIG1fY2xpZW50OwogICAgICAgICBEb2N1
bWVudCogbV9kb2N1bWVudDsKICAgICAgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgbV9vcHRp
b25zOwotICAgICAgICBib29sIG1fc2FtZU9yaWdpblJlcXVlc3Q7CisgICAgICAgIGJvb2wgbV9w
cmVmbGlnaHQ7CiAgICAgICAgIGJvb2wgbV9hc3luYzsKICAgICAgICAgT3duUHRyPFJlc291cmNl
UmVxdWVzdD4gbV9hY3R1YWxSZXF1ZXN0OyAgLy8gbm9uLW51bGwgZHVyaW5nIEFjY2VzcyBDb250
cm9sIHByZWZsaWdodCBjaGVja3MKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDk5NDI5KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDcgKzcyLDcgQEAKICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1f
ZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKLSAgICAsIG1fc2Ft
ZU9yaWdpblJlcXVlc3Qoc2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgp
KSkKKyAgICAsIG1fcHJlZmxpZ2h0KGZhbHNlKQogICAgICwgbV9hc3luYyhibG9ja2luZ0JlaGF2
aW9yID09IExvYWRBc3luY2hyb25vdXNseSkKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICwg
bV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllcigwKQpAQCAtODIsNTEgKzgyLDI0IEBACiAgICAg
QVNTRVJUKGNsaWVudCk7CiAgICAgLy8gU2V0dGluZyBhbiBvdXRnb2luZyByZWZlcmVyIGlzIG9u
bHkgc3VwcG9ydGVkIGluIHRoZSBhc3luYyBjb2RlIHBhdGguCiAgICAgQVNTRVJUKG1fYXN5bmMg
fHwgcmVxdWVzdC5odHRwUmVmZXJyZXIoKS5pc0VtcHR5KCkpOwotCi0gICAgaWYgKG1fc2FtZU9y
aWdpblJlcXVlc3QgfHwgbV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBBbGxv
d0Nyb3NzT3JpZ2luUmVxdWVzdHMpIHsKLSAgICAgICAgbG9hZFJlcXVlc3QocmVxdWVzdCwgRG9T
ZWN1cml0eUNoZWNrKTsKLSAgICAgICAgcmV0dXJuOworICAgIFJlc291cmNlUmVxdWVzdCBuZXdS
ZXF1ZXN0KHJlcXVlc3QpOworICAgIFN0cmluZyBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlv
bjsKKyAgICBzd2l0Y2ggKGNhblJlcXVlc3QobmV3UmVxdWVzdCwgYWNjZXNzQ29udHJvbEVycm9y
RGVzY3JpcHRpb24pKSB7CisgICAgY2FzZSBBbGxvd1JlcXVlc3RXaXRob3V0UHJlZmxpZ2h0Ogor
ICAgICAgICBsb2FkUmVxdWVzdChuZXdSZXF1ZXN0LCBEb1NlY3VyaXR5Q2hlY2spOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFsbG93UmVxdWVzdFdpdGhQcmVmbGlnaHQ6CisgICAgICAgIG1h
a2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KG5ld1JlcXVlc3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEJsb2NrUmVxdWVzdDoKKyAgICAgICAgZmFpbHVyZShuZXdS
ZXF1ZXN0LnVybCgpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbik7CisgICAgICAgIGJy
ZWFrOwogICAgIH0KLQotICAgIGlmIChtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5
ID09IERlbnlDcm9zc09yaWdpblJlcXVlc3RzKSB7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRGYWls
KFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgcmVxdWVzdC51cmwo
KS5zdHJpbmcoKSwgIkNyb3NzIG9yaWdpbiByZXF1ZXN0cyBhcmUgbm90IHN1cHBvcnRlZC4iKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKG1fb3B0aW9ucy5jcm9z
c09yaWdpblJlcXVlc3RQb2xpY3kgPT0gVXNlQWNjZXNzQ29udHJvbCk7Ci0KLSAgICBPd25QdHI8
UmVzb3VyY2VSZXF1ZXN0PiBjcm9zc09yaWdpblJlcXVlc3QgPSBhZG9wdFB0cihuZXcgUmVzb3Vy
Y2VSZXF1ZXN0KHJlcXVlc3QpKTsKLSAgICB1cGRhdGVSZXF1ZXN0Rm9yQWNjZXNzQ29udHJvbCgq
Y3Jvc3NPcmlnaW5SZXF1ZXN0LCBzZWN1cml0eU9yaWdpbigpLCBtX29wdGlvbnMuYWxsb3dDcmVk
ZW50aWFscyk7Ci0KLSAgICBpZiAoKG1fb3B0aW9ucy5wcmVmbGlnaHRQb2xpY3kgPT0gQ29uc2lk
ZXJQcmVmbGlnaHQgJiYgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY3Jvc3NPcmln
aW5SZXF1ZXN0LT5odHRwTWV0aG9kKCksIGNyb3NzT3JpZ2luUmVxdWVzdC0+aHR0cEhlYWRlckZp
ZWxkcygpKSkgfHwgbV9vcHRpb25zLnByZWZsaWdodFBvbGljeSA9PSBQcmV2ZW50UHJlZmxpZ2h0
KQotICAgICAgICBtYWtlU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KCpjcm9zc09yaWdp
blJlcXVlc3QpOwotICAgIGVsc2UgewotICAgICAgICBtX2FjdHVhbFJlcXVlc3QgPSBjcm9zc09y
aWdpblJlcXVlc3QucmVsZWFzZSgpOwotCi0gICAgICAgIGlmIChDcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlOjpzaGFyZWQoKS5jYW5Ta2lwUHJlZmxpZ2h0KHNlY3VyaXR5T3JpZ2luKCkt
PnRvU3RyaW5nKCksIG1fYWN0dWFsUmVxdWVzdC0+dXJsKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRl
bnRpYWxzLCBtX2FjdHVhbFJlcXVlc3QtPmh0dHBNZXRob2QoKSwgbV9hY3R1YWxSZXF1ZXN0LT5o
dHRwSGVhZGVyRmllbGRzKCkpKQotICAgICAgICAgICAgcHJlZmxpZ2h0U3VjY2VzcygpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFBy
ZWZsaWdodCgqbV9hY3R1YWxSZXF1ZXN0KTsKLSAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjptYWtlU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBBU1NFUlQobV9vcHRpb25zLnByZWZsaWdo
dFBvbGljeSAhPSBGb3JjZVByZWZsaWdodCk7Ci0gICAgQVNTRVJUKG1fb3B0aW9ucy5wcmVmbGln
aHRQb2xpY3kgPT0gUHJldmVudFByZWZsaWdodCB8fCBpc1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNz
UmVxdWVzdChyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkp
KTsKLQotICAgIC8vIENyb3NzLW9yaWdpbiByZXF1ZXN0cyBhcmUgb25seSBkZWZpbmVkIGZvciBI
VFRQLiBXZSB3b3VsZCBjYXRjaCB0aGlzIHdoZW4gY2hlY2tpbmcgcmVzcG9uc2UgaGVhZGVycyBs
YXRlciwgYnV0IHRoZXJlIGlzIG5vIHJlYXNvbiB0byBzZW5kIGEgcmVxdWVzdCB0aGF0J3MgZ3Vh
cmFudGVlZCB0byBiZSBkZW5pZWQuCi0gICAgLy8gRklYTUU6IENvbnNpZGVyIGFsbG93aW5nIHNp
bXBsZSBDT1JTIHJlcXVlc3RzIHRvIG5vbi1IVFRQIFVSTHMuCi0gICAgaWYgKCFyZXF1ZXN0LnVy
bCgpLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKLSAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwo
UmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCByZXF1ZXN0LnVybCgp
LnN0cmluZygpLCAiQ3Jvc3Mgb3JpZ2luIHJlcXVlc3RzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3Ig
SFRUUC4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkUmVxdWVzdChyZXF1
ZXN0LCBEb1NlY3VyaXR5Q2hlY2spOwotfQotCiB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6bWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQogeworICAgIG1fYWN0dWFsUmVxdWVzdCA9IGFkb3B0UHRyKG5l
dyBSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCkpOwogICAgIFJlc291cmNlUmVxdWVzdCBwcmVmbGln
aHRSZXF1ZXN0ID0gY3JlYXRlQWNjZXNzQ29udHJvbFByZWZsaWdodFJlcXVlc3QocmVxdWVzdCwg
c2VjdXJpdHlPcmlnaW4oKSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpOwogICAgIGxvYWRS
ZXF1ZXN0KHByZWZsaWdodFJlcXVlc3QsIERvU2VjdXJpdHlDaGVjayk7CiB9CkBAIC0xNjcsMTQg
KzE0MCwzMSBAQAogICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXNv
dXJjZSwgcmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7CiAKLSAgICBpZiAoIWlzQWxsb3dlZFJlZGly
ZWN0KHJlcXVlc3QudXJsKCkpKSB7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI+IHByb3RlY3QodGhpcyk7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRGYWlsUmVkaXJlY3RD
aGVjaygpOwotICAgICAgICByZXF1ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKG1fY2xpZW50LT5pc0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNsaWVu
dCgpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50Kj4obV9jbGllbnQpLT53aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25z
ZSk7CisgICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpKSB7CisgICAgICAgIC8vIEEg
cmVxdWVzdHMgdGhhdCByZXF1aXJlZCBwcmVmbGlnaHQgc2hvdWxkIG5ldmVyIHJlY2VpdmUgYSBy
ZWRpcmVjdCBpbiBlaXRoZXIgdGhlIHByZWZsaWdodCBvciB0aGUgYWN0dWFsIHJlcXVlc3QuCisg
ICAgICAgIGlmIChtX3ByZWZsaWdodCkgeworICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWxS
ZWRpcmVjdENoZWNrKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBTdHJpbmcgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb247CisgICAgICAgIHN3aXRjaCAo
Y2FuUmVxdWVzdChyZXF1ZXN0LCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikpIHsKKyAg
ICAgICAgY2FzZSBBbGxvd1JlcXVlc3RXaXRob3V0UHJlZmxpZ2h0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQWxsb3dSZXF1ZXN0V2l0aFByZWZsaWdodDoKKyAgICAgICAgICAg
IGNsZWFyUmVzb3VyY2UoKTsKKyAgICAgICAgICAgIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVl
c3RXaXRoUHJlZmxpZ2h0KHJlcXVlc3QpOworICAgICAgICAgICAgcmVxdWVzdCA9IFJlc291cmNl
UmVxdWVzdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEJsb2NrUmVxdWVz
dDoKKyAgICAgICAgICAgIFJlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IHByb3RlY3Qo
dGhpcyk7CisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbFJlZGlyZWN0Q2hlY2soKTsKKyAg
ICAgICAgICAgIHJlcXVlc3QgPSBSZXNvdXJjZVJlcXVlc3QoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQogICAgIH0KKyAgICBpZiAobV9jbGllbnQtPmlzRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50KCkpCisgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlckNsaWVudCo+KG1fY2xpZW50KS0+d2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHJlZGly
ZWN0UmVzcG9uc2UpOwogfQogCiB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGF0YVNl
bnQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50
LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQpAQCAtMjA1LDcgKzE5NSw3
IEBACiAgICAgU3RyaW5nIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uOwogICAgIGlmICht
X2FjdHVhbFJlcXVlc3QpIHsKICAgICAgICAgaWYgKCFwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2so
cmVzcG9uc2UsIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCBzZWN1cml0eU9yaWdpbigpLCBh
Y2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikpIHsKLSAgICAgICAgICAgIHByZWZsaWdodEZh
aWx1cmUocmVzcG9uc2UudXJsKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKTsKKyAg
ICAgICAgICAgIGZhaWx1cmUocmVzcG9uc2UudXJsKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2Ny
aXB0aW9uKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMTMsMTUgKzIw
MywxNSBAQAogICAgICAgICBpZiAoIXByZWZsaWdodFJlc3VsdC0+cGFyc2UocmVzcG9uc2UsIGFj
Y2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKQogICAgICAgICAgICAgfHwgIXByZWZsaWdodFJl
c3VsdC0+YWxsb3dzQ3Jvc3NPcmlnaW5NZXRob2QobV9hY3R1YWxSZXF1ZXN0LT5odHRwTWV0aG9k
KCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKQogICAgICAgICAgICAgfHwgIXByZWZs
aWdodFJlc3VsdC0+YWxsb3dzQ3Jvc3NPcmlnaW5IZWFkZXJzKG1fYWN0dWFsUmVxdWVzdC0+aHR0
cEhlYWRlckZpZWxkcygpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikpIHsKLSAgICAg
ICAgICAgIHByZWZsaWdodEZhaWx1cmUocmVzcG9uc2UudXJsKCksIGFjY2Vzc0NvbnRyb2xFcnJv
ckRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIGZhaWx1cmUocmVzcG9uc2UudXJsKCksIGFjY2Vz
c0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCiAgICAgICAgIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmFw
cGVuZEVudHJ5KHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG1fYWN0dWFsUmVxdWVzdC0+
dXJsKCksIHByZWZsaWdodFJlc3VsdC5yZWxlYXNlKCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiBtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0
UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpIHsKKyAgICAgICAgaWYgKCFzZWN1cml0eU9yaWdp
bigpLT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKSAmJiBtX29wdGlvbnMuY3Jvc3NPcmlnaW5S
ZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpIHsKICAgICAgICAgICAgIGlmICghcGFz
c2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFs
cywgc2VjdXJpdHlPcmlnaW4oKSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24pKSB7Ci0g
ICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRvbWFp
bldlYktpdEludGVybmFsLCAwLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgYWNjZXNzQ29udHJv
bEVycm9yRGVzY3JpcHRpb24pKTsKKyAgICAgICAgICAgICAgICBmYWlsdXJlKHJlc3BvbnNlLnVy
bCgpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNjksNyArMjU5LDYgQEAKICNlbmRp
ZgogCiAgICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkgewotICAgICAgICBBU1NFUlQoIW1fc2FtZU9y
aWdpblJlcXVlc3QpOwogICAgICAgICBBU1NFUlQobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVz
dFBvbGljeSA9PSBVc2VBY2Nlc3NDb250cm9sKTsKICAgICAgICAgcHJlZmxpZ2h0U3VjY2Vzcygp
OwogICAgIH0gZWxzZQpAQCAtMjk5LDcgKzI4OCw3IEBACiAgICAgbG9hZFJlcXVlc3QoKmFjdHVh
bFJlcXVlc3QsIFNraXBTZWN1cml0eUNoZWNrKTsKIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6OnByZWZsaWdodEZhaWx1cmUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JEZXNjcmlwdGlvbikKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpmYWls
dXJlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGVycm9yRGVzY3JpcHRpb24pCiB7
CiAgICAgbV9hY3R1YWxSZXF1ZXN0ID0gbnVsbHB0cjsgLy8gUHJldmVudCBkaWRGaW5pc2hMb2Fk
aW5nKCkgZnJvbSBieXBhc3NpbmcgYWNjZXNzIGNoZWNrLgogICAgIG1fY2xpZW50LT5kaWRGYWls
KFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgdXJsLCBlcnJvckRl
c2NyaXB0aW9uKSk7CkBAIC0zMTAsOCArMjk5LDYgQEAKICAgICAvLyBBbnkgY3JlZGVudGlhbCBz
aG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY3Jvc3Mtc2l0ZSByZXF1ZXN0cy4KICAg
ICBjb25zdCBLVVJMJiByZXF1ZXN0VVJMID0gcmVxdWVzdC51cmwoKTsKICAgICBtX29wdGlvbnMu
c2VjdXJpdHlDaGVjayA9IHNlY3VyaXR5Q2hlY2s7Ci0gICAgQVNTRVJUKG1fc2FtZU9yaWdpblJl
cXVlc3QgfHwgcmVxdWVzdFVSTC51c2VyKCkuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9zYW1l
T3JpZ2luUmVxdWVzdCB8fCByZXF1ZXN0VVJMLnBhc3MoKS5pc0VtcHR5KCkpOwogCiAgICAgaWYg
KG1fYXN5bmMpIHsKICAgICAgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9ucyA9IG1f
b3B0aW9uczsKQEAgLTM1OCw3ICszNDUsOCBAQAogICAgIC8vIEZJWE1FOiBGcmFtZUxvYWRlcjo6
bG9hZFN5bmNocm9ub3VzbHkoKSBkb2VzIG5vdCB0ZWxsIHVzIHdoZXRoZXIgYSByZWRpcmVjdCBo
YXBwZW5lZCBvciBub3QsIHNvIHdlIGd1ZXNzIGJ5IGNvbXBhcmluZyB0aGUKICAgICAvLyByZXF1
ZXN0IGFuZCByZXNwb25zZSBVUkxzLiBUaGlzIGlzbid0IGEgcGVyZmVjdCB0ZXN0IHRob3VnaCwg
c2luY2UgYSBzZXJ2ZXIgY2FuIHNlcnZlIGEgcmVkaXJlY3QgdG8gdGhlIHNhbWUgVVJMIHRoYXQg
d2FzCiAgICAgLy8gcmVxdWVzdGVkLiBBbHNvIGNvbXBhcmluZyB0aGUgcmVxdWVzdCBhbmQgcmVz
cG9uc2UgVVJMcyBhcyBzdHJpbmdzIHdpbGwgZmFpbCBpZiB0aGUgcmVxdWVzdFVSTCBzdGlsbCBo
YXMgaXRzIGNyZWRlbnRpYWxzLgotICAgIGlmIChyZXF1ZXN0VVJMICE9IHJlc3BvbnNlLnVybCgp
ICYmICFpc0FsbG93ZWRSZWRpcmVjdChyZXNwb25zZS51cmwoKSkpIHsKKyAgICBTdHJpbmcgYWNj
ZXNzQ29udHJvbEVycnJvckRlc2NyaXB0aW9uOworICAgIGlmIChyZXF1ZXN0VVJMICE9IHJlc3Bv
bnNlLnVybCgpICYmIG1fcHJlZmxpZ2h0KSB7CiAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsUmVk
aXJlY3RDaGVjaygpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDE1ICszNjAsMzQg
QEAKICAgICBkaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIsIDAuMCk7CiB9CiAKLWJvb2wgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjppc0FsbG93ZWRSZWRpcmVjdChjb25zdCBLVVJMJiB1cmwp
CitEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkNPUlNSZXF1ZXN0UG9saWN5IERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6Y2FuUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0cmlu
ZyYgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24pCiB7Ci0gICAgaWYgKG1fb3B0aW9ucy5j
cm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPT0gQWxsb3dDcm9zc09yaWdpblJlcXVlc3RzKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBv
bGljeSA9PSBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHMgfHwgc2VjdXJpdHlPcmlnaW4oKS0+Y2Fu
UmVxdWVzdChyZXF1ZXN0LnVybCgpKSkKKyAgICAgICAgcmV0dXJuIEFsbG93UmVxdWVzdFdpdGhv
dXRQcmVmbGlnaHQ7CiAKLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBpbXBsZW1lbnQgYWNjZXNz
IGNvbnRyb2wgZm9yIGVhY2ggcmVkaXJlY3QuIFRoaXMgd2lsbCByZXF1aXJlIHNvbWUgcmVmYWN0
b3JpbmcgdGhvdWdoLCBiZWNhdXNlIHRoZSBjb2RlCi0gICAgLy8gdGhhdCBwcm9jZXNzZXMgcmVk
aXJlY3RzIGRvZXNuJ3Qga25vdyBhYm91dCBhY2Nlc3MgY29udHJvbCBhbmQgZXhwZWN0cyBhIHN5
bmNocm9ub3VzIGFuc3dlciBmcm9tIGl0cyBjbGllbnQgYWJvdXQgd2hldGhlcgotICAgIC8vIGEg
cmVkaXJlY3Qgc2hvdWxkIHByb2NlZWQuCi0gICAgcmV0dXJuIG1fc2FtZU9yaWdpblJlcXVlc3Qg
JiYgc2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOworICAgIGlmIChtX29wdGlvbnMu
Y3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IERlbnlDcm9zc09yaWdpblJlcXVlc3RzKSB7Cisg
ICAgICAgIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uID0gIkNyb3NzIG9yaWdpbiByZXF1
ZXN0cyBhcmUgbm90IHN1cHBvcnRlZC4iOworICAgICAgICByZXR1cm4gQmxvY2tSZXF1ZXN0Owor
ICAgIH0KKyAgICAKKyAgICBBU1NFUlQobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGlj
eSA9PSBVc2VBY2Nlc3NDb250cm9sKTsKKworICAgIHVwZGF0ZVJlcXVlc3RGb3JBY2Nlc3NDb250
cm9sKHJlcXVlc3QsIHNlY3VyaXR5T3JpZ2luKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxz
KTsKKyAgICBpZiAoKG1fb3B0aW9ucy5wcmVmbGlnaHRQb2xpY3kgPT0gQ29uc2lkZXJQcmVmbGln
aHQgJiYgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QocmVxdWVzdC5odHRwTWV0aG9k
KCksIHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpKSkgfHwgbV9vcHRpb25zLnByZWZsaWdodFBv
bGljeSA9PSBQcmV2ZW50UHJlZmxpZ2h0KSB7CisgICAgICAgIC8vIENyb3NzLW9yaWdpbiByZXF1
ZXN0cyBhcmUgb25seSBkZWZpbmVkIGZvciBIVFRQLiBXZSB3b3VsZCBjYXRjaCB0aGlzIHdoZW4g
Y2hlY2tpbmcgcmVzcG9uc2UgaGVhZGVycyBsYXRlciwgYnV0IHRoZXJlIGlzIG5vIHJlYXNvbiB0
byBzZW5kIGEgcmVxdWVzdCB0aGF0J3MgZ3VhcmFudGVlZCB0byBiZSBkZW5pZWQuCisgICAgICAg
IC8vIEZJWE1FOiBDb25zaWRlciBhbGxvd2luZyBzaW1wbGUgQ09SUyByZXF1ZXN0cyB0byBub24t
SFRUUCBVUkxzLgorICAgICAgICBpZiAocmVxdWVzdC51cmwoKS5wcm90b2NvbEluSFRUUEZhbWls
eSgpKQorICAgICAgICAgICAgcmV0dXJuIEFsbG93UmVxdWVzdFdpdGhvdXRQcmVmbGlnaHQ7CisK
KyAgICAgICAgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24gPSAiQ3Jvc3Mgb3JpZ2luIHJl
cXVlc3RzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgSFRUUC4iOworICAgICAgICByZXR1cm4gQmxv
Y2tSZXF1ZXN0OworICAgIH0KKworICAgIGlmIChDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENh
Y2hlOjpzaGFyZWQoKS5jYW5Ta2lwUHJlZmxpZ2h0KHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5n
KCksIHJlcXVlc3QudXJsKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCByZXF1ZXN0Lmh0
dHBNZXRob2QoKSwgcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKQorICAgICAgIHJldHVybiBB
bGxvd1JlcXVlc3RXaXRob3V0UHJlZmxpZ2h0OworCisgICAgbV9wcmVmbGlnaHQgPSB0cnVlOwor
ICAgIHJldHVybiBBbGxvd1JlcXVlc3RXaXRoUHJlZmxpZ2h0OwogfQogCiBTZWN1cml0eU9yaWdp
biogRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpzZWN1cml0eU9yaWdpbigpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9s
LmNwcAkocmV2aXNpb24gOTk0MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmln
aW5BY2Nlc3NDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDEyIEBACiBi
b29sIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKG5hbWUsICJhY2NlcHQiKQorICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1l
LCAiYWNjZXB0LWVuY29kaW5nIikKICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwg
ImFjY2VwdC1sYW5ndWFnZSIpCiAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJj
b250ZW50LWxhbmd1YWdlIikKICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIm9y
aWdpbiIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJyZWZlcmVyIikpCisg
ICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJyZWZlcmVyIikKKyAgICAgICAgfHwg
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInVzZXItYWdlbnQiKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICAvLyBQcmVmbGlnaHQgaXMgcmVxdWlyZWQgZm9yIE1JTUUgdHlwZXMgdGhhdCBj
YW4gbm90IGJlIHNlbnQgdmlhIGZvcm0gc3VibWlzc2lvbi4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtYW5kLXJlZGlyZWN0cy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNj
ZXNzLWNvbnRyb2wtYW5kLXJlZGlyZWN0cy5odG1sCShyZXZpc2lvbiA5OTQyOSkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtYW5kLXJlZGly
ZWN0cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00NSw5ICs0NSw5IEBACiB9CiAKIHZhciB0ZXN0
cyA9IFsKLSAgICBbIi9yZXNvdXJjZXMvcmVkaXJlY3QucGhwP3VybD1odHRwOi8vbG9jYWxob3N0
OjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFsbG93
LmNnaSIsIGZhbHNlLCBmYWxzZV0sCi0gICAgWyJodHRwOi8vbG9jYWxob3N0OjgwMDAvcmVzb3Vy
Y2VzL3JlZGlyZWN0LnBocD91cmw9aHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0
L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1iYXNpYy1hbGxvdy5jZ2kiLCBmYWxzZSwgZmFsc2Vd
LAotICAgIFsiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3Jlc291cmNlcy9yZWRpcmVjdC5waHA/dXJs
PWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNv
bnRyb2wtYmFzaWMtYWxsb3cuY2dpIiwgZmFsc2UsIGZhbHNlXQorICAgIFsiL3Jlc291cmNlcy9y
ZWRpcmVjdC5waHA/dXJsPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNv
dXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3cuY2dpIiwgZmFsc2UsIHRydWVdLAorICAg
IFsiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3Jlc291cmNlcy9yZWRpcmVjdC5waHA/dXJsPWh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wt
YmFzaWMtYWxsb3cuY2dpIiwgZmFsc2UsIHRydWVdLAorICAgIFsiaHR0cDovL2xvY2FsaG9zdDo4
MDAwL3Jlc291cmNlcy9yZWRpcmVjdC5waHA/dXJsPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94bWxo
dHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3cuY2dpIiwgdHJ1
ZSwgdHJ1ZV0KIF0KIAogdmFyIGN1cnJlbnRUZXN0ID0gMDsKSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVkaXJlY3QtY3Jvc3Mtb3JpZ2luLTItZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
cmVkaXJlY3QtY3Jvc3Mtb3JpZ2luLTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5OTQyOSkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVkaXJlY3QtY3Jvc3Mtb3Jp
Z2luLTItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNSBAQAorQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDE6IFhNTEh0dHBSZXF1ZXN0IGNhbm5vdCBsb2FkIGh0dHA6Ly9sb2Nh
bGhvc3Q6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVwbHkueG1sLiBPcmlnaW4gaHR0
cDovLzEyNy4wLjAuMTo4MDAwIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93
LU9yaWdpbi4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBYTUxIdHRwUmVxdWVzdCBjYW5ub3Qg
bG9hZCBodHRwOi8vbG9jYWxob3N0OjIyLy4gT3JpZ2luIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMCBp
cyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4uCiBUZXN0IHRoYXQg
YSBjcm9zcy1vcmlnaW4gcmVkaXJlY3QgdG8gYSBzZXJ2ZXIgdGhhdCByZXNwb25kcyBpcyBpbmRp
c3Rpbmd1aXNoYWJsZSBmcm9tIG9uZSB0aGF0IGRvZXMgbm90LiBTaG91bGQgc2F5IFBBU1M6CiAK
IFBBU1MKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0
cHJlcXVlc3QtdW5zYWZlLXJlZGlyZWN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXVuc2FmZS1y
ZWRpcmVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDk5NDI5KQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC11bnNhZmUtcmVkaXJlY3QtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNCBAQAorQ09OU09MRSBNRVNTQUdF
OiBsaW5lIDE6IFhNTEh0dHBSZXF1ZXN0IGNhbm5vdCBsb2FkIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4
MC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvZm9yYmlkZGVuLnR4dC4gT3JpZ2luIGh0dHA6Ly8x
MjcuMC4wLjE6ODAwMCBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1Pcmln
aW4uCiBUaGlzIHRlc3RzIHRoYXQgdW5zYWZlIHJlZGlyZWN0cyB3b24ndCBiZSBhbGxvd2VkIHdo
ZW4gbWFraW5nIGFuIFhNTEh0dHBSZXF1ZXN0LgogU3luYyBYSFIgc3RhcnRlZC4KIHJlYWR5U3Rh
dGUgY2hhbmdlIDEKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
cmVkaXJlY3QtY3Jvc3Mtb3JpZ2luLXRyaXBtaW5lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3JlZGlyZWN0LWNyb3NzLW9y
aWdpbi10cmlwbWluZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDk5NDI5KQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZWRpcmVjdC1jcm9zcy1vcmlnaW4tdHJpcG1p
bmUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKK0NPTlNPTEUg
TUVTU0FHRTogbGluZSAxOiBYTUxIdHRwUmVxdWVzdCBjYW5ub3QgbG9hZCBodHRwOi8vbG9jYWxo
b3N0OjgwMDAvcmVzb3VyY2VzL3RyaXBtaW5lLnBocC4gT3JpZ2luIGh0dHA6Ly8xMjcuMC4wLjE6
ODAwMCBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4uCitDT05T
T0xFIE1FU1NBR0U6IGxpbmUgMTogWE1MSHR0cFJlcXVlc3QgY2Fubm90IGxvYWQgaHR0cDovL2xv
Y2FsaG9zdDo4MDAwL3Jlc291cmNlcy90cmlwbWluZS5waHAuIE9yaWdpbiBodHRwOi8vMTI3LjAu
MC4xOjgwMDAgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luLgor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFhNTEh0dHBSZXF1ZXN0IGNhbm5vdCBsb2FkIGh0dHA6
Ly9sb2NhbGhvc3Q6ODAwMC9yZXNvdXJjZXMvdHJpcG1pbmUucGhwLiBPcmlnaW4gaHR0cDovLzEy
Ny4wLjAuMTo4MDAwIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdp
bi4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBYTUxIdHRwUmVxdWVzdCBjYW5ub3QgbG9hZCBo
dHRwOi8vbG9jYWxob3N0OjgwMDAvcmVzb3VyY2VzL3RyaXBtaW5lLnBocC4gT3JpZ2luIGh0dHA6
Ly8xMjcuMC4wLjE6ODAwMCBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1P
cmlnaW4uCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogWE1MSHR0cFJlcXVlc3QgY2Fubm90IGxv
YWQgaHR0cDovL2xvY2FsaG9zdDo4MDAwL3Jlc291cmNlcy90cmlwbWluZS5waHAuIE9yaWdpbiBo
dHRwOi8vMTI3LjAuMC4xOjgwMDAgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxs
b3ctT3JpZ2luLgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFhNTEh0dHBSZXF1ZXN0IGNhbm5v
dCBsb2FkIGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9yZXNvdXJjZXMvdHJpcG1pbmUucGhwLiBPcmln
aW4gaHR0cDovLzEyNy4wLjAuMTo4MDAwIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9s
LUFsbG93LU9yaWdpbi4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBYTUxIdHRwUmVxdWVzdCBj
YW5ub3QgbG9hZCBodHRwOi8vbG9jYWxob3N0OjgwMDAvcmVzb3VyY2VzL3RyaXBtaW5lLnBocC4g
T3JpZ2luIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMCBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29u
dHJvbC1BbGxvdy1PcmlnaW4uCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogWE1MSHR0cFJlcXVl
c3QgY2Fubm90IGxvYWQgaHR0cDovL2xvY2FsaG9zdDo4MDAwL3Jlc291cmNlcy90cmlwbWluZS5w
aHAuIE9yaWdpbiBodHRwOi8vMTI3LjAuMC4xOjgwMDAgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNz
LUNvbnRyb2wtQWxsb3ctT3JpZ2luLgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFhNTEh0dHBS
ZXF1ZXN0IGNhbm5vdCBsb2FkIGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9yZXNvdXJjZXMvdHJpcG1p
bmUucGhwLiBPcmlnaW4gaHR0cDovLzEyNy4wLjAuMTo4MDAwIGlzIG5vdCBhbGxvd2VkIGJ5IEFj
Y2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbi4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBYTUxI
dHRwUmVxdWVzdCBjYW5ub3QgbG9hZCBodHRwOi8vbG9jYWxob3N0OjgwMDAvcmVzb3VyY2VzL3Ry
aXBtaW5lLnBocC4gT3JpZ2luIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMCBpcyBub3QgYWxsb3dlZCBi
eSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4uCiBUZXN0IHRoYXQgYSBjcm9zcy1vcmlnaW4g
cmVkaXJlY3QgZG9lcyBub3QgcmVzdWx0IGluIGEgbm9uLXNpbXBsZSByZXF1ZXN0IGJlaW5nIHNl
bnQgdG8gdGhlIHRhcmdldC4KIAogQXN5bmNocm9ub3VzIFhNTEh0dHBSZXF1ZXN0IDMwNyBQT1NU
IHJlZGlyZWN0OgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9y
ZWRpcmVjdC1jcm9zcy1vcmlnaW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVkaXJlY3QtY3Jvc3Mtb3JpZ2luLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gOTk0MjkpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0
dHByZXF1ZXN0L3JlZGlyZWN0LWNyb3NzLW9yaWdpbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw0IEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogWE1MSHR0cFJlcXVl
c3QgY2Fubm90IGxvYWQgaHR0cDovL2xvY2FsaG9zdDo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291
cmNlcy9yZXBseS54bWwuIE9yaWdpbiBodHRwOi8vMTI3LjAuMC4xOjgwMDAgaXMgbm90IGFsbG93
ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luLgogVGVzdCB0aGF0IGEgY3Jvc3Mtb3Jp
Z2luIHJlZGlyZWN0IHRvIGEgc2VydmVyIHRoYXQgcmVzcG9uZHMgaXMgaW5kaXN0aW5ndWlzaGFi
bGUgZnJvbSBvbmUgdGhhdCBkb2VzIG5vdC4gU2hvdWxkIHNheSBQQVNTOgogCiBQQVNTCkluZGV4
OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3JlZGlyZWN0LWNyb3NzLW9y
aWdpbi1wb3N0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3JlZGlyZWN0LWNyb3NzLW9yaWdpbi1wb3N0LWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gOTk0MjkpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L3JlZGlyZWN0LWNyb3NzLW9yaWdpbi1wb3N0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDQgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBYTUxIdHRwUmVxdWVz
dCBjYW5ub3QgbG9hZCBodHRwOi8vbG9jYWxob3N0OjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3Vy
Y2VzL3JlcGx5LnhtbC4gT3JpZ2luIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMCBpcyBub3QgYWxsb3dl
ZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4uCiBUZXN0IHRoYXQgYSBjcm9zcy1vcmln
aW4gcmVkaXJlY3QgdG8gYSBzZXJ2ZXIgdGhhdCByZXNwb25kcyBpcyBpbmRpc3Rpbmd1aXNoYWJs
ZSBmcm9tIG9uZSB0aGF0IGRvZXMgbm90LiBTaG91bGQgc2F5IFBBU1M6CiAKIFBBU1MKSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtYW5k
LXJlZGlyZWN0cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1hbmQtcmVkaXJlY3RzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gOTk0MjkpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L2FjY2Vzcy1jb250cm9sLWFuZC1yZWRpcmVjdHMtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC02LDE4ICs2LDIyIEBACiBFeHBlY3Rpbmcgc3VjY2VzczogZmFsc2UKIFBBU1M6
IEVycm9yOiBORVRXT1JLX0VSUjogWE1MSHR0cFJlcXVlc3QgRXhjZXB0aW9uIDEwMQogVGVzdGlu
ZyAvcmVzb3VyY2VzL3JlZGlyZWN0LnBocD91cmw9aHR0cDovL2xvY2FsaG9zdDo4MDAwL3htbGh0
dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1iYXNpYy1hbGxvdy5jZ2koYXN5bmMp
Ci1FeHBlY3Rpbmcgc3VjY2VzczogZmFsc2UKLVBBU1M6IDAKK0V4cGVjdGluZyBzdWNjZXNzOiB0
cnVlCitQQVNTOiBQQVNTOiBDcm9zcy1kb21haW4gYWNjZXNzIGFsbG93ZWQuCisKIFRlc3Rpbmcg
aHR0cDovL2xvY2FsaG9zdDo4MDAwL3Jlc291cmNlcy9yZWRpcmVjdC5waHA/dXJsPWh0dHA6Ly8x
MjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFz
aWMtYWxsb3cuY2dpIChzeW5jKQogRXhwZWN0aW5nIHN1Y2Nlc3M6IGZhbHNlCiBQQVNTOiBFcnJv
cjogTkVUV09SS19FUlI6IFhNTEh0dHBSZXF1ZXN0IEV4Y2VwdGlvbiAxMDEKIFRlc3RpbmcgaHR0
cDovL2xvY2FsaG9zdDo4MDAwL3Jlc291cmNlcy9yZWRpcmVjdC5waHA/dXJsPWh0dHA6Ly8xMjcu
MC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMt
YWxsb3cuY2dpKGFzeW5jKQotRXhwZWN0aW5nIHN1Y2Nlc3M6IGZhbHNlCi1QQVNTOiAwCitFeHBl
Y3Rpbmcgc3VjY2VzczogdHJ1ZQorUEFTUzogUEFTUzogQ3Jvc3MtZG9tYWluIGFjY2VzcyBhbGxv
d2VkLgorCiBUZXN0aW5nIGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9yZXNvdXJjZXMvcmVkaXJlY3Qu
cGhwP3VybD1odHRwOi8vbG9jYWxob3N0OjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2Fj
Y2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LmNnaSAoc3luYykKLUV4cGVjdGluZyBzdWNjZXNzOiBm
YWxzZQotUEFTUzogRXJyb3I6IE5FVFdPUktfRVJSOiBYTUxIdHRwUmVxdWVzdCBFeGNlcHRpb24g
MTAxCitFeHBlY3Rpbmcgc3VjY2VzczogdHJ1ZQorUEFTUzogUEFTUzogQ3Jvc3MtZG9tYWluIGFj
Y2VzcyBhbGxvd2VkLgorCiBUZXN0aW5nIGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9yZXNvdXJjZXMv
cmVkaXJlY3QucGhwP3VybD1odHRwOi8vbG9jYWxob3N0OjgwMDAveG1saHR0cHJlcXVlc3QvcmVz
b3VyY2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LmNnaShhc3luYykKLUV4cGVjdGluZyBz
dWNjZXNzOiBmYWxzZQotUEFTUzogMAorRXhwZWN0aW5nIHN1Y2Nlc3M6IHRydWUKK1BBU1M6IFBB
U1M6IENyb3NzLWRvbWFpbiBhY2Nlc3MgYWxsb3dlZC4KIAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123030</attachid>
            <date>2012-01-18 16:12:36 -0800</date>
            <delta_ts>2012-02-21 11:35:42 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>aaa.txt</filename>
            <type>text/plain</type>
            <size>11457</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTMzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEyLTAxLTE4ICBCaWxsIEJ1
ZGdlICA8YmJ1ZGdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIgbm93IHN1cHBvcnRzIHJlZGlyZWN0cyB3aGVuIGxvYWRpbmcgYSBjcm9zcy1vcmlnaW4g
cmVxdWVzdAorICAgICAgICB3aXRoIGFjY2VzcyBjb250cm9sIChDT1JTKS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NjAwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9zZWN1
cml0eS94aHItY29ycy1yZWRpcmVjdC5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaDoK
KwogMjAxMi0wMS0xOCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBQcm92aWRlIGFjY2VzcyB0byB1c2VyJ3MgbGlzdCBvZiBwcmVmZXJyZWQgbGFuZ3Vh
Z2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyLmNwcAkocmV2aXNpb24gMTA1MzMzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTkyLDkg
KzkyLDE0IEBAIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWQKICAgICAg
ICAgbV9jbGllbnQtPmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVy
bmFsLCAwLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLCAiQ3Jvc3Mgb3JpZ2luIHJlcXVlc3RzIGFy
ZSBub3Qgc3VwcG9ydGVkLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAg
IEFTU0VSVChtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0Nv
bnRyb2wpOwogCisgICAgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChyZXF1ZXN0KTsKK30K
Kwordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09yaWdpbkFjY2Vzc1Jl
cXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorewogICAgIE93blB0cjxSZXNv
dXJjZVJlcXVlc3Q+IGNyb3NzT3JpZ2luUmVxdWVzdCA9IGFkb3B0UHRyKG5ldyBSZXNvdXJjZVJl
cXVlc3QocmVxdWVzdCkpOwogICAgIHVwZGF0ZVJlcXVlc3RGb3JBY2Nlc3NDb250cm9sKCpjcm9z
c09yaWdpblJlcXVlc3QsIHNlY3VyaXR5T3JpZ2luKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRp
YWxzKTsKIApAQCAtMTcyLDggKzE3NywyNSBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6cmVkaXJlY3RSCiAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsUmVkaXJlY3RDaGVjaygpOwog
ICAgICAgICByZXF1ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKG1fY2xpZW50LT5pc0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNsaWVudCgpKQotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Kj4obV9j
bGllbnQpLT53aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisgICAg
ICAgIC8vIFdoZW4gdXNpbmcgYWNjZXNzIGNvbnRyb2wsIHJlZGlyZWN0cyBtdXN0IGJlIHRyYW5z
cGFyZW50IHRvIHRoZSBjbGllbnQuCisgICAgICAgIGlmIChtX29wdGlvbnMuY3Jvc3NPcmlnaW5S
ZXF1ZXN0UG9saWN5ICE9IFVzZUFjY2Vzc0NvbnRyb2wpIHsKKyAgICAgICAgICAgIGlmIChtX2Ns
aWVudC0+aXNEb2N1bWVudFRocmVhZGFibGVMb2FkZXJDbGllbnQoKSkKKyAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxEb2N1bWVudFRocmVhZGFibGVMb2FkZXJDbGllbnQqPihtX2NsaWVudCkt
PndpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICAgICAgICAg
IC8vIEFsbG93IHRoZSByZWRpcmVjdCB0byBwcm9jZWVkLgorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gU3RvcCB0aGUgZmlyc3QgcmVxdWVzdC4KKyAgICAgICAgICAgIGNsZWFyUmVz
b3VyY2UoKTsKKyAgICAgICAgICAgIC8vIENsZWFyIGFueSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGgg
dGhlIG9yaWdpbmFsIHJlcXVlc3QuCisgICAgICAgICAgICBtX3NhbWVPcmlnaW5SZXF1ZXN0ID0g
c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgICAg
IG1fcHJlZmxpZ2h0UmVxdWVzdElkZW50aWZpZXIgPSAwOworICAgICAgICAgICAgLy8gU2luY2Ug
dGhlIG5ldyByZXF1ZXN0IGlzIGJyb3dzZXIgZ2VuZXJhdGVkLCB3ZSBzaG91bGQgcmVtb3ZlIGFu
eSBoZWFkZXJzIHRoYXQgd2lsbCBjYXVzZSBhY2Nlc3MgY29udHJvbCB0byBmYWlsLgorICAgICAg
ICAgICAgcmVxdWVzdC5jbGVhckhUVFBDb250ZW50VHlwZSgpOworICAgICAgICAgICAgcmVxdWVz
dC5jbGVhckhUVFBSZWZlcnJlcigpOworICAgICAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBPcmln
aW4oKTsKKyAgICAgICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQVXNlckFnZW50KCk7CisgICAgICAg
ICAgICByZXF1ZXN0LmNsZWFySFRUUEFjY2VwdCgpOworICAgICAgICAgICAgbWFrZUNyb3NzT3Jp
Z2luQWNjZXNzUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMzc0
LDEyICszOTYsOSBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlcXVlCiAK
IGJvb2wgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjppc0FsbG93ZWRSZWRpcmVjdChjb25zdCBL
VVJMJiB1cmwpCiB7Ci0gICAgaWYgKG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kg
PT0gQWxsb3dDcm9zc09yaWdpblJlcXVlc3RzKQorICAgIGlmIChtX29wdGlvbnMuY3Jvc3NPcmln
aW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wgfHwgbV9vcHRpb25zLmNyb3NzT3Jp
Z2luUmVxdWVzdFBvbGljeSA9PSBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHMpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gaW1wbGVtZW50IGFjY2VzcyBj
b250cm9sIGZvciBlYWNoIHJlZGlyZWN0LiBUaGlzIHdpbGwgcmVxdWlyZSBzb21lIHJlZmFjdG9y
aW5nIHRob3VnaCwgYmVjYXVzZSB0aGUgY29kZQotICAgIC8vIHRoYXQgcHJvY2Vzc2VzIHJlZGly
ZWN0cyBkb2Vzbid0IGtub3cgYWJvdXQgYWNjZXNzIGNvbnRyb2wgYW5kIGV4cGVjdHMgYSBzeW5j
aHJvbm91cyBhbnN3ZXIgZnJvbSBpdHMgY2xpZW50IGFib3V0IHdoZXRoZXIKLSAgICAvLyBhIHJl
ZGlyZWN0IHNob3VsZCBwcm9jZWVkLgogICAgIHJldHVybiBtX3NhbWVPcmlnaW5SZXF1ZXN0ICYm
IHNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24g
MTA1MzMzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC04OSwxMiArODksMTQgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpOwogICAg
ICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgICAgICB2b2lkIG1h
a2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAg
ICAgIHZvaWQgbWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1Jl
cXVlc3RXaXRoUHJlZmxpZ2h0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCk7CiAgICAg
ICAgIHZvaWQgcHJlZmxpZ2h0U3VjY2VzcygpOwogICAgICAgICB2b2lkIHByZWZsaWdodEZhaWx1
cmUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZXJyb3JEZXNjcmlwdGlvbik7CiAK
ICAgICAgICAgdm9pZCBsb2FkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTZWN1cml0
eUNoZWNrUG9saWN5KTsKKwogICAgICAgICBib29sIGlzQWxsb3dlZFJlZGlyZWN0KGNvbnN0IEtV
UkwmKTsKIAogICAgICAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmNwcAkocmV2aXNpb24gMTA1MzMzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUxLDYgKzI1MSwxNiBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUEF1
dGhvCiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCit2b2lk
IFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUENvbnRlbnRUeXBlKCkKK3sKKyAgICB1cGRh
dGVSZXNvdXJjZVJlcXVlc3QoKTsgCisKKyAgICBtX2h0dHBIZWFkZXJGaWVsZHMucmVtb3ZlKCJD
b250ZW50LVR5cGUiKTsKKworICAgIGlmICh1cmwoKS5wcm90b2NvbEluSFRUUEZhbWlseSgpKQor
ICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKK30KKwogdm9pZCBSZXNv
dXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBSZWZlcnJlcigpCiB7CiAgICAgdXBkYXRlUmVzb3Vy
Y2VSZXF1ZXN0KCk7IApAQCAtMjcxLDYgKzI4MSwyNiBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJh
c2U6OmNsZWFySFRUUE9yaWdpCiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZh
bHNlOwogfQogCit2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFVzZXJBZ2VudCgp
Cit7CisgICAgdXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCk7IAorCisgICAgbV9odHRwSGVhZGVyRmll
bGRzLnJlbW92ZSgiVXNlci1BZ2VudCIpOworCisgICAgaWYgKHVybCgpLnByb3RvY29sSW5IVFRQ
RmFtaWx5KCkpCisgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworfQor
Cit2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUEFjY2VwdCgpCit7CisgICAgdXBk
YXRlUmVzb3VyY2VSZXF1ZXN0KCk7IAorCisgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZSgi
QWNjZXB0Iik7CisKKyAgICBpZiAodXJsKCkucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSkKKyAgICAg
ICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7Cit9CisKIHZvaWQgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6c2V0UmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXkoY29uc3QgU3RyaW5nJiBlbmNvZGluZzEsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcyLCBj
b25zdCBTdHJpbmcmIGVuY29kaW5nMykKIHsKICAgICB1cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsg
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuaAkocmV2aXNpb24gMTA1MzMzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4
LDcgKzg4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFN0cmluZyBodHRwQ29u
dGVudFR5cGUoKSBjb25zdCB7IHJldHVybiBodHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtVHlwZSIp
OyAgfQogICAgICAgICB2b2lkIHNldEhUVFBDb250ZW50VHlwZShjb25zdCBTdHJpbmcmIGh0dHBD
b250ZW50VHlwZSkgeyBzZXRIVFRQSGVhZGVyRmllbGQoIkNvbnRlbnQtVHlwZSIsIGh0dHBDb250
ZW50VHlwZSk7IH0KLSAgICAgICAgCisgICAgICAgIHZvaWQgY2xlYXJIVFRQQ29udGVudFR5cGUo
KTsKKwogICAgICAgICBTdHJpbmcgaHR0cFJlZmVycmVyKCkgY29uc3QgeyByZXR1cm4gaHR0cEhl
YWRlckZpZWxkKCJSZWZlcmVyIik7IH0KICAgICAgICAgdm9pZCBzZXRIVFRQUmVmZXJyZXIoY29u
c3QgU3RyaW5nJiBodHRwUmVmZXJyZXIpIHsgc2V0SFRUUEhlYWRlckZpZWxkKCJSZWZlcmVyIiwg
aHR0cFJlZmVycmVyKTsgfQogICAgICAgICB2b2lkIGNsZWFySFRUUFJlZmVycmVyKCk7CkBAIC05
OSw5ICsxMDAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFN0cmluZyBodHRw
VXNlckFnZW50KCkgY29uc3QgeyByZXR1cm4gaHR0cEhlYWRlckZpZWxkKCJVc2VyLUFnZW50Iik7
IH0KICAgICAgICAgdm9pZCBzZXRIVFRQVXNlckFnZW50KGNvbnN0IFN0cmluZyYgaHR0cFVzZXJB
Z2VudCkgeyBzZXRIVFRQSGVhZGVyRmllbGQoIlVzZXItQWdlbnQiLCBodHRwVXNlckFnZW50KTsg
fQorICAgICAgICB2b2lkIGNsZWFySFRUUFVzZXJBZ2VudCgpOwogCiAgICAgICAgIFN0cmluZyBo
dHRwQWNjZXB0KCkgY29uc3QgeyByZXR1cm4gaHR0cEhlYWRlckZpZWxkKCJBY2NlcHQiKTsgfQog
ICAgICAgICB2b2lkIHNldEhUVFBBY2NlcHQoY29uc3QgU3RyaW5nJiBodHRwQWNjZXB0KSB7IHNl
dEhUVFBIZWFkZXJGaWVsZCgiQWNjZXB0IiwgaHR0cEFjY2VwdCk7IH0KKyAgICAgICAgdm9pZCBj
bGVhckhUVFBBY2NlcHQoKTsKIAogICAgICAgICB2b2lkIHNldFJlc3BvbnNlQ29udGVudERpc3Bv
c2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KGNvbnN0IFN0cmluZyYgZW5jb2RpbmcxLCBjb25z
dCBTdHJpbmcmIGVuY29kaW5nMiA9IFN0cmluZygpLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nMyA9
IFN0cmluZygpKTsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEw
NTMzNikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDEtMTggIEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIEFzc29jaWF0ZWRVUkxMb2FkZXIgbm93IHN1cHBvcnRzIHJlZGly
ZWN0cyB3aGVuIGxvYWRpbmcgYSBjcm9zcy1vcmlnaW4gcmVxdWVzdAorICAgICAgICB3aXRoIGFj
Y2VzcyBjb250cm9sIChDT1JTKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU3NjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBzcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZEZhaWxSZWRpcmVjdENo
ZWNrKToKKyAgICAgICAgKiB0ZXN0cy9Bc3NvY2lhdGVkVVJMTG9hZGVyVGVzdC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlRFU1RfRik6CisKIDIwMTItMDEtMTggIERpcmsgUHJhbmtlICA8ZHByYW5r
ZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBtb3ZlIFRvb2xzLmd5cCwgc3dp
dGNoIGJ1aWxkLXdlYmtpdCAtLWNocm9taXVtIHRvIEFsbC5neXAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwCShyZXZpc2lv
biAxMDUzMzMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqLCBpbnQgLypk
YXRhTGVuZ3RoKi8pOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVk
IGxvbmcgLyppZGVudGlmaWVyKi8sIGRvdWJsZSAvKmZpbmlzaFRpbWUqLyk7CiAgICAgdmlydHVh
bCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsUmVkaXJlY3RDaGVjaygpOwogCiAgICAgdmlydHVhbCBib29sIGlzRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50KCkgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC0yNjIsNiArMjYzLDEx
IEBAIHZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjoKICAgICAgICAgbm90
aWZ5RXJyb3IoJm1fZXJyb3JUaW1lcik7CiB9CiAKK3ZvaWQgQXNzb2NpYXRlZFVSTExvYWRlcjo6
Q2xpZW50QWRhcHRlcjo6ZGlkRmFpbFJlZGlyZWN0Q2hlY2soKQoreworICAgIG1fbG9hZGVyLT5j
YW5jZWwoKTsKK30KKwogdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOjpz
ZXREZWxheWVkRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAgICAgZGlkRmFp
bChlcnJvcik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Fzc29jaWF0ZWRV
UkxMb2FkZXJUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0Fzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LmNwcAkocmV2aXNpb24gMTA1MzMzKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Bc3NvY2lhdGVkVVJMTG9hZGVyVGVzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQzMyw4ICs0MzMsNyBAQCBURVNUX0YoQXNzb2NpYXRlZFVSTExvYWRl
clRlc3QsIFJlZGlyZWN0CiB9CiAKIC8vIFRlc3QgYSBzdWNjZXNzZnVsIHJlZGlyZWN0IGFuZCBj
cm9zcy1vcmlnaW4gbG9hZCB1c2luZyBDT1JTLgotLy8gRklYTUU6IEVuYWJsZSB0aGlzIHdoZW4g
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIHN1cHBvcnRzIGNyb3NzLW9yaWdpbiByZWRpcmVjdHMu
Ci1URVNUX0YoQXNzb2NpYXRlZFVSTExvYWRlclRlc3QsIERJU0FCTEVEX1JlZGlyZWN0Q3Jvc3NP
cmlnaW5XaXRoQWNjZXNzQ29udHJvbFN1Y2Nlc3MpCitURVNUX0YoQXNzb2NpYXRlZFVSTExvYWRl
clRlc3QsIFJlZGlyZWN0Q3Jvc3NPcmlnaW5XaXRoQWNjZXNzQ29udHJvbFN1Y2Nlc3MpCiB7CiAg
ICAgR1VSTCB1cmwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL1JlZGlyZWN0Q3Jvc3NPcmln
aW5XaXRoQWNjZXNzQ29udHJvbFN1Y2Nlc3MuaHRtbCIpOwogICAgIGNoYXIgcmVkaXJlY3RbXSA9
ICJodHRwOi8vd3d3Lm90aGVyLmNvbS9SZWRpcmVjdENyb3NzT3JpZ2luV2l0aEFjY2Vzc0NvbnRy
b2xTdWNjZXNzLmh0bWwiOyAgLy8gQ3Jvc3Mtb3JpZ2luCkBAIC00NjcsNyArNDY2LDggQEAgVEVT
VF9GKEFzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LCBESVNBQkxFRAogICAgIEVYUEVDVF9UUlVFKG1f
ZXhwZWN0ZWRMb2FkZXIpOwogICAgIG1fZXhwZWN0ZWRMb2FkZXItPmxvYWRBc3luY2hyb25vdXNs
eShyZXF1ZXN0LCB0aGlzKTsKICAgICBzZXJ2ZVJlcXVlc3RzKCk7Ci0gICAgRVhQRUNUX1RSVUUo
bV93aWxsU2VuZFJlcXVlc3QpOworICAgIC8vIENPUlMgcmVxdWlyZXMgdGhhdCB0aGUgcmVkaXJl
Y3QgYmUgdHJhbnNwYXJlbnQuCisgICAgRVhQRUNUX0ZBTFNFKG1fd2lsbFNlbmRSZXF1ZXN0KTsK
ICAgICBFWFBFQ1RfVFJVRShtX2RpZFJlY2VpdmVSZXNwb25zZSk7CiAgICAgRVhQRUNUX1RSVUUo
bV9kaWRSZWNlaXZlRGF0YSk7CiAgICAgRVhQRUNUX1RSVUUobV9kaWRGaW5pc2hMb2FkaW5nKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128009</attachid>
            <date>2012-02-21 11:35:42 -0800</date>
            <delta_ts>2012-02-22 12:38:46 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>aaa.diff</filename>
            <type>text/plain</type>
            <size>12599</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODM3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEyLTAyLTIxICBCaWxsIEJ1
ZGdlICA8YmJ1ZGdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIgbm93IHN1cHBvcnRzIHJlZGlyZWN0cyB3aGVuIGxvYWRpbmcgYSBjcm9zcy1vcmlnaW4g
cmVxdWVzdAorICAgICAgICB3aXRoIGFjY2VzcyBjb250cm9sIChDT1JTKS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NjAwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEp
IChMYXlvdXQgdGVzdHMgVEJEKQorCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bWFrZUNyb3NzT3JpZ2luQWNjZXNz
UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnJl
ZGlyZWN0UmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjppc0FsbG93ZWRSZWRpcmVjdCk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFk
YWJsZUxvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0
QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhU
VFBDb250ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFVzZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBBY2NlcHQpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorICAgICAgICAoUmVzb3VyY2VSZXF1
ZXN0QmFzZSk6CisKIDIwMTItMDItMjEgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBpdCBpcyBuZWFybHkgaW1wb3NzaWJs
ZSB0byBzZWxlY3QgYW5kIGNvcHkgdGV4dCBvbiB0aGUgRWxlbWVudHMgcGFuZWwuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNw
cAkocmV2aXNpb24gMTA4MTU2KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTkzLDkgKzkzLDE0IEBAIERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWQKICAgICAgICAgbV9jbGllbnQt
PmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCByZXF1
ZXN0LnVybCgpLnN0cmluZygpLCAiQ3Jvc3Mgb3JpZ2luIHJlcXVlc3RzIGFyZSBub3Qgc3VwcG9y
dGVkLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIEFTU0VSVChtX29w
dGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpOwogCisg
ICAgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChyZXF1ZXN0KTsKK30KKwordm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorewogICAgIE93blB0cjxSZXNvdXJjZVJlcXVlc3Q+
IGNyb3NzT3JpZ2luUmVxdWVzdCA9IGFkb3B0UHRyKG5ldyBSZXNvdXJjZVJlcXVlc3QocmVxdWVz
dCkpOwogICAgIHVwZGF0ZVJlcXVlc3RGb3JBY2Nlc3NDb250cm9sKCpjcm9zc09yaWdpblJlcXVl
c3QsIHNlY3VyaXR5T3JpZ2luKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKTsKIApAQCAt
MTY3LDEzICsxNzIsNDEgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnJlZGlyZWN0
UgogICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgcmVz
b3VyY2UgPT0gbV9yZXNvdXJjZSk7CiAKLSAgICBpZiAoIWlzQWxsb3dlZFJlZGlyZWN0KHJlcXVl
c3QudXJsKCkpKSB7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IHBy
b3RlY3QodGhpcyk7CisgICAgUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gcHJvdGVj
dCh0aGlzKTsKKyAgICBib29sIGFsbG93UmVkaXJlY3QgPSBmYWxzZTsKKyAgICBpZiAobV9vcHRp
b25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBVc2VBY2Nlc3NDb250cm9sKSB7CisgICAg
ICAgIC8vIE9ubHkgdGhlIGFjdHVhbCByZXF1ZXN0IGNhbiByZWRpcmVjdC4KKyAgICAgICAgaWYg
KCFtX2FjdHVhbFJlcXVlc3QpIHsKKyAgICAgICAgICAgIFN0cmluZyBhY2Nlc3NDb250cm9sRXJy
b3JEZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIGFsbG93UmVkaXJlY3QgPSBwYXNzZXNBY2Nlc3ND
b250cm9sQ2hlY2socmVkaXJlY3RSZXNwb25zZSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMs
IHNlY3VyaXR5T3JpZ2luKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGFsbG93UmVkaXJlY3QgPSBpc0FsbG93ZWRSZWRp
cmVjdChyZXF1ZXN0LnVybCgpKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb3dSZWRpcmVjdCkgewor
ICAgICAgICAvLyBJZiBub3QgdXNpbmcgYWNjZXNzIGNvbnRyb2wsIGFsbG93IGNsaWVudHMgdG8g
YXVkaXQgdGhlIHJlZGlyZWN0LgorICAgICAgICBpZiAobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVx
dWVzdFBvbGljeSAhPSBVc2VBY2Nlc3NDb250cm9sKSB7CisgICAgICAgICAgICBpZiAobV9jbGll
bnQtPmlzRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KCkpCisgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Kj4obV9jbGllbnQpLT53
aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBXaGVuIHVzaW5nIGFjY2VzcyBjb250cm9sLCByZXN0YXJ0IHRo
ZSByZXF1ZXN0LgorICAgICAgICAgICAgaWYgKG1fcmVzb3VyY2UpIHsKKyAgICAgICAgICAgICAg
ICAvLyBTdG9wIHRoZSBwcmV2aW91cyByZXF1ZXN0IGFuZCBjbGVhciBhbnkgYXNzb2NpYXRlZCBz
dGF0ZS4KKyAgICAgICAgICAgICAgICBjbGVhclJlc291cmNlKCk7CisgICAgICAgICAgICAgICAg
bV9zYW1lT3JpZ2luUmVxdWVzdCA9IHNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVxdWVz
dC51cmwoKSk7CisgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSBoZWFkZXJzIHRoYXQgd2ls
bCBjYXVzZSBhY2Nlc3MgY29udHJvbCB0byBmYWlsLgorICAgICAgICAgICAgICAgIHJlcXVlc3Qu
Y2xlYXJIVFRQQ29udGVudFR5cGUoKTsKKyAgICAgICAgICAgICAgICByZXF1ZXN0LmNsZWFySFRU
UFJlZmVycmVyKCk7CisgICAgICAgICAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBPcmlnaW4oKTsK
KyAgICAgICAgICAgICAgICByZXF1ZXN0LmNsZWFySFRUUFVzZXJBZ2VudCgpOworICAgICAgICAg
ICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQQWNjZXB0KCk7CisgICAgICAgICAgICAgICAgbWFrZUNy
b3NzT3JpZ2luQWNjZXNzUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CiAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsUmVkaXJlY3RDaGVjaygp
OwogICAgICAgICByZXF1ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKG1fY2xpZW50LT5pc0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNsaWVudCgpKQot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Kj4o
bV9jbGllbnQpLT53aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiAg
ICAgfQogfQogCkBAIC0zNzcsOSArNDEwLDYgQEAgYm9vbCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OmlzQWxsb3dlZAogICAgIGlmIChtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5
ID09IEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cykKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICAvLyBGSVhNRTogV2UgbmVlZCB0byBpbXBsZW1lbnQgYWNjZXNzIGNvbnRyb2wgZm9yIGVhY2gg
cmVkaXJlY3QuIFRoaXMgd2lsbCByZXF1aXJlIHNvbWUgcmVmYWN0b3JpbmcgdGhvdWdoLCBiZWNh
dXNlIHRoZSBjb2RlCi0gICAgLy8gdGhhdCBwcm9jZXNzZXMgcmVkaXJlY3RzIGRvZXNuJ3Qga25v
dyBhYm91dCBhY2Nlc3MgY29udHJvbCBhbmQgZXhwZWN0cyBhIHN5bmNocm9ub3VzIGFuc3dlciBm
cm9tIGl0cyBjbGllbnQgYWJvdXQgd2hldGhlcgotICAgIC8vIGEgcmVkaXJlY3Qgc2hvdWxkIHBy
b2NlZWQuCiAgICAgcmV0dXJuIG1fc2FtZU9yaWdpblJlcXVlc3QgJiYgc2VjdXJpdHlPcmlnaW4o
KS0+Y2FuUmVxdWVzdCh1cmwpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCShyZXZpc2lvbiAxMDgxNTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKQEAgLTg5LDEyICs4OSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSk7CiAgICAgICAgIHZvaWQgZGlkRmFp
bChjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgIHZvaWQgbWFrZUNyb3NzT3JpZ2luQWNj
ZXNzUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKICAgICAgICAgdm9pZCBtYWtlU2lt
cGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCk7CiAgICAgICAgIHZvaWQgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGln
aHQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsKICAgICAgICAgdm9pZCBwcmVmbGln
aHRTdWNjZXNzKCk7CiAgICAgICAgIHZvaWQgcHJlZmxpZ2h0RmFpbHVyZShjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBlcnJvckRlc2NyaXB0aW9uKTsKIAogICAgICAgICB2b2lkIGxv
YWRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlY3VyaXR5Q2hlY2tQb2xpY3kpOwor
CiAgICAgICAgIGJvb2wgaXNBbGxvd2VkUmVkaXJlY3QoY29uc3QgS1VSTCYpOwogCiAgICAgICAg
IFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
Y3BwCShyZXZpc2lvbiAxMDgxNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNiArMjUxLDE2
IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQQXV0aG8KICAgICAgICAgbV9w
bGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9CiAKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0
QmFzZTo6Y2xlYXJIVFRQQ29udGVudFR5cGUoKQoreworICAgIHVwZGF0ZVJlc291cmNlUmVxdWVz
dCgpOyAKKworICAgIG1faHR0cEhlYWRlckZpZWxkcy5yZW1vdmUoIkNvbnRlbnQtVHlwZSIpOwor
CisgICAgaWYgKHVybCgpLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpCisgICAgICAgIG1fcGxhdGZv
cm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworfQorCiB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6
OmNsZWFySFRUUFJlZmVycmVyKCkKIHsKICAgICB1cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsgCkBA
IC0yNzEsNiArMjgxLDI2IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQT3Jp
Z2kKICAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9CiAKK3ZvaWQg
UmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQVXNlckFnZW50KCkKK3sKKyAgICB1cGRhdGVS
ZXNvdXJjZVJlcXVlc3QoKTsgCisKKyAgICBtX2h0dHBIZWFkZXJGaWVsZHMucmVtb3ZlKCJVc2Vy
LUFnZW50Iik7CisKKyAgICBpZiAodXJsKCkucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSkKKyAgICAg
ICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQQWNjZXB0KCkKK3sKKyAgICB1cGRhdGVSZXNvdXJjZVJlcXVl
c3QoKTsgCisKKyAgICBtX2h0dHBIZWFkZXJGaWVsZHMucmVtb3ZlKCJBY2NlcHQiKTsKKworICAg
IGlmICh1cmwoKS5wcm90b2NvbEluSFRUUEZhbWlseSgpKQorICAgICAgICBtX3BsYXRmb3JtUmVx
dWVzdFVwZGF0ZWQgPSBmYWxzZTsKK30KKwogdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRS
ZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheShjb25zdCBTdHJp
bmcmIGVuY29kaW5nMSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZzIsIGNvbnN0IFN0cmluZyYgZW5j
b2RpbmczKQogewogICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOyAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5o
CShyZXZpc2lvbiAxMDgxNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgU3RyaW5nIGh0dHBDb250ZW50VHlwZSgpIGNvbnN0
IHsgcmV0dXJuIGh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIik7ICB9CiAgICAgICAgIHZv
aWQgc2V0SFRUUENvbnRlbnRUeXBlKGNvbnN0IFN0cmluZyYgaHR0cENvbnRlbnRUeXBlKSB7IHNl
dEhUVFBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIiwgaHR0cENvbnRlbnRUeXBlKTsgfQotICAg
ICAgICAKKyAgICAgICAgdm9pZCBjbGVhckhUVFBDb250ZW50VHlwZSgpOworCiAgICAgICAgIFN0
cmluZyBodHRwUmVmZXJyZXIoKSBjb25zdCB7IHJldHVybiBodHRwSGVhZGVyRmllbGQoIlJlZmVy
ZXIiKTsgfQogICAgICAgICB2b2lkIHNldEhUVFBSZWZlcnJlcihjb25zdCBTdHJpbmcmIGh0dHBS
ZWZlcnJlcikgeyBzZXRIVFRQSGVhZGVyRmllbGQoIlJlZmVyZXIiLCBodHRwUmVmZXJyZXIpOyB9
CiAgICAgICAgIHZvaWQgY2xlYXJIVFRQUmVmZXJyZXIoKTsKQEAgLTk5LDkgKzEwMCwxMSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgU3RyaW5nIGh0dHBVc2VyQWdlbnQoKSBjb25z
dCB7IHJldHVybiBodHRwSGVhZGVyRmllbGQoIlVzZXItQWdlbnQiKTsgfQogICAgICAgICB2b2lk
IHNldEhUVFBVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiBodHRwVXNlckFnZW50KSB7IHNldEhUVFBI
ZWFkZXJGaWVsZCgiVXNlci1BZ2VudCIsIGh0dHBVc2VyQWdlbnQpOyB9CisgICAgICAgIHZvaWQg
Y2xlYXJIVFRQVXNlckFnZW50KCk7CiAKICAgICAgICAgU3RyaW5nIGh0dHBBY2NlcHQoKSBjb25z
dCB7IHJldHVybiBodHRwSGVhZGVyRmllbGQoIkFjY2VwdCIpOyB9CiAgICAgICAgIHZvaWQgc2V0
SFRUUEFjY2VwdChjb25zdCBTdHJpbmcmIGh0dHBBY2NlcHQpIHsgc2V0SFRUUEhlYWRlckZpZWxk
KCJBY2NlcHQiLCBodHRwQWNjZXB0KTsgfQorICAgICAgICB2b2lkIGNsZWFySFRUUEFjY2VwdCgp
OwogCiAgICAgICAgIHZvaWQgc2V0UmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0Zh
bGxiYWNrQXJyYXkoY29uc3QgU3RyaW5nJiBlbmNvZGluZzEsIGNvbnN0IFN0cmluZyYgZW5jb2Rp
bmcyID0gU3RyaW5nKCksIGNvbnN0IFN0cmluZyYgZW5jb2RpbmczID0gU3RyaW5nKCkpOwogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTA4Mzc1KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBA
QAorMjAxMi0wMi0yMSAgQmlsbCBCdWRnZSAgPGJidWRnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIG5vdyBzdXBwb3J0cyByZWRpcmVjdHMgd2hlbiBs
b2FkaW5nIGEgY3Jvc3Mtb3JpZ2luIHJlcXVlc3QKKyAgICAgICAgd2l0aCBhY2Nlc3MgY29udHJv
bCAoQ09SUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NzYwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwOgorICAgICAgICAoQXNzb2NpYXRlZFVSTExv
YWRlcjo6Q2xpZW50QWRhcHRlcik6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2Fk
ZXI6OkNsaWVudEFkYXB0ZXI6OmRpZEZhaWxSZWRpcmVjdENoZWNrKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgICogdGVzdHMvQXNzb2NpYXRlZFVSTExvYWRlclRlc3QuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpURVNUX0YpOgorCiAyMDEyLTAyLTIxICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2Fu
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRleGVkREI6IHdlYkZyYW1lIGlzbid0IHRocmVh
ZHNhZmUsIGRvbid0IHVzZSBpdCBmcm9tIGEgd29ya2VyIHRocmVhZApJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAJKHJldmlz
aW9uIDEwODE1NikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNiArMTM5LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciosIGludCAv
KmRhdGFMZW5ndGgqLyk7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWdu
ZWQgbG9uZyAvKmlkZW50aWZpZXIqLywgZG91YmxlIC8qZmluaXNoVGltZSovKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXJDbGllbnQoKSB7IHJldHVybiB0cnVlOyB9CiAKQEAgLTI2Miw2ICsyNjMs
MTEgQEAgdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyOgogICAgICAgICBu
b3RpZnlFcnJvcigmbV9lcnJvclRpbWVyKTsKIH0KIAordm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVy
OjpDbGllbnRBZGFwdGVyOjpkaWRGYWlsUmVkaXJlY3RDaGVjaygpCit7CisgICAgbV9sb2FkZXIt
PmNhbmNlbCgpOworfQorCiB2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6
OnNldERlbGF5ZWRFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBkaWRG
YWlsKGVycm9yKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQXNzb2NpYXRl
ZFVSTExvYWRlclRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQXNzb2NpYXRlZFVSTExvYWRlclRlc3QuY3BwCShyZXZpc2lvbiAxMDgxNTYpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Fzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMzLDggKzQzMyw3IEBAIFRFU1RfRihBc3NvY2lhdGVkVVJMTG9h
ZGVyVGVzdCwgUmVkaXJlY3QKIH0KIAogLy8gVGVzdCBhIHN1Y2Nlc3NmdWwgcmVkaXJlY3QgYW5k
IGNyb3NzLW9yaWdpbiBsb2FkIHVzaW5nIENPUlMuCi0vLyBGSVhNRTogRW5hYmxlIHRoaXMgd2hl
biBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIgc3VwcG9ydHMgY3Jvc3Mtb3JpZ2luIHJlZGlyZWN0
cy4KLVRFU1RfRihBc3NvY2lhdGVkVVJMTG9hZGVyVGVzdCwgRElTQUJMRURfUmVkaXJlY3RDcm9z
c09yaWdpbldpdGhBY2Nlc3NDb250cm9sU3VjY2VzcykKK1RFU1RfRihBc3NvY2lhdGVkVVJMTG9h
ZGVyVGVzdCwgUmVkaXJlY3RDcm9zc09yaWdpbldpdGhBY2Nlc3NDb250cm9sU3VjY2VzcykKIHsK
ICAgICBHVVJMIHVybCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vUmVkaXJlY3RDcm9zc09y
aWdpbldpdGhBY2Nlc3NDb250cm9sU3VjY2Vzcy5odG1sIik7CiAgICAgY2hhciByZWRpcmVjdFtd
ID0gImh0dHA6Ly93d3cub3RoZXIuY29tL1JlZGlyZWN0Q3Jvc3NPcmlnaW5XaXRoQWNjZXNzQ29u
dHJvbFN1Y2Nlc3MuaHRtbCI7ICAvLyBDcm9zcy1vcmlnaW4KQEAgLTQ2Nyw3ICs0NjYsOCBAQCBU
RVNUX0YoQXNzb2NpYXRlZFVSTExvYWRlclRlc3QsIERJU0FCTEVECiAgICAgRVhQRUNUX1RSVUUo
bV9leHBlY3RlZExvYWRlcik7CiAgICAgbV9leHBlY3RlZExvYWRlci0+bG9hZEFzeW5jaHJvbm91
c2x5KHJlcXVlc3QsIHRoaXMpOwogICAgIHNlcnZlUmVxdWVzdHMoKTsKLSAgICBFWFBFQ1RfVFJV
RShtX3dpbGxTZW5kUmVxdWVzdCk7CisgICAgLy8gQ09SUyByZXF1aXJlcyB0aGF0IHRoZSByZWRp
cmVjdCBiZSB0cmFuc3BhcmVudC4KKyAgICBFWFBFQ1RfRkFMU0UobV93aWxsU2VuZFJlcXVlc3Qp
OwogICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVjZWl2ZVJlc3BvbnNlKTsKICAgICBFWFBFQ1RfVFJV
RShtX2RpZFJlY2VpdmVEYXRhKTsKICAgICBFWFBFQ1RfVFJVRShtX2RpZEZpbmlzaExvYWRpbmcp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>128267</attachid>
            <date>2012-02-22 12:38:46 -0800</date>
            <delta_ts>2012-03-21 17:50:47 -0700</delta_ts>
            <desc>Preliminary Patch</desc>
            <filename>aab.diff</filename>
            <type>application/octet-stream</type>
            <size>13762</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODM3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEyLTAyLTIxICBCaWxsIEJ1
ZGdlICA8YmJ1ZGdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIgbm93IHN1cHBvcnRzIHJlZGlyZWN0cyB3aGVuIGxvYWRpbmcgYSBjcm9zcy1vcmlnaW4g
cmVxdWVzdAorICAgICAgICB3aXRoIGFjY2VzcyBjb250cm9sIChDT1JTKS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NjAwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEp
IChMYXlvdXQgdGVzdHMgVEJEKQorCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bWFrZUNyb3NzT3JpZ2luQWNjZXNz
UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnJl
ZGlyZWN0UmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjppc0FsbG93ZWRSZWRpcmVjdCk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFk
YWJsZUxvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0
QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhU
VFBDb250ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFVzZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBBY2NlcHQpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorICAgICAgICAoUmVzb3VyY2VSZXF1
ZXN0QmFzZSk6CisKIDIwMTItMDItMjEgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBpdCBpcyBuZWFybHkgaW1wb3NzaWJs
ZSB0byBzZWxlY3QgYW5kIGNvcHkgdGV4dCBvbiB0aGUgRWxlbWVudHMgcGFuZWwuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNw
cAkocmV2aXNpb24gMTA4MTU2KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTc1LDYgKzc1LDcgQEAgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZAogICAgICwgbV9vcHRpb25zKG9w
dGlvbnMpCiAgICAgLCBtX3NhbWVPcmlnaW5SZXF1ZXN0KHNlY3VyaXR5T3JpZ2luKCktPmNhblJl
cXVlc3QocmVxdWVzdC51cmwoKSkpCiAgICAgLCBtX2FzeW5jKGJsb2NraW5nQmVoYXZpb3IgPT0g
TG9hZEFzeW5jaHJvbm91c2x5KQorICAgICwgbV9zaW1wbGVDcm9zc09yaWdpblJlcXVlc3QodHJ1
ZSkKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICwgbV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRp
ZmllcigwKQogI2VuZGlmCkBAIC05Myw5ICs5NCwxNCBAQCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OkRvY3VtZW50VGhyZWFkCiAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKFJlc291cmNlRXJy
b3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwg
IkNyb3NzIG9yaWdpbiByZXF1ZXN0cyBhcmUgbm90IHN1cHBvcnRlZC4iKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgCisKICAgICBBU1NFUlQobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVx
dWVzdFBvbGljeSA9PSBVc2VBY2Nlc3NDb250cm9sKTsKIAorICAgIG1ha2VDcm9zc09yaWdpbkFj
Y2Vzc1JlcXVlc3QocmVxdWVzdCk7Cit9CisKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
OjptYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKK3sKICAgICBPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBjcm9zc09yaWdpblJlcXVlc3Qg
PSBhZG9wdFB0cihuZXcgUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpKTsKICAgICB1cGRhdGVSZXF1
ZXN0Rm9yQWNjZXNzQ29udHJvbCgqY3Jvc3NPcmlnaW5SZXF1ZXN0LCBzZWN1cml0eU9yaWdpbigp
LCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscyk7CiAKQEAgLTEwMyw2ICsxMDksNyBAQCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkCiAgICAgICAgIG1ha2VTaW1wbGVD
cm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoKmNyb3NzT3JpZ2luUmVxdWVzdCk7CiAgICAgZWxzZSB7
CiAgICAgICAgIG1fYWN0dWFsUmVxdWVzdCA9IGNyb3NzT3JpZ2luUmVxdWVzdC5yZWxlYXNlKCk7
CisgICAgICAgIG1fc2ltcGxlQ3Jvc3NPcmlnaW5SZXF1ZXN0ID0gZmFsc2U7CiAKICAgICAgICAg
aWYgKENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmNhblNraXBQcmVm
bGlnaHQoc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbV9hY3R1YWxSZXF1ZXN0LT51cmwo
KSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIG1fYWN0dWFsUmVxdWVzdC0+aHR0cE1ldGhv
ZCgpLCBtX2FjdHVhbFJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKSkpCiAgICAgICAgICAgICBw
cmVmbGlnaHRTdWNjZXNzKCk7CkBAIC0xNjcsMTMgKzE3NCw0MSBAQCB2b2lkIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6cmVkaXJlY3RSCiAgICAgQVNTRVJUKG1fY2xpZW50KTsKICAgICBBU1NF
UlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKIAotICAgIGlmICgh
aXNBbGxvd2VkUmVkaXJlY3QocmVxdWVzdC51cmwoKSkpIHsKLSAgICAgICAgUmVmUHRyPERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOworICAgIGJvb2wgYWxsb3dSZWRpcmVjdCA9
IGZhbHNlOworICAgIGlmIChtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVz
ZUFjY2Vzc0NvbnRyb2wpIHsKKyAgICAgICAgLy8gT25seSBzaW1wbGUgY3Jvc3Mgb3JpZ2luIHJl
cXVlc3RzIGFyZSBhbGxvd2VkIHRvIHJlZGlyZWN0LgorICAgICAgICBpZiAobV9zaW1wbGVDcm9z
c09yaWdpblJlcXVlc3QpIHsKKyAgICAgICAgICAgIFN0cmluZyBhY2Nlc3NDb250cm9sRXJyb3JE
ZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIGFsbG93UmVkaXJlY3QgPSBwYXNzZXNBY2Nlc3NDb250
cm9sQ2hlY2socmVkaXJlY3RSZXNwb25zZSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIHNl
Y3VyaXR5T3JpZ2luKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGFsbG93UmVkaXJlY3QgPSBpc0FsbG93ZWRSZWRpcmVj
dChyZXF1ZXN0LnVybCgpKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb3dSZWRpcmVjdCkgeworICAg
ICAgICAvLyBJZiBub3QgdXNpbmcgYWNjZXNzIGNvbnRyb2wsIGFsbG93IGNsaWVudHMgdG8gYXVk
aXQgdGhlIHJlZGlyZWN0LgorICAgICAgICBpZiAobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVz
dFBvbGljeSAhPSBVc2VBY2Nlc3NDb250cm9sKSB7CisgICAgICAgICAgICBpZiAobV9jbGllbnQt
PmlzRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KCkpCisgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Kj4obV9jbGllbnQpLT53aWxs
U2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBXaGVuIHVzaW5nIGFjY2VzcyBjb250cm9sLCByZXN0YXJ0IHRoZSBy
ZXF1ZXN0LgorICAgICAgICAgICAgaWYgKG1fcmVzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAv
LyBTdG9wIHRoZSBwcmV2aW91cyByZXF1ZXN0IGFuZCBjbGVhciBhbnkgYXNzb2NpYXRlZCBzdGF0
ZS4KKyAgICAgICAgICAgICAgICBjbGVhclJlc291cmNlKCk7CisgICAgICAgICAgICAgICAgbV9z
YW1lT3JpZ2luUmVxdWVzdCA9IHNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVxdWVzdC51
cmwoKSk7CisgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSBoZWFkZXJzIHRoYXQgd2lsbCBj
YXVzZSBhY2Nlc3MgY29udHJvbCB0byBmYWlsLgorICAgICAgICAgICAgICAgIHJlcXVlc3QuY2xl
YXJIVFRQQ29udGVudFR5cGUoKTsKKyAgICAgICAgICAgICAgICByZXF1ZXN0LmNsZWFySFRUUFJl
ZmVycmVyKCk7CisgICAgICAgICAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBPcmlnaW4oKTsKKyAg
ICAgICAgICAgICAgICByZXF1ZXN0LmNsZWFySFRUUFVzZXJBZ2VudCgpOworICAgICAgICAgICAg
ICAgIHJlcXVlc3QuY2xlYXJIVFRQQWNjZXB0KCk7CisgICAgICAgICAgICAgICAgbWFrZUNyb3Nz
T3JpZ2luQWNjZXNzUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CiAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsUmVkaXJlY3RDaGVjaygpOwog
ICAgICAgICByZXF1ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKG1fY2xpZW50LT5pc0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNsaWVudCgpKQotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Kj4obV9j
bGllbnQpLT53aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAg
fQogfQogCkBAIC0zNzcsOSArNDEyLDYgQEAgYm9vbCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6
OmlzQWxsb3dlZAogICAgIGlmIChtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09
IEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cykKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAv
LyBGSVhNRTogV2UgbmVlZCB0byBpbXBsZW1lbnQgYWNjZXNzIGNvbnRyb2wgZm9yIGVhY2ggcmVk
aXJlY3QuIFRoaXMgd2lsbCByZXF1aXJlIHNvbWUgcmVmYWN0b3JpbmcgdGhvdWdoLCBiZWNhdXNl
IHRoZSBjb2RlCi0gICAgLy8gdGhhdCBwcm9jZXNzZXMgcmVkaXJlY3RzIGRvZXNuJ3Qga25vdyBh
Ym91dCBhY2Nlc3MgY29udHJvbCBhbmQgZXhwZWN0cyBhIHN5bmNocm9ub3VzIGFuc3dlciBmcm9t
IGl0cyBjbGllbnQgYWJvdXQgd2hldGhlcgotICAgIC8vIGEgcmVkaXJlY3Qgc2hvdWxkIHByb2Nl
ZWQuCiAgICAgcmV0dXJuIG1fc2FtZU9yaWdpblJlcXVlc3QgJiYgc2VjdXJpdHlPcmlnaW4oKS0+
Y2FuUmVxdWVzdCh1cmwpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCShyZXZpc2lvbiAxMDgxNTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKQEAgLTg5LDEyICs4OSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYpOwogICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSk7CiAgICAgICAgIHZvaWQgZGlkRmFpbChj
b25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgIHZvaWQgbWFrZUNyb3NzT3JpZ2luQWNjZXNz
UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKICAgICAgICAgdm9pZCBtYWtlU2ltcGxl
Q3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCk7
CiAgICAgICAgIHZvaWQgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsKICAgICAgICAgdm9pZCBwcmVmbGlnaHRT
dWNjZXNzKCk7CiAgICAgICAgIHZvaWQgcHJlZmxpZ2h0RmFpbHVyZShjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiBlcnJvckRlc2NyaXB0aW9uKTsKIAogICAgICAgICB2b2lkIGxvYWRS
ZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlY3VyaXR5Q2hlY2tQb2xpY3kpOworCiAg
ICAgICAgIGJvb2wgaXNBbGxvd2VkUmVkaXJlY3QoY29uc3QgS1VSTCYpOwogCiAgICAgICAgIFNl
Y3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwpAQCAtMTA1LDYgKzEwNyw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgbV9v
cHRpb25zOwogICAgICAgICBib29sIG1fc2FtZU9yaWdpblJlcXVlc3Q7CiAgICAgICAgIGJvb2wg
bV9hc3luYzsKKyAgICAgICAgYm9vbCBtX3NpbXBsZUNyb3NzT3JpZ2luUmVxdWVzdDsKICAgICAg
ICAgT3duUHRyPFJlc291cmNlUmVxdWVzdD4gbV9hY3R1YWxSZXF1ZXN0OyAgLy8gbm9uLW51bGwg
ZHVyaW5nIEFjY2VzcyBDb250cm9sIHByZWZsaWdodCBjaGVja3MKIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVx
dWVzdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHJldmlzaW9uIDEwODE1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1MSw2ICsyNTEsMTYgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVh
ckhUVFBBdXRobwogICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0K
IAordm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBDb250ZW50VHlwZSgpCit7Cisg
ICAgdXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCk7IAorCisgICAgbV9odHRwSGVhZGVyRmllbGRzLnJl
bW92ZSgiQ29udGVudC1UeXBlIik7CisKKyAgICBpZiAodXJsKCkucHJvdG9jb2xJbkhUVFBGYW1p
bHkoKSkKKyAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7Cit9CisKIHZv
aWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQUmVmZXJyZXIoKQogewogICAgIHVwZGF0
ZVJlc291cmNlUmVxdWVzdCgpOyAKQEAgLTI3MSw2ICsyODEsMjYgQEAgdm9pZCBSZXNvdXJjZVJl
cXVlc3RCYXNlOjpjbGVhckhUVFBPcmlnaQogICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0
ZWQgPSBmYWxzZTsKIH0KIAordm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBVc2Vy
QWdlbnQoKQoreworICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOyAKKworICAgIG1faHR0cEhl
YWRlckZpZWxkcy5yZW1vdmUoIlVzZXItQWdlbnQiKTsKKworICAgIGlmICh1cmwoKS5wcm90b2Nv
bEluSFRUUEZhbWlseSgpKQorICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxz
ZTsKK30KKwordm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBBY2NlcHQoKQorewor
ICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOyAKKworICAgIG1faHR0cEhlYWRlckZpZWxkcy5y
ZW1vdmUoIkFjY2VwdCIpOworCisgICAgaWYgKHVybCgpLnByb3RvY29sSW5IVFRQRmFtaWx5KCkp
CisgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworfQorCiB2b2lkIFJl
c291cmNlUmVxdWVzdEJhc2U6OnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdG
YWxsYmFja0FycmF5KGNvbnN0IFN0cmluZyYgZW5jb2RpbmcxLCBjb25zdCBTdHJpbmcmIGVuY29k
aW5nMiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZzMpCiB7CiAgICAgdXBkYXRlUmVzb3VyY2VSZXF1
ZXN0KCk7IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
cXVlc3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDEwODE1NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC04OCw3ICs4OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTdHJpbmcg
aHR0cENvbnRlbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gaHR0cEhlYWRlckZpZWxkKCJDb250ZW50
LVR5cGUiKTsgIH0KICAgICAgICAgdm9pZCBzZXRIVFRQQ29udGVudFR5cGUoY29uc3QgU3RyaW5n
JiBodHRwQ29udGVudFR5cGUpIHsgc2V0SFRUUEhlYWRlckZpZWxkKCJDb250ZW50LVR5cGUiLCBo
dHRwQ29udGVudFR5cGUpOyB9Ci0gICAgICAgIAorICAgICAgICB2b2lkIGNsZWFySFRUUENvbnRl
bnRUeXBlKCk7CisKICAgICAgICAgU3RyaW5nIGh0dHBSZWZlcnJlcigpIGNvbnN0IHsgcmV0dXJu
IGh0dHBIZWFkZXJGaWVsZCgiUmVmZXJlciIpOyB9CiAgICAgICAgIHZvaWQgc2V0SFRUUFJlZmVy
cmVyKGNvbnN0IFN0cmluZyYgaHR0cFJlZmVycmVyKSB7IHNldEhUVFBIZWFkZXJGaWVsZCgiUmVm
ZXJlciIsIGh0dHBSZWZlcnJlcik7IH0KICAgICAgICAgdm9pZCBjbGVhckhUVFBSZWZlcnJlcigp
OwpAQCAtOTksOSArMTAwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTdHJp
bmcgaHR0cFVzZXJBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIGh0dHBIZWFkZXJGaWVsZCgiVXNlci1B
Z2VudCIpOyB9CiAgICAgICAgIHZvaWQgc2V0SFRUUFVzZXJBZ2VudChjb25zdCBTdHJpbmcmIGh0
dHBVc2VyQWdlbnQpIHsgc2V0SFRUUEhlYWRlckZpZWxkKCJVc2VyLUFnZW50IiwgaHR0cFVzZXJB
Z2VudCk7IH0KKyAgICAgICAgdm9pZCBjbGVhckhUVFBVc2VyQWdlbnQoKTsKIAogICAgICAgICBT
dHJpbmcgaHR0cEFjY2VwdCgpIGNvbnN0IHsgcmV0dXJuIGh0dHBIZWFkZXJGaWVsZCgiQWNjZXB0
Iik7IH0KICAgICAgICAgdm9pZCBzZXRIVFRQQWNjZXB0KGNvbnN0IFN0cmluZyYgaHR0cEFjY2Vw
dCkgeyBzZXRIVFRQSGVhZGVyRmllbGQoIkFjY2VwdCIsIGh0dHBBY2NlcHQpOyB9CisgICAgICAg
IHZvaWQgY2xlYXJIVFRQQWNjZXB0KCk7CiAKICAgICAgICAgdm9pZCBzZXRSZXNwb25zZUNvbnRl
bnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheShjb25zdCBTdHJpbmcmIGVuY29kaW5n
MSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZzIgPSBTdHJpbmcoKSwgY29uc3QgU3RyaW5nJiBlbmNv
ZGluZzMgPSBTdHJpbmcoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMDgzNzUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEyLTAyLTIxICBCaWxsIEJ1ZGdlICA8YmJ1ZGdl
QGNocm9taXVtLm9yZz4KKworICAgICAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIgbm93IHN1
cHBvcnRzIHJlZGlyZWN0cyB3aGVuIGxvYWRpbmcgYSBjcm9zcy1vcmlnaW4gcmVxdWVzdAorICAg
ICAgICB3aXRoIGFjY2VzcyBjb250cm9sIChDT1JTKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHA6Cisg
ICAgICAgIChBc3NvY2lhdGVkVVJMTG9hZGVyOjpDbGllbnRBZGFwdGVyKToKKyAgICAgICAgKFdl
YktpdDo6QXNzb2NpYXRlZFVSTExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6ZGlkRmFpbFJlZGlyZWN0
Q2hlY2spOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiB0ZXN0cy9Bc3NvY2lhdGVkVVJM
TG9hZGVyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6CisKIDIwMTItMDItMjEg
IERhdmlkIEdyb2dhbiAgPGRncm9nYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluZGV4ZWRE
Qjogd2ViRnJhbWUgaXNuJ3QgdGhyZWFkc2FmZSwgZG9uJ3QgdXNlIGl0IGZyb20gYSB3b3JrZXIg
dGhyZWFkCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lh
dGVkVVJMTG9hZGVyLmNwcAkocmV2aXNpb24gMTA4MTU2KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw2
ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRh
ZGF0YShjb25zdCBjaGFyKiwgaW50IC8qZGF0YUxlbmd0aCovKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciovLCBkb3VibGUgLypm
aW5pc2hUaW1lKi8pOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFJlZGlyZWN0Q2hlY2soKTsKIAogICAgIHZp
cnR1YWwgYm9vbCBpc0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNsaWVudCgpIHsgcmV0dXJuIHRy
dWU7IH0KIApAQCAtMjYyLDYgKzI2MywxMSBAQCB2b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNs
aWVudEFkYXB0ZXI6CiAgICAgICAgIG5vdGlmeUVycm9yKCZtX2Vycm9yVGltZXIpOwogfQogCit2
b2lkIEFzc29jaWF0ZWRVUkxMb2FkZXI6OkNsaWVudEFkYXB0ZXI6OmRpZEZhaWxSZWRpcmVjdENo
ZWNrKCkKK3sKKyAgICBtX2xvYWRlci0+Y2FuY2VsKCk7Cit9CisKIHZvaWQgQXNzb2NpYXRlZFVS
TExvYWRlcjo6Q2xpZW50QWRhcHRlcjo6c2V0RGVsYXllZEVycm9yKGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQogewogICAgIGRpZEZhaWwoZXJyb3IpOwpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9Bc3NvY2lhdGVkVVJMTG9hZGVyVGVzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Bc3NvY2lhdGVkVVJMTG9hZGVyVGVzdC5jcHAJ
KHJldmlzaW9uIDEwODE1NikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQXNzb2Np
YXRlZFVSTExvYWRlclRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzMsOCArNDMzLDcgQEAg
VEVTVF9GKEFzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LCBSZWRpcmVjdAogfQogCiAvLyBUZXN0IGEg
c3VjY2Vzc2Z1bCByZWRpcmVjdCBhbmQgY3Jvc3Mtb3JpZ2luIGxvYWQgdXNpbmcgQ09SUy4KLS8v
IEZJWE1FOiBFbmFibGUgdGhpcyB3aGVuIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciBzdXBwb3J0
cyBjcm9zcy1vcmlnaW4gcmVkaXJlY3RzLgotVEVTVF9GKEFzc29jaWF0ZWRVUkxMb2FkZXJUZXN0
LCBESVNBQkxFRF9SZWRpcmVjdENyb3NzT3JpZ2luV2l0aEFjY2Vzc0NvbnRyb2xTdWNjZXNzKQor
VEVTVF9GKEFzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LCBSZWRpcmVjdENyb3NzT3JpZ2luV2l0aEFj
Y2Vzc0NvbnRyb2xTdWNjZXNzKQogewogICAgIEdVUkwgdXJsID0gR1VSTCgiaHR0cDovL3d3dy50
ZXN0LmNvbS9SZWRpcmVjdENyb3NzT3JpZ2luV2l0aEFjY2Vzc0NvbnRyb2xTdWNjZXNzLmh0bWwi
KTsKICAgICBjaGFyIHJlZGlyZWN0W10gPSAiaHR0cDovL3d3dy5vdGhlci5jb20vUmVkaXJlY3RD
cm9zc09yaWdpbldpdGhBY2Nlc3NDb250cm9sU3VjY2Vzcy5odG1sIjsgIC8vIENyb3NzLW9yaWdp
bgpAQCAtNDY3LDcgKzQ2Niw4IEBAIFRFU1RfRihBc3NvY2lhdGVkVVJMTG9hZGVyVGVzdCwgRElT
QUJMRUQKICAgICBFWFBFQ1RfVFJVRShtX2V4cGVjdGVkTG9hZGVyKTsKICAgICBtX2V4cGVjdGVk
TG9hZGVyLT5sb2FkQXN5bmNocm9ub3VzbHkocmVxdWVzdCwgdGhpcyk7CiAgICAgc2VydmVSZXF1
ZXN0cygpOwotICAgIEVYUEVDVF9UUlVFKG1fd2lsbFNlbmRSZXF1ZXN0KTsKKyAgICAvLyBDT1JT
IHJlcXVpcmVzIHRoYXQgdGhlIHJlZGlyZWN0IGJlIHRyYW5zcGFyZW50LgorICAgIEVYUEVDVF9G
QUxTRShtX3dpbGxTZW5kUmVxdWVzdCk7CiAgICAgRVhQRUNUX1RSVUUobV9kaWRSZWNlaXZlUmVz
cG9uc2UpOwogICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVjZWl2ZURhdGEpOwogICAgIEVYUEVDVF9U
UlVFKG1fZGlkRmluaXNoTG9hZGluZyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133157</attachid>
            <date>2012-03-21 17:50:47 -0700</date>
            <delta_ts>2012-03-21 22:36:13 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>aaa.txt</filename>
            <type>text/plain</type>
            <size>19764</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTYyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEyLTAzLTIxICBCaWxsIEJ1
ZGdlICA8YmJ1ZGdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIgbm93IHN1cHBvcnRzIHJlZGlyZWN0cyB3aGVuIGxvYWRpbmcgYSBjcm9zcy1vcmlnaW4g
cmVxdWVzdAorICAgICAgICB3aXRoIGFjY2VzcyBjb250cm9sIChDT1JTKS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NjAwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1hbmQtcmVkaXJlY3RzLWFzeW5jLmh0bWwKKworICAg
ICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXIp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6Om1ha2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjo6cmVkaXJlY3RSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI6OmlzQWxsb3dlZFJlZGlyZWN0KToKKyAgICAgICAgKiBsb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dEJhc2U6OmNsZWFySFRUUENvbnRlbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQVXNlckFnZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUEFjY2VwdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6CisgICAgICAg
IChSZXNvdXJjZVJlcXVlc3RCYXNlKToKKwogMjAxMi0wMy0yMSAgUGF0cmljayBHYW5zdGVyZXIg
IDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBCdWlsZCBmaXggZm9yIEVOQUJMRShTVkcp
ICYmICFFTkFCTEUoRklMVEVSUykgYWZ0ZXIgcjExMTYwMS4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiAx
MTE0MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNzQsNiArNzQsNyBAQCBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogICAg
ICwgbV9vcHRpb25zKG9wdGlvbnMpCiAgICAgLCBtX3NhbWVPcmlnaW5SZXF1ZXN0KHNlY3VyaXR5
T3JpZ2luKCktPmNhblJlcXVlc3QocmVxdWVzdC51cmwoKSkpCisgICAgLCBtX3NpbXBsZVJlcXVl
c3QodHJ1ZSkKICAgICAsIG1fYXN5bmMoYmxvY2tpbmdCZWhhdmlvciA9PSBMb2FkQXN5bmNocm9u
b3VzbHkpCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICAsIG1fcHJlZmxpZ2h0UmVxdWVzdElk
ZW50aWZpZXIoMCkKQEAgLTg0LDYgKzg1LDExIEBAIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
RG9jdW1lbnRUaHJlYWQKICAgICAvLyBTZXR0aW5nIGFuIG91dGdvaW5nIHJlZmVyZXIgaXMgb25s
eSBzdXBwb3J0ZWQgaW4gdGhlIGFzeW5jIGNvZGUgcGF0aC4KICAgICBBU1NFUlQobV9hc3luYyB8
fCByZXF1ZXN0Lmh0dHBSZWZlcnJlcigpLmlzRW1wdHkoKSk7CiAKKyAgICBtYWtlUmVxdWVzdChy
ZXF1ZXN0KTsKK30KKwordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VSZXF1ZXN0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKICAgICBpZiAobV9zYW1lT3JpZ2lu
UmVxdWVzdCB8fCBtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IEFsbG93Q3Jv
c3NPcmlnaW5SZXF1ZXN0cykgewogICAgICAgICBsb2FkUmVxdWVzdChyZXF1ZXN0LCBEb1NlY3Vy
aXR5Q2hlY2spOwogICAgICAgICByZXR1cm47CkBAIC05Myw3ICs5OSw3IEBAIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWQKICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwo
UmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCByZXF1ZXN0LnVybCgp
LnN0cmluZygpLCAiQ3Jvc3Mgb3JpZ2luIHJlcXVlc3RzIGFyZSBub3Qgc3VwcG9ydGVkLiIpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIEFTU0VSVChtX29wdGlvbnMuY3Jv
c3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpOwogCiAgICAgT3duUHRy
PFJlc291cmNlUmVxdWVzdD4gY3Jvc3NPcmlnaW5SZXF1ZXN0ID0gYWRvcHRQdHIobmV3IFJlc291
cmNlUmVxdWVzdChyZXF1ZXN0KSk7CkBAIC0xMDIsNiArMTA4LDcgQEAgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZAogICAgIGlmICgobV9vcHRpb25zLnByZWZsaWdodFBv
bGljeSA9PSBDb25zaWRlclByZWZsaWdodCAmJiBpc1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVx
dWVzdChjcm9zc09yaWdpblJlcXVlc3QtPmh0dHBNZXRob2QoKSwgY3Jvc3NPcmlnaW5SZXF1ZXN0
LT5odHRwSGVhZGVyRmllbGRzKCkpKSB8fCBtX29wdGlvbnMucHJlZmxpZ2h0UG9saWN5ID09IFBy
ZXZlbnRQcmVmbGlnaHQpCiAgICAgICAgIG1ha2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVl
c3QoKmNyb3NzT3JpZ2luUmVxdWVzdCk7CiAgICAgZWxzZSB7CisgICAgICAgIG1fc2ltcGxlUmVx
dWVzdCA9IGZhbHNlOwogICAgICAgICBtX2FjdHVhbFJlcXVlc3QgPSBjcm9zc09yaWdpblJlcXVl
c3QucmVsZWFzZSgpOwogCiAgICAgICAgIGlmIChDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENh
Y2hlOjpzaGFyZWQoKS5jYW5Ta2lwUHJlZmxpZ2h0KHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5n
KCksIG1fYWN0dWFsUmVxdWVzdC0+dXJsKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCBt
X2FjdHVhbFJlcXVlc3QtPmh0dHBNZXRob2QoKSwgbV9hY3R1YWxSZXF1ZXN0LT5odHRwSGVhZGVy
RmllbGRzKCkpKQpAQCAtMTY3LDEzICsxNzQsNTAgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OnJlZGlyZWN0UgogICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgQVNTRVJUX1VOVVNF
RChyZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7CiAKLSAgICBpZiAoIWlzQWxsb3dl
ZFJlZGlyZWN0KHJlcXVlc3QudXJsKCkpKSB7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXI+IHByb3RlY3QodGhpcyk7CisgICAgUmVmUHRyPERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKyAgICBib29sIGFsbG93UmVkaXJlY3QgPSBmYWxzZTsK
KyAgICBpZiAobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBVc2VBY2Nlc3ND
b250cm9sKSB7CisgICAgICAgIC8vIFdoZW4gdXNpbmcgYWNjZXNzIGNvbnRyb2wsIG9ubHkgc2lt
cGxlIGNyb3NzIG9yaWdpbiByZXF1ZXN0cyBhcmUgYWxsb3dlZCB0byByZWRpcmVjdC4gVGhlIG5l
dyByZXF1ZXN0IFVSTCBtdXN0IGhhdmUgYSBzdXBwb3J0ZWQKKyAgICAgICAgLy8gc2NoZW1lIGFu
ZCBub3QgY29udGFpbiB0aGUgdXNlcmluZm8gcHJvZHVjdGlvbi4gSW4gYWRkaXRpb24sIHRoZSBy
ZWRpcmVjdCByZXNwb25zZSBtdXN0IHBhc3MgdGhlIGFjY2VzcyBjb250cm9sIGNoZWNrLgorICAg
ICAgICBpZiAobV9zaW1wbGVSZXF1ZXN0KSB7CisgICAgICAgICAgICBTdHJpbmcgYWNjZXNzQ29u
dHJvbEVycm9yRGVzY3JpcHRpb247CisgICAgICAgICAgICBhbGxvd1JlZGlyZWN0ID0KKyAgICAg
ICAgICAgICAgICBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxTY2hlbWVBc0NPUlNFbmFi
bGVkKHJlcXVlc3QudXJsKCkucHJvdG9jb2woKSkKKyAgICAgICAgICAgICAgICAmJiByZXF1ZXN0
LnVybCgpLnVzZXIoKS5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAmJiByZXF1ZXN0LnVybCgp
LnBhc3MoKS5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAmJiBwYXNzZXNBY2Nlc3NDb250cm9s
Q2hlY2socmVkaXJlY3RSZXNwb25zZSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIHNlY3Vy
aXR5T3JpZ2luKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGFsbG93UmVkaXJlY3QgPSBpc0FsbG93ZWRSZWRpcmVjdChy
ZXF1ZXN0LnVybCgpKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb3dSZWRpcmVjdCkgeworICAgICAg
ICBpZiAobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBVc2VBY2Nlc3NDb250
cm9sKSB7CisgICAgICAgICAgICBpZiAobV9yZXNvdXJjZSkKKyAgICAgICAgICAgICAgICBjbGVh
clJlc291cmNlKCk7CisKKyAgICAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2lu
YWxPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhyZWRpcmVjdFJlc3Bv
bnNlLnVybCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gcmVxdWVzdE9y
aWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHJlcXVlc3QudXJsKCkpOwor
ICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgVVJMIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmln
aW4gd2l0aCB0aGUgb3JpZ2luYWwgVVJMIG9yaWdpbiwgc2V0IHNvdXJjZSBvcmlnaW4gdG8gYSBn
bG9iYWxseSB1bmlxdWUgaWRlbnRpZmllci4KKyAgICAgICAgICAgIGlmICghb3JpZ2luYWxPcmln
aW4uZ2V0KCktPmlzU2FtZVNjaGVtZUhvc3RQb3J0KHJlcXVlc3RPcmlnaW4uZ2V0KCkpKQorICAg
ICAgICAgICAgICAgIG1fb3B0aW9ucy5zZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpj
cmVhdGVVbmlxdWUoKTsKKyAgICAgICAgICAgIG1fc2FtZU9yaWdpblJlcXVlc3QgPSBzZWN1cml0
eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlcXVlc3QudXJsKCkpOworCisgICAgICAgICAgICAvLyBS
ZW1vdmUgYW55IGhlYWRlcnMgdGhhdCBtYXkgaGF2ZSBiZWVuIGFkZGVkIGJ5IHRoZSBuZXR3b3Jr
IGxheWVyIHRoYXQgY2F1c2UgYWNjZXNzIGNvbnRyb2wgdG8gZmFpbC4KKyAgICAgICAgICAgIHJl
cXVlc3QuY2xlYXJIVFRQQ29udGVudFR5cGUoKTsKKyAgICAgICAgICAgIHJlcXVlc3QuY2xlYXJI
VFRQUmVmZXJyZXIoKTsKKyAgICAgICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQT3JpZ2luKCk7Cisg
ICAgICAgICAgICByZXF1ZXN0LmNsZWFySFRUUFVzZXJBZ2VudCgpOworICAgICAgICAgICAgcmVx
dWVzdC5jbGVhckhUVFBBY2NlcHQoKTsKKyAgICAgICAgICAgIG1ha2VSZXF1ZXN0KHJlcXVlc3Qp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSWYgbm90IHVzaW5nIGFjY2VzcyBj
b250cm9sLCBhbGxvdyBjbGllbnRzIHRvIGF1ZGl0IHRoZSByZWRpcmVjdC4KKyAgICAgICAgICAg
IGlmIChtX2NsaWVudC0+aXNEb2N1bWVudFRocmVhZGFibGVMb2FkZXJDbGllbnQoKSkKKyAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxEb2N1bWVudFRocmVhZGFibGVMb2FkZXJDbGllbnQqPiht
X2NsaWVudCktPndpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CiAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsUmVkaXJlY3RD
aGVjaygpOwogICAgICAgICByZXF1ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKG1fY2xpZW50LT5pc0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNsaWVu
dCgpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50Kj4obV9jbGllbnQpLT53aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25z
ZSk7CiAgICAgfQogfQogCkBAIC0zNzcsOSArNDIxLDYgQEAgYm9vbCBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6OmlzQWxsb3dlZAogICAgIGlmIChtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0
UG9saWN5ID09IEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cykKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBpbXBsZW1lbnQgYWNjZXNzIGNvbnRyb2wgZm9y
IGVhY2ggcmVkaXJlY3QuIFRoaXMgd2lsbCByZXF1aXJlIHNvbWUgcmVmYWN0b3JpbmcgdGhvdWdo
LCBiZWNhdXNlIHRoZSBjb2RlCi0gICAgLy8gdGhhdCBwcm9jZXNzZXMgcmVkaXJlY3RzIGRvZXNu
J3Qga25vdyBhYm91dCBhY2Nlc3MgY29udHJvbCBhbmQgZXhwZWN0cyBhIHN5bmNocm9ub3VzIGFu
c3dlciBmcm9tIGl0cyBjbGllbnQgYWJvdXQgd2hldGhlcgotICAgIC8vIGEgcmVkaXJlY3Qgc2hv
dWxkIHByb2NlZWQuCiAgICAgcmV0dXJuIG1fc2FtZU9yaWdpblJlcXVlc3QgJiYgc2VjdXJpdHlP
cmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCShyZXZpc2lvbiAxMTE0MTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKQEAgLTg5LDYgKzg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpOwogICAgICAgICB2b2lkIGRp
ZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgICAgICB2b2lkIG1ha2VSZXF1ZXN0KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpOwogICAgICAgICB2b2lkIG1ha2VTaW1wbGVDcm9zc09yaWdp
bkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsKICAgICAgICAg
dm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIHByZWZsaWdodFN1Y2Nlc3MoKTsK
QEAgLTEwNCw2ICsxMDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERvY3VtZW50
KiBtX2RvY3VtZW50OwogICAgICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBtX29wdGlvbnM7
CiAgICAgICAgIGJvb2wgbV9zYW1lT3JpZ2luUmVxdWVzdDsKKyAgICAgICAgYm9vbCBtX3NpbXBs
ZVJlcXVlc3Q7CiAgICAgICAgIGJvb2wgbV9hc3luYzsKICAgICAgICAgT3duUHRyPFJlc291cmNl
UmVxdWVzdD4gbV9hY3R1YWxSZXF1ZXN0OyAgLy8gbm9uLW51bGwgZHVyaW5nIEFjY2VzcyBDb250
cm9sIHByZWZsaWdodCBjaGVja3MKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCShyZXZpc2lvbiAxMTE0
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1MSw2ICsyNTEsMTYgQEAg
dm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBBdXRobwogICAgICAgICBtX3BsYXRm
b3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAordm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNl
OjpjbGVhckhUVFBDb250ZW50VHlwZSgpCit7CisgICAgdXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCk7
IAorCisgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZSgiQ29udGVudC1UeXBlIik7CisKKyAg
ICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQorICAgICAgICBtX3BsYXRmb3Jt
UmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKK30KKwogdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpj
bGVhckhUVFBSZWZlcnJlcigpCiB7CiAgICAgdXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCk7IApAQCAt
MjcxLDYgKzI4MSwyNiBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUE9yaWdp
CiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCit2b2lkIFJl
c291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFVzZXJBZ2VudCgpCit7CisgICAgdXBkYXRlUmVz
b3VyY2VSZXF1ZXN0KCk7IAorCisgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZSgiVXNlci1B
Z2VudCIpOworCisgICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKKyAgICAg
ICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQQWNjZXB0KCkKK3sKKyAgICB1cGRhdGVSZXNvdXJjZVJlcXVl
c3QoKTsgCisKKyAgICBtX2h0dHBIZWFkZXJGaWVsZHMucmVtb3ZlKCJBY2NlcHQiKTsKKworICAg
IGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCisgICAgICAgIG1fcGxhdGZvcm1S
ZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworfQorCiB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OnNl
dFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KGNvbnN0IFN0
cmluZyYgZW5jb2RpbmcxLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nMiwgY29uc3QgU3RyaW5nJiBl
bmNvZGluZzMpCiB7CiAgICAgdXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCk7IApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmgJKHJldmlzaW9uIDExMTQxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0u
d2VpbmlnQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTg4LDcgKzg4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFN0cmluZyBodHRw
Q29udGVudFR5cGUoKSBjb25zdCB7IHJldHVybiBodHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtVHlw
ZSIpOyAgfQogICAgICAgICB2b2lkIHNldEhUVFBDb250ZW50VHlwZShjb25zdCBTdHJpbmcmIGh0
dHBDb250ZW50VHlwZSkgeyBzZXRIVFRQSGVhZGVyRmllbGQoIkNvbnRlbnQtVHlwZSIsIGh0dHBD
b250ZW50VHlwZSk7IH0KLSAgICAgICAgCisgICAgICAgIHZvaWQgY2xlYXJIVFRQQ29udGVudFR5
cGUoKTsKKwogICAgICAgICBTdHJpbmcgaHR0cFJlZmVycmVyKCkgY29uc3QgeyByZXR1cm4gaHR0
cEhlYWRlckZpZWxkKCJSZWZlcmVyIik7IH0KICAgICAgICAgdm9pZCBzZXRIVFRQUmVmZXJyZXIo
Y29uc3QgU3RyaW5nJiBodHRwUmVmZXJyZXIpIHsgc2V0SFRUUEhlYWRlckZpZWxkKCJSZWZlcmVy
IiwgaHR0cFJlZmVycmVyKTsgfQogICAgICAgICB2b2lkIGNsZWFySFRUUFJlZmVycmVyKCk7CkBA
IC05OSw5ICsxMDAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFN0cmluZyBo
dHRwVXNlckFnZW50KCkgY29uc3QgeyByZXR1cm4gaHR0cEhlYWRlckZpZWxkKCJVc2VyLUFnZW50
Iik7IH0KICAgICAgICAgdm9pZCBzZXRIVFRQVXNlckFnZW50KGNvbnN0IFN0cmluZyYgaHR0cFVz
ZXJBZ2VudCkgeyBzZXRIVFRQSGVhZGVyRmllbGQoIlVzZXItQWdlbnQiLCBodHRwVXNlckFnZW50
KTsgfQorICAgICAgICB2b2lkIGNsZWFySFRUUFVzZXJBZ2VudCgpOwogCiAgICAgICAgIFN0cmlu
ZyBodHRwQWNjZXB0KCkgY29uc3QgeyByZXR1cm4gaHR0cEhlYWRlckZpZWxkKCJBY2NlcHQiKTsg
fQogICAgICAgICB2b2lkIHNldEhUVFBBY2NlcHQoY29uc3QgU3RyaW5nJiBodHRwQWNjZXB0KSB7
IHNldEhUVFBIZWFkZXJGaWVsZCgiQWNjZXB0IiwgaHR0cEFjY2VwdCk7IH0KKyAgICAgICAgdm9p
ZCBjbGVhckhUVFBBY2NlcHQoKTsKIAogICAgICAgICB2b2lkIHNldFJlc3BvbnNlQ29udGVudERp
c3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KGNvbnN0IFN0cmluZyYgZW5jb2RpbmcxLCBj
b25zdCBTdHJpbmcmIGVuY29kaW5nMiA9IFN0cmluZygpLCBjb25zdCBTdHJpbmcmIGVuY29kaW5n
MyA9IFN0cmluZygpKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTExNjI2KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDMtMjEg
IEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlciBub3cgc3VwcG9ydHMgcmVkaXJlY3RzIHdoZW4gbG9hZGluZyBhIGNyb3Nz
LW9yaWdpbiByZXF1ZXN0CisgICAgICAgIHdpdGggYWNjZXNzIGNvbnRyb2wgKENPUlMpLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc2MDAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtYW5kLXJlZGlyZWN0cy1hc3luYy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRp
cmVjdC1jb3JzLnBocDogQWRkZWQuCisKIDIwMTItMDMtMjEgIFhpYW9tZWkgSmkgIDx4amlAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIHZpc3VhbCB3b3JkIG1vdmVtZW50OiB1c2luZyBjYWNoZSB0
byBkZWNyZWFzZSB0aGUgbnVtYmVyIG9mIGNvbGxlY3RMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlciBv
biBSb290SW5saW5lQm94CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L2FjY2Vzcy1jb250cm9sLWFuZC1yZWRpcmVjdHMtYXN5bmMuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250cm9sLWFu
ZC1yZWRpcmVjdHMtYXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtYW5kLXJlZGlyZWN0cy1hc3luYy5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOSBAQAorPHA+VGVzdHMgdGhhdCBhc3luY2hy
b25vdXMgWE1MSHR0cFJlcXVlc3RzIGhhbmRsZSByZWRpcmVjdHMgYWNjb3JkaW5nIHRvIHRoZSBD
T1JTIHN0YW5kYXJkLjwvcD4KKworPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8c2NyaXB0Pgor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVz
c2FnZSArICdcbicpKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdEFzeW5jKHVybCwgZm9yY2VQcmVm
bGlnaHQsIGV4cGVjdFN1Y2Nlc3MpIHsKKyAgICBsb2coIlRlc3RpbmcgIiArIHVybCk7CisgICAg
bG9nKCJFeHBlY3Rpbmcgc3VjY2VzczogIiArIGV4cGVjdFN1Y2Nlc3MpOworCisgICAgeGhyID0g
bmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oIkdFVCIsIHVybCwgdHJ1ZSk7Cisg
ICAgaWYgKGZvcmNlUHJlZmxpZ2h0KQorICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigieC13
ZWJraXQiLCAiZm9vIik7CisKKyAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IGxvZygoZXhwZWN0U3VjY2VzcyA/ICJQQVNTIiA6ICJGQUlMIikgKyAiOiAiICsgeGhyLnJlc3Bv
bnNlVGV4dCk7CisgICAgICAgIG5leHRUZXN0KCk7CisgICAgfQorICAgIHhoci5vbmVycm9yID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygoZXhwZWN0U3VjY2VzcyA/ICJGQUlMIiA6ICJQQVNT
IikgKyAiOiAiICsgeGhyLnN0YXR1cyk7CisgICAgICAgIG5leHRUZXN0KCk7CisgICAgfQorICAg
IHhoci5zZW5kKG51bGwpOworfQorCit2YXIgc2ltcGxlID0gZmFsc2U7Cit2YXIgcHJlZmxpZ2h0
ID0gdHJ1ZTsKK3ZhciBzdWNjZWVkcyA9IHRydWU7Cit2YXIgZmFpbHMgPSBmYWxzZTsKKwordmFy
IHRlc3RzID0gWworLy8gMSkgVGVzdCBzaW1wbGUgc2FtZSBvcmlnaW4gcmVxdWVzdHMgdGhhdCBy
ZWNlaXZlIGNyb3NzIG9yaWdpbiByZWRpcmVjdHMuCisKKy8vIFJlcXVlc3QgcmVjZWl2ZXMgYSBj
cm9zcy1vcmlnaW4gcmVkaXJlY3QgcmVzcG9uc2Ugd2l0aG91dCBDT1JTIGhlYWRlcnMuIFRoZSBy
ZWRpcmVjdCByZXNwb25zZSBmYWlscyB0aGUgYWNjZXNzIGNoZWNrLgorWyJyZXNvdXJjZXMvcmVk
aXJlY3QtY29ycy5waHA/dXJsPWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9y
ZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ctc3Rhci5jZ2kiLAorICBzaW1wbGUs
IGZhaWxzXSwKKworLy8gUmVxdWVzdCByZWNlaXZlcyBhIGNyb3NzLW9yaWdpbiByZWRpcmVjdCBy
ZXNwb25zZSB3aXRoIENPUlMgaGVhZGVycy4gVGhlIHJlZGlyZWN0IHJlc3BvbnNlIHBhc3NlcyB0
aGUgYWNjZXNzIGNoZWNrLAorLy8gYnV0ICB0aGUgcmVzb3VyY2UgcmVzcG9uc2UgZmFpbHMgaXRz
IGFjY2VzcyBjaGVjayBiZWNhdXNlIHRoZSBzZWN1cml0eSBvcmlnaW4gaXMgYSBnbG9iYWxseSB1
bmlxdWUgaWRlbnRpZmllciBhZnRlcgorLy8gdGhlIHJlZGlyZWN0IGFuZCB0aGUgc2FtZSBvcmln
aW4gWEhSIGhhcyAnYWxsb3dDcmVkZW50aWFscycgdHJ1ZS4KK1sicmVzb3VyY2VzL3JlZGlyZWN0
LWNvcnMucGhwP3VybD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3Vy
Y2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dpJlwKKyAgYWNjZXNzLWNvbnRy
b2wtYWxsb3ctb3JpZ2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCZcCisgIGFjY2Vzcy1jb250cm9s
LWFsbG93LWNyZWRlbnRpYWxzPXRydWUiLAorICBzaW1wbGUsIGZhaWxzXSwKKworLy8gU2FtZSBh
cyBhYm92ZSwgYnV0IHRvIGEgbGVzcyBwZXJtaXNzaXZlIHJlc291cmNlIHRoYXQgb25seSBhbGxv
d3MgdGhlIHJlcXVlc3Rpbmcgb3JpZ2luLgorWyJyZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHA/
dXJsPWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNz
LWNvbnRyb2wtYmFzaWMtYWxsb3cuY2dpJlwKKyAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2lu
PWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCZcCisgIGFjY2Vzcy1jb250cm9sLWFsbG93LWNyZWRlbnRp
YWxzPXRydWUiLAorICBzaW1wbGUsIGZhaWxzXSwKKworLy8gMikgVGVzdCBzaW1wbGUgY3Jvc3Mg
b3JpZ2luIHJlcXVlc3RzIHRoYXQgcmVjZWl2ZSByZWRpcmVjdHMuCisKKy8vIFJlY2VpdmVzIGEg
cmVkaXJlY3QgcmVzcG9uc2Ugd2l0aG91dCBDT1JTIGhlYWRlcnMuIFRoZSByZWRpcmVjdCByZXNw
b25zZSBmYWlscyB0aGUgYWNjZXNzIGNoZWNrLgorWyJodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1s
aHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhwP3VybD1odHRwOi8vMTI3LjAu
MC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFs
bG93LXN0YXIuY2dpIiwKKyAgc2ltcGxlLCBmYWlsc10sCisKKy8vIFJlY2VpdmVzIGEgcmVkaXJl
Y3QgcmVzcG9uc2Ugd2l0aCBDT1JTIGhlYWRlcnMuIFRoZSByZWRpcmVjdCByZXNwb25zZSBwYXNz
ZXMgdGhlIGFjY2VzcyBjaGVjayBhbmQgdGhlIHJlc291cmNlIHJlc3BvbnNlCisvLyBwYXNzZXMg
dGhlIGFjY2VzcyBjaGVjay4KK1siaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0
L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9aHR0cDovLzEyNy4wLjAuMTo4MDAwL3ht
bGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1iYXNpYy1hbGxvdy1zdGFyLmNn
aSZcCisgIGFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbj1odHRwOi8vbG9jYWxob3N0OjgwMDAi
LAorICBzaW1wbGUsIHN1Y2NlZWRzXSwKKworLy8gUmVjZWl2ZXMgYSByZWRpcmVjdCByZXNwb25z
ZSB3aXRoIGEgVVJMIGNvbnRhaW5pbmcgdGhlIHVzZXJpbmZvIHByb2R1Y3Rpb24uCitbImh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5w
aHA/dXJsPWh0dHA6Ly91c2VybmFtZTpwYXNzd29yZEAxMjcuMC4wLjE6ODAwMC94bWxodHRwcmVx
dWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ctc3Rhci5jZ2kmXAorICBh
Y2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49aHR0cDovL2xvY2FsaG9zdDo4MDAwIiwKKyAgc2lt
cGxlLCBmYWlsc10sCisKKy8vIFJlY2VpdmVzIGEgcmVkaXJlY3QgcmVzcG9uc2Ugd2l0aCBhIFVS
TCB3aXRoIGFuIHVuc3VwcG9ydGVkIHNjaGVtZS4KK1siaHR0cDovLzEyNy4wLjAuMTo4MDAwL3ht
bGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9Zm9vOi8vYmFyLmNn
aSZcCisgIGFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbj1odHRwOi8vbG9jYWxob3N0OjgwMDAi
LAorICBzaW1wbGUsIGZhaWxzXSwKKworLy8gMykgVGVzdCBwcmVmbGlnaHRlZCBjcm9zcyBvcmln
aW4gcmVxdWVzdHMgdGhhdCByZWNlaXZlIHJlZGlyZWN0cy4KKworLy8gUmVjZWl2ZXMgYSByZWRp
cmVjdCByZXNwb25zZSB0byB0aGUgcHJlZmxpZ2h0IHJlcXVlc3QgYW5kIGZhaWxzLgorWyJodHRw
Oi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMu
cGhwP3JlZGlyZWN0LXByZWZsaWdodD10cnVlJlwKKyAgdXJsPWh0dHA6Ly8xMjcuMC4wLjE6ODAw
MC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ctc3Rh
ci5jZ2kmXAorICBhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49KiIsCisgIHByZWZsaWdodCwg
ZmFpbHNdLAorCisvLyBTdWNjZXNzZnVsIHByZWZsaWdodCBhbmQgcmVjZWl2ZXMgYSByZWRpcmVj
dCByZXNwb25zZSB0byB0aGUgYWN0dWFsIHJlcXVlc3QgYW5kIGZhaWxzLgorWyJodHRwOi8vMTI3
LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhwP3Jl
ZGlyZWN0LXByZWZsaWdodD1mYWxzZSZcCisgIHVybD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1s
aHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dp
JlwKKyAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luPSomXAorICBhY2Nlc3MtY29udHJvbC1h
bGxvdy1oZWFkZXJzPXgtd2Via2l0IiwKKyAgcHJlZmxpZ2h0LCBmYWlsc10sCitdCisKK3ZhciBj
dXJyZW50VGVzdCA9IDA7CisKK2Z1bmN0aW9uIG5leHRUZXN0KCkgeworICAgIGlmIChjdXJyZW50
VGVzdCA8IHRlc3RzLmxlbmd0aCkKKyAgICAgICAgcnVuVGVzdEFzeW5jLmFwcGx5KG51bGwsIHRl
c3RzW2N1cnJlbnRUZXN0KytdKTsKKyAgICBlbHNlIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKwor
bmV4dFRlc3QoKTsKKzwvc2NyaXB0PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1hbmQtcmVkaXJlY3RzLWFz
eW5jLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVkaXJlY3Qt
Y29ycy5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC9yZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBo
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBAQAorPD9waHAKKyAgICAkdXJsID0gJF9HRVRb
J3VybCddOworICAgICRyZWRpcmVjdF9wcmVmbGlnaHQgPSAkX0dFVFsncmVkaXJlY3QtcHJlZmxp
Z2h0J107CisgICAgJGFjY2Vzc19jb250cm9sX2FsbG93X29yaWdpbiA9ICRfR0VUWydhY2Nlc3Mt
Y29udHJvbC1hbGxvdy1vcmlnaW4nXTsKKyAgICAkYWNjZXNzX2NvbnRyb2xfYWxsb3dfY3JlZGVu
dGlhbHMgPSAkX0dFVFsnYWNjZXNzLWNvbnRyb2wtYWxsb3ctY3JlZGVudGlhbHMnXTsKKyAgICAk
YWNjZXNzX2NvbnRyb2xfYWxsb3dfaGVhZGVycyA9ICRfR0VUWydhY2Nlc3MtY29udHJvbC1hbGxv
dy1oZWFkZXJzJ107CisKKyAgICBpZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT0gIk9Q
VElPTlMiKSB7CisgICAgICAgIGlmICgkcmVkaXJlY3RfcHJlZmxpZ2h0ID09ICJ0cnVlIikgewor
ICAgICAgICAgICAgaGVhZGVyKCJIVFRQLzEuMSAzMDIiKTsKKyAgICAgICAgICAgIGhlYWRlcigi
TG9jYXRpb246ICR1cmwiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGhlYWRlcigiSFRUUC8xLjEgMjAwIik7CisgICAgICAgIH0KKyAgICAgICAgaGVhZGVyKCJBY2Nl
c3MtQ29udHJvbC1BbGxvdy1NZXRob2RzOiBHRVQiKTsKKyAgICAgICAgaGVhZGVyKCJBY2Nlc3Mt
Q29udHJvbC1NYXgtQWdlOiAxIik7CisgICAgfSBlbHNlIGlmICgkX1NFUlZFUlsnUkVRVUVTVF9N
RVRIT0QnXSA9PSAiR0VUIikgeworICAgICAgICBoZWFkZXIoIkhUVFAvMS4xIDMwMiIpOworICAg
ICAgICBoZWFkZXIoIkxvY2F0aW9uOiAkdXJsIik7CisgICAgfQorICAgIGlmICghaXNfbnVsbCgk
YWNjZXNzX2NvbnRyb2xfYWxsb3dfb3JpZ2luKSkKKyAgICAgICAgaGVhZGVyKCJBY2Nlc3MtQ29u
dHJvbC1BbGxvdy1PcmlnaW46ICRhY2Nlc3NfY29udHJvbF9hbGxvd19vcmlnaW4iKTsKKyAgICBp
ZiAoIWlzX251bGwoJGFjY2Vzc19jb250cm9sX2FsbG93X2NyZWRlbnRpYWxzKSkKKyAgICAgICAg
aGVhZGVyKCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFsczogJGFjY2Vzc19jb250cm9s
X2FsbG93X2NyZWRlbnRpYWxzIik7CisgICAgaWYgKCFpc19udWxsKCRhY2Nlc3NfY29udHJvbF9h
bGxvd19oZWFkZXJzKSkKKyAgICAgICAgaGVhZGVyKCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFk
ZXJzOiAkYWNjZXNzX2NvbnRyb2xfYWxsb3dfaGVhZGVycyIpOworPz4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133166</attachid>
            <date>2012-03-21 19:01:57 -0700</date>
            <delta_ts>2012-03-22 06:29:36 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>aaa.txt</filename>
            <type>text/plain</type>
            <size>22025</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEyLTAzLTIxICBCaWxsIEJ1
ZGdlICA8YmJ1ZGdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIgbm93IHN1cHBvcnRzIHJlZGlyZWN0cyB3aGVuIGxvYWRpbmcgYSBjcm9zcy1vcmlnaW4g
cmVxdWVzdAorICAgICAgICB3aXRoIGFjY2VzcyBjb250cm9sIChDT1JTKS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NjAwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1hbmQtcmVkaXJlY3RzLWFzeW5jLmh0bWwKKworICAg
ICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAqIGxv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorCiAyMDEyLTAzLTIxICBTaGVyaWZmIEJvdCAgPHdlYmtp
dC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMTExNjE2LgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDExMTQxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC03NCw2ICs3NCw3IEBAIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWQK
ICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKICAg
ICAsIG1fc2FtZU9yaWdpblJlcXVlc3Qoc2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXF1
ZXN0LnVybCgpKSkKKyAgICAsIG1fc2ltcGxlUmVxdWVzdCh0cnVlKQogICAgICwgbV9hc3luYyhi
bG9ja2luZ0JlaGF2aW9yID09IExvYWRBc3luY2hyb25vdXNseSkKICNpZiBFTkFCTEUoSU5TUEVD
VE9SKQogICAgICwgbV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllcigwKQpAQCAtODQsNiArODUs
MTEgQEAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZAogICAgIC8vIFNl
dHRpbmcgYW4gb3V0Z29pbmcgcmVmZXJlciBpcyBvbmx5IHN1cHBvcnRlZCBpbiB0aGUgYXN5bmMg
Y29kZSBwYXRoLgogICAgIEFTU0VSVChtX2FzeW5jIHx8IHJlcXVlc3QuaHR0cFJlZmVycmVyKCku
aXNFbXB0eSgpKTsKIAorICAgIG1ha2VSZXF1ZXN0KHJlcXVlc3QpOworfQorCit2b2lkIERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcjo6bWFrZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0KQorewogICAgIGlmIChtX3NhbWVPcmlnaW5SZXF1ZXN0IHx8IG1fb3B0aW9ucy5jcm9z
c09yaWdpblJlcXVlc3RQb2xpY3kgPT0gQWxsb3dDcm9zc09yaWdpblJlcXVlc3RzKSB7CiAgICAg
ICAgIGxvYWRSZXF1ZXN0KHJlcXVlc3QsIERvU2VjdXJpdHlDaGVjayk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTkzLDcgKzk5LDcgQEAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpEb2N1bWVudFRo
cmVhZAogICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWlu
V2ViS2l0SW50ZXJuYWwsIDAsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksICJDcm9zcyBvcmlnaW4g
cmVxdWVzdHMgYXJlIG5vdCBzdXBwb3J0ZWQuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIAorCiAgICAgQVNTRVJUKG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPT0g
VXNlQWNjZXNzQ29udHJvbCk7CiAKICAgICBPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBjcm9zc09y
aWdpblJlcXVlc3QgPSBhZG9wdFB0cihuZXcgUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpKTsKQEAg
LTEwMiw2ICsxMDgsNyBAQCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFk
CiAgICAgaWYgKChtX29wdGlvbnMucHJlZmxpZ2h0UG9saWN5ID09IENvbnNpZGVyUHJlZmxpZ2h0
ICYmIGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNyb3NzT3JpZ2luUmVxdWVzdC0+
aHR0cE1ldGhvZCgpLCBjcm9zc09yaWdpblJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKSkpIHx8
IG1fb3B0aW9ucy5wcmVmbGlnaHRQb2xpY3kgPT0gUHJldmVudFByZWZsaWdodCkKICAgICAgICAg
bWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdCgqY3Jvc3NPcmlnaW5SZXF1ZXN0KTsK
ICAgICBlbHNlIHsKKyAgICAgICAgbV9zaW1wbGVSZXF1ZXN0ID0gZmFsc2U7CiAgICAgICAgIG1f
YWN0dWFsUmVxdWVzdCA9IGNyb3NzT3JpZ2luUmVxdWVzdC5yZWxlYXNlKCk7CiAKICAgICAgICAg
aWYgKENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmNhblNraXBQcmVm
bGlnaHQoc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbV9hY3R1YWxSZXF1ZXN0LT51cmwo
KSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIG1fYWN0dWFsUmVxdWVzdC0+aHR0cE1ldGhv
ZCgpLCBtX2FjdHVhbFJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKSkpCkBAIC0xNjcsMTMgKzE3
NCw0OSBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cmVkaXJlY3RSCiAgICAgQVNT
RVJUKG1fY2xpZW50KTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBt
X3Jlc291cmNlKTsKIAotICAgIGlmICghaXNBbGxvd2VkUmVkaXJlY3QocmVxdWVzdC51cmwoKSkp
IHsKLSAgICAgICAgUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gcHJvdGVjdCh0aGlz
KTsKKyAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOwor
ICAgIGJvb2wgYWxsb3dSZWRpcmVjdCA9IGZhbHNlOworICAgIGlmIChtX29wdGlvbnMuY3Jvc3NP
cmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpIHsKKyAgICAgICAgLy8gV2hl
biB1c2luZyBhY2Nlc3MgY29udHJvbCwgb25seSBzaW1wbGUgY3Jvc3Mgb3JpZ2luIHJlcXVlc3Rz
IGFyZSBhbGxvd2VkIHRvIHJlZGlyZWN0LiBUaGUgbmV3IHJlcXVlc3QgVVJMIG11c3QgaGF2ZSBh
IHN1cHBvcnRlZAorICAgICAgICAvLyBzY2hlbWUgYW5kIG5vdCBjb250YWluIHRoZSB1c2VyaW5m
byBwcm9kdWN0aW9uLiBJbiBhZGRpdGlvbiwgdGhlIHJlZGlyZWN0IHJlc3BvbnNlIG11c3QgcGFz
cyB0aGUgYWNjZXNzIGNvbnRyb2wgY2hlY2suCisgICAgICAgIGlmIChtX3NpbXBsZVJlcXVlc3Qp
IHsKKyAgICAgICAgICAgIFN0cmluZyBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbjsKKyAg
ICAgICAgICAgIGFsbG93UmVkaXJlY3QgPQorICAgICAgICAgICAgICAgIFNjaGVtZVJlZ2lzdHJ5
OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzQ09SU0VuYWJsZWQocmVxdWVzdC51cmwoKS5wcm90b2Nv
bCgpKQorICAgICAgICAgICAgICAgICYmIHJlcXVlc3QudXJsKCkudXNlcigpLmlzRW1wdHkoKQor
ICAgICAgICAgICAgICAgICYmIHJlcXVlc3QudXJsKCkucGFzcygpLmlzRW1wdHkoKQorICAgICAg
ICAgICAgICAgICYmIHBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZWRpcmVjdFJlc3BvbnNlLCBt
X29wdGlvbnMuYWxsb3dDcmVkZW50aWFscywgc2VjdXJpdHlPcmlnaW4oKSwgYWNjZXNzQ29udHJv
bEVycm9yRGVzY3JpcHRpb24pOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGFsbG93
UmVkaXJlY3QgPSBpc0FsbG93ZWRSZWRpcmVjdChyZXF1ZXN0LnVybCgpKTsKKworICAgIGlmIChh
bGxvd1JlZGlyZWN0KSB7CisgICAgICAgIGlmIChtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0
UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpIHsKKyAgICAgICAgICAgIGlmIChtX3Jlc291cmNl
KQorICAgICAgICAgICAgICAgIGNsZWFyUmVzb3VyY2UoKTsKKworICAgICAgICAgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBvcmlnaW5hbE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVG
cm9tU3RyaW5nKHJlZGlyZWN0UmVzcG9uc2UudXJsKCkpOworICAgICAgICAgICAgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiByZXF1ZXN0T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21T
dHJpbmcocmVxdWVzdC51cmwoKSk7CisgICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBVUkwg
b3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIHRoZSBvcmlnaW5hbCBVUkwgb3JpZ2luLCBz
ZXQgc291cmNlIG9yaWdpbiB0byBhIGdsb2JhbGx5IHVuaXF1ZSBpZGVudGlmaWVyLgorICAgICAg
ICAgICAgaWYgKCFvcmlnaW5hbE9yaWdpbi5nZXQoKS0+aXNTYW1lU2NoZW1lSG9zdFBvcnQocmVx
dWVzdE9yaWdpbi5nZXQoKSkpCisgICAgICAgICAgICAgICAgbV9vcHRpb25zLnNlY3VyaXR5T3Jp
Z2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZVVuaXF1ZSgpOworICAgICAgICAgICAgbV9zYW1l
T3JpZ2luUmVxdWVzdCA9IHNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVxdWVzdC51cmwo
KSk7CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSBhbnkgaGVhZGVycyB0aGF0IG1heSBoYXZlIGJl
ZW4gYWRkZWQgYnkgdGhlIG5ldHdvcmsgbGF5ZXIgdGhhdCBjYXVzZSBhY2Nlc3MgY29udHJvbCB0
byBmYWlsLgorICAgICAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBDb250ZW50VHlwZSgpOworICAg
ICAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBSZWZlcnJlcigpOworICAgICAgICAgICAgcmVxdWVz
dC5jbGVhckhUVFBPcmlnaW4oKTsKKyAgICAgICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQVXNlckFn
ZW50KCk7CisgICAgICAgICAgICByZXF1ZXN0LmNsZWFySFRUUEFjY2VwdCgpOworICAgICAgICAg
ICAgbWFrZVJlcXVlc3QocmVxdWVzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBJZiBub3QgdXNpbmcgYWNjZXNzIGNvbnRyb2wsIGFsbG93IGNsaWVudHMgdG8gYXVkaXQgdGhl
IHJlZGlyZWN0LgorICAgICAgICAgICAgaWYgKG1fY2xpZW50LT5pc0RvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlckNsaWVudCgpKQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlckNsaWVudCo+KG1fY2xpZW50KS0+d2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3Qs
IHJlZGlyZWN0UmVzcG9uc2UpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKICAgICAgICAgbV9j
bGllbnQtPmRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CiAgICAgICAgIHJlcXVlc3QgPSBSZXNvdXJj
ZVJlcXVlc3QoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9jbGllbnQtPmlzRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxEb2N1
bWVudFRocmVhZGFibGVMb2FkZXJDbGllbnQqPihtX2NsaWVudCktPndpbGxTZW5kUmVxdWVzdChy
ZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKICAgICB9CiB9CiAKQEAgLTM3Nyw5ICs0MjAsNiBA
QCBib29sIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6aXNBbGxvd2VkCiAgICAgaWYgKG1fb3B0
aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPT0gQWxsb3dDcm9zc09yaWdpblJlcXVlc3Rz
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGltcGxl
bWVudCBhY2Nlc3MgY29udHJvbCBmb3IgZWFjaCByZWRpcmVjdC4gVGhpcyB3aWxsIHJlcXVpcmUg
c29tZSByZWZhY3RvcmluZyB0aG91Z2gsIGJlY2F1c2UgdGhlIGNvZGUKLSAgICAvLyB0aGF0IHBy
b2Nlc3NlcyByZWRpcmVjdHMgZG9lc24ndCBrbm93IGFib3V0IGFjY2VzcyBjb250cm9sIGFuZCBl
eHBlY3RzIGEgc3luY2hyb25vdXMgYW5zd2VyIGZyb20gaXRzIGNsaWVudCBhYm91dCB3aGV0aGVy
Ci0gICAgLy8gYSByZWRpcmVjdCBzaG91bGQgcHJvY2VlZC4KICAgICByZXR1cm4gbV9zYW1lT3Jp
Z2luUmVxdWVzdCAmJiBzZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
LmgJKHJldmlzaW9uIDExMTQxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtODksNiArODksNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2b2lk
IGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNo
VGltZSk7CiAgICAgICAgIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAg
ICAgIHZvaWQgbWFrZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgICAgIHZv
aWQgbWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RX
aXRoUHJlZmxpZ2h0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCk7CiAgICAgICAgIHZv
aWQgcHJlZmxpZ2h0U3VjY2VzcygpOwpAQCAtMTA0LDYgKzEwNSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgICAgIFRocmVhZGFibGVM
b2FkZXJPcHRpb25zIG1fb3B0aW9uczsKICAgICAgICAgYm9vbCBtX3NhbWVPcmlnaW5SZXF1ZXN0
OworICAgICAgICBib29sIG1fc2ltcGxlUmVxdWVzdDsKICAgICAgICAgYm9vbCBtX2FzeW5jOwog
ICAgICAgICBPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBtX2FjdHVhbFJlcXVlc3Q7ICAvLyBub24t
bnVsbCBkdXJpbmcgQWNjZXNzIENvbnRyb2wgcHJlZmxpZ2h0IGNoZWNrcwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0
QmFzZS5jcHAJKHJldmlzaW9uIDExMTQxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjUxLDYgKzI1MSwxNiBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRU
UEF1dGhvCiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCit2
b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUENvbnRlbnRUeXBlKCkKK3sKKyAgICB1
cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsgCisKKyAgICBtX2h0dHBIZWFkZXJGaWVsZHMucmVtb3Zl
KCJDb250ZW50LVR5cGUiKTsKKworICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5
KCkpCisgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworfQorCiB2b2lk
IFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFJlZmVycmVyKCkKIHsKICAgICB1cGRhdGVS
ZXNvdXJjZVJlcXVlc3QoKTsgCkBAIC0yNzEsNiArMjgxLDI2IEBAIHZvaWQgUmVzb3VyY2VSZXF1
ZXN0QmFzZTo6Y2xlYXJIVFRQT3JpZ2kKICAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVk
ID0gZmFsc2U7CiB9CiAKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQVXNlckFn
ZW50KCkKK3sKKyAgICB1cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsgCisKKyAgICBtX2h0dHBIZWFk
ZXJGaWVsZHMucmVtb3ZlKCJVc2VyLUFnZW50Iik7CisKKyAgICBpZiAodXJsKCkucHJvdG9jb2xJ
c0luSFRUUEZhbWlseSgpKQorICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxz
ZTsKK30KKwordm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBBY2NlcHQoKQorewor
ICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOyAKKworICAgIG1faHR0cEhlYWRlckZpZWxkcy5y
ZW1vdmUoIkFjY2VwdCIpOworCisgICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHko
KSkKKyAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7Cit9CisKIHZvaWQg
UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0UmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGlu
Z0ZhbGxiYWNrQXJyYXkoY29uc3QgU3RyaW5nJiBlbmNvZGluZzEsIGNvbnN0IFN0cmluZyYgZW5j
b2RpbmcyLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nMykKIHsKICAgICB1cGRhdGVSZXNvdXJjZVJl
cXVlc3QoKTsgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVxdWVzdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkocmV2aXNpb24gMTExNDExKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgsNyArODgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgU3RyaW5nIGh0dHBDb250ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIGh0dHBI
ZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIik7ICB9CiAgICAgICAgIHZvaWQgc2V0SFRUUENvbnRl
bnRUeXBlKGNvbnN0IFN0cmluZyYgaHR0cENvbnRlbnRUeXBlKSB7IHNldEhUVFBIZWFkZXJGaWVs
ZCgiQ29udGVudC1UeXBlIiwgaHR0cENvbnRlbnRUeXBlKTsgfQotICAgICAgICAKKyAgICAgICAg
dm9pZCBjbGVhckhUVFBDb250ZW50VHlwZSgpOworCiAgICAgICAgIFN0cmluZyBodHRwUmVmZXJy
ZXIoKSBjb25zdCB7IHJldHVybiBodHRwSGVhZGVyRmllbGQoIlJlZmVyZXIiKTsgfQogICAgICAg
ICB2b2lkIHNldEhUVFBSZWZlcnJlcihjb25zdCBTdHJpbmcmIGh0dHBSZWZlcnJlcikgeyBzZXRI
VFRQSGVhZGVyRmllbGQoIlJlZmVyZXIiLCBodHRwUmVmZXJyZXIpOyB9CiAgICAgICAgIHZvaWQg
Y2xlYXJIVFRQUmVmZXJyZXIoKTsKQEAgLTk5LDkgKzEwMCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgU3RyaW5nIGh0dHBVc2VyQWdlbnQoKSBjb25zdCB7IHJldHVybiBodHRw
SGVhZGVyRmllbGQoIlVzZXItQWdlbnQiKTsgfQogICAgICAgICB2b2lkIHNldEhUVFBVc2VyQWdl
bnQoY29uc3QgU3RyaW5nJiBodHRwVXNlckFnZW50KSB7IHNldEhUVFBIZWFkZXJGaWVsZCgiVXNl
ci1BZ2VudCIsIGh0dHBVc2VyQWdlbnQpOyB9CisgICAgICAgIHZvaWQgY2xlYXJIVFRQVXNlckFn
ZW50KCk7CiAKICAgICAgICAgU3RyaW5nIGh0dHBBY2NlcHQoKSBjb25zdCB7IHJldHVybiBodHRw
SGVhZGVyRmllbGQoIkFjY2VwdCIpOyB9CiAgICAgICAgIHZvaWQgc2V0SFRUUEFjY2VwdChjb25z
dCBTdHJpbmcmIGh0dHBBY2NlcHQpIHsgc2V0SFRUUEhlYWRlckZpZWxkKCJBY2NlcHQiLCBodHRw
QWNjZXB0KTsgfQorICAgICAgICB2b2lkIGNsZWFySFRUUEFjY2VwdCgpOwogCiAgICAgICAgIHZv
aWQgc2V0UmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkoY29u
c3QgU3RyaW5nJiBlbmNvZGluZzEsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcyID0gU3RyaW5nKCks
IGNvbnN0IFN0cmluZyYgZW5jb2RpbmczID0gU3RyaW5nKCkpOwogCkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAxMTE2MzgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNSBAQAorMjAxMi0wMy0yMSAgQmlsbCBCdWRnZSAgPGJidWRnZUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIG5vdyBzdXBwb3J0cyByZWRpcmVj
dHMgd2hlbiBsb2FkaW5nIGEgY3Jvc3Mtb3JpZ2luIHJlcXVlc3QKKyAgICAgICAgd2l0aCBhY2Nl
c3MgY29udHJvbCAoQ09SUykuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NzYwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1hbmQt
cmVkaXJlY3RzLWFzeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1hbmQtcmVkaXJlY3RzLWFzeW5jLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3Jl
ZGlyZWN0LWNvcnMucGhwOiBBZGRlZC4KKwogMjAxMi0wMy0yMSAgQmV0aCBEYWtpbiAgPGJkYWtp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgwMzIyCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L2FjY2Vzcy1jb250cm9sLWFuZC1yZWRpcmVjdHMtYXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRy
b2wtYW5kLXJlZGlyZWN0cy1hc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250cm9sLWFuZC1yZWRp
cmVjdHMtYXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACitU
ZXN0cyB0aGF0IGFzeW5jaHJvbm91cyBYTUxIdHRwUmVxdWVzdHMgaGFuZGxlIHJlZGlyZWN0cyBh
Y2NvcmRpbmcgdG8gdGhlIENPUlMgc3RhbmRhcmQuCisKK1Rlc3RpbmcgcmVzb3VyY2VzL3JlZGly
ZWN0LWNvcnMucGhwP3VybD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVz
b3VyY2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dpCitFeHBlY3Rpbmcgc3Vj
Y2VzczogZmFsc2UKK1BBU1M6IDAKK1Rlc3RpbmcgcmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhw
P3VybD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vz
cy1jb250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dpJiAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3Jp
Z2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCYgIGFjY2Vzcy1jb250cm9sLWFsbG93LWNyZWRlbnRp
YWxzPXRydWUKK0V4cGVjdGluZyBzdWNjZXNzOiBmYWxzZQorUEFTUzogMAorVGVzdGluZyByZXNv
dXJjZXMvcmVkaXJlY3QtY29ycy5waHA/dXJsPWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRw
cmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3cuY2dpJiAgYWNjZXNz
LWNvbnRyb2wtYWxsb3ctb3JpZ2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCYgIGFjY2Vzcy1jb250
cm9sLWFsbG93LWNyZWRlbnRpYWxzPXRydWUKK0V4cGVjdGluZyBzdWNjZXNzOiBmYWxzZQorUEFT
UzogMAorVGVzdGluZyBodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3Vy
Y2VzL3JlZGlyZWN0LWNvcnMucGhwP3VybD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJl
cXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dpCitFeHBl
Y3Rpbmcgc3VjY2VzczogZmFsc2UKK1BBU1M6IDAKK1Rlc3RpbmcgaHR0cDovLzEyNy4wLjAuMTo4
MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9aHR0cDov
LzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1i
YXNpYy1hbGxvdy1zdGFyLmNnaSYgIGFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbj1odHRwOi8v
bG9jYWxob3N0OjgwMDAKK0V4cGVjdGluZyBzdWNjZXNzOiB0cnVlCitGQUlMOiAwCitUZXN0aW5n
IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVkaXJlY3Qt
Y29ycy5waHA/dXJsPWh0dHA6Ly91c2VybmFtZTpwYXNzd29yZEAxMjcuMC4wLjE6ODAwMC94bWxo
dHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ctc3Rhci5jZ2km
ICBhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49aHR0cDovL2xvY2FsaG9zdDo4MDAwCitFeHBl
Y3Rpbmcgc3VjY2VzczogZmFsc2UKK1BBU1M6IDAKK1Rlc3RpbmcgaHR0cDovLzEyNy4wLjAuMTo4
MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9Zm9vOi8v
YmFyLmNnaSYgIGFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbj1odHRwOi8vbG9jYWxob3N0Ojgw
MDAKK0V4cGVjdGluZyBzdWNjZXNzOiBmYWxzZQorUEFTUzogMAorVGVzdGluZyBodHRwOi8vMTI3
LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhwP3Jl
ZGlyZWN0LXByZWZsaWdodD10cnVlJiAgdXJsPWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRw
cmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ctc3Rhci5jZ2kmICBh
Y2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49KgorRXhwZWN0aW5nIHN1Y2Nlc3M6IGZhbHNlCitQ
QVNTOiAwCitUZXN0aW5nIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNv
dXJjZXMvcmVkaXJlY3QtY29ycy5waHA/cmVkaXJlY3QtcHJlZmxpZ2h0PWZhbHNlJiAgdXJsPWh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRy
b2wtYmFzaWMtYWxsb3ctc3Rhci5jZ2kmICBhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49KiYg
IGFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnM9eC13ZWJraXQKK0V4cGVjdGluZyBzdWNjZXNz
OiBmYWxzZQorUEFTUzogMAorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250cm9sLWFuZC1yZWRpcmVjdHMtYXN5bmMt
ZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wt
YW5kLXJlZGlyZWN0cy1hc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtYW5kLXJlZGlyZWN0cy1hc3luYy5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC9hY2Nlc3MtY29udHJvbC1hbmQtcmVkaXJlY3RzLWFzeW5jLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTA5IEBACis8cD5UZXN0cyB0aGF0IGFzeW5jaHJvbm91cyBYTUxIdHRwUmVxdWVz
dHMgaGFuZGxlIHJlZGlyZWN0cyBhY2NvcmRpbmcgdG8gdGhlIENPUlMgc3RhbmRhcmQuPC9wPgor
Cis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24g
bG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlICsgJ1xuJykpOworfQor
CitmdW5jdGlvbiBydW5UZXN0QXN5bmModXJsLCBmb3JjZVByZWZsaWdodCwgZXhwZWN0U3VjY2Vz
cykgeworICAgIGxvZygiVGVzdGluZyAiICsgdXJsKTsKKyAgICBsb2coIkV4cGVjdGluZyBzdWNj
ZXNzOiAiICsgZXhwZWN0U3VjY2Vzcyk7CisKKyAgICB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3Qo
KTsKKyAgICB4aHIub3BlbigiR0VUIiwgdXJsLCB0cnVlKTsKKyAgICBpZiAoZm9yY2VQcmVmbGln
aHQpCisgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJ4LXdlYmtpdCIsICJmb28iKTsKKwor
ICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9nKChleHBlY3RTdWNjZXNz
ID8gIlBBU1MiIDogIkZBSUwiKSArICI6ICIgKyB4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgICAg
bmV4dFRlc3QoKTsKKyAgICB9CisgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgbG9nKChleHBlY3RTdWNjZXNzID8gIkZBSUwiIDogIlBBU1MiKSArICI6ICIgKyB4aHIuc3Rh
dHVzKTsKKyAgICAgICAgbmV4dFRlc3QoKTsKKyAgICB9CisgICAgeGhyLnNlbmQobnVsbCk7Cit9
CisKK3ZhciBzaW1wbGUgPSBmYWxzZTsKK3ZhciBwcmVmbGlnaHQgPSB0cnVlOwordmFyIHN1Y2Nl
ZWRzID0gdHJ1ZTsKK3ZhciBmYWlscyA9IGZhbHNlOworCit2YXIgdGVzdHMgPSBbCisvLyAxKSBU
ZXN0IHNpbXBsZSBzYW1lIG9yaWdpbiByZXF1ZXN0cyB0aGF0IHJlY2VpdmUgY3Jvc3Mgb3JpZ2lu
IHJlZGlyZWN0cy4KKworLy8gUmVxdWVzdCByZWNlaXZlcyBhIGNyb3NzLW9yaWdpbiByZWRpcmVj
dCByZXNwb25zZSB3aXRob3V0IENPUlMgaGVhZGVycy4gVGhlIHJlZGlyZWN0IHJlc3BvbnNlIGZh
aWxzIHRoZSBhY2Nlc3MgY2hlY2suCitbInJlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9
aHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29u
dHJvbC1iYXNpYy1hbGxvdy1zdGFyLmNnaSIsCisgIHNpbXBsZSwgZmFpbHNdLAorCisvLyBSZXF1
ZXN0IHJlY2VpdmVzIGEgY3Jvc3Mtb3JpZ2luIHJlZGlyZWN0IHJlc3BvbnNlIHdpdGggQ09SUyBo
ZWFkZXJzLiBUaGUgcmVkaXJlY3QgcmVzcG9uc2UgcGFzc2VzIHRoZSBhY2Nlc3MgY2hlY2ssCisv
LyBidXQgIHRoZSByZXNvdXJjZSByZXNwb25zZSBmYWlscyBpdHMgYWNjZXNzIGNoZWNrIGJlY2F1
c2UgdGhlIHNlY3VyaXR5IG9yaWdpbiBpcyBhIGdsb2JhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIGFm
dGVyCisvLyB0aGUgcmVkaXJlY3QgYW5kIHRoZSBzYW1lIG9yaWdpbiBYSFIgaGFzICdhbGxvd0Ny
ZWRlbnRpYWxzJyB0cnVlLgorWyJyZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHA/dXJsPWh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wt
YmFzaWMtYWxsb3ctc3Rhci5jZ2kmXAorICBhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49aHR0
cDovL2xvY2FsaG9zdDo4MDAwJlwKKyAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctY3JlZGVudGlhbHM9
dHJ1ZSIsCisgIHNpbXBsZSwgZmFpbHNdLAorCisvLyBTYW1lIGFzIGFib3ZlLCBidXQgdG8gYSBs
ZXNzIHBlcm1pc3NpdmUgcmVzb3VyY2UgdGhhdCBvbmx5IGFsbG93cyB0aGUgcmVxdWVzdGluZyBv
cmlnaW4uCitbInJlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9aHR0cDovLzEyNy4wLjAu
MTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1iYXNpYy1hbGxv
dy5jZ2kmXAorICBhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49aHR0cDovL2xvY2FsaG9zdDo4
MDAwJlwKKyAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctY3JlZGVudGlhbHM9dHJ1ZSIsCisgIHNpbXBs
ZSwgZmFpbHNdLAorCisvLyAyKSBUZXN0IHNpbXBsZSBjcm9zcyBvcmlnaW4gcmVxdWVzdHMgdGhh
dCByZWNlaXZlIHJlZGlyZWN0cy4KKworLy8gUmVjZWl2ZXMgYSByZWRpcmVjdCByZXNwb25zZSB3
aXRob3V0IENPUlMgaGVhZGVycy4gVGhlIHJlZGlyZWN0IHJlc3BvbnNlIGZhaWxzIHRoZSBhY2Nl
c3MgY2hlY2suCitbImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJj
ZXMvcmVkaXJlY3QtY29ycy5waHA/dXJsPWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVx
dWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ctc3Rhci5jZ2kiLAorICBz
aW1wbGUsIGZhaWxzXSwKKworLy8gUmVjZWl2ZXMgYSByZWRpcmVjdCByZXNwb25zZSB3aXRoIENP
UlMgaGVhZGVycy4gVGhlIHJlZGlyZWN0IHJlc3BvbnNlIHBhc3NlcyB0aGUgYWNjZXNzIGNoZWNr
IGFuZCB0aGUgcmVzb3VyY2UgcmVzcG9uc2UKKy8vIHBhc3NlcyB0aGUgYWNjZXNzIGNoZWNrLgor
WyJodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGlyZWN0
LWNvcnMucGhwP3VybD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3Vy
Y2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dpJlwKKyAgYWNjZXNzLWNvbnRy
b2wtYWxsb3ctb3JpZ2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIsCisgIHNpbXBsZSwgc3VjY2Vl
ZHNdLAorCisvLyBSZWNlaXZlcyBhIHJlZGlyZWN0IHJlc3BvbnNlIHdpdGggYSBVUkwgY29udGFp
bmluZyB0aGUgdXNlcmluZm8gcHJvZHVjdGlvbi4KK1siaHR0cDovLzEyNy4wLjAuMTo4MDAwL3ht
bGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9aHR0cDovL3VzZXJu
YW1lOnBhc3N3b3JkQDEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nl
c3MtY29udHJvbC1iYXNpYy1hbGxvdy1zdGFyLmNnaSZcCisgIGFjY2Vzcy1jb250cm9sLWFsbG93
LW9yaWdpbj1odHRwOi8vbG9jYWxob3N0OjgwMDAiLAorICBzaW1wbGUsIGZhaWxzXSwKKworLy8g
UmVjZWl2ZXMgYSByZWRpcmVjdCByZXNwb25zZSB3aXRoIGEgVVJMIHdpdGggYW4gdW5zdXBwb3J0
ZWQgc2NoZW1lLgorWyJodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3Vy
Y2VzL3JlZGlyZWN0LWNvcnMucGhwP3VybD1mb286Ly9iYXIuY2dpJlwKKyAgYWNjZXNzLWNvbnRy
b2wtYWxsb3ctb3JpZ2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIsCisgIHNpbXBsZSwgZmFpbHNd
LAorCisvLyAzKSBUZXN0IHByZWZsaWdodGVkIGNyb3NzIG9yaWdpbiByZXF1ZXN0cyB0aGF0IHJl
Y2VpdmUgcmVkaXJlY3RzLgorCisvLyBSZWNlaXZlcyBhIHJlZGlyZWN0IHJlc3BvbnNlIHRvIHRo
ZSBwcmVmbGlnaHQgcmVxdWVzdCBhbmQgZmFpbHMuCitbImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94
bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHA/cmVkaXJlY3QtcHJlZmxp
Z2h0PXRydWUmXAorICB1cmw9aHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jl
c291cmNlcy9hY2Nlc3MtY29udHJvbC1iYXNpYy1hbGxvdy1zdGFyLmNnaSZcCisgIGFjY2Vzcy1j
b250cm9sLWFsbG93LW9yaWdpbj0qIiwKKyAgcHJlZmxpZ2h0LCBmYWlsc10sCisKKy8vIFN1Y2Nl
c3NmdWwgcHJlZmxpZ2h0IGFuZCByZWNlaXZlcyBhIHJlZGlyZWN0IHJlc3BvbnNlIHRvIHRoZSBh
Y3R1YWwgcmVxdWVzdCBhbmQgZmFpbHMuCitbImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRw
cmVxdWVzdC9yZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHA/cmVkaXJlY3QtcHJlZmxpZ2h0PWZh
bHNlJlwKKyAgdXJsPWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJj
ZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ctc3Rhci5jZ2kmXAorICBhY2Nlc3MtY29udHJv
bC1hbGxvdy1vcmlnaW49KiZcCisgIGFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnM9eC13ZWJr
aXQiLAorICBwcmVmbGlnaHQsIGZhaWxzXSwKK10KKwordmFyIGN1cnJlbnRUZXN0ID0gMDsKKwor
ZnVuY3Rpb24gbmV4dFRlc3QoKSB7CisgICAgaWYgKGN1cnJlbnRUZXN0IDwgdGVzdHMubGVuZ3Ro
KQorICAgICAgICBydW5UZXN0QXN5bmMuYXBwbHkobnVsbCwgdGVzdHNbY3VycmVudFRlc3QrK10p
OworICAgIGVsc2UgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCituZXh0VGVzdCgpOworPC9zY3Jp
cHQ+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L2FjY2Vzcy1jb250cm9sLWFuZC1yZWRpcmVjdHMtYXN5bmMuaHRtbApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRp
cmVjdC1jb3JzLnBocAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1s
aHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDI4IEBACis8P3BocAorICAgICR1cmwgPSAkX0dFVFsndXJsJ107CisgICAgJHJlZGly
ZWN0X3ByZWZsaWdodCA9ICRfR0VUWydyZWRpcmVjdC1wcmVmbGlnaHQnXTsKKyAgICAkYWNjZXNz
X2NvbnRyb2xfYWxsb3dfb3JpZ2luID0gJF9HRVRbJ2FjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdp
biddOworICAgICRhY2Nlc3NfY29udHJvbF9hbGxvd19jcmVkZW50aWFscyA9ICRfR0VUWydhY2Nl
c3MtY29udHJvbC1hbGxvdy1jcmVkZW50aWFscyddOworICAgICRhY2Nlc3NfY29udHJvbF9hbGxv
d19oZWFkZXJzID0gJF9HRVRbJ2FjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnMnXTsKKworICAg
IGlmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PSAiT1BUSU9OUyIpIHsKKyAgICAgICAg
aWYgKCRyZWRpcmVjdF9wcmVmbGlnaHQgPT0gInRydWUiKSB7CisgICAgICAgICAgICBoZWFkZXIo
IkhUVFAvMS4xIDMwMiIpOworICAgICAgICAgICAgaGVhZGVyKCJMb2NhdGlvbjogJHVybCIpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaGVhZGVyKCJIVFRQLzEuMSAy
MDAiKTsKKyAgICAgICAgfQorICAgICAgICBoZWFkZXIoIkFjY2Vzcy1Db250cm9sLUFsbG93LU1l
dGhvZHM6IEdFVCIpOworICAgICAgICBoZWFkZXIoIkFjY2Vzcy1Db250cm9sLU1heC1BZ2U6IDEi
KTsKKyAgICB9IGVsc2UgaWYgKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID09ICJHRVQiKSB7
CisgICAgICAgIGhlYWRlcigiSFRUUC8xLjEgMzAyIik7CisgICAgICAgIGhlYWRlcigiTG9jYXRp
b246ICR1cmwiKTsKKyAgICB9CisgICAgaWYgKCFpc19udWxsKCRhY2Nlc3NfY29udHJvbF9hbGxv
d19vcmlnaW4pKQorICAgICAgICBoZWFkZXIoIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbjog
JGFjY2Vzc19jb250cm9sX2FsbG93X29yaWdpbiIpOworICAgIGlmICghaXNfbnVsbCgkYWNjZXNz
X2NvbnRyb2xfYWxsb3dfY3JlZGVudGlhbHMpKQorICAgICAgICBoZWFkZXIoIkFjY2Vzcy1Db250
cm9sLUFsbG93LUNyZWRlbnRpYWxzOiAkYWNjZXNzX2NvbnRyb2xfYWxsb3dfY3JlZGVudGlhbHMi
KTsKKyAgICBpZiAoIWlzX251bGwoJGFjY2Vzc19jb250cm9sX2FsbG93X2hlYWRlcnMpKQorICAg
ICAgICBoZWFkZXIoIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnM6ICRhY2Nlc3NfY29udHJv
bF9hbGxvd19oZWFkZXJzIik7Cis/Pgo=
</data>
<flag name="commit-queue"
          id="137079"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133245</attachid>
            <date>2012-03-22 06:29:36 -0700</date>
            <delta_ts>2012-03-23 10:30:53 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>aaa.txt</filename>
            <type>text/plain</type>
            <size>24567</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTY3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEyLTAzLTIyICBCaWxsIEJ1
ZGdlICA8YmJ1ZGdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIgZm9sbG93cyB0aGUgQ09SUyByZWRpcmVjdCBzdGVwcyB3aGVuIGFzeW5jaHJvbm91c2x5
IGxvYWRpbmcgYQorICAgICAgICBjcm9zcyBvcmlnaW4gcmVxdWVzdCB3aXRoIGFjY2VzcyBjb250
cm9sLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc2
MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
OiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250cm9sLWFuZC1yZWRpcmVjdHMt
YXN5bmMuaHRtbAorCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5j
cHA6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6CisKIDIwMTItMDMtMjIgIEFs
bGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CiAKICAgICAgICAg
W1F0XSBFbmFibGUgRkFTVF9NT0JJTEVfU0NST0xMSU5HIHdoZW4gc2Nyb2xsaW5nIGlzIGRlbGVn
YXRlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVh
ZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiAxMTE0MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNzQs
NiArNzQsNyBAQCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkCiAgICAg
LCBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCiAgICAgLCBt
X3NhbWVPcmlnaW5SZXF1ZXN0KHNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVxdWVzdC51
cmwoKSkpCisgICAgLCBtX3NpbXBsZVJlcXVlc3QodHJ1ZSkKICAgICAsIG1fYXN5bmMoYmxvY2tp
bmdCZWhhdmlvciA9PSBMb2FkQXN5bmNocm9ub3VzbHkpCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
ICAgICAsIG1fcHJlZmxpZ2h0UmVxdWVzdElkZW50aWZpZXIoMCkKQEAgLTg0LDYgKzg1LDExIEBA
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWQKICAgICAvLyBTZXR0aW5n
IGFuIG91dGdvaW5nIHJlZmVyZXIgaXMgb25seSBzdXBwb3J0ZWQgaW4gdGhlIGFzeW5jIGNvZGUg
cGF0aC4KICAgICBBU1NFUlQobV9hc3luYyB8fCByZXF1ZXN0Lmh0dHBSZWZlcnJlcigpLmlzRW1w
dHkoKSk7CiAKKyAgICBtYWtlUmVxdWVzdChyZXF1ZXN0KTsKK30KKwordm9pZCBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6Om1ha2VSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKK3sKICAgICBpZiAobV9zYW1lT3JpZ2luUmVxdWVzdCB8fCBtX29wdGlvbnMuY3Jvc3NPcmln
aW5SZXF1ZXN0UG9saWN5ID09IEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cykgewogICAgICAgICBs
b2FkUmVxdWVzdChyZXF1ZXN0LCBEb1NlY3VyaXR5Q2hlY2spOwogICAgICAgICByZXR1cm47CkBA
IC05Myw3ICs5OSw3IEBAIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWQK
ICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktp
dEludGVybmFsLCAwLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLCAiQ3Jvc3Mgb3JpZ2luIHJlcXVl
c3RzIGFyZSBub3Qgc3VwcG9ydGVkLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAK
KwogICAgIEFTU0VSVChtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFj
Y2Vzc0NvbnRyb2wpOwogCiAgICAgT3duUHRyPFJlc291cmNlUmVxdWVzdD4gY3Jvc3NPcmlnaW5S
ZXF1ZXN0ID0gYWRvcHRQdHIobmV3IFJlc291cmNlUmVxdWVzdChyZXF1ZXN0KSk7CkBAIC0xMDIs
NiArMTA4LDcgQEAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZAogICAg
IGlmICgobV9vcHRpb25zLnByZWZsaWdodFBvbGljeSA9PSBDb25zaWRlclByZWZsaWdodCAmJiBp
c1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjcm9zc09yaWdpblJlcXVlc3QtPmh0dHBN
ZXRob2QoKSwgY3Jvc3NPcmlnaW5SZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCkpKSB8fCBtX29w
dGlvbnMucHJlZmxpZ2h0UG9saWN5ID09IFByZXZlbnRQcmVmbGlnaHQpCiAgICAgICAgIG1ha2VT
aW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoKmNyb3NzT3JpZ2luUmVxdWVzdCk7CiAgICAg
ZWxzZSB7CisgICAgICAgIG1fc2ltcGxlUmVxdWVzdCA9IGZhbHNlOwogICAgICAgICBtX2FjdHVh
bFJlcXVlc3QgPSBjcm9zc09yaWdpblJlcXVlc3QucmVsZWFzZSgpOwogCiAgICAgICAgIGlmIChD
cm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKS5jYW5Ta2lwUHJlZmxpZ2h0
KHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG1fYWN0dWFsUmVxdWVzdC0+dXJsKCksIG1f
b3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCBtX2FjdHVhbFJlcXVlc3QtPmh0dHBNZXRob2QoKSwg
bV9hY3R1YWxSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCkpKQpAQCAtMTY3LDEzICsxNzQsNDkg
QEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnJlZGlyZWN0UgogICAgIEFTU0VSVCht
X2NsaWVudCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9yZXNv
dXJjZSk7CiAKLSAgICBpZiAoIWlzQWxsb3dlZFJlZGlyZWN0KHJlcXVlc3QudXJsKCkpKSB7Ci0g
ICAgICAgIFJlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IHByb3RlY3QodGhpcyk7Cisg
ICAgUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKyAgICBi
b29sIGFsbG93UmVkaXJlY3QgPSBmYWxzZTsKKyAgICBpZiAobV9vcHRpb25zLmNyb3NzT3JpZ2lu
UmVxdWVzdFBvbGljeSA9PSBVc2VBY2Nlc3NDb250cm9sKSB7CisgICAgICAgIC8vIFdoZW4gdXNp
bmcgYWNjZXNzIGNvbnRyb2wsIG9ubHkgc2ltcGxlIGNyb3NzIG9yaWdpbiByZXF1ZXN0cyBhcmUg
YWxsb3dlZCB0byByZWRpcmVjdC4gVGhlIG5ldyByZXF1ZXN0IFVSTCBtdXN0IGhhdmUgYSBzdXBw
b3J0ZWQKKyAgICAgICAgLy8gc2NoZW1lIGFuZCBub3QgY29udGFpbiB0aGUgdXNlcmluZm8gcHJv
ZHVjdGlvbi4gSW4gYWRkaXRpb24sIHRoZSByZWRpcmVjdCByZXNwb25zZSBtdXN0IHBhc3MgdGhl
IGFjY2VzcyBjb250cm9sIGNoZWNrLgorICAgICAgICBpZiAobV9zaW1wbGVSZXF1ZXN0KSB7Cisg
ICAgICAgICAgICBTdHJpbmcgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb247CisgICAgICAg
ICAgICBhbGxvd1JlZGlyZWN0ID0KKyAgICAgICAgICAgICAgICBTY2hlbWVSZWdpc3RyeTo6c2hv
dWxkVHJlYXRVUkxTY2hlbWVBc0NPUlNFbmFibGVkKHJlcXVlc3QudXJsKCkucHJvdG9jb2woKSkK
KyAgICAgICAgICAgICAgICAmJiByZXF1ZXN0LnVybCgpLnVzZXIoKS5pc0VtcHR5KCkKKyAgICAg
ICAgICAgICAgICAmJiByZXF1ZXN0LnVybCgpLnBhc3MoKS5pc0VtcHR5KCkKKyAgICAgICAgICAg
ICAgICAmJiBwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2socmVkaXJlY3RSZXNwb25zZSwgbV9vcHRp
b25zLmFsbG93Q3JlZGVudGlhbHMsIHNlY3VyaXR5T3JpZ2luKCksIGFjY2Vzc0NvbnRyb2xFcnJv
ckRlc2NyaXB0aW9uKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBhbGxvd1JlZGly
ZWN0ID0gaXNBbGxvd2VkUmVkaXJlY3QocmVxdWVzdC51cmwoKSk7CisKKyAgICBpZiAoYWxsb3dS
ZWRpcmVjdCkgeworICAgICAgICBpZiAobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGlj
eSA9PSBVc2VBY2Nlc3NDb250cm9sKSB7CisgICAgICAgICAgICBpZiAobV9yZXNvdXJjZSkKKyAg
ICAgICAgICAgICAgICBjbGVhclJlc291cmNlKCk7CisKKyAgICAgICAgICAgIFJlZlB0cjxTZWN1
cml0eU9yaWdpbj4gb3JpZ2luYWxPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0
cmluZyhyZWRpcmVjdFJlc3BvbnNlLnVybCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4gcmVxdWVzdE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5n
KHJlcXVlc3QudXJsKCkpOworICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgVVJMIG9yaWdp
biBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCB0aGUgb3JpZ2luYWwgVVJMIG9yaWdpbiwgc2V0IHNv
dXJjZSBvcmlnaW4gdG8gYSBnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllci4KKyAgICAgICAgICAg
IGlmICghb3JpZ2luYWxPcmlnaW4uZ2V0KCktPmlzU2FtZVNjaGVtZUhvc3RQb3J0KHJlcXVlc3RP
cmlnaW4uZ2V0KCkpKQorICAgICAgICAgICAgICAgIG1fb3B0aW9ucy5zZWN1cml0eU9yaWdpbiA9
IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVVbmlxdWUoKTsKKyAgICAgICAgICAgIG1fc2FtZU9yaWdp
blJlcXVlc3QgPSBzZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlcXVlc3QudXJsKCkpOwor
CisgICAgICAgICAgICAvLyBSZW1vdmUgYW55IGhlYWRlcnMgdGhhdCBtYXkgaGF2ZSBiZWVuIGFk
ZGVkIGJ5IHRoZSBuZXR3b3JrIGxheWVyIHRoYXQgY2F1c2UgYWNjZXNzIGNvbnRyb2wgdG8gZmFp
bC4KKyAgICAgICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQQ29udGVudFR5cGUoKTsKKyAgICAgICAg
ICAgIHJlcXVlc3QuY2xlYXJIVFRQUmVmZXJyZXIoKTsKKyAgICAgICAgICAgIHJlcXVlc3QuY2xl
YXJIVFRQT3JpZ2luKCk7CisgICAgICAgICAgICByZXF1ZXN0LmNsZWFySFRUUFVzZXJBZ2VudCgp
OworICAgICAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBBY2NlcHQoKTsKKyAgICAgICAgICAgIG1h
a2VSZXF1ZXN0KHJlcXVlc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSWYg
bm90IHVzaW5nIGFjY2VzcyBjb250cm9sLCBhbGxvdyBjbGllbnRzIHRvIGF1ZGl0IHRoZSByZWRp
cmVjdC4KKyAgICAgICAgICAgIGlmIChtX2NsaWVudC0+aXNEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQoKSkKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXJDbGllbnQqPihtX2NsaWVudCktPndpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRp
cmVjdFJlc3BvbnNlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CiAgICAgICAgIG1fY2xpZW50
LT5kaWRGYWlsUmVkaXJlY3RDaGVjaygpOwogICAgICAgICByZXF1ZXN0ID0gUmVzb3VyY2VSZXF1
ZXN0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fY2xpZW50LT5pc0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlckNsaWVudCgpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50Kj4obV9jbGllbnQpLT53aWxsU2VuZFJlcXVlc3QocmVxdWVz
dCwgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgfQogfQogCkBAIC0zNzcsOSArNDIwLDYgQEAgYm9v
bCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmlzQWxsb3dlZAogICAgIGlmIChtX29wdGlvbnMu
Y3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cykKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBpbXBsZW1lbnQg
YWNjZXNzIGNvbnRyb2wgZm9yIGVhY2ggcmVkaXJlY3QuIFRoaXMgd2lsbCByZXF1aXJlIHNvbWUg
cmVmYWN0b3JpbmcgdGhvdWdoLCBiZWNhdXNlIHRoZSBjb2RlCi0gICAgLy8gdGhhdCBwcm9jZXNz
ZXMgcmVkaXJlY3RzIGRvZXNuJ3Qga25vdyBhYm91dCBhY2Nlc3MgY29udHJvbCBhbmQgZXhwZWN0
cyBhIHN5bmNocm9ub3VzIGFuc3dlciBmcm9tIGl0cyBjbGllbnQgYWJvdXQgd2hldGhlcgotICAg
IC8vIGEgcmVkaXJlY3Qgc2hvdWxkIHByb2NlZWQuCiAgICAgcmV0dXJuIG1fc2FtZU9yaWdpblJl
cXVlc3QgJiYgc2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCShy
ZXZpc2lvbiAxMTE0MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTg5LDYgKzg5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUp
OwogICAgICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgICAgICB2
b2lkIG1ha2VSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogICAgICAgICB2b2lkIG1h
a2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0KTsKICAgICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFBy
ZWZsaWdodChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIHBy
ZWZsaWdodFN1Y2Nlc3MoKTsKQEAgLTEwNCw2ICsxMDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgICAgICBUaHJlYWRhYmxlTG9hZGVy
T3B0aW9ucyBtX29wdGlvbnM7CiAgICAgICAgIGJvb2wgbV9zYW1lT3JpZ2luUmVxdWVzdDsKKyAg
ICAgICAgYm9vbCBtX3NpbXBsZVJlcXVlc3Q7CiAgICAgICAgIGJvb2wgbV9hc3luYzsKICAgICAg
ICAgT3duUHRyPFJlc291cmNlUmVxdWVzdD4gbV9hY3R1YWxSZXF1ZXN0OyAgLy8gbm9uLW51bGwg
ZHVyaW5nIEFjY2VzcyBDb250cm9sIHByZWZsaWdodCBjaGVja3MKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
Y3BwCShyZXZpc2lvbiAxMTE0MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI1MSw2ICsyNTEsMTYgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBBdXRo
bwogICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAordm9pZCBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBDb250ZW50VHlwZSgpCit7CisgICAgdXBkYXRl
UmVzb3VyY2VSZXF1ZXN0KCk7IAorCisgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZSgiQ29u
dGVudC1UeXBlIik7CisKKyAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQor
ICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKK30KKwogdm9pZCBSZXNv
dXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBSZWZlcnJlcigpCiB7CiAgICAgdXBkYXRlUmVzb3Vy
Y2VSZXF1ZXN0KCk7IApAQCAtMjcxLDYgKzI4MSwyNiBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJh
c2U6OmNsZWFySFRUUE9yaWdpCiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZh
bHNlOwogfQogCit2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFVzZXJBZ2VudCgp
Cit7CisgICAgdXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCk7IAorCisgICAgbV9odHRwSGVhZGVyRmll
bGRzLnJlbW92ZSgiVXNlci1BZ2VudCIpOworCisgICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKSkKKyAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7Cit9
CisKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQQWNjZXB0KCkKK3sKKyAgICB1
cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsgCisKKyAgICBtX2h0dHBIZWFkZXJGaWVsZHMucmVtb3Zl
KCJBY2NlcHQiKTsKKworICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCisg
ICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworfQorCiB2b2lkIFJlc291
cmNlUmVxdWVzdEJhc2U6OnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxs
YmFja0FycmF5KGNvbnN0IFN0cmluZyYgZW5jb2RpbmcxLCBjb25zdCBTdHJpbmcmIGVuY29kaW5n
MiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZzMpCiB7CiAgICAgdXBkYXRlUmVzb3VyY2VSZXF1ZXN0
KCk7IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVl
c3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDExMTQxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBT
YW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTg4LDcgKzg4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIFN0cmluZyBodHRwQ29udGVudFR5cGUoKSBjb25zdCB7IHJldHVybiBodHRwSGVhZGVy
RmllbGQoIkNvbnRlbnQtVHlwZSIpOyAgfQogICAgICAgICB2b2lkIHNldEhUVFBDb250ZW50VHlw
ZShjb25zdCBTdHJpbmcmIGh0dHBDb250ZW50VHlwZSkgeyBzZXRIVFRQSGVhZGVyRmllbGQoIkNv
bnRlbnQtVHlwZSIsIGh0dHBDb250ZW50VHlwZSk7IH0KLSAgICAgICAgCisgICAgICAgIHZvaWQg
Y2xlYXJIVFRQQ29udGVudFR5cGUoKTsKKwogICAgICAgICBTdHJpbmcgaHR0cFJlZmVycmVyKCkg
Y29uc3QgeyByZXR1cm4gaHR0cEhlYWRlckZpZWxkKCJSZWZlcmVyIik7IH0KICAgICAgICAgdm9p
ZCBzZXRIVFRQUmVmZXJyZXIoY29uc3QgU3RyaW5nJiBodHRwUmVmZXJyZXIpIHsgc2V0SFRUUEhl
YWRlckZpZWxkKCJSZWZlcmVyIiwgaHR0cFJlZmVycmVyKTsgfQogICAgICAgICB2b2lkIGNsZWFy
SFRUUFJlZmVycmVyKCk7CkBAIC05OSw5ICsxMDAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIFN0cmluZyBodHRwVXNlckFnZW50KCkgY29uc3QgeyByZXR1cm4gaHR0cEhlYWRl
ckZpZWxkKCJVc2VyLUFnZW50Iik7IH0KICAgICAgICAgdm9pZCBzZXRIVFRQVXNlckFnZW50KGNv
bnN0IFN0cmluZyYgaHR0cFVzZXJBZ2VudCkgeyBzZXRIVFRQSGVhZGVyRmllbGQoIlVzZXItQWdl
bnQiLCBodHRwVXNlckFnZW50KTsgfQorICAgICAgICB2b2lkIGNsZWFySFRUUFVzZXJBZ2VudCgp
OwogCiAgICAgICAgIFN0cmluZyBodHRwQWNjZXB0KCkgY29uc3QgeyByZXR1cm4gaHR0cEhlYWRl
ckZpZWxkKCJBY2NlcHQiKTsgfQogICAgICAgICB2b2lkIHNldEhUVFBBY2NlcHQoY29uc3QgU3Ry
aW5nJiBodHRwQWNjZXB0KSB7IHNldEhUVFBIZWFkZXJGaWVsZCgiQWNjZXB0IiwgaHR0cEFjY2Vw
dCk7IH0KKyAgICAgICAgdm9pZCBjbGVhckhUVFBBY2NlcHQoKTsKIAogICAgICAgICB2b2lkIHNl
dFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KGNvbnN0IFN0
cmluZyYgZW5jb2RpbmcxLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nMiA9IFN0cmluZygpLCBjb25z
dCBTdHJpbmcmIGVuY29kaW5nMyA9IFN0cmluZygpKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTEx
Njc5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMTItMDMtMjIgIEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciBmb2xsb3dzIHRoZSBDT1JTIHJlZGlyZWN0
IHN0ZXBzIHdoZW4gYXN5bmNocm9ub3VzbHkgbG9hZGluZyBhCisgICAgICAgIGNyb3NzIG9yaWdp
biByZXF1ZXN0IHdpdGggYWNjZXNzIGNvbnRyb2wuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzYwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY29y
cy1yZWRpcmVjdC5waHA6IFJlbW92ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94
aHItY29ycy1yZWRpcmVjdC5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1s
aHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtYW5kLXJlZGlyZWN0cy1hc3luYy1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNv
bnRyb2wtYW5kLXJlZGlyZWN0cy1hc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocDogQWRkZWQuCisK
IDIwMTItMDMtMjIgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgV2ViIEluc3BlY3RvcjogZGlzcGF0Y2ggc3R5bGVTaGVldENoYW5nZWQgZXZlbnQgc3lu
Y2hyb25vdXNseS4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveGhyLWNv
cnMtcmVkaXJlY3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hoci1jb3JzLXJlZGlyZWN0Lmh0bWwJKHJldmlzaW9uIDExMTQxMSkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveGhyLWNvcnMtcmVkaXJlY3QuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotPHNjcmlwdD4KLWlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwot
fQotCi1mdW5jdGlvbiBsb2cobXNnKSB7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxv
ZyIpLmlubmVySFRNTCArPSBtc2cgKyAiPGJyPiI7Ci19Ci0KLWZ1bmN0aW9uIHRlc3QoKSB7Ci0g
ICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotICAgIHZhciB1cmwgPSAiaHR0cDov
L2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3Jlc291cmNlcy9jb3JzLXJlZGlyZWN0LnBocD9uby1j
YWNoZSI7Ci0gICAgeGhyLm9wZW4oIkdFVCIsIHVybCwgZmFsc2UpOwotICAgIHRyeSB7Ci0gICAg
ICAgIHhoci5zZW5kKG51bGwpOwotCi0gICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkKLSAg
ICAgICAgICAgIGxvZygiUEFTUzogc3luYyBYSFIgc3VjY2Vzc2Z1bCIpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBsb2coIkZBSUw6IHN5bmMgWEhSIGZhaWxlZCIpOwotICAgIH0gY2F0Y2gg
KGUpIHsKLSAgICAgICAgbG9nKCJGQUlMOiBzeW5jIFhIUiBmYWlsZWQiKTsKLSAgICB9Ci0KLSAg
ICB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKLSAgICB4aHIub3BlbigiR0VUIiwgdXJsLCB0
cnVlKTsKLSAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlZCA9IGZ1bmN0aW9uKGUpIHsKLSAgICAg
ICAgaWYgKHhoci5yZWFkeXN0YXRlID09IDQpIHsKLSAgICAgICAgICAgIGlmICh4aHIuc3RhdHVz
ID09IDIwMCkKLSAgICAgICAgICAgICAgICBsb2coIlBBU1M6IGFzeW5jIFhIUiBzdWNjZXNzZnVs
Iik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbG9nKCJGQUlMOiBhc3luYyBY
SFIgZmFpbGVkIik7Ci0gICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQotICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKLSAg
ICAgICAgfQotICAgIH07Ci0gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
bG9nKCJGQUlMOiBhc3luYyBYSFIgZmFpbGVkIik7Ci0gICAgICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7Ci0gICAgfTsKLSAgICB4aHIuc2VuZChudWxsKTsKLX0KLTwvc2NyaXB0PgotPC9oZWFk
PgotPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgotPHA+Ci1UZXN0IHRoYXQgYSBjcm9zcy1vcmlnaW4g
WEhSIGludm9sdmluZyByZWRpcmVjdHMgd29ya3MgY29ycmVjdGx5LiBJZiB0aGlzIHRlc3QKLXBh
c3NlcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMuCi08L3A+Ci08cD4K
LUN1cnJlbnRseSBub3Qgd29ya2luZywgc2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvNTc2MDAKLTwv
cD4KLTxkaXYgaWQ9ImxvZyI+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jb3JzLXJlZGlyZWN0LnBocAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jb3Jz
LXJlZGlyZWN0LnBocAkocmV2aXNpb24gMTExNDExKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS9yZXNvdXJjZXMvY29ycy1yZWRpcmVjdC5waHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNCArMCwwIEBACi08P3BocAotaGVhZGVyKCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW46
IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIpOwotaGVhZGVyKCJMb2NhdGlvbjogaHR0cDovL2xvY2Fs
aG9zdDo4MDAwL3NlY3VyaXR5L3Jlc291cmNlcy9lbXB0eS5odG1sIik7Ci0/PgpJbmRleDogTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1hbmQtcmVk
aXJlY3RzLWFzeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250cm9sLWFuZC1yZWRpcmVjdHMtYXN5bmMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1hbmQtcmVkaXJlY3RzLWFzeW5jLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorVGVzdHMgdGhhdCBhc3luY2hyb25vdXMg
WE1MSHR0cFJlcXVlc3RzIGhhbmRsZSByZWRpcmVjdHMgYWNjb3JkaW5nIHRvIHRoZSBDT1JTIHN0
YW5kYXJkLgorCitUZXN0aW5nIHJlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9aHR0cDov
LzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1i
YXNpYy1hbGxvdy1zdGFyLmNnaQorRXhwZWN0aW5nIHN1Y2Nlc3M6IGZhbHNlCitQQVNTOiAwCitU
ZXN0aW5nIHJlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9aHR0cDovLzEyNy4wLjAuMTo4
MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1iYXNpYy1hbGxvdy1z
dGFyLmNnaSYgIGFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbj1odHRwOi8vbG9jYWxob3N0Ojgw
MDAmICBhY2Nlc3MtY29udHJvbC1hbGxvdy1jcmVkZW50aWFscz10cnVlCitFeHBlY3Rpbmcgc3Vj
Y2VzczogZmFsc2UKK1BBU1M6IDAKK1Rlc3RpbmcgcmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhw
P3VybD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vz
cy1jb250cm9sLWJhc2ljLWFsbG93LmNnaSYgIGFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbj1o
dHRwOi8vbG9jYWxob3N0OjgwMDAmICBhY2Nlc3MtY29udHJvbC1hbGxvdy1jcmVkZW50aWFscz10
cnVlCitFeHBlY3Rpbmcgc3VjY2VzczogZmFsc2UKK1BBU1M6IDAKK1Rlc3RpbmcgaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91
cmw9aHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3Mt
Y29udHJvbC1iYXNpYy1hbGxvdy1zdGFyLmNnaQorRXhwZWN0aW5nIHN1Y2Nlc3M6IGZhbHNlCitQ
QVNTOiAwCitUZXN0aW5nIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNv
dXJjZXMvcmVkaXJlY3QtY29ycy5waHA/dXJsPWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRw
cmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ctc3Rhci5jZ2kmICBh
Y2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49aHR0cDovL2xvY2FsaG9zdDo4MDAwCitFeHBlY3Rp
bmcgc3VjY2VzczogdHJ1ZQorRkFJTDogMAorVGVzdGluZyBodHRwOi8vMTI3LjAuMC4xOjgwMDAv
eG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhwP3VybD1odHRwOi8vdXNl
cm5hbWU6cGFzc3dvcmRAMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2Fj
Y2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dpJiAgYWNjZXNzLWNvbnRyb2wtYWxsb3ct
b3JpZ2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMAorRXhwZWN0aW5nIHN1Y2Nlc3M6IGZhbHNlCitQ
QVNTOiAwCitUZXN0aW5nIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNv
dXJjZXMvcmVkaXJlY3QtY29ycy5waHA/dXJsPWZvbzovL2Jhci5jZ2kmICBhY2Nlc3MtY29udHJv
bC1hbGxvdy1vcmlnaW49aHR0cDovL2xvY2FsaG9zdDo4MDAwCitFeHBlY3Rpbmcgc3VjY2Vzczog
ZmFsc2UKK1BBU1M6IDAKK1Rlc3RpbmcgaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1
ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD9yZWRpcmVjdC1wcmVmbGlnaHQ9dHJ1ZSYg
IHVybD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vz
cy1jb250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dpJiAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3Jp
Z2luPSoKK0V4cGVjdGluZyBzdWNjZXNzOiBmYWxzZQorUEFTUzogMAorVGVzdGluZyBodHRwOi8v
MTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhw
P3JlZGlyZWN0LXByZWZsaWdodD1mYWxzZSYgIHVybD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1s
aHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dp
JiAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luPSomICBhY2Nlc3MtY29udHJvbC1hbGxvdy1o
ZWFkZXJzPXgtd2Via2l0CitFeHBlY3Rpbmcgc3VjY2VzczogZmFsc2UKK1BBU1M6IDAKKwoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9h
Y2Nlc3MtY29udHJvbC1hbmQtcmVkaXJlY3RzLWFzeW5jLWV4cGVjdGVkLnR4dApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250cm9sLWFuZC1yZWRpcmVjdHMtYXN5bmMuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2Fj
Y2Vzcy1jb250cm9sLWFuZC1yZWRpcmVjdHMtYXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtYW5kLXJl
ZGlyZWN0cy1hc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOSBAQAorPHA+VGVz
dHMgdGhhdCBhc3luY2hyb25vdXMgWE1MSHR0cFJlcXVlc3RzIGhhbmRsZSByZWRpcmVjdHMgYWNj
b3JkaW5nIHRvIHRoZSBDT1JTIHN0YW5kYXJkLjwvcD4KKworPHByZSBpZD0iY29uc29sZSI+PC9w
cmU+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUobWVzc2FnZSArICdcbicpKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdEFzeW5j
KHVybCwgZm9yY2VQcmVmbGlnaHQsIGV4cGVjdFN1Y2Nlc3MpIHsKKyAgICBsb2coIlRlc3Rpbmcg
IiArIHVybCk7CisgICAgbG9nKCJFeHBlY3Rpbmcgc3VjY2VzczogIiArIGV4cGVjdFN1Y2Nlc3Mp
OworCisgICAgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oIkdFVCIs
IHVybCwgdHJ1ZSk7CisgICAgaWYgKGZvcmNlUHJlZmxpZ2h0KQorICAgICAgICB4aHIuc2V0UmVx
dWVzdEhlYWRlcigieC13ZWJraXQiLCAiZm9vIik7CisKKyAgICB4aHIub25sb2FkID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIGxvZygoZXhwZWN0U3VjY2VzcyA/ICJQQVNTIiA6ICJGQUlMIikgKyAi
OiAiICsgeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgIG5leHRUZXN0KCk7CisgICAgfQorICAg
IHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygoZXhwZWN0U3VjY2VzcyA/
ICJGQUlMIiA6ICJQQVNTIikgKyAiOiAiICsgeGhyLnN0YXR1cyk7CisgICAgICAgIG5leHRUZXN0
KCk7CisgICAgfQorICAgIHhoci5zZW5kKG51bGwpOworfQorCit2YXIgc2ltcGxlID0gZmFsc2U7
Cit2YXIgcHJlZmxpZ2h0ID0gdHJ1ZTsKK3ZhciBzdWNjZWVkcyA9IHRydWU7Cit2YXIgZmFpbHMg
PSBmYWxzZTsKKwordmFyIHRlc3RzID0gWworLy8gMSkgVGVzdCBzaW1wbGUgc2FtZSBvcmlnaW4g
cmVxdWVzdHMgdGhhdCByZWNlaXZlIGNyb3NzIG9yaWdpbiByZWRpcmVjdHMuCisKKy8vIFJlcXVl
c3QgcmVjZWl2ZXMgYSBjcm9zcy1vcmlnaW4gcmVkaXJlY3QgcmVzcG9uc2Ugd2l0aG91dCBDT1JT
IGhlYWRlcnMuIFRoZSByZWRpcmVjdCByZXNwb25zZSBmYWlscyB0aGUgYWNjZXNzIGNoZWNrLgor
WyJyZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHA/dXJsPWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94
bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ctc3Rhci5j
Z2kiLAorICBzaW1wbGUsIGZhaWxzXSwKKworLy8gUmVxdWVzdCByZWNlaXZlcyBhIGNyb3NzLW9y
aWdpbiByZWRpcmVjdCByZXNwb25zZSB3aXRoIENPUlMgaGVhZGVycy4gVGhlIHJlZGlyZWN0IHJl
c3BvbnNlIHBhc3NlcyB0aGUgYWNjZXNzIGNoZWNrLAorLy8gYnV0ICB0aGUgcmVzb3VyY2UgcmVz
cG9uc2UgZmFpbHMgaXRzIGFjY2VzcyBjaGVjayBiZWNhdXNlIHRoZSBzZWN1cml0eSBvcmlnaW4g
aXMgYSBnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllciBhZnRlcgorLy8gdGhlIHJlZGlyZWN0IGFu
ZCB0aGUgc2FtZSBvcmlnaW4gWEhSIGhhcyAnYWxsb3dDcmVkZW50aWFscycgdHJ1ZS4KK1sicmVz
b3VyY2VzL3JlZGlyZWN0LWNvcnMucGhwP3VybD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0
cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dpJlwK
KyAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCZcCisg
IGFjY2Vzcy1jb250cm9sLWFsbG93LWNyZWRlbnRpYWxzPXRydWUiLAorICBzaW1wbGUsIGZhaWxz
XSwKKworLy8gU2FtZSBhcyBhYm92ZSwgYnV0IHRvIGEgbGVzcyBwZXJtaXNzaXZlIHJlc291cmNl
IHRoYXQgb25seSBhbGxvd3MgdGhlIHJlcXVlc3Rpbmcgb3JpZ2luLgorWyJyZXNvdXJjZXMvcmVk
aXJlY3QtY29ycy5waHA/dXJsPWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9y
ZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3cuY2dpJlwKKyAgYWNjZXNzLWNvbnRy
b2wtYWxsb3ctb3JpZ2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCZcCisgIGFjY2Vzcy1jb250cm9s
LWFsbG93LWNyZWRlbnRpYWxzPXRydWUiLAorICBzaW1wbGUsIGZhaWxzXSwKKworLy8gMikgVGVz
dCBzaW1wbGUgY3Jvc3Mgb3JpZ2luIHJlcXVlc3RzIHRoYXQgcmVjZWl2ZSByZWRpcmVjdHMuCisK
Ky8vIFJlY2VpdmVzIGEgcmVkaXJlY3QgcmVzcG9uc2Ugd2l0aG91dCBDT1JTIGhlYWRlcnMuIFRo
ZSByZWRpcmVjdCByZXNwb25zZSBmYWlscyB0aGUgYWNjZXNzIGNoZWNrLgorWyJodHRwOi8vMTI3
LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhwP3Vy
bD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1j
b250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dpIiwKKyAgc2ltcGxlLCBmYWlsc10sCisKKy8vIFJl
Y2VpdmVzIGEgcmVkaXJlY3QgcmVzcG9uc2Ugd2l0aCBDT1JTIGhlYWRlcnMuIFRoZSByZWRpcmVj
dCByZXNwb25zZSBwYXNzZXMgdGhlIGFjY2VzcyBjaGVjayBhbmQgdGhlIHJlc291cmNlIHJlc3Bv
bnNlCisvLyBwYXNzZXMgdGhlIGFjY2VzcyBjaGVjay4KK1siaHR0cDovLzEyNy4wLjAuMTo4MDAw
L3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9aHR0cDovLzEy
Ny4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1iYXNp
Yy1hbGxvdy1zdGFyLmNnaSZcCisgIGFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbj1odHRwOi8v
bG9jYWxob3N0OjgwMDAiLAorICBzaW1wbGUsIHN1Y2NlZWRzXSwKKworLy8gUmVjZWl2ZXMgYSBy
ZWRpcmVjdCByZXNwb25zZSB3aXRoIGEgVVJMIGNvbnRhaW5pbmcgdGhlIHVzZXJpbmZvIHByb2R1
Y3Rpb24uCitbImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMv
cmVkaXJlY3QtY29ycy5waHA/dXJsPWh0dHA6Ly91c2VybmFtZTpwYXNzd29yZEAxMjcuMC4wLjE6
ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ct
c3Rhci5jZ2kmXAorICBhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49aHR0cDovL2xvY2FsaG9z
dDo4MDAwIiwKKyAgc2ltcGxlLCBmYWlsc10sCisKKy8vIFJlY2VpdmVzIGEgcmVkaXJlY3QgcmVz
cG9uc2Ugd2l0aCBhIFVSTCB3aXRoIGFuIHVuc3VwcG9ydGVkIHNjaGVtZS4KK1siaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91
cmw9Zm9vOi8vYmFyLmNnaSZcCisgIGFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbj1odHRwOi8v
bG9jYWxob3N0OjgwMDAiLAorICBzaW1wbGUsIGZhaWxzXSwKKworLy8gMykgVGVzdCBwcmVmbGln
aHRlZCBjcm9zcyBvcmlnaW4gcmVxdWVzdHMgdGhhdCByZWNlaXZlIHJlZGlyZWN0cy4KKworLy8g
UmVjZWl2ZXMgYSByZWRpcmVjdCByZXNwb25zZSB0byB0aGUgcHJlZmxpZ2h0IHJlcXVlc3QgYW5k
IGZhaWxzLgorWyJodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2Vz
L3JlZGlyZWN0LWNvcnMucGhwP3JlZGlyZWN0LXByZWZsaWdodD10cnVlJlwKKyAgdXJsPWh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wt
YmFzaWMtYWxsb3ctc3Rhci5jZ2kmXAorICBhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49KiIs
CisgIHByZWZsaWdodCwgZmFpbHNdLAorCisvLyBTdWNjZXNzZnVsIHByZWZsaWdodCBhbmQgcmVj
ZWl2ZXMgYSByZWRpcmVjdCByZXNwb25zZSB0byB0aGUgYWN0dWFsIHJlcXVlc3QgYW5kIGZhaWxz
LgorWyJodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGly
ZWN0LWNvcnMucGhwP3JlZGlyZWN0LXByZWZsaWdodD1mYWxzZSZcCisgIHVybD1odHRwOi8vMTI3
LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9sLWJhc2lj
LWFsbG93LXN0YXIuY2dpJlwKKyAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luPSomXAorICBh
Y2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzPXgtd2Via2l0IiwKKyAgcHJlZmxpZ2h0LCBmYWls
c10sCitdCisKK3ZhciBjdXJyZW50VGVzdCA9IDA7CisKK2Z1bmN0aW9uIG5leHRUZXN0KCkgewor
ICAgIGlmIChjdXJyZW50VGVzdCA8IHRlc3RzLmxlbmd0aCkKKyAgICAgICAgcnVuVGVzdEFzeW5j
LmFwcGx5KG51bGwsIHRlc3RzW2N1cnJlbnRUZXN0KytdKTsKKyAgICBlbHNlIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKK30KKworbmV4dFRlc3QoKTsKKzwvc2NyaXB0PgoKUHJvcGVydHkgY2hhbmdlcyBv
bjogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1h
bmQtcmVkaXJlY3RzLWFzeW5jLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQog
ICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNv
dXJjZXMvcmVkaXJlY3QtY29ycy5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHAJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9y
ZWRpcmVjdC1jb3JzLnBocAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBAQAorPD9waHAKKyAg
ICAkdXJsID0gJF9HRVRbJ3VybCddOworICAgICRyZWRpcmVjdF9wcmVmbGlnaHQgPSAkX0dFVFsn
cmVkaXJlY3QtcHJlZmxpZ2h0J107CisgICAgJGFjY2Vzc19jb250cm9sX2FsbG93X29yaWdpbiA9
ICRfR0VUWydhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW4nXTsKKyAgICAkYWNjZXNzX2NvbnRy
b2xfYWxsb3dfY3JlZGVudGlhbHMgPSAkX0dFVFsnYWNjZXNzLWNvbnRyb2wtYWxsb3ctY3JlZGVu
dGlhbHMnXTsKKyAgICAkYWNjZXNzX2NvbnRyb2xfYWxsb3dfaGVhZGVycyA9ICRfR0VUWydhY2Nl
c3MtY29udHJvbC1hbGxvdy1oZWFkZXJzJ107CisKKyAgICBpZiAoJF9TRVJWRVJbJ1JFUVVFU1Rf
TUVUSE9EJ10gPT0gIk9QVElPTlMiKSB7CisgICAgICAgIGlmICgkcmVkaXJlY3RfcHJlZmxpZ2h0
ID09ICJ0cnVlIikgeworICAgICAgICAgICAgaGVhZGVyKCJIVFRQLzEuMSAzMDIiKTsKKyAgICAg
ICAgICAgIGhlYWRlcigiTG9jYXRpb246ICR1cmwiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGhlYWRlcigiSFRUUC8xLjEgMjAwIik7CisgICAgICAgIH0KKyAgICAg
ICAgaGVhZGVyKCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzOiBHRVQiKTsKKyAgICAgICAg
aGVhZGVyKCJBY2Nlc3MtQ29udHJvbC1NYXgtQWdlOiAxIik7CisgICAgfSBlbHNlIGlmICgkX1NF
UlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PSAiR0VUIikgeworICAgICAgICBoZWFkZXIoIkhUVFAv
MS4xIDMwMiIpOworICAgICAgICBoZWFkZXIoIkxvY2F0aW9uOiAkdXJsIik7CisgICAgfQorICAg
IGlmICghaXNfbnVsbCgkYWNjZXNzX2NvbnRyb2xfYWxsb3dfb3JpZ2luKSkKKyAgICAgICAgaGVh
ZGVyKCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW46ICRhY2Nlc3NfY29udHJvbF9hbGxvd19v
cmlnaW4iKTsKKyAgICBpZiAoIWlzX251bGwoJGFjY2Vzc19jb250cm9sX2FsbG93X2NyZWRlbnRp
YWxzKSkKKyAgICAgICAgaGVhZGVyKCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFsczog
JGFjY2Vzc19jb250cm9sX2FsbG93X2NyZWRlbnRpYWxzIik7CisgICAgaWYgKCFpc19udWxsKCRh
Y2Nlc3NfY29udHJvbF9hbGxvd19oZWFkZXJzKSkKKyAgICAgICAgaGVhZGVyKCJBY2Nlc3MtQ29u
dHJvbC1BbGxvdy1IZWFkZXJzOiAkYWNjZXNzX2NvbnRyb2xfYWxsb3dfaGVhZGVycyIpOworPz4K
</data>
<flag name="review"
          id="137170"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133508</attachid>
            <date>2012-03-23 10:30:53 -0700</date>
            <delta_ts>2012-03-26 23:15:16 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>aaa.txt</filename>
            <type>text/plain</type>
            <size>25050</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTg3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAzLTIzICBCaWxsIEJ1
ZGdlICA8YmJ1ZGdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBjcm9zcy1vcmlnaW4gWE1MSHR0
cFJlcXVlc3QgZG9lc24ndCB3b3JrIHdpdGggcmVkaXJlY3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NjAwCisKKyAgICAgICAgQ2hhbmdlcyBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXIgdG8gZm9sbG93IHRoZSBDT1JTIHJlZGlyZWN0IHN0ZXBzIHdo
ZW4KKyAgICAgICAgYXN5bmNocm9ub3VzbHkgbG9hZGluZyBhIGNyb3NzIG9yaWdpbiByZXF1ZXN0
IHdpdGggYWNjZXNzIGNvbnRyb2wuIFN5bmNocm9ub3VzCisgICAgICAgIGxvYWRzIHNob3VsZCBu
b3QgYmUgYWZmZWN0ZWQuIEFsc28gYWRkcyBtZXRob2RzIHRvIFJlc291cmNlUmVxdWVzdEJhc2Ug
dG8KKyAgICAgICAgY2xlYXIgc3BlY2lhbCByZXF1ZXN0IGhlYWRlcnMgdGhhdCBhcmVuJ3QgYWxs
b3dlZCB3aGVuIHVzaW5nIGFjY2VzcyBjb250cm9sLgorICAgICAgICBGb2xsb3dzIHRoZSBDT1JT
IHNwZWMgYXMgZGVzY3JpYmVkIGluIHRoZSBMYXRlc3QgRWRpdG9yIERyYWZ0IGF0OgorICAgICAg
ICBodHRwOi8vd3d3LnczLm9yZy9UUi9jb3JzLworCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtYW5kLXJlZGlyZWN0cy1hc3luYy5odG1sCisK
KyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAg
KiBsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaDoKKwogMjAxMi0wMy0yMyAgU2FtaSBLeW9zdGlsYSAg
PHNreW9zdGlsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXVzZSBidWZmZXIgYWxsb2NhdGlv
biBpZiBjYW52YXMgc2l6ZSBkb2VzIG5vdCBjaGFuZ2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiAxMTE2
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQpAQCAtNzQsNiArNzQsNyBAQCBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OkRvY3VtZW50VGhyZWFkCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwg
bV9vcHRpb25zKG9wdGlvbnMpCiAgICAgLCBtX3NhbWVPcmlnaW5SZXF1ZXN0KHNlY3VyaXR5T3Jp
Z2luKCktPmNhblJlcXVlc3QocmVxdWVzdC51cmwoKSkpCisgICAgLCBtX3NpbXBsZVJlcXVlc3Qo
dHJ1ZSkKICAgICAsIG1fYXN5bmMoYmxvY2tpbmdCZWhhdmlvciA9PSBMb2FkQXN5bmNocm9ub3Vz
bHkpCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICAsIG1fcHJlZmxpZ2h0UmVxdWVzdElkZW50
aWZpZXIoMCkKQEAgLTg0LDYgKzg1LDExIEBAIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9j
dW1lbnRUaHJlYWQKICAgICAvLyBTZXR0aW5nIGFuIG91dGdvaW5nIHJlZmVyZXIgaXMgb25seSBz
dXBwb3J0ZWQgaW4gdGhlIGFzeW5jIGNvZGUgcGF0aC4KICAgICBBU1NFUlQobV9hc3luYyB8fCBy
ZXF1ZXN0Lmh0dHBSZWZlcnJlcigpLmlzRW1wdHkoKSk7CiAKKyAgICBtYWtlUmVxdWVzdChyZXF1
ZXN0KTsKK30KKwordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VSZXF1ZXN0KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKICAgICBpZiAobV9zYW1lT3JpZ2luUmVx
dWVzdCB8fCBtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IEFsbG93Q3Jvc3NP
cmlnaW5SZXF1ZXN0cykgewogICAgICAgICBsb2FkUmVxdWVzdChyZXF1ZXN0LCBEb1NlY3VyaXR5
Q2hlY2spOwogICAgICAgICByZXR1cm47CkBAIC05Myw3ICs5OSw3IEBAIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWQKICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoUmVz
b3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCByZXF1ZXN0LnVybCgpLnN0
cmluZygpLCAiQ3Jvc3Mgb3JpZ2luIHJlcXVlc3RzIGFyZSBub3Qgc3VwcG9ydGVkLiIpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIEFTU0VSVChtX29wdGlvbnMuY3Jvc3NP
cmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpOwogCiAgICAgT3duUHRyPFJl
c291cmNlUmVxdWVzdD4gY3Jvc3NPcmlnaW5SZXF1ZXN0ID0gYWRvcHRQdHIobmV3IFJlc291cmNl
UmVxdWVzdChyZXF1ZXN0KSk7CkBAIC0xMDIsNiArMTA4LDcgQEAgRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjpEb2N1bWVudFRocmVhZAogICAgIGlmICgobV9vcHRpb25zLnByZWZsaWdodFBvbGlj
eSA9PSBDb25zaWRlclByZWZsaWdodCAmJiBpc1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVz
dChjcm9zc09yaWdpblJlcXVlc3QtPmh0dHBNZXRob2QoKSwgY3Jvc3NPcmlnaW5SZXF1ZXN0LT5o
dHRwSGVhZGVyRmllbGRzKCkpKSB8fCBtX29wdGlvbnMucHJlZmxpZ2h0UG9saWN5ID09IFByZXZl
bnRQcmVmbGlnaHQpCiAgICAgICAgIG1ha2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3Qo
KmNyb3NzT3JpZ2luUmVxdWVzdCk7CiAgICAgZWxzZSB7CisgICAgICAgIG1fc2ltcGxlUmVxdWVz
dCA9IGZhbHNlOwogICAgICAgICBtX2FjdHVhbFJlcXVlc3QgPSBjcm9zc09yaWdpblJlcXVlc3Qu
cmVsZWFzZSgpOwogCiAgICAgICAgIGlmIChDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hl
OjpzaGFyZWQoKS5jYW5Ta2lwUHJlZmxpZ2h0KHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCks
IG1fYWN0dWFsUmVxdWVzdC0+dXJsKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCBtX2Fj
dHVhbFJlcXVlc3QtPmh0dHBNZXRob2QoKSwgbV9hY3R1YWxSZXF1ZXN0LT5odHRwSGVhZGVyRmll
bGRzKCkpKQpAQCAtMTY3LDEzICsxNzQsNDggQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OnJlZGlyZWN0UgogICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgQVNTRVJUX1VOVVNFRChy
ZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7CiAKLSAgICBpZiAoIWlzQWxsb3dlZFJl
ZGlyZWN0KHJlcXVlc3QudXJsKCkpKSB7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI+IHByb3RlY3QodGhpcyk7CisgICAgUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcj4gcHJvdGVjdCh0aGlzKTsKKyAgICBib29sIGFsbG93UmVkaXJlY3QgPSBmYWxzZTsKKyAg
ICBpZiAobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBVc2VBY2Nlc3NDb250
cm9sKSB7CisgICAgICAgIC8vIFdoZW4gdXNpbmcgYWNjZXNzIGNvbnRyb2wsIG9ubHkgc2ltcGxl
IGNyb3NzIG9yaWdpbiByZXF1ZXN0cyBhcmUgYWxsb3dlZCB0byByZWRpcmVjdC4gVGhlIG5ldyBy
ZXF1ZXN0IFVSTCBtdXN0IGhhdmUgYSBzdXBwb3J0ZWQKKyAgICAgICAgLy8gc2NoZW1lIGFuZCBu
b3QgY29udGFpbiB0aGUgdXNlcmluZm8gcHJvZHVjdGlvbi4gSW4gYWRkaXRpb24sIHRoZSByZWRp
cmVjdCByZXNwb25zZSBtdXN0IHBhc3MgdGhlIGFjY2VzcyBjb250cm9sIGNoZWNrLgorICAgICAg
ICBpZiAobV9zaW1wbGVSZXF1ZXN0KSB7CisgICAgICAgICAgICBTdHJpbmcgYWNjZXNzQ29udHJv
bEVycm9yRGVzY3JpcHRpb247CisgICAgICAgICAgICBhbGxvd1JlZGlyZWN0ID0gU2NoZW1lUmVn
aXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNDT1JTRW5hYmxlZChyZXF1ZXN0LnVybCgpLnBy
b3RvY29sKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcmVxdWVzdC51cmwoKS51
c2VyKCkuaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcmVxdWVzdC51
cmwoKS5wYXNzKCkuaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcGFz
c2VzQWNjZXNzQ29udHJvbENoZWNrKHJlZGlyZWN0UmVzcG9uc2UsIG1fb3B0aW9ucy5hbGxvd0Ny
ZWRlbnRpYWxzLCBzZWN1cml0eU9yaWdpbigpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlv
bik7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgYWxsb3dSZWRpcmVjdCA9IGlzQWxs
b3dlZFJlZGlyZWN0KHJlcXVlc3QudXJsKCkpOworCisgICAgaWYgKGFsbG93UmVkaXJlY3QpIHsK
KyAgICAgICAgaWYgKG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPT0gVXNlQWNj
ZXNzQ29udHJvbCkgeworICAgICAgICAgICAgaWYgKG1fcmVzb3VyY2UpCisgICAgICAgICAgICAg
ICAgY2xlYXJSZXNvdXJjZSgpOworCisgICAgICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IG9yaWdpbmFsT3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcocmVkaXJl
Y3RSZXNwb25zZS51cmwoKSk7CisgICAgICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHJl
cXVlc3RPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhyZXF1ZXN0LnVy
bCgpKTsKKyAgICAgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IFVSTCBvcmlnaW4gaXMgbm90IHNh
bWUgb3JpZ2luIHdpdGggdGhlIG9yaWdpbmFsIFVSTCBvcmlnaW4sIHNldCBzb3VyY2Ugb3JpZ2lu
IHRvIGEgZ2xvYmFsbHkgdW5pcXVlIGlkZW50aWZpZXIuCisgICAgICAgICAgICBpZiAoIW9yaWdp
bmFsT3JpZ2luLT5pc1NhbWVTY2hlbWVIb3N0UG9ydChyZXF1ZXN0T3JpZ2luLmdldCgpKSkKKyAg
ICAgICAgICAgICAgICBtX29wdGlvbnMuc2VjdXJpdHlPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlVW5pcXVlKCk7CisgICAgICAgICAgICBtX3NhbWVPcmlnaW5SZXF1ZXN0ID0gc2VjdXJp
dHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgpKTsKKworICAgICAgICAgICAgLy8g
UmVtb3ZlIGFueSBoZWFkZXJzIHRoYXQgbWF5IGhhdmUgYmVlbiBhZGRlZCBieSB0aGUgbmV0d29y
ayBsYXllciB0aGF0IGNhdXNlIGFjY2VzcyBjb250cm9sIHRvIGZhaWwuCisgICAgICAgICAgICBy
ZXF1ZXN0LmNsZWFySFRUUENvbnRlbnRUeXBlKCk7CisgICAgICAgICAgICByZXF1ZXN0LmNsZWFy
SFRUUFJlZmVycmVyKCk7CisgICAgICAgICAgICByZXF1ZXN0LmNsZWFySFRUUE9yaWdpbigpOwor
ICAgICAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBVc2VyQWdlbnQoKTsKKyAgICAgICAgICAgIHJl
cXVlc3QuY2xlYXJIVFRQQWNjZXB0KCk7CisgICAgICAgICAgICBtYWtlUmVxdWVzdChyZXF1ZXN0
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIG5vdCB1c2luZyBhY2Nlc3Mg
Y29udHJvbCwgYWxsb3cgY2xpZW50cyB0byBhdWRpdCB0aGUgcmVkaXJlY3QuCisgICAgICAgICAg
ICBpZiAobV9jbGllbnQtPmlzRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KCkpCisgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Kj4o
bV9jbGllbnQpLT53aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgewogICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbFJlZGlyZWN0
Q2hlY2soKTsKICAgICAgICAgcmVxdWVzdCA9IFJlc291cmNlUmVxdWVzdCgpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChtX2NsaWVudC0+aXNEb2N1bWVudFRocmVhZGFibGVMb2FkZXJDbGll
bnQoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNs
aWVudCo+KG1fY2xpZW50KS0+d2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9u
c2UpOwogICAgIH0KIH0KIApAQCAtMzc3LDkgKzQxOSw2IEBAIGJvb2wgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjppc0FsbG93ZWQKICAgICBpZiAobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVz
dFBvbGljeSA9PSBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHMpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gaW1wbGVtZW50IGFjY2VzcyBjb250cm9sIGZv
ciBlYWNoIHJlZGlyZWN0LiBUaGlzIHdpbGwgcmVxdWlyZSBzb21lIHJlZmFjdG9yaW5nIHRob3Vn
aCwgYmVjYXVzZSB0aGUgY29kZQotICAgIC8vIHRoYXQgcHJvY2Vzc2VzIHJlZGlyZWN0cyBkb2Vz
bid0IGtub3cgYWJvdXQgYWNjZXNzIGNvbnRyb2wgYW5kIGV4cGVjdHMgYSBzeW5jaHJvbm91cyBh
bnN3ZXIgZnJvbSBpdHMgY2xpZW50IGFib3V0IHdoZXRoZXIKLSAgICAvLyBhIHJlZGlyZWN0IHNo
b3VsZCBwcm9jZWVkLgogICAgIHJldHVybiBtX3NhbWVPcmlnaW5SZXF1ZXN0ICYmIHNlY3VyaXR5
T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gMTExNjgyKQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCkBAIC04OSw2ICs4OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pc2hUaW1lKTsKICAgICAgICAgdm9pZCBk
aWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdm9pZCBtYWtlUmVxdWVzdChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKICAgICAgICAgdm9pZCBtYWtlU2ltcGxlQ3Jvc3NPcmln
aW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCk7CiAgICAgICAg
IHZvaWQgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsKICAgICAgICAgdm9pZCBwcmVmbGlnaHRTdWNjZXNzKCk7
CkBAIC0xMDQsNiArMTA1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBEb2N1bWVu
dCogbV9kb2N1bWVudDsKICAgICAgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgbV9vcHRpb25z
OwogICAgICAgICBib29sIG1fc2FtZU9yaWdpblJlcXVlc3Q7CisgICAgICAgIGJvb2wgbV9zaW1w
bGVSZXF1ZXN0OwogICAgICAgICBib29sIG1fYXN5bmM7CiAgICAgICAgIE93blB0cjxSZXNvdXJj
ZVJlcXVlc3Q+IG1fYWN0dWFsUmVxdWVzdDsgIC8vIG5vbi1udWxsIGR1cmluZyBBY2Nlc3MgQ29u
dHJvbCBwcmVmbGlnaHQgY2hlY2tzCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAkocmV2aXNpb24gMTEx
NjgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RC
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNTEsNiArMjUxLDE2IEBA
IHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQQXV0aG8KICAgICAgICAgbV9wbGF0
Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9CiAKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6Y2xlYXJIVFRQQ29udGVudFR5cGUoKQoreworICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgp
OyAKKworICAgIG1faHR0cEhlYWRlckZpZWxkcy5yZW1vdmUoIkNvbnRlbnQtVHlwZSIpOworCisg
ICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKKyAgICAgICAgbV9wbGF0Zm9y
bVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7Cit9CisKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6
Y2xlYXJIVFRQUmVmZXJyZXIoKQogewogICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOyAKQEAg
LTI3MSw2ICsyODEsMjYgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBPcmln
aQogICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAordm9pZCBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBVc2VyQWdlbnQoKQoreworICAgIHVwZGF0ZVJl
c291cmNlUmVxdWVzdCgpOyAKKworICAgIG1faHR0cEhlYWRlckZpZWxkcy5yZW1vdmUoIlVzZXIt
QWdlbnQiKTsKKworICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCisgICAg
ICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworfQorCit2b2lkIFJlc291cmNl
UmVxdWVzdEJhc2U6OmNsZWFySFRUUEFjY2VwdCgpCit7CisgICAgdXBkYXRlUmVzb3VyY2VSZXF1
ZXN0KCk7IAorCisgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZSgiQWNjZXB0Iik7CisKKyAg
ICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQorICAgICAgICBtX3BsYXRmb3Jt
UmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKK30KKwogdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpz
ZXRSZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheShjb25zdCBT
dHJpbmcmIGVuY29kaW5nMSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZzIsIGNvbnN0IFN0cmluZyYg
ZW5jb2RpbmczKQogewogICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOyAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFz
ZS5oCShyZXZpc2lvbiAxMTE2ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2Ft
LndlaW5pZ0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC04OCw3ICs4OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTdHJpbmcgaHR0
cENvbnRlbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gaHR0cEhlYWRlckZpZWxkKCJDb250ZW50LVR5
cGUiKTsgIH0KICAgICAgICAgdm9pZCBzZXRIVFRQQ29udGVudFR5cGUoY29uc3QgU3RyaW5nJiBo
dHRwQ29udGVudFR5cGUpIHsgc2V0SFRUUEhlYWRlckZpZWxkKCJDb250ZW50LVR5cGUiLCBodHRw
Q29udGVudFR5cGUpOyB9Ci0gICAgICAgIAorICAgICAgICB2b2lkIGNsZWFySFRUUENvbnRlbnRU
eXBlKCk7CisKICAgICAgICAgU3RyaW5nIGh0dHBSZWZlcnJlcigpIGNvbnN0IHsgcmV0dXJuIGh0
dHBIZWFkZXJGaWVsZCgiUmVmZXJlciIpOyB9CiAgICAgICAgIHZvaWQgc2V0SFRUUFJlZmVycmVy
KGNvbnN0IFN0cmluZyYgaHR0cFJlZmVycmVyKSB7IHNldEhUVFBIZWFkZXJGaWVsZCgiUmVmZXJl
ciIsIGh0dHBSZWZlcnJlcik7IH0KICAgICAgICAgdm9pZCBjbGVhckhUVFBSZWZlcnJlcigpOwpA
QCAtOTksOSArMTAwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTdHJpbmcg
aHR0cFVzZXJBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIGh0dHBIZWFkZXJGaWVsZCgiVXNlci1BZ2Vu
dCIpOyB9CiAgICAgICAgIHZvaWQgc2V0SFRUUFVzZXJBZ2VudChjb25zdCBTdHJpbmcmIGh0dHBV
c2VyQWdlbnQpIHsgc2V0SFRUUEhlYWRlckZpZWxkKCJVc2VyLUFnZW50IiwgaHR0cFVzZXJBZ2Vu
dCk7IH0KKyAgICAgICAgdm9pZCBjbGVhckhUVFBVc2VyQWdlbnQoKTsKIAogICAgICAgICBTdHJp
bmcgaHR0cEFjY2VwdCgpIGNvbnN0IHsgcmV0dXJuIGh0dHBIZWFkZXJGaWVsZCgiQWNjZXB0Iik7
IH0KICAgICAgICAgdm9pZCBzZXRIVFRQQWNjZXB0KGNvbnN0IFN0cmluZyYgaHR0cEFjY2VwdCkg
eyBzZXRIVFRQSGVhZGVyRmllbGQoIkFjY2VwdCIsIGh0dHBBY2NlcHQpOyB9CisgICAgICAgIHZv
aWQgY2xlYXJIVFRQQWNjZXB0KCk7CiAKICAgICAgICAgdm9pZCBzZXRSZXNwb25zZUNvbnRlbnRE
aXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheShjb25zdCBTdHJpbmcmIGVuY29kaW5nMSwg
Y29uc3QgU3RyaW5nJiBlbmNvZGluZzIgPSBTdHJpbmcoKSwgY29uc3QgU3RyaW5nJiBlbmNvZGlu
ZzMgPSBTdHJpbmcoKSk7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTg3MikKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAzLTIz
ICBCaWxsIEJ1ZGdlICA8YmJ1ZGdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBjcm9zcy1vcmln
aW4gWE1MSHR0cFJlcXVlc3QgZG9lc24ndCB3b3JrIHdpdGggcmVkaXJlY3QKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NjAwCisKKyAgICAgICAgQWRk
cyB0ZXN0cyB0byB2ZXJpZnkgdGhhdCBhbiBhc3luY2hyb25vdXMgWEhSIGxvYWQgdGhhdCByZWNl
aXZlcyBhIHJlZGlyZWN0CisgICAgICAgIHJlc3BvbnNlIGZvbGxvd3MgdGhlIENPUlMgcmVkaXJl
Y3Qgc3RlcHMuCisgICAgICAgIEZvbGxvd3MgdGhlIENPUlMgc3BlYyBhcyBkZXNjcmliZWQgaW4g
dGhlIExhdGVzdCBFZGl0b3IgRHJhZnQgYXQ6CisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RS
L2NvcnMvCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jb3JzLXJlZGlyZWN0LnBocDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hoci1jb3JzLXJlZGlyZWN0Lmh0bWw6
IFJlbW92ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29u
dHJvbC1hbmQtcmVkaXJlY3RzLWFzeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1hbmQtcmVkaXJlY3RzLWFz
eW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVz
b3VyY2VzL3JlZGlyZWN0LWNvcnMucGhwOiBBZGRlZC4KKwogMjAxMi0wMy0yMyAgU2FtaSBLeW9z
dGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXVzZSBidWZmZXIgYWxs
b2NhdGlvbiBpZiBjYW52YXMgc2l6ZSBkb2VzIG5vdCBjaGFuZ2UKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveGhyLWNvcnMtcmVkaXJlY3QuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hoci1jb3JzLXJlZGlyZWN0Lmh0bWwJ
KHJldmlzaW9uIDExMTY4MikKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveGhy
LWNvcnMtcmVkaXJlY3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBACi08aHRt
bD4KLTxoZWFkPgotPHNjcmlwdD4KLWlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
LSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0gICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwotfQotCi1mdW5jdGlvbiBsb2cobXNnKSB7Ci0gICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIpLmlubmVySFRNTCArPSBtc2cgKyAiPGJyPiI7
Ci19Ci0KLWZ1bmN0aW9uIHRlc3QoKSB7Ci0gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVz
dCgpOwotICAgIHZhciB1cmwgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3Jlc291
cmNlcy9jb3JzLXJlZGlyZWN0LnBocD9uby1jYWNoZSI7Ci0gICAgeGhyLm9wZW4oIkdFVCIsIHVy
bCwgZmFsc2UpOwotICAgIHRyeSB7Ci0gICAgICAgIHhoci5zZW5kKG51bGwpOwotCi0gICAgICAg
IGlmICh4aHIuc3RhdHVzID09IDIwMCkKLSAgICAgICAgICAgIGxvZygiUEFTUzogc3luYyBYSFIg
c3VjY2Vzc2Z1bCIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2coIkZBSUw6IHN5bmMg
WEhSIGZhaWxlZCIpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgbG9nKCJGQUlMOiBzeW5j
IFhIUiBmYWlsZWQiKTsKLSAgICB9Ci0KLSAgICB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsK
LSAgICB4aHIub3BlbigiR0VUIiwgdXJsLCB0cnVlKTsKLSAgICB4aHIub25yZWFkeXN0YXRlY2hh
bmdlZCA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgaWYgKHhoci5yZWFkeXN0YXRlID09IDQpIHsK
LSAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkKLSAgICAgICAgICAgICAgICBsb2co
IlBBU1M6IGFzeW5jIFhIUiBzdWNjZXNzZnVsIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbG9nKCJGQUlMOiBhc3luYyBYSFIgZmFpbGVkIik7Ci0gICAgICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgeGhyLm9uZXJy
b3IgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgbG9nKCJGQUlMOiBhc3luYyBYSFIgZmFpbGVkIik7
Ci0gICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci0gICAgfTsKLSAgICB4aHIuc2VuZChu
dWxsKTsKLX0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgotPHA+
Ci1UZXN0IHRoYXQgYSBjcm9zcy1vcmlnaW4gWEhSIGludm9sdmluZyByZWRpcmVjdHMgd29ya3Mg
Y29ycmVjdGx5LiBJZiB0aGlzIHRlc3QKLXBhc3NlcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
IFBBU1MgbWVzc2FnZXMuCi08L3A+Ci08cD4KLUN1cnJlbnRseSBub3Qgd29ya2luZywgc2VlIGh0
dHA6Ly93ZWJraXQub3JnL2IvNTc2MDAKLTwvcD4KLTxkaXYgaWQ9ImxvZyI+PC9kaXY+Ci08L2Jv
ZHk+Ci08L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291
cmNlcy9jb3JzLXJlZGlyZWN0LnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jb3JzLXJlZGlyZWN0LnBocAkocmV2aXNpb24gMTExNjgy
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY29ycy1yZWRp
cmVjdC5waHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMCwwIEBACi08P3BocAotaGVhZGVyKCJB
Y2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW46IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIpOwotaGVh
ZGVyKCJMb2NhdGlvbjogaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3Jlc291cmNlcy9l
bXB0eS5odG1sIik7Ci0/PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC9hY2Nlc3MtY29udHJvbC1hbmQtcmVkaXJlY3RzLWFzeW5jLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2FjY2Vzcy1j
b250cm9sLWFuZC1yZWRpcmVjdHMtYXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1hbmQt
cmVkaXJlY3RzLWFzeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBA
QAorVGVzdHMgdGhhdCBhc3luY2hyb25vdXMgWE1MSHR0cFJlcXVlc3RzIGhhbmRsZSByZWRpcmVj
dHMgYWNjb3JkaW5nIHRvIHRoZSBDT1JTIHN0YW5kYXJkLgorCitUZXN0aW5nIHJlc291cmNlcy9y
ZWRpcmVjdC1jb3JzLnBocD91cmw9aHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0
L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1iYXNpYy1hbGxvdy1zdGFyLmNnaQorRXhwZWN0aW5n
IHN1Y2Nlc3M6IGZhbHNlCitQQVNTOiAwCitUZXN0aW5nIHJlc291cmNlcy9yZWRpcmVjdC1jb3Jz
LnBocD91cmw9aHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9h
Y2Nlc3MtY29udHJvbC1iYXNpYy1hbGxvdy1zdGFyLmNnaSYgIGFjY2Vzcy1jb250cm9sLWFsbG93
LW9yaWdpbj1odHRwOi8vbG9jYWxob3N0OjgwMDAmICBhY2Nlc3MtY29udHJvbC1hbGxvdy1jcmVk
ZW50aWFscz10cnVlCitFeHBlY3Rpbmcgc3VjY2VzczogZmFsc2UKK1BBU1M6IDAKK1Rlc3Rpbmcg
cmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhwP3VybD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1s
aHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LmNnaSYgIGFj
Y2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbj1odHRwOi8vbG9jYWxob3N0OjgwMDAmICBhY2Nlc3Mt
Y29udHJvbC1hbGxvdy1jcmVkZW50aWFscz10cnVlCitFeHBlY3Rpbmcgc3VjY2VzczogZmFsc2UK
K1BBU1M6IDAKK1Rlc3RpbmcgaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jl
c291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9aHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0
dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1iYXNpYy1hbGxvdy1zdGFyLmNnaQor
RXhwZWN0aW5nIHN1Y2Nlc3M6IGZhbHNlCitQQVNTOiAwCitUZXN0aW5nIGh0dHA6Ly8xMjcuMC4w
LjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHA/dXJsPWh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRy
b2wtYmFzaWMtYWxsb3ctc3Rhci5jZ2kmICBhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49aHR0
cDovL2xvY2FsaG9zdDo4MDAwCitFeHBlY3Rpbmcgc3VjY2VzczogdHJ1ZQorRkFJTDogMAorVGVz
dGluZyBodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGly
ZWN0LWNvcnMucGhwP3VybD1odHRwOi8vdXNlcm5hbWU6cGFzc3dvcmRAMTI3LjAuMC4xOjgwMDAv
eG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LXN0YXIu
Y2dpJiAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMAor
RXhwZWN0aW5nIHN1Y2Nlc3M6IGZhbHNlCitQQVNTOiAwCitUZXN0aW5nIGh0dHA6Ly8xMjcuMC4w
LjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHA/dXJsPWZv
bzovL2Jhci5jZ2kmICBhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49aHR0cDovL2xvY2FsaG9z
dDo4MDAwCitFeHBlY3Rpbmcgc3VjY2VzczogZmFsc2UKK1BBU1M6IDAKK1Rlc3RpbmcgaHR0cDov
LzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBo
cD9yZWRpcmVjdC1wcmVmbGlnaHQ9dHJ1ZSYgIHVybD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1s
aHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dp
JiAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luPSoKK0V4cGVjdGluZyBzdWNjZXNzOiBmYWxz
ZQorUEFTUzogMAorVGVzdGluZyBodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3Qv
cmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhwP3JlZGlyZWN0LXByZWZsaWdodD1mYWxzZSYgIHVy
bD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1j
b250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dpJiAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2lu
PSomICBhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzPXgtd2Via2l0CitFeHBlY3Rpbmcgc3Vj
Y2VzczogZmFsc2UKK1BBU1M6IDAKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1hbmQtcmVkaXJlY3RzLWFz
eW5jLWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYK
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250
cm9sLWFuZC1yZWRpcmVjdHMtYXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250cm9sLWFuZC1yZWRpcmVjdHMtYXN5
bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QvYWNjZXNzLWNvbnRyb2wtYW5kLXJlZGlyZWN0cy1hc3luYy5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwOSBAQAorPHA+VGVzdHMgdGhhdCBhc3luY2hyb25vdXMgWE1MSHR0cFJl
cXVlc3RzIGhhbmRsZSByZWRpcmVjdHMgYWNjb3JkaW5nIHRvIHRoZSBDT1JTIHN0YW5kYXJkLjwv
cD4KKworPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0
aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xl
JykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSArICdcbicpKTsK
K30KKworZnVuY3Rpb24gcnVuVGVzdEFzeW5jKHVybCwgZm9yY2VQcmVmbGlnaHQsIGV4cGVjdFN1
Y2Nlc3MpIHsKKyAgICBsb2coIlRlc3RpbmcgIiArIHVybCk7CisgICAgbG9nKCJFeHBlY3Rpbmcg
c3VjY2VzczogIiArIGV4cGVjdFN1Y2Nlc3MpOworCisgICAgeGhyID0gbmV3IFhNTEh0dHBSZXF1
ZXN0KCk7CisgICAgeGhyLm9wZW4oIkdFVCIsIHVybCwgdHJ1ZSk7CisgICAgaWYgKGZvcmNlUHJl
ZmxpZ2h0KQorICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigieC13ZWJraXQiLCAiZm9vIik7
CisKKyAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygoZXhwZWN0U3Vj
Y2VzcyA/ICJQQVNTIiA6ICJGQUlMIikgKyAiOiAiICsgeGhyLnJlc3BvbnNlVGV4dCk7CisgICAg
ICAgIG5leHRUZXN0KCk7CisgICAgfQorICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGxvZygoZXhwZWN0U3VjY2VzcyA/ICJGQUlMIiA6ICJQQVNTIikgKyAiOiAiICsgeGhy
LnN0YXR1cyk7CisgICAgICAgIG5leHRUZXN0KCk7CisgICAgfQorICAgIHhoci5zZW5kKG51bGwp
OworfQorCit2YXIgc2ltcGxlID0gZmFsc2U7Cit2YXIgcHJlZmxpZ2h0ID0gdHJ1ZTsKK3ZhciBz
dWNjZWVkcyA9IHRydWU7Cit2YXIgZmFpbHMgPSBmYWxzZTsKKwordmFyIHRlc3RzID0gWworLy8g
MSkgVGVzdCBzaW1wbGUgc2FtZSBvcmlnaW4gcmVxdWVzdHMgdGhhdCByZWNlaXZlIGNyb3NzIG9y
aWdpbiByZWRpcmVjdHMuCisKKy8vIFJlcXVlc3QgcmVjZWl2ZXMgYSBjcm9zcy1vcmlnaW4gcmVk
aXJlY3QgcmVzcG9uc2Ugd2l0aG91dCBDT1JTIGhlYWRlcnMuIFRoZSByZWRpcmVjdCByZXNwb25z
ZSBmYWlscyB0aGUgYWNjZXNzIGNoZWNrLgorWyJyZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHA/
dXJsPWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNz
LWNvbnRyb2wtYmFzaWMtYWxsb3ctc3Rhci5jZ2kiLAorICBzaW1wbGUsIGZhaWxzXSwKKworLy8g
UmVxdWVzdCByZWNlaXZlcyBhIGNyb3NzLW9yaWdpbiByZWRpcmVjdCByZXNwb25zZSB3aXRoIENP
UlMgaGVhZGVycy4gVGhlIHJlZGlyZWN0IHJlc3BvbnNlIHBhc3NlcyB0aGUgYWNjZXNzIGNoZWNr
LAorLy8gYnV0ICB0aGUgcmVzb3VyY2UgcmVzcG9uc2UgZmFpbHMgaXRzIGFjY2VzcyBjaGVjayBi
ZWNhdXNlIHRoZSBzZWN1cml0eSBvcmlnaW4gaXMgYSBnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmll
ciBhZnRlcgorLy8gdGhlIHJlZGlyZWN0IGFuZCB0aGUgc2FtZSBvcmlnaW4gWEhSIGhhcyAnYWxs
b3dDcmVkZW50aWFscycgdHJ1ZS4KK1sicmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhwP3VybD1o
dHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250
cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dpJlwKKyAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2lu
PWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCZcCisgIGFjY2Vzcy1jb250cm9sLWFsbG93LWNyZWRlbnRp
YWxzPXRydWUiLAorICBzaW1wbGUsIGZhaWxzXSwKKworLy8gU2FtZSBhcyBhYm92ZSwgYnV0IHRv
IGEgbGVzcyBwZXJtaXNzaXZlIHJlc291cmNlIHRoYXQgb25seSBhbGxvd3MgdGhlIHJlcXVlc3Rp
bmcgb3JpZ2luLgorWyJyZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHA/dXJsPWh0dHA6Ly8xMjcu
MC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMt
YWxsb3cuY2dpJlwKKyAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luPWh0dHA6Ly9sb2NhbGhv
c3Q6ODAwMCZcCisgIGFjY2Vzcy1jb250cm9sLWFsbG93LWNyZWRlbnRpYWxzPXRydWUiLAorICBz
aW1wbGUsIGZhaWxzXSwKKworLy8gMikgVGVzdCBzaW1wbGUgY3Jvc3Mgb3JpZ2luIHJlcXVlc3Rz
IHRoYXQgcmVjZWl2ZSByZWRpcmVjdHMuCisKKy8vIFJlY2VpdmVzIGEgcmVkaXJlY3QgcmVzcG9u
c2Ugd2l0aG91dCBDT1JTIGhlYWRlcnMuIFRoZSByZWRpcmVjdCByZXNwb25zZSBmYWlscyB0aGUg
YWNjZXNzIGNoZWNrLgorWyJodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVz
b3VyY2VzL3JlZGlyZWN0LWNvcnMucGhwP3VybD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0
cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dpIiwK
KyAgc2ltcGxlLCBmYWlsc10sCisKKy8vIFJlY2VpdmVzIGEgcmVkaXJlY3QgcmVzcG9uc2Ugd2l0
aCBDT1JTIGhlYWRlcnMuIFRoZSByZWRpcmVjdCByZXNwb25zZSBwYXNzZXMgdGhlIGFjY2VzcyBj
aGVjayBhbmQgdGhlIHJlc291cmNlIHJlc3BvbnNlCisvLyBwYXNzZXMgdGhlIGFjY2VzcyBjaGVj
ay4KK1siaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRp
cmVjdC1jb3JzLnBocD91cmw9aHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jl
c291cmNlcy9hY2Nlc3MtY29udHJvbC1iYXNpYy1hbGxvdy1zdGFyLmNnaSZcCisgIGFjY2Vzcy1j
b250cm9sLWFsbG93LW9yaWdpbj1odHRwOi8vbG9jYWxob3N0OjgwMDAiLAorICBzaW1wbGUsIHN1
Y2NlZWRzXSwKKworLy8gUmVjZWl2ZXMgYSByZWRpcmVjdCByZXNwb25zZSB3aXRoIGEgVVJMIGNv
bnRhaW5pbmcgdGhlIHVzZXJpbmZvIHByb2R1Y3Rpb24uCitbImh0dHA6Ly8xMjcuMC4wLjE6ODAw
MC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHA/dXJsPWh0dHA6Ly91
c2VybmFtZTpwYXNzd29yZEAxMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMv
YWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ctc3Rhci5jZ2kmXAorICBhY2Nlc3MtY29udHJvbC1h
bGxvdy1vcmlnaW49aHR0cDovL2xvY2FsaG9zdDo4MDAwIiwKKyAgc2ltcGxlLCBmYWlsc10sCisK
Ky8vIFJlY2VpdmVzIGEgcmVkaXJlY3QgcmVzcG9uc2Ugd2l0aCBhIFVSTCB3aXRoIGFuIHVuc3Vw
cG9ydGVkIHNjaGVtZS4KK1siaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jl
c291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9Zm9vOi8vYmFyLmNnaSZcCisgIGFjY2Vzcy1j
b250cm9sLWFsbG93LW9yaWdpbj1odHRwOi8vbG9jYWxob3N0OjgwMDAiLAorICBzaW1wbGUsIGZh
aWxzXSwKKworLy8gMykgVGVzdCBwcmVmbGlnaHRlZCBjcm9zcyBvcmlnaW4gcmVxdWVzdHMgdGhh
dCByZWNlaXZlIHJlZGlyZWN0cy4KKworLy8gUmVjZWl2ZXMgYSByZWRpcmVjdCByZXNwb25zZSB0
byB0aGUgcHJlZmxpZ2h0IHJlcXVlc3QgYW5kIGZhaWxzLgorWyJodHRwOi8vMTI3LjAuMC4xOjgw
MDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhwP3JlZGlyZWN0LXBy
ZWZsaWdodD10cnVlJlwKKyAgdXJsPWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVz
dC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ctc3Rhci5jZ2kmXAorICBhY2Nl
c3MtY29udHJvbC1hbGxvdy1vcmlnaW49KiIsCisgIHByZWZsaWdodCwgZmFpbHNdLAorCisvLyBT
dWNjZXNzZnVsIHByZWZsaWdodCBhbmQgcmVjZWl2ZXMgYSByZWRpcmVjdCByZXNwb25zZSB0byB0
aGUgYWN0dWFsIHJlcXVlc3QgYW5kIGZhaWxzLgorWyJodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1s
aHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhwP3JlZGlyZWN0LXByZWZsaWdo
dD1mYWxzZSZcCisgIHVybD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVz
b3VyY2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dpJlwKKyAgYWNjZXNzLWNv
bnRyb2wtYWxsb3ctb3JpZ2luPSomXAorICBhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzPXgt
d2Via2l0IiwKKyAgcHJlZmxpZ2h0LCBmYWlsc10sCitdCisKK3ZhciBjdXJyZW50VGVzdCA9IDA7
CisKK2Z1bmN0aW9uIG5leHRUZXN0KCkgeworICAgIGlmIChjdXJyZW50VGVzdCA8IHRlc3RzLmxl
bmd0aCkKKyAgICAgICAgcnVuVGVzdEFzeW5jLmFwcGx5KG51bGwsIHRlc3RzW2N1cnJlbnRUZXN0
KytdKTsKKyAgICBlbHNlIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworbmV4dFRlc3QoKTsKKzwv
c2NyaXB0PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1hbmQtcmVkaXJlY3RzLWFzeW5jLmh0bWwKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMv
cmVkaXJlY3QtY29ycy5waHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyOCBAQAorPD9waHAKKyAgICAkdXJsID0gJF9HRVRbJ3VybCddOworICAgICRy
ZWRpcmVjdF9wcmVmbGlnaHQgPSAkX0dFVFsncmVkaXJlY3QtcHJlZmxpZ2h0J107CisgICAgJGFj
Y2Vzc19jb250cm9sX2FsbG93X29yaWdpbiA9ICRfR0VUWydhY2Nlc3MtY29udHJvbC1hbGxvdy1v
cmlnaW4nXTsKKyAgICAkYWNjZXNzX2NvbnRyb2xfYWxsb3dfY3JlZGVudGlhbHMgPSAkX0dFVFsn
YWNjZXNzLWNvbnRyb2wtYWxsb3ctY3JlZGVudGlhbHMnXTsKKyAgICAkYWNjZXNzX2NvbnRyb2xf
YWxsb3dfaGVhZGVycyA9ICRfR0VUWydhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzJ107CisK
KyAgICBpZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT0gIk9QVElPTlMiKSB7CisgICAg
ICAgIGlmICgkcmVkaXJlY3RfcHJlZmxpZ2h0ID09ICJ0cnVlIikgeworICAgICAgICAgICAgaGVh
ZGVyKCJIVFRQLzEuMSAzMDIiKTsKKyAgICAgICAgICAgIGhlYWRlcigiTG9jYXRpb246ICR1cmwi
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGhlYWRlcigiSFRUUC8x
LjEgMjAwIik7CisgICAgICAgIH0KKyAgICAgICAgaGVhZGVyKCJBY2Nlc3MtQ29udHJvbC1BbGxv
dy1NZXRob2RzOiBHRVQiKTsKKyAgICAgICAgaGVhZGVyKCJBY2Nlc3MtQ29udHJvbC1NYXgtQWdl
OiAxIik7CisgICAgfSBlbHNlIGlmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PSAiR0VU
IikgeworICAgICAgICBoZWFkZXIoIkhUVFAvMS4xIDMwMiIpOworICAgICAgICBoZWFkZXIoIkxv
Y2F0aW9uOiAkdXJsIik7CisgICAgfQorICAgIGlmICghaXNfbnVsbCgkYWNjZXNzX2NvbnRyb2xf
YWxsb3dfb3JpZ2luKSkKKyAgICAgICAgaGVhZGVyKCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1Pcmln
aW46ICRhY2Nlc3NfY29udHJvbF9hbGxvd19vcmlnaW4iKTsKKyAgICBpZiAoIWlzX251bGwoJGFj
Y2Vzc19jb250cm9sX2FsbG93X2NyZWRlbnRpYWxzKSkKKyAgICAgICAgaGVhZGVyKCJBY2Nlc3Mt
Q29udHJvbC1BbGxvdy1DcmVkZW50aWFsczogJGFjY2Vzc19jb250cm9sX2FsbG93X2NyZWRlbnRp
YWxzIik7CisgICAgaWYgKCFpc19udWxsKCRhY2Nlc3NfY29udHJvbF9hbGxvd19oZWFkZXJzKSkK
KyAgICAgICAgaGVhZGVyKCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzOiAkYWNjZXNzX2Nv
bnRyb2xfYWxsb3dfaGVhZGVycyIpOworPz4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133983</attachid>
            <date>2012-03-26 23:15:24 -0700</date>
            <delta_ts>2012-03-27 00:39:06 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-57600-20120326231523.patch</filename>
            <type>text/plain</type>
            <size>24665</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjIwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAzLTI2ICBCaWxsIEJ1
ZGdlICA8YmJ1ZGdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBjcm9zcy1vcmlnaW4gWE1MSHR0
cFJlcXVlc3QgZG9lc24ndCB3b3JrIHdpdGggcmVkaXJlY3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
QWRhbSBCYXJ0aC4KKworICAgICAgICBDaGFuZ2VzIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciB0
byBmb2xsb3cgdGhlIENPUlMgcmVkaXJlY3Qgc3RlcHMgd2hlbgorICAgICAgICBhc3luY2hyb25v
dXNseSBsb2FkaW5nIGEgY3Jvc3Mgb3JpZ2luIHJlcXVlc3Qgd2l0aCBhY2Nlc3MgY29udHJvbC4g
U3luY2hyb25vdXMKKyAgICAgICAgbG9hZHMgc2hvdWxkIG5vdCBiZSBhZmZlY3RlZC4gQWxzbyBh
ZGRzIG1ldGhvZHMgdG8gUmVzb3VyY2VSZXF1ZXN0QmFzZSB0bworICAgICAgICBjbGVhciBzcGVj
aWFsIHJlcXVlc3QgaGVhZGVycyB0aGF0IGFyZW4ndCBhbGxvd2VkIHdoZW4gdXNpbmcgYWNjZXNz
IGNvbnRyb2wuCisgICAgICAgIEZvbGxvd3MgdGhlIENPUlMgc3BlYyBhcyBkZXNjcmliZWQgaW4g
dGhlIExhdGVzdCBFZGl0b3IgRHJhZnQgYXQ6CisgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RS
L2NvcnMvCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3Mt
Y29udHJvbC1hbmQtcmVkaXJlY3RzLWFzeW5jLmh0bWwKKworICAgICAgICAqIGxvYWRlci9Eb2N1
bWVudFRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVh
ZGFibGVMb2FkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVz
dEJhc2UuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFz
ZS5oOgorCiAyMDEyLTAzLTI2ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWls
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTEyMTk5LgpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5j
cHAJKHJldmlzaW9uIDExMjIwNikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC03NCw2ICs3NCw3IEBAIERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWQKICAgICAsIG1fZG9jdW1lbnQo
ZG9jdW1lbnQpCiAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKICAgICAsIG1fc2FtZU9yaWdpblJl
cXVlc3Qoc2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgpKSkKKyAgICAs
IG1fc2ltcGxlUmVxdWVzdCh0cnVlKQogICAgICwgbV9hc3luYyhibG9ja2luZ0JlaGF2aW9yID09
IExvYWRBc3luY2hyb25vdXNseSkKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICwgbV9wcmVm
bGlnaHRSZXF1ZXN0SWRlbnRpZmllcigwKQpAQCAtODQsNiArODUsMTEgQEAgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZAogICAgIC8vIFNldHRpbmcgYW4gb3V0Z29pbmcg
cmVmZXJlciBpcyBvbmx5IHN1cHBvcnRlZCBpbiB0aGUgYXN5bmMgY29kZSBwYXRoLgogICAgIEFT
U0VSVChtX2FzeW5jIHx8IHJlcXVlc3QuaHR0cFJlZmVycmVyKCkuaXNFbXB0eSgpKTsKIAorICAg
IG1ha2VSZXF1ZXN0KHJlcXVlc3QpOworfQorCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6bWFrZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorewogICAgIGlm
IChtX3NhbWVPcmlnaW5SZXF1ZXN0IHx8IG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xp
Y3kgPT0gQWxsb3dDcm9zc09yaWdpblJlcXVlc3RzKSB7CiAgICAgICAgIGxvYWRSZXF1ZXN0KHJl
cXVlc3QsIERvU2VjdXJpdHlDaGVjayk7CiAgICAgICAgIHJldHVybjsKQEAgLTkzLDcgKzk5LDcg
QEAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZAogICAgICAgICBtX2Ns
aWVudC0+ZGlkRmFpbChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAs
IHJlcXVlc3QudXJsKCkuc3RyaW5nKCksICJDcm9zcyBvcmlnaW4gcmVxdWVzdHMgYXJlIG5vdCBz
dXBwb3J0ZWQuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgQVNTRVJU
KG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPT0gVXNlQWNjZXNzQ29udHJvbCk7
CiAKICAgICBPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBjcm9zc09yaWdpblJlcXVlc3QgPSBhZG9w
dFB0cihuZXcgUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpKTsKQEAgLTEwMiw2ICsxMDgsNyBAQCBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkCiAgICAgaWYgKChtX29wdGlv
bnMucHJlZmxpZ2h0UG9saWN5ID09IENvbnNpZGVyUHJlZmxpZ2h0ICYmIGlzU2ltcGxlQ3Jvc3NP
cmlnaW5BY2Nlc3NSZXF1ZXN0KGNyb3NzT3JpZ2luUmVxdWVzdC0+aHR0cE1ldGhvZCgpLCBjcm9z
c09yaWdpblJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKSkpIHx8IG1fb3B0aW9ucy5wcmVmbGln
aHRQb2xpY3kgPT0gUHJldmVudFByZWZsaWdodCkKICAgICAgICAgbWFrZVNpbXBsZUNyb3NzT3Jp
Z2luQWNjZXNzUmVxdWVzdCgqY3Jvc3NPcmlnaW5SZXF1ZXN0KTsKICAgICBlbHNlIHsKKyAgICAg
ICAgbV9zaW1wbGVSZXF1ZXN0ID0gZmFsc2U7CiAgICAgICAgIG1fYWN0dWFsUmVxdWVzdCA9IGNy
b3NzT3JpZ2luUmVxdWVzdC5yZWxlYXNlKCk7CiAKICAgICAgICAgaWYgKENyb3NzT3JpZ2luUHJl
ZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmNhblNraXBQcmVmbGlnaHQoc2VjdXJpdHlPcmln
aW4oKS0+dG9TdHJpbmcoKSwgbV9hY3R1YWxSZXF1ZXN0LT51cmwoKSwgbV9vcHRpb25zLmFsbG93
Q3JlZGVudGlhbHMsIG1fYWN0dWFsUmVxdWVzdC0+aHR0cE1ldGhvZCgpLCBtX2FjdHVhbFJlcXVl
c3QtPmh0dHBIZWFkZXJGaWVsZHMoKSkpCkBAIC0xNjcsMTMgKzE3NCw0OCBAQCB2b2lkIERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcjo6cmVkaXJlY3RSCiAgICAgQVNTRVJUKG1fY2xpZW50KTsKICAg
ICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKIAotICAg
IGlmICghaXNBbGxvd2VkUmVkaXJlY3QocmVxdWVzdC51cmwoKSkpIHsKLSAgICAgICAgUmVmUHRy
PERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWZQdHI8RG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOworICAgIGJvb2wgYWxsb3dSZWRp
cmVjdCA9IGZhbHNlOworICAgIGlmIChtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5
ID09IFVzZUFjY2Vzc0NvbnRyb2wpIHsKKyAgICAgICAgLy8gV2hlbiB1c2luZyBhY2Nlc3MgY29u
dHJvbCwgb25seSBzaW1wbGUgY3Jvc3Mgb3JpZ2luIHJlcXVlc3RzIGFyZSBhbGxvd2VkIHRvIHJl
ZGlyZWN0LiBUaGUgbmV3IHJlcXVlc3QgVVJMIG11c3QgaGF2ZSBhIHN1cHBvcnRlZAorICAgICAg
ICAvLyBzY2hlbWUgYW5kIG5vdCBjb250YWluIHRoZSB1c2VyaW5mbyBwcm9kdWN0aW9uLiBJbiBh
ZGRpdGlvbiwgdGhlIHJlZGlyZWN0IHJlc3BvbnNlIG11c3QgcGFzcyB0aGUgYWNjZXNzIGNvbnRy
b2wgY2hlY2suCisgICAgICAgIGlmIChtX3NpbXBsZVJlcXVlc3QpIHsKKyAgICAgICAgICAgIFN0
cmluZyBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIGFsbG93UmVk
aXJlY3QgPSBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxTY2hlbWVBc0NPUlNFbmFibGVk
KHJlcXVlc3QudXJsKCkucHJvdG9jb2woKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiByZXF1ZXN0LnVybCgpLnVzZXIoKS5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiByZXF1ZXN0LnVybCgpLnBhc3MoKS5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiBwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2socmVkaXJlY3RSZXNwb25zZSwg
bV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIHNlY3VyaXR5T3JpZ2luKCksIGFjY2Vzc0NvbnRy
b2xFcnJvckRlc2NyaXB0aW9uKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBhbGxv
d1JlZGlyZWN0ID0gaXNBbGxvd2VkUmVkaXJlY3QocmVxdWVzdC51cmwoKSk7CisKKyAgICBpZiAo
YWxsb3dSZWRpcmVjdCkgeworICAgICAgICBpZiAobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVz
dFBvbGljeSA9PSBVc2VBY2Nlc3NDb250cm9sKSB7CisgICAgICAgICAgICBpZiAobV9yZXNvdXJj
ZSkKKyAgICAgICAgICAgICAgICBjbGVhclJlc291cmNlKCk7CisKKyAgICAgICAgICAgIFJlZlB0
cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luYWxPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRl
RnJvbVN0cmluZyhyZWRpcmVjdFJlc3BvbnNlLnVybCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gcmVxdWVzdE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9t
U3RyaW5nKHJlcXVlc3QudXJsKCkpOworICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgVVJM
IG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCB0aGUgb3JpZ2luYWwgVVJMIG9yaWdpbiwg
c2V0IHNvdXJjZSBvcmlnaW4gdG8gYSBnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllci4KKyAgICAg
ICAgICAgIGlmICghb3JpZ2luYWxPcmlnaW4tPmlzU2FtZVNjaGVtZUhvc3RQb3J0KHJlcXVlc3RP
cmlnaW4uZ2V0KCkpKQorICAgICAgICAgICAgICAgIG1fb3B0aW9ucy5zZWN1cml0eU9yaWdpbiA9
IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVVbmlxdWUoKTsKKyAgICAgICAgICAgIG1fc2FtZU9yaWdp
blJlcXVlc3QgPSBzZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlcXVlc3QudXJsKCkpOwor
CisgICAgICAgICAgICAvLyBSZW1vdmUgYW55IGhlYWRlcnMgdGhhdCBtYXkgaGF2ZSBiZWVuIGFk
ZGVkIGJ5IHRoZSBuZXR3b3JrIGxheWVyIHRoYXQgY2F1c2UgYWNjZXNzIGNvbnRyb2wgdG8gZmFp
bC4KKyAgICAgICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQQ29udGVudFR5cGUoKTsKKyAgICAgICAg
ICAgIHJlcXVlc3QuY2xlYXJIVFRQUmVmZXJyZXIoKTsKKyAgICAgICAgICAgIHJlcXVlc3QuY2xl
YXJIVFRQT3JpZ2luKCk7CisgICAgICAgICAgICByZXF1ZXN0LmNsZWFySFRUUFVzZXJBZ2VudCgp
OworICAgICAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBBY2NlcHQoKTsKKyAgICAgICAgICAgIG1h
a2VSZXF1ZXN0KHJlcXVlc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSWYg
bm90IHVzaW5nIGFjY2VzcyBjb250cm9sLCBhbGxvdyBjbGllbnRzIHRvIGF1ZGl0IHRoZSByZWRp
cmVjdC4KKyAgICAgICAgICAgIGlmIChtX2NsaWVudC0+aXNEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQoKSkKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXJDbGllbnQqPihtX2NsaWVudCktPndpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRp
cmVjdFJlc3BvbnNlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CiAgICAgICAgIG1fY2xpZW50
LT5kaWRGYWlsUmVkaXJlY3RDaGVjaygpOwogICAgICAgICByZXF1ZXN0ID0gUmVzb3VyY2VSZXF1
ZXN0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fY2xpZW50LT5pc0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlckNsaWVudCgpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50Kj4obV9jbGllbnQpLT53aWxsU2VuZFJlcXVlc3QocmVxdWVz
dCwgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgfQogfQogCkBAIC0zNzcsOSArNDE5LDYgQEAgYm9v
bCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmlzQWxsb3dlZAogICAgIGlmIChtX29wdGlvbnMu
Y3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cykKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBpbXBsZW1lbnQg
YWNjZXNzIGNvbnRyb2wgZm9yIGVhY2ggcmVkaXJlY3QuIFRoaXMgd2lsbCByZXF1aXJlIHNvbWUg
cmVmYWN0b3JpbmcgdGhvdWdoLCBiZWNhdXNlIHRoZSBjb2RlCi0gICAgLy8gdGhhdCBwcm9jZXNz
ZXMgcmVkaXJlY3RzIGRvZXNuJ3Qga25vdyBhYm91dCBhY2Nlc3MgY29udHJvbCBhbmQgZXhwZWN0
cyBhIHN5bmNocm9ub3VzIGFuc3dlciBmcm9tIGl0cyBjbGllbnQgYWJvdXQgd2hldGhlcgotICAg
IC8vIGEgcmVkaXJlY3Qgc2hvdWxkIHByb2NlZWQuCiAgICAgcmV0dXJuIG1fc2FtZU9yaWdpblJl
cXVlc3QgJiYgc2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCShy
ZXZpc2lvbiAxMTIyMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTg5LDYgKzg5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUp
OwogICAgICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgICAgICB2
b2lkIG1ha2VSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogICAgICAgICB2b2lkIG1h
a2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0KTsKICAgICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFBy
ZWZsaWdodChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIHBy
ZWZsaWdodFN1Y2Nlc3MoKTsKQEAgLTEwNCw2ICsxMDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgICAgICBUaHJlYWRhYmxlTG9hZGVy
T3B0aW9ucyBtX29wdGlvbnM7CiAgICAgICAgIGJvb2wgbV9zYW1lT3JpZ2luUmVxdWVzdDsKKyAg
ICAgICAgYm9vbCBtX3NpbXBsZVJlcXVlc3Q7CiAgICAgICAgIGJvb2wgbV9hc3luYzsKICAgICAg
ICAgT3duUHRyPFJlc291cmNlUmVxdWVzdD4gbV9hY3R1YWxSZXF1ZXN0OyAgLy8gbm9uLW51bGwg
ZHVyaW5nIEFjY2VzcyBDb250cm9sIHByZWZsaWdodCBjaGVja3MKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
Y3BwCShyZXZpc2lvbiAxMTIyMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI1MSw2ICsyNTEsMTYgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBBdXRo
bwogICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAordm9pZCBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBDb250ZW50VHlwZSgpCit7CisgICAgdXBkYXRl
UmVzb3VyY2VSZXF1ZXN0KCk7IAorCisgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZSgiQ29u
dGVudC1UeXBlIik7CisKKyAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQor
ICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKK30KKwogdm9pZCBSZXNv
dXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBSZWZlcnJlcigpCiB7CiAgICAgdXBkYXRlUmVzb3Vy
Y2VSZXF1ZXN0KCk7IApAQCAtMjcxLDYgKzI4MSwyNiBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJh
c2U6OmNsZWFySFRUUE9yaWdpCiAgICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZh
bHNlOwogfQogCit2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFVzZXJBZ2VudCgp
Cit7CisgICAgdXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCk7IAorCisgICAgbV9odHRwSGVhZGVyRmll
bGRzLnJlbW92ZSgiVXNlci1BZ2VudCIpOworCisgICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKSkKKyAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7Cit9
CisKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQQWNjZXB0KCkKK3sKKyAgICB1
cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsgCisKKyAgICBtX2h0dHBIZWFkZXJGaWVsZHMucmVtb3Zl
KCJBY2NlcHQiKTsKKworICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCisg
ICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworfQorCiB2b2lkIFJlc291
cmNlUmVxdWVzdEJhc2U6OnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxs
YmFja0FycmF5KGNvbnN0IFN0cmluZyYgZW5jb2RpbmcxLCBjb25zdCBTdHJpbmcmIGVuY29kaW5n
MiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZzMpCiB7CiAgICAgdXBkYXRlUmVzb3VyY2VSZXF1ZXN0
KCk7IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVl
c3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDExMjIwNikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBT
YW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTg4LDcgKzg4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIFN0cmluZyBodHRwQ29udGVudFR5cGUoKSBjb25zdCB7IHJldHVybiBodHRwSGVhZGVy
RmllbGQoIkNvbnRlbnQtVHlwZSIpOyAgfQogICAgICAgICB2b2lkIHNldEhUVFBDb250ZW50VHlw
ZShjb25zdCBTdHJpbmcmIGh0dHBDb250ZW50VHlwZSkgeyBzZXRIVFRQSGVhZGVyRmllbGQoIkNv
bnRlbnQtVHlwZSIsIGh0dHBDb250ZW50VHlwZSk7IH0KLSAgICAgICAgCisgICAgICAgIHZvaWQg
Y2xlYXJIVFRQQ29udGVudFR5cGUoKTsKKwogICAgICAgICBTdHJpbmcgaHR0cFJlZmVycmVyKCkg
Y29uc3QgeyByZXR1cm4gaHR0cEhlYWRlckZpZWxkKCJSZWZlcmVyIik7IH0KICAgICAgICAgdm9p
ZCBzZXRIVFRQUmVmZXJyZXIoY29uc3QgU3RyaW5nJiBodHRwUmVmZXJyZXIpIHsgc2V0SFRUUEhl
YWRlckZpZWxkKCJSZWZlcmVyIiwgaHR0cFJlZmVycmVyKTsgfQogICAgICAgICB2b2lkIGNsZWFy
SFRUUFJlZmVycmVyKCk7CkBAIC05OSw5ICsxMDAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIFN0cmluZyBodHRwVXNlckFnZW50KCkgY29uc3QgeyByZXR1cm4gaHR0cEhlYWRl
ckZpZWxkKCJVc2VyLUFnZW50Iik7IH0KICAgICAgICAgdm9pZCBzZXRIVFRQVXNlckFnZW50KGNv
bnN0IFN0cmluZyYgaHR0cFVzZXJBZ2VudCkgeyBzZXRIVFRQSGVhZGVyRmllbGQoIlVzZXItQWdl
bnQiLCBodHRwVXNlckFnZW50KTsgfQorICAgICAgICB2b2lkIGNsZWFySFRUUFVzZXJBZ2VudCgp
OwogCiAgICAgICAgIFN0cmluZyBodHRwQWNjZXB0KCkgY29uc3QgeyByZXR1cm4gaHR0cEhlYWRl
ckZpZWxkKCJBY2NlcHQiKTsgfQogICAgICAgICB2b2lkIHNldEhUVFBBY2NlcHQoY29uc3QgU3Ry
aW5nJiBodHRwQWNjZXB0KSB7IHNldEhUVFBIZWFkZXJGaWVsZCgiQWNjZXB0IiwgaHR0cEFjY2Vw
dCk7IH0KKyAgICAgICAgdm9pZCBjbGVhckhUVFBBY2NlcHQoKTsKIAogICAgICAgICB2b2lkIHNl
dFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KGNvbnN0IFN0
cmluZyYgZW5jb2RpbmcxLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nMiA9IFN0cmluZygpLCBjb25z
dCBTdHJpbmcmIGVuY29kaW5nMyA9IFN0cmluZygpKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTEy
MjA2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjEgQEAKKzIwMTItMDMtMjYgIEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIGNyb3NzLW9yaWdpbiBYTUxIdHRwUmVxdWVzdCBkb2Vzbid0IHdvcmsgd2l0aCByZWRp
cmVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc2
MDAKKworICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgorCisgICAgICAgIEFkZHMgdGVz
dHMgdG8gdmVyaWZ5IHRoYXQgYW4gYXN5bmNocm9ub3VzIFhIUiBsb2FkIHRoYXQgcmVjZWl2ZXMg
YSByZWRpcmVjdAorICAgICAgICByZXNwb25zZSBmb2xsb3dzIHRoZSBDT1JTIHJlZGlyZWN0IHN0
ZXBzLgorICAgICAgICBGb2xsb3dzIHRoZSBDT1JTIHNwZWMgYXMgZGVzY3JpYmVkIGluIHRoZSBM
YXRlc3QgRWRpdG9yIERyYWZ0IGF0OgorICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9jb3Jz
LworCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY29ycy1yZWRpcmVj
dC5waHA6IFJlbW92ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94aHItY29ycy1y
ZWRpcmVjdC5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QvYWNjZXNzLWNvbnRyb2wtYW5kLXJlZGlyZWN0cy1hc3luYy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtYW5k
LXJlZGlyZWN0cy1hc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0
dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocDogQWRkZWQuCisKIDIwMTItMDMt
MjYgIFBhYmxvIEZsb3VyZXQgIDxwYWJsb2ZAbW90b3JvbGEuY29tPgogCiAgICAgICAgIEZpeCBm
bGFreSB0ZXN0IGZhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtdXJsLWF0dHJpYnV0ZS5odG1s
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hoci1jb3JzLXJlZGlyZWN0
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94aHIt
Y29ycy1yZWRpcmVjdC5odG1sCShyZXZpc2lvbiAxMTIyMDYpCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3hoci1jb3JzLXJlZGlyZWN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTkgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQ+Ci1pZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLX0KLQotZnVuY3Rp
b24gbG9nKG1zZykgewotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5pbm5lckhU
TUwgKz0gbXNnICsgIjxicj4iOwotfQotCi1mdW5jdGlvbiB0ZXN0KCkgewotICAgIHZhciB4aHIg
PSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKLSAgICB2YXIgdXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6
ODAwMC9zZWN1cml0eS9yZXNvdXJjZXMvY29ycy1yZWRpcmVjdC5waHA/bm8tY2FjaGUiOwotICAg
IHhoci5vcGVuKCJHRVQiLCB1cmwsIGZhbHNlKTsKLSAgICB0cnkgewotICAgICAgICB4aHIuc2Vu
ZChudWxsKTsKLQotICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApCi0gICAgICAgICAgICBs
b2coIlBBU1M6IHN5bmMgWEhSIHN1Y2Nlc3NmdWwiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbG9nKCJGQUlMOiBzeW5jIFhIUiBmYWlsZWQiKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAg
ICAgIGxvZygiRkFJTDogc3luYyBYSFIgZmFpbGVkIik7Ci0gICAgfQotCi0gICAgeGhyID0gbmV3
IFhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgeGhyLm9wZW4oIkdFVCIsIHVybCwgdHJ1ZSk7Ci0gICAg
eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZWQgPSBmdW5jdGlvbihlKSB7Ci0gICAgICAgIGlmICh4aHIu
cmVhZHlzdGF0ZSA9PSA0KSB7Ci0gICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApCi0g
ICAgICAgICAgICAgICAgbG9nKCJQQVNTOiBhc3luYyBYSFIgc3VjY2Vzc2Z1bCIpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxvZygiRkFJTDogYXN5bmMgWEhSIGZhaWxlZCIp
OwotICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci0gICAgICAgIH0KLSAg
ICB9OwotICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGxvZygiRkFJTDog
YXN5bmMgWEhSIGZhaWxlZCIpOwotICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQotICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwotICAg
IH07Ci0gICAgeGhyLnNlbmQobnVsbCk7Ci19Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IG9u
bG9hZD0idGVzdCgpIj4KLTxwPgotVGVzdCB0aGF0IGEgY3Jvc3Mtb3JpZ2luIFhIUiBpbnZvbHZp
bmcgcmVkaXJlY3RzIHdvcmtzIGNvcnJlY3RseS4gSWYgdGhpcyB0ZXN0Ci1wYXNzZXMsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzLgotPC9wPgotPHA+Ci1DdXJyZW50bHkg
bm90IHdvcmtpbmcsIHNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzU3NjAwCi08L3A+Ci08ZGl2IGlk
PSJsb2ciPjwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY29ycy1yZWRpcmVjdC5waHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY29ycy1yZWRpcmVjdC5w
aHAJKHJldmlzaW9uIDExMjIwNikKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
cmVzb3VyY2VzL2NvcnMtcmVkaXJlY3QucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzAsMCBA
QAotPD9waHAKLWhlYWRlcigiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luOiBodHRwOi8vMTI3
LjAuMC4xOjgwMDAiKTsKLWhlYWRlcigiTG9jYXRpb246IGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9z
ZWN1cml0eS9yZXNvdXJjZXMvZW1wdHkuaHRtbCIpOwotPz4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtYW5kLXJlZGlyZWN0cy1hc3lu
Yy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1hbmQtcmVkaXJlY3RzLWFzeW5jLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
YWNjZXNzLWNvbnRyb2wtYW5kLXJlZGlyZWN0cy1hc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzAgQEAKK1Rlc3RzIHRoYXQgYXN5bmNocm9ub3VzIFhNTEh0dHBSZXF1
ZXN0cyBoYW5kbGUgcmVkaXJlY3RzIGFjY29yZGluZyB0byB0aGUgQ09SUyBzdGFuZGFyZC4KKwor
VGVzdGluZyByZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHA/dXJsPWh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ct
c3Rhci5jZ2kKK0V4cGVjdGluZyBzdWNjZXNzOiBmYWxzZQorUEFTUzogMAorVGVzdGluZyByZXNv
dXJjZXMvcmVkaXJlY3QtY29ycy5waHA/dXJsPWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRw
cmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ctc3Rhci5jZ2kmICBh
Y2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49aHR0cDovL2xvY2FsaG9zdDo4MDAwJiAgYWNjZXNz
LWNvbnRyb2wtYWxsb3ctY3JlZGVudGlhbHM9dHJ1ZQorRXhwZWN0aW5nIHN1Y2Nlc3M6IGZhbHNl
CitQQVNTOiAwCitUZXN0aW5nIHJlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9aHR0cDov
LzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1i
YXNpYy1hbGxvdy5jZ2kmICBhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49aHR0cDovL2xvY2Fs
aG9zdDo4MDAwJiAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctY3JlZGVudGlhbHM9dHJ1ZQorRXhwZWN0
aW5nIHN1Y2Nlc3M6IGZhbHNlCitQQVNTOiAwCitUZXN0aW5nIGh0dHA6Ly8xMjcuMC4wLjE6ODAw
MC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHA/dXJsPWh0dHA6Ly8x
MjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFz
aWMtYWxsb3ctc3Rhci5jZ2kKK0V4cGVjdGluZyBzdWNjZXNzOiBmYWxzZQorUEFTUzogMAorVGVz
dGluZyBodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGly
ZWN0LWNvcnMucGhwP3VybD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVz
b3VyY2VzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dpJiAgYWNjZXNzLWNvbnRy
b2wtYWxsb3ctb3JpZ2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMAorRXhwZWN0aW5nIHN1Y2Nlc3M6
IHRydWUKK0ZBSUw6IDAKK1Rlc3RpbmcgaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1
ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9aHR0cDovL3VzZXJuYW1lOnBhc3N3
b3JkQDEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJv
bC1iYXNpYy1hbGxvdy1zdGFyLmNnaSYgIGFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbj1odHRw
Oi8vbG9jYWxob3N0OjgwMDAKK0V4cGVjdGluZyBzdWNjZXNzOiBmYWxzZQorUEFTUzogMAorVGVz
dGluZyBodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGly
ZWN0LWNvcnMucGhwP3VybD1mb286Ly9iYXIuY2dpJiAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3Jp
Z2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMAorRXhwZWN0aW5nIHN1Y2Nlc3M6IGZhbHNlCitQQVNT
OiAwCitUZXN0aW5nIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJj
ZXMvcmVkaXJlY3QtY29ycy5waHA/cmVkaXJlY3QtcHJlZmxpZ2h0PXRydWUmICB1cmw9aHR0cDov
LzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1i
YXNpYy1hbGxvdy1zdGFyLmNnaSYgIGFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbj0qCitFeHBl
Y3Rpbmcgc3VjY2VzczogZmFsc2UKK1BBU1M6IDAKK1Rlc3RpbmcgaHR0cDovLzEyNy4wLjAuMTo4
MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD9yZWRpcmVjdC1w
cmVmbGlnaHQ9ZmFsc2UmICB1cmw9aHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0
L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1iYXNpYy1hbGxvdy1zdGFyLmNnaSYgIGFjY2Vzcy1j
b250cm9sLWFsbG93LW9yaWdpbj0qJiAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVycz14LXdl
YmtpdAorRXhwZWN0aW5nIHN1Y2Nlc3M6IGZhbHNlCitQQVNTOiAwCisKSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtYW5kLXJlZGlyZWN0
cy1hc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtYW5kLXJlZGlyZWN0cy1hc3luYy5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29u
dHJvbC1hbmQtcmVkaXJlY3RzLWFzeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA5
IEBACis8cD5UZXN0cyB0aGF0IGFzeW5jaHJvbm91cyBYTUxIdHRwUmVxdWVzdHMgaGFuZGxlIHJl
ZGlyZWN0cyBhY2NvcmRpbmcgdG8gdGhlIENPUlMgc3RhbmRhcmQuPC9wPgorCis8cHJlIGlkPSJj
b25zb2xlIj48L3ByZT4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2Up
Cit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlICsgJ1xuJykpOworfQorCitmdW5jdGlvbiBy
dW5UZXN0QXN5bmModXJsLCBmb3JjZVByZWZsaWdodCwgZXhwZWN0U3VjY2VzcykgeworICAgIGxv
ZygiVGVzdGluZyAiICsgdXJsKTsKKyAgICBsb2coIkV4cGVjdGluZyBzdWNjZXNzOiAiICsgZXhw
ZWN0U3VjY2Vzcyk7CisKKyAgICB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICB4aHIu
b3BlbigiR0VUIiwgdXJsLCB0cnVlKTsKKyAgICBpZiAoZm9yY2VQcmVmbGlnaHQpCisgICAgICAg
IHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJ4LXdlYmtpdCIsICJmb28iKTsKKworICAgIHhoci5vbmxv
YWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9nKChleHBlY3RTdWNjZXNzID8gIlBBU1MiIDog
IkZBSUwiKSArICI6ICIgKyB4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgbmV4dFRlc3QoKTsK
KyAgICB9CisgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9nKChleHBl
Y3RTdWNjZXNzID8gIkZBSUwiIDogIlBBU1MiKSArICI6ICIgKyB4aHIuc3RhdHVzKTsKKyAgICAg
ICAgbmV4dFRlc3QoKTsKKyAgICB9CisgICAgeGhyLnNlbmQobnVsbCk7Cit9CisKK3ZhciBzaW1w
bGUgPSBmYWxzZTsKK3ZhciBwcmVmbGlnaHQgPSB0cnVlOwordmFyIHN1Y2NlZWRzID0gdHJ1ZTsK
K3ZhciBmYWlscyA9IGZhbHNlOworCit2YXIgdGVzdHMgPSBbCisvLyAxKSBUZXN0IHNpbXBsZSBz
YW1lIG9yaWdpbiByZXF1ZXN0cyB0aGF0IHJlY2VpdmUgY3Jvc3Mgb3JpZ2luIHJlZGlyZWN0cy4K
KworLy8gUmVxdWVzdCByZWNlaXZlcyBhIGNyb3NzLW9yaWdpbiByZWRpcmVjdCByZXNwb25zZSB3
aXRob3V0IENPUlMgaGVhZGVycy4gVGhlIHJlZGlyZWN0IHJlc3BvbnNlIGZhaWxzIHRoZSBhY2Nl
c3MgY2hlY2suCitbInJlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9aHR0cDovLzEyNy4w
LjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1iYXNpYy1h
bGxvdy1zdGFyLmNnaSIsCisgIHNpbXBsZSwgZmFpbHNdLAorCisvLyBSZXF1ZXN0IHJlY2VpdmVz
IGEgY3Jvc3Mtb3JpZ2luIHJlZGlyZWN0IHJlc3BvbnNlIHdpdGggQ09SUyBoZWFkZXJzLiBUaGUg
cmVkaXJlY3QgcmVzcG9uc2UgcGFzc2VzIHRoZSBhY2Nlc3MgY2hlY2ssCisvLyBidXQgIHRoZSBy
ZXNvdXJjZSByZXNwb25zZSBmYWlscyBpdHMgYWNjZXNzIGNoZWNrIGJlY2F1c2UgdGhlIHNlY3Vy
aXR5IG9yaWdpbiBpcyBhIGdsb2JhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIGFmdGVyCisvLyB0aGUg
cmVkaXJlY3QgYW5kIHRoZSBzYW1lIG9yaWdpbiBYSFIgaGFzICdhbGxvd0NyZWRlbnRpYWxzJyB0
cnVlLgorWyJyZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHA/dXJsPWh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ct
c3Rhci5jZ2kmXAorICBhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49aHR0cDovL2xvY2FsaG9z
dDo4MDAwJlwKKyAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctY3JlZGVudGlhbHM9dHJ1ZSIsCisgIHNp
bXBsZSwgZmFpbHNdLAorCisvLyBTYW1lIGFzIGFib3ZlLCBidXQgdG8gYSBsZXNzIHBlcm1pc3Np
dmUgcmVzb3VyY2UgdGhhdCBvbmx5IGFsbG93cyB0aGUgcmVxdWVzdGluZyBvcmlnaW4uCitbInJl
c291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9aHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0
dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1iYXNpYy1hbGxvdy5jZ2kmXAorICBh
Y2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW49aHR0cDovL2xvY2FsaG9zdDo4MDAwJlwKKyAgYWNj
ZXNzLWNvbnRyb2wtYWxsb3ctY3JlZGVudGlhbHM9dHJ1ZSIsCisgIHNpbXBsZSwgZmFpbHNdLAor
CisvLyAyKSBUZXN0IHNpbXBsZSBjcm9zcyBvcmlnaW4gcmVxdWVzdHMgdGhhdCByZWNlaXZlIHJl
ZGlyZWN0cy4KKworLy8gUmVjZWl2ZXMgYSByZWRpcmVjdCByZXNwb25zZSB3aXRob3V0IENPUlMg
aGVhZGVycy4gVGhlIHJlZGlyZWN0IHJlc3BvbnNlIGZhaWxzIHRoZSBhY2Nlc3MgY2hlY2suCitb
Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcmVkaXJlY3Qt
Y29ycy5waHA/dXJsPWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJj
ZXMvYWNjZXNzLWNvbnRyb2wtYmFzaWMtYWxsb3ctc3Rhci5jZ2kiLAorICBzaW1wbGUsIGZhaWxz
XSwKKworLy8gUmVjZWl2ZXMgYSByZWRpcmVjdCByZXNwb25zZSB3aXRoIENPUlMgaGVhZGVycy4g
VGhlIHJlZGlyZWN0IHJlc3BvbnNlIHBhc3NlcyB0aGUgYWNjZXNzIGNoZWNrIGFuZCB0aGUgcmVz
b3VyY2UgcmVzcG9uc2UKKy8vIHBhc3NlcyB0aGUgYWNjZXNzIGNoZWNrLgorWyJodHRwOi8vMTI3
LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhwP3Vy
bD1odHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1j
b250cm9sLWJhc2ljLWFsbG93LXN0YXIuY2dpJlwKKyAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3Jp
Z2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIsCisgIHNpbXBsZSwgc3VjY2VlZHNdLAorCisvLyBS
ZWNlaXZlcyBhIHJlZGlyZWN0IHJlc3BvbnNlIHdpdGggYSBVUkwgY29udGFpbmluZyB0aGUgdXNl
cmluZm8gcHJvZHVjdGlvbi4KK1siaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0
L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocD91cmw9aHR0cDovL3VzZXJuYW1lOnBhc3N3b3Jk
QDEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1i
YXNpYy1hbGxvdy1zdGFyLmNnaSZcCisgIGFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbj1odHRw
Oi8vbG9jYWxob3N0OjgwMDAiLAorICBzaW1wbGUsIGZhaWxzXSwKKworLy8gUmVjZWl2ZXMgYSBy
ZWRpcmVjdCByZXNwb25zZSB3aXRoIGEgVVJMIHdpdGggYW4gdW5zdXBwb3J0ZWQgc2NoZW1lLgor
WyJodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGlyZWN0
LWNvcnMucGhwP3VybD1mb286Ly9iYXIuY2dpJlwKKyAgYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3Jp
Z2luPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIsCisgIHNpbXBsZSwgZmFpbHNdLAorCisvLyAzKSBU
ZXN0IHByZWZsaWdodGVkIGNyb3NzIG9yaWdpbiByZXF1ZXN0cyB0aGF0IHJlY2VpdmUgcmVkaXJl
Y3RzLgorCisvLyBSZWNlaXZlcyBhIHJlZGlyZWN0IHJlc3BvbnNlIHRvIHRoZSBwcmVmbGlnaHQg
cmVxdWVzdCBhbmQgZmFpbHMuCitbImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVz
dC9yZXNvdXJjZXMvcmVkaXJlY3QtY29ycy5waHA/cmVkaXJlY3QtcHJlZmxpZ2h0PXRydWUmXAor
ICB1cmw9aHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nl
c3MtY29udHJvbC1iYXNpYy1hbGxvdy1zdGFyLmNnaSZcCisgIGFjY2Vzcy1jb250cm9sLWFsbG93
LW9yaWdpbj0qIiwKKyAgcHJlZmxpZ2h0LCBmYWlsc10sCisKKy8vIFN1Y2Nlc3NmdWwgcHJlZmxp
Z2h0IGFuZCByZWNlaXZlcyBhIHJlZGlyZWN0IHJlc3BvbnNlIHRvIHRoZSBhY3R1YWwgcmVxdWVz
dCBhbmQgZmFpbHMuCitbImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNv
dXJjZXMvcmVkaXJlY3QtY29ycy5waHA/cmVkaXJlY3QtcHJlZmxpZ2h0PWZhbHNlJlwKKyAgdXJs
PWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNv
bnRyb2wtYmFzaWMtYWxsb3ctc3Rhci5jZ2kmXAorICBhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmln
aW49KiZcCisgIGFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnM9eC13ZWJraXQiLAorICBwcmVm
bGlnaHQsIGZhaWxzXSwKK10KKwordmFyIGN1cnJlbnRUZXN0ID0gMDsKKworZnVuY3Rpb24gbmV4
dFRlc3QoKSB7CisgICAgaWYgKGN1cnJlbnRUZXN0IDwgdGVzdHMubGVuZ3RoKQorICAgICAgICBy
dW5UZXN0QXN5bmMuYXBwbHkobnVsbCwgdGVzdHNbY3VycmVudFRlc3QrK10pOworICAgIGVsc2Ug
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworfQorCituZXh0VGVzdCgpOworPC9zY3JpcHQ+CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1j
b3JzLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L3Jlc291cmNlcy9yZWRpcmVjdC1jb3JzLnBocAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGlyZWN0LWNvcnMucGhw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4IEBACis8P3BocAorICAgICR1cmwgPSAkX0dFVFsn
dXJsJ107CisgICAgJHJlZGlyZWN0X3ByZWZsaWdodCA9ICRfR0VUWydyZWRpcmVjdC1wcmVmbGln
aHQnXTsKKyAgICAkYWNjZXNzX2NvbnRyb2xfYWxsb3dfb3JpZ2luID0gJF9HRVRbJ2FjY2Vzcy1j
b250cm9sLWFsbG93LW9yaWdpbiddOworICAgICRhY2Nlc3NfY29udHJvbF9hbGxvd19jcmVkZW50
aWFscyA9ICRfR0VUWydhY2Nlc3MtY29udHJvbC1hbGxvdy1jcmVkZW50aWFscyddOworICAgICRh
Y2Nlc3NfY29udHJvbF9hbGxvd19oZWFkZXJzID0gJF9HRVRbJ2FjY2Vzcy1jb250cm9sLWFsbG93
LWhlYWRlcnMnXTsKKworICAgIGlmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PSAiT1BU
SU9OUyIpIHsKKyAgICAgICAgaWYgKCRyZWRpcmVjdF9wcmVmbGlnaHQgPT0gInRydWUiKSB7Cisg
ICAgICAgICAgICBoZWFkZXIoIkhUVFAvMS4xIDMwMiIpOworICAgICAgICAgICAgaGVhZGVyKCJM
b2NhdGlvbjogJHVybCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
aGVhZGVyKCJIVFRQLzEuMSAyMDAiKTsKKyAgICAgICAgfQorICAgICAgICBoZWFkZXIoIkFjY2Vz
cy1Db250cm9sLUFsbG93LU1ldGhvZHM6IEdFVCIpOworICAgICAgICBoZWFkZXIoIkFjY2Vzcy1D
b250cm9sLU1heC1BZ2U6IDEiKTsKKyAgICB9IGVsc2UgaWYgKCRfU0VSVkVSWydSRVFVRVNUX01F
VEhPRCddID09ICJHRVQiKSB7CisgICAgICAgIGhlYWRlcigiSFRUUC8xLjEgMzAyIik7CisgICAg
ICAgIGhlYWRlcigiTG9jYXRpb246ICR1cmwiKTsKKyAgICB9CisgICAgaWYgKCFpc19udWxsKCRh
Y2Nlc3NfY29udHJvbF9hbGxvd19vcmlnaW4pKQorICAgICAgICBoZWFkZXIoIkFjY2Vzcy1Db250
cm9sLUFsbG93LU9yaWdpbjogJGFjY2Vzc19jb250cm9sX2FsbG93X29yaWdpbiIpOworICAgIGlm
ICghaXNfbnVsbCgkYWNjZXNzX2NvbnRyb2xfYWxsb3dfY3JlZGVudGlhbHMpKQorICAgICAgICBo
ZWFkZXIoIkFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzOiAkYWNjZXNzX2NvbnRyb2xf
YWxsb3dfY3JlZGVudGlhbHMiKTsKKyAgICBpZiAoIWlzX251bGwoJGFjY2Vzc19jb250cm9sX2Fs
bG93X2hlYWRlcnMpKQorICAgICAgICBoZWFkZXIoIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRl
cnM6ICRhY2Nlc3NfY29udHJvbF9hbGxvd19oZWFkZXJzIik7Cis/Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>