<?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>112071</bug_id>
          
          <creation_ts>2013-03-11 15:01:47 -0700</creation_ts>
          <short_desc>Web Inspector: Frontend should be able to load resources asynchronously and through the backend</short_desc>
          <delta_ts>2014-03-08 04:50:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>124274</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Timothy Hatcher">timothy</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>pfeldman</cc>
    
    <cc>timothy</cc>
    
    <cc>vivekg</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>852767</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-03-11 15:01:47 -0700</bug_when>
    <thetext>SourceMap files and resources downloaded by the frontend are currently downloaded synchronously. That is poor and in some cases I&apos;ve even seen a 10s timeout resulting in a 10s hang in the UI.

Most of the time when the frontend wants to download a resource it will want to download the resource through the backend. And even have caching behavior. For instance if you&apos;re remotely debugging an application that loads web content from its hard disk (file:///) attempting to load the SourceMap resources from the host machine (frontend) won&apos;t work. and worst case could produce unexpected results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852771</commentid>
    <comment_count>1</comment_count>
      <attachid>192569</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-03-11 15:08:21 -0700</bug_when>
    <thetext>Created attachment 192569
[PATCH] Proposed Async XHR through Backend with cross origin requests allowed

So I spoke with bradee-oh and he suggested I just try using an XHR through the backend page. This seems to work in the general case, but got a bit messy in the inspector code (since the result is a load through the inspected page we have to block sending &quot;willSend / didReceive / finished / failed&quot; delegates from being sent to the frontend for these loads. There are some further issues that I would need to work out if we decide to go this route, but before I go any further I&apos;d like to see if anyone has thoughts about this approach.

yurys, pfeldman, any comments about this approach? Does it sound acceptable, or is it too messy (if so, any suggestions)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852774</commentid>
    <comment_count>2</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-03-11 15:11:57 -0700</bug_when>
    <thetext>&lt;rdar://problem/13238886&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853544</commentid>
    <comment_count>3</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2013-03-12 09:22:41 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; SourceMap files and resources downloaded by the frontend are currently downloaded synchronously. That is poor and in some cases I&apos;ve even seen a 10s timeout resulting in a 10s hang in the UI.
Fully agree, we need a way to load source maps asynchronously.

&gt; 
&gt; Most of the time when the frontend wants to download a resource it will want to download the resource through the backend. And even have caching behavior. For instance if you&apos;re remotely debugging an application that loads web content from its hard disk (file:///) attempting to load the SourceMap resources from the host machine (frontend) won&apos;t work. and worst case could produce unexpected results.

Could you please elaborate on this scenario? Why would you need to remotely debug an application that is served from file system from another host in the real world?

For debugging a web page on a mobile phone it seems reasonable to load resource from the host machine - it would be faster and I don&apos;t see a real case where it wouldn&apos;t work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853546</commentid>
    <comment_count>4</comment_count>
      <attachid>192569</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2013-03-12 09:27:42 -0700</bug_when>
    <thetext>Comment on attachment 192569
[PATCH] Proposed Async XHR through Backend with cross origin requests allowed

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

&gt; Source/WebCore/inspector/InspectorResourceAgent.cpp:216
&gt; +    if (!m_frontendLoadRequestIdentifier.isNull()) {

Some comments to this patch:

1) I don&apos;t see a reason to filter out those inspector requests from network panel.
2) A simpler (less intrusive) way to implement this would be to create an XMLHttpRequest object and add event listener to it.
3) Instead of adding a command and an event to the protocol it would be better to use an &quot;async&quot; command. See Database.executeSQL for an example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853547</commentid>
    <comment_count>5</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-03-12 09:28:48 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #0)
&gt; &gt; Most of the time when the frontend wants to download a resource it will want to download the resource through the backend. And even have caching behavior. For instance if you&apos;re remotely debugging an application that loads web content from its hard disk (file:///) attempting to load the SourceMap resources from the host machine (frontend) won&apos;t work. and worst case could produce unexpected results.
&gt; 
&gt; Could you please elaborate on this scenario? Why would you need to remotely debug an application that is served from file system from another host in the real world?
&gt; 
&gt; For debugging a web page on a mobile phone it seems reasonable to load resource from the host machine - it would be faster and I don&apos;t see a real case where it wouldn&apos;t work.

The source map might be located in an app bundle on the device (back-end) and no content related to the app is on the front-end machine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853559</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-03-12 09:43:36 -0700</bug_when>
    <thetext>&gt; The source map might be located in an app bundle on the device (back-end) and no content related to the app is on the front-end machine.

So to make sure I understand, you want to ask debug target to send you back something located on its filesystem. Debug target&apos;s responsibility is to make sure this filesystem access is sufficiently sandboxed. I.e.:

Client -&gt; Remote Debugging Protocol -&gt; WebCore -&gt; WebKit -&gt; FileSystem -&gt; WebCore -&gt; Remote Debugging Protocol Response -&gt; Client.

Sounds like too much work fo supporting specific deployment scenario. Is this for release deployment or for debugging purposes only? Alternatively, you could use data urls for source maps and hence get rid of the sources lookup altogether.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853571</commentid>
    <comment_count>7</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-03-12 10:04:00 -0700</bug_when>
    <thetext>The inspecte page (different device or not) has credentials, cookies, etc. that might also affect access to source maps an original sources. So the app scenario is not the only case of this. The app scenario also simplifies development, not released binaries. It allows developers to have their maps, compined source and original source in one location without configuring anything the Inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853645</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-03-12 11:19:25 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; 1) I don&apos;t see a reason to filter out those inspector requests from network panel.
&gt; 2) A simpler (less intrusive) way to implement this would be to create an XMLHttpRequest object and add event listener to it.
&gt; 3) Instead of adding a command and an event to the protocol it would be better to use an &quot;async&quot; command. See Database.executeSQL for an example.

Good suggestions. I still think the frontend would not want to see the network requests / timing information for downloading say a source map file, but the source map resources that would probably be fine. I did not know about &quot;async&quot; commands, thanks for pointing that out.


(In reply to comment #6)
&gt; &gt; The source map might be located in an app bundle on the device (back-end) and no content related to the app is on the front-end machine.
&gt; 
&gt; So to make sure I understand, you want to ask debug target to send you back something located on its filesystem. Debug target&apos;s responsibility is to make sure this filesystem access is sufficiently sandboxed. I.e.:
&gt; 
&gt; Client -&gt; Remote Debugging Protocol -&gt; WebCore -&gt; WebKit -&gt; FileSystem -&gt; WebCore -&gt; Remote Debugging Protocol Response -&gt; Client.

Correct. You raise a good point about security though. I&apos;ll need to think about that. This API is slightly different from running an XHR through the JS Console (already possible). The exception here is that the API being proposed AllowsCrossOrigin access, and maybe that is enough to be a cause for concern.


&gt; Sounds like too much work for supporting specific deployment scenario. Is this for release deployment or for debugging purposes only?

An app bundle my include their own myapp:// URL protocol and hooks. So a page with a &lt;script src=&quot;myapp://script.js&quot;&gt; with &quot;//@ sourceMappingURL=script.map.js&quot; would resolve the source map to &quot;myapp://script.map.js&quot;.  That URL would be loadable on the debug target but would not be loadable (or be potentially incorrect) from the host.


&gt; Alternatively, you could use data urls for source maps and hence get rid of the sources lookup altogether.

That is true, that can significantly increase the file-size of the script loaded. Developers can make it so data url source maps are only included while they are debugging their applications and absent in production / release builds. This sounds acceptable, but requires the developer to do a bit more work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896205</commentid>
    <comment_count>9</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-06-02 07:10:11 -0700</bug_when>
    <thetext>For all the shit Chrome folks gave us about this, they just did pretty much this exact same thing in Blink.

https://chromium.googlesource.com/chromium/blink/+/5bf5cf554eb1059711a450d8dc8ddbf0eef817f3

We should proceed with this approach. I like their simplified version of just one method in the protocol, unless we have reason for doing it our own way. Filtering from the Timeline?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896206</commentid>
    <comment_count>10</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-06-02 07:13:06 -0700</bug_when>
    <thetext>I think they single method approach is best. FrontendRequestId is not needed since method calls in the protocol can have async returns now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896255</commentid>
    <comment_count>11</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-06-02 12:09:24 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; We should proceed with this approach. I like their simplified version of just one method in the protocol, unless we have reason for doing it our own way. Filtering from the Timeline?

Correct. I did filtering so that resources requested through this API don&apos;t show up in the Resources Sidebar / Timeline as if it was a resource loaded by the page; because in reality it was a resource loaded by the frontend via the inspected page.  I thinking showing the resources that way can be misleading. However we can revisit that decision.

We can still do the single request approach, and I would prefer it. I just wasn&apos;t aware that it existed at the time I wrote this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896283</commentid>
    <comment_count>12</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-06-02 18:28:51 -0700</bug_when>
    <thetext>Ok, I agree we should filter them out. Lets do that and a single method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896505</commentid>
    <comment_count>13</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-06-03 09:59:54 -0700</bug_when>
    <thetext>Note that there is no way to access file:/// resources using this protocol method in Blink. We thought of this solution as a reasonable compromise given that files can be accessed using workspace in Blink.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896573</commentid>
    <comment_count>14</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-06-03 12:30:14 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Note that there is no way to access file:/// resources using this protocol method in Blink. We thought of this solution as a reasonable compromise given that files can be accessed using workspace in Blink.

What if you need to access a file:/// resource? E.g. a sourceMappingURL to a file:// path?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896593</commentid>
    <comment_count>15</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-06-03 13:44:03 -0700</bug_when>
    <thetext>Blink would not support this case unless workspace is used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988339</commentid>
    <comment_count>16</comment_count>
      <attachid>226167</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-03-07 14:01:04 -0800</bug_when>
    <thetext>Created attachment 226167
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988388</commentid>
    <comment_count>17</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-03-07 15:39:20 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=226167&amp;action=review

Would be nice to have at least a protocol test for this. Especially if we add support for a &quot;base64Encoded&quot; param.

r=me

&gt; Source/WebCore/inspector/InspectorResourceAgent.cpp:310
&gt; +    auto hiddenResult = m_hiddenRequestIdentifiers.find(identifier);
&gt; +    if (hiddenResult != m_hiddenRequestIdentifiers.end()) {
&gt; +        m_hiddenRequestIdentifiers.remove(hiddenResult);
&gt; +        return;
&gt; +    }

HashSet::remove(ValueType) does exactly this, and returns a boolean if it removed or not. true if found, false if not. So this could be:

    if (m_hiddenRequestIdentifiers.remove(identifier))
        return;

I&apos;ll leave it up to you if you find that non-obvious.

&gt; Source/WebCore/inspector/InspectorResourceAgent.cpp:340
&gt; +    auto hiddenResult = m_hiddenRequestIdentifiers.find(identifier);
&gt; +    if (hiddenResult != m_hiddenRequestIdentifiers.end()) {
&gt; +        m_hiddenRequestIdentifiers.remove(hiddenResult);
&gt; +        return;
&gt; +    }

Ditto.

&gt; Source/WebCore/inspector/InspectorResourceAgent.cpp:638
&gt; +class LoadResourceListener : public EventListener {

Nit: final

&gt; Source/WebCore/inspector/InspectorResourceAgent.cpp:659
&gt; +            m_callback-&gt;sendFailure(&quot;Error loading resource&quot;);

Nit: These sendFailure calls can be ASCIILiteral.

&gt; Source/WebCore/inspector/InspectorResourceAgent.cpp:673
&gt; +    }

It would be great to handle non-text content here by base64 encoding it.

InspectorPageAgent uses (hasTextContent) to check if the resource needs to be base64 encoded or not. It checks the CachedResource type / InspectorPageAgent::ResourceType type. If need be, we could assume certain mime types are text (text/, *xml*) and assume anything else is not. It is not strictly necessary to do this now, but if we decide to use this in the frontend for a non-text resource, it would be good if it worked with older backends.

&gt; Source/WebCore/inspector/InspectorResourceAgent.cpp:693
&gt; +        *errorString = &quot;No Document instance for the specified frame&quot;;

Nit: These errorString assignments can be ASCIILiteral.

&gt; Source/WebCore/inspector/InspectorResourceAgent.cpp:697
&gt; +    URL url = document-&gt;completeURL(urlString);

Style: I would put this down below, next to where it is used.

&gt; Source/WebCore/inspector/protocol/Network.json:203
&gt; +                { &quot;name&quot;: &quot;content&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Resource content.&quot; },
&gt; +                { &quot;name&quot;: &quot;mimeType&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Resource mimeType.&quot; }

I think ideally this should have a &quot;base64Encoded&quot; parameter:

    { &quot;name&quot;: &quot;base64Encoded&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;True, if content was sent as base64.&quot; }

Currently we always assume the content is text and not base64Encoded. But in the future, we may attempt to load a resource, like an image, that may not be text.

&gt; Source/WebCore/platform/network/ResourceRequestBase.h:144
&gt; +        // Whether this request should be hidden from the Inspector.
&gt; +        bool hiddenFromInspector() const { return m_hiddenFromInspector; }
&gt; +        void setHiddenFromInspector(bool hiddenFromInspector) { m_hiddenFromInspector = hiddenFromInspector; }

Nit: ENABLE(INSPECTOR)?

&gt; Source/WebInspectorUI/UserInterface/Models/SourceMapResource.js:76
&gt; +                // FIXME: We don&apos;t know the MIME-type for inline content. Guess by analyzing the content?
&gt; +                // Guess by using the type of the original resource?
&gt; +                sourceMapResourceLoaded.call(this, null, inlineContent, &quot;text/javascript&quot;);

Ugh, this is why I proposed inlineContent be a dataURL on the source map dev list =/

&gt; Source/WebInspectorUI/UserInterface/Models/SourceMapResource.js:96
&gt; +            // FIXME: Add support for picking the best MIME-type. Right now the file extension is the best bet.
&gt; +            mimeType = fileExtensionMIMEType;

I agree. I don&apos;t think servers will be sending the right file extension right now for things like SCSS/Sass/Less/TypeScript. File extension is probably preferred.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988513</commentid>
    <comment_count>18</comment_count>
      <attachid>226204</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-03-07 23:46:56 -0800</bug_when>
    <thetext>Created attachment 226204
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988514</commentid>
    <comment_count>19</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-03-07 23:48:13 -0800</bug_when>
    <thetext>Adding base64Encoded is not trival. The CachedResource type is always XHR, which is treated as text by the page agent. Making it a MIME-type check makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988515</commentid>
    <comment_count>20</comment_count>
      <attachid>226204</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-07 23:48:22 -0800</bug_when>
    <thetext>Comment on attachment 226204
Patch

Rejecting attachment 226204 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 226204, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
/ResourceRequestBase.h
patching file Source/WebCore/xml/XMLHttpRequest.cpp
patching file Source/WebCore/xml/XMLHttpRequest.h
patching file Source/WebInspectorUI/UserInterface/Controllers/SourceMapManager.js
patching file Source/WebInspectorUI/UserInterface/Models/SourceMapResource.js
patching file Source/WebInspectorUI/UserInterface/Protocol/InspectorWebBackendCommands.js

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: http://webkit-queues.appspot.com/results/6150659757834240</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988548</commentid>
    <comment_count>21</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-03-08 04:50:50 -0800</bug_when>
    <thetext>https://trac.webkit.org/r165331</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192569</attachid>
            <date>2013-03-11 15:08:21 -0700</date>
            <delta_ts>2014-03-07 14:01:01 -0800</delta_ts>
            <desc>[PATCH] Proposed Async XHR through Backend with cross origin requests allowed</desc>
            <filename>proposed-fix-async-1.patch</filename>
            <type>text/plain</type>
            <size>24175</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgppbmRleCBhYjIxOTc3Li43NDcx
NGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24K
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCkBAIC04NzYsNiAr
ODc2LDExIEBACiAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSByZXF1ZXN0
IGlkZW50aWZpZXIuIgogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAiaWQiOiAiRnJvbnRlbmRSZXF1ZXN0SWQiLAorICAgICAgICAgICAgICAgICJ0eXBlIjog
InN0cmluZyIsCisgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSByZXF1ZXN0
IGlkZW50aWZpZXIgcHJvdmlkZWQgYnkgdGhlIGZyb250ZW5kLiIKKyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgImlkIjogIlRpbWVzdGFtcCIsCiAgICAgICAg
ICAgICAgICAgInR5cGUiOiAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiTnVtYmVyIG9mIHNlY29uZHMgc2luY2UgZXBvY2guIgpAQCAtOTc3LDYgKzk4MiwxNiBAQAog
ICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgImlkIjogIkZyb250ZW5kTG9hZFJlc3BvbnNlIiwKKyAgICAgICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGcm9udGVu
ZCBsb2FkIHJlc3BvbnNlIGZvciBhIHN1Y2Nlc3NmdWwgbG9hZFJlc291cmNlRm9yRnJvbnRlbmQg
cmVxdWVzdC4iLAorICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInJlc3BvbnNlIiwgIiRyZWYiOiAiUmVzcG9uc2UiLCAiZGVzY3Jp
cHRpb24iOiAiSFRUUCBSZXNwb25zZSBkYXRhLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJib2R5IiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc3BvbnNl
IGJvZHkuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJhc2U2NEVuY29kZWQi
LCAidHlwZSI6ICJib29sZWFuIiwgImRlc2NyaXB0aW9uIjogIlRydWUsIGlmIGNvbnRlbnQgd2Fz
IHNlbnQgYXMgYmFzZTY0LiIgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgImlkIjogIkluaXRpYXRvciIsCiAgICAgICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3QgaW5pdGlhdG9yLiIsCkBAIC0xMDU4LDYg
KzEwNzMsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjYWNoZURpc2FibGVk
IiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJDYWNoZSBkaXNhYmxlZCBzdGF0
ZS4iIH0KICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJUb2dnbGVzIGlnbm9yaW5nIGNhY2hlIGZvciBlYWNoIHJlcXVlc3QuIElmIDxjb2RlPnRydWU8
L2NvZGU+LCBjYWNoZSB3aWxsIG5vdCBiZSB1c2VkLiIKKyAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlRm9yRnJvbnRlbmQi
LAorICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImZyb250ZW5kSWQiLCAiJHJlZiI6ICJGcm9udGVuZFJlcXVlc3RJZCIsICJkZXNj
cmlwdGlvbiI6ICJGcm9udGVuZCBwcm92aWRlZCBpZGVudGlmaWVyIHRvIHRyYWNrIHRoaXMgcmVx
dWVzdC4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZnJhbWVJZCIsICIkcmVm
IjogIkZyYW1lSWQiLCAiZGVzY3JpcHRpb24iOiAiRnJhbWUgdG8gbG9hZCB0aGUgcmVzb3VyY2Ug
ZnJvbS4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidXJsIiwgInR5cGUiOiAi
c3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlVSTCBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZC4iIH0K
KyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2Fk
IGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBh
Z2UuIFRoZXJlIHdpbGwgYmUgYSByZXNwb25zZSByZXNvdXJjZUxvYWRlZEZvckZyb250ZW5kIGV2
ZW50IGNvbnRhaW5pbmcgdGhlIGRhdGEuIiwKKyAgICAgICAgICAgICAgICAiaGlkZGVuIjogdHJ1
ZQogICAgICAgICAgICAgfQogICAgICAgICBdLAogICAgICAgICAiZXZlbnRzIjogWwpAQCAtMTIw
Miw2ICsxMjI3LDE4IEBACiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzcG9uc2Ui
LCAiJHJlZiI6ICJXZWJTb2NrZXRGcmFtZSIsICJkZXNjcmlwdGlvbiI6ICJXZWJTb2NrZXQgcmVz
cG9uc2UgZGF0YS4iIH0KICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICJoaWRk
ZW4iOiB0cnVlCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICJuYW1lIjogInJlc291cmNlTG9hZGVkRm9yRnJvbnRlbmQiLAorICAgICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJGaXJlZCB3aGVuIHRoZSBsb2FkUmVzb3VyY2VGb3JGcm9udGVuZCByZXF1
ZXN0IGlzIGNvbXBsZXRlZCwgY29udGFpbnMgZWl0aGVyIHRoZSByZXNwb25zZSBvciBlcnJvclRl
eHQuIiwKKyAgICAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJmcm9udGVuZElkIiwgIiRyZWYiOiAiRnJvbnRlbmRSZXF1ZXN0SWQiLCAi
ZGVzY3JpcHRpb24iOiAiRnJvbnRlbmQgaWRlbnRpZmllciBwcm92aWRlZCB3aXRoIHRoZSByZXF1
ZXN0LiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXF1ZXN0SWQiLCAiJHJl
ZiI6ICJSZXF1ZXN0SWQiLCAiZGVzY3JpcHRpb24iOiAiUmVxdWVzdCBpZGVudGlmaWVyLiIgfSwK
KyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmcmFtZUlkIiwgIiRyZWYiOiAiRnJhbWVJ
ZCIsICJkZXNjcmlwdGlvbiI6ICJGcmFtZSBpZGVudGlmaWVyLiIgfSwKKyAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJyZXNwb25zZSIsICIkcmVmIjogIkZyb250ZW5kTG9hZFJlc3BvbnNl
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlJlc3BvbnNlIGRhdGEgaWYgdGhl
IHJlc291cmNlIGxvYWRlZCBzdWNjZXNzZnVsbHkuIiB9LAorICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImVycm9yVGV4dCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUs
ICJkZXNjcmlwdGlvbiI6ICJVc2VyIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgaWYgdGhlIHJlc291
cmNlIGxvYWQgZmFpbGVkLiIgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAg
ImhpZGRlbiI6IHRydWUKICAgICAgICAgICAgIH0KICAgICAgICAgXQogICAgIH0sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCmluZGV4
IGRhOTJjOWUuLjc4OGJlM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCkBAIC0yNzEsOCArMjcxLDYgQEAgdm9pZCBJbnNwZWN0
b3JDb25zb2xlQWdlbnQ6OmRpZEZpbmlzaFhIUkxvYWRpbmcodW5zaWduZWQgbG9uZyByZXF1ZXN0
SWRlbnRpZmllciwKICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAiWEhSIGZpbmlzaGVkIGxvYWRp
bmc6IFwiIiArIHVybCArICJcIi4iOwogICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlKE5ldHdv
cmtNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRGVidWdNZXNzYWdlTGV2ZWwsIG1lc3Nh
Z2UsIHNlbmRVUkwsIHNlbmRMaW5lTnVtYmVyLCAwLCByZXF1ZXN0SWRlbnRpZmllcik7CiAgICAg
fQotCi0KIH0KIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpZFJlY2VpdmVSZXNwb25z
ZSh1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JSZXNvdXJjZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmNwcAppbmRleCBmYmZmM2ExLi40NmRjZGFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCkBAIC0xNDcs
NyArMTQ3LDYgQEAgc3RhdGljIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3Bv
bnNlPiBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UKICAgICBpZiAocmVzcG9uc2UuaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0KICAgICBkb3VibGUgc3RhdHVzOwogICAgIFN0
cmluZyBzdGF0dXNUZXh0OwogICAgIGlmIChyZXNwb25zZS5yZXNvdXJjZUxvYWRJbmZvKCkgJiYg
cmVzcG9uc2UucmVzb3VyY2VMb2FkSW5mbygpLT5odHRwU3RhdHVzQ29kZSkgewpAQCAtMjE0LDYg
KzIxMywxNSBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TAogICAgIFN0cmluZyByZXF1ZXN0SWQg
PSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKTsKICAgICBtX3Jlc291
cmNlc0RhdGEtPnJlc291cmNlQ3JlYXRlZChyZXF1ZXN0SWQsIG1fcGFnZUFnZW50LT5sb2FkZXJJ
ZChsb2FkZXIpKTsKIAorICAgIGlmICghbV9mcm9udGVuZExvYWRSZXF1ZXN0SWRlbnRpZmllci5p
c051bGwoKSkgeworICAgICAgICBtX2Zyb250ZW5kTG9hZFJlcXVlc3RJZGVudGlmaWVycy5zZXQo
cmVxdWVzdElkLCBtX2Zyb250ZW5kTG9hZFJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICAgICAgbV9m
cm9udGVuZExvYWRSZXF1ZXN0SWRlbnRpZmllciA9IFN0cmluZygpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKG1fZnJvbnRlbmRMb2FkUmVxdWVzdElkZW50aWZpZXJzLmNvbnRh
aW5zKHJlcXVlc3RJZCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGhlYWRlcnMgPSBtX3N0YXRlLT5nZXRPYmplY3QoUmVzb3VyY2VBZ2VudFN0YXRlOjpl
eHRyYVJlcXVlc3RIZWFkZXJzKTsKIAogICAgIGlmIChoZWFkZXJzKSB7CkBAIC0yNDAsMTQgKzI0
OCwxOCBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TAogCiB2b2lkIEluc3BlY3RvclJlc291cmNl
QWdlbnQ6Om1hcmtSZXNvdXJjZUFzQ2FjaGVkKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsK
LSAgICBtX2Zyb250ZW5kLT5yZXF1ZXN0U2VydmVkRnJvbUNhY2hlKElkZW50aWZpZXJzRmFjdG9y
eTo6cmVxdWVzdElkKGlkZW50aWZpZXIpKTsKKyAgICBTdHJpbmcgcmVxdWVzdElkID0gSWRlbnRp
ZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllcik7CisgICAgaWYgKG1fZnJvbnRlbmRM
b2FkUmVxdWVzdElkZW50aWZpZXJzLmNvbnRhaW5zKHJlcXVlc3RJZCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fZnJvbnRlbmQtPnJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGUocmVxdWVzdElkKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQog
ewogICAgIFN0cmluZyByZXF1ZXN0SWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChp
ZGVudGlmaWVyKTsKKyAgICAKICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3Bv
bnNlPiByZXNvdXJjZVJlc3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJl
c3BvbnNlLCBsb2FkZXIpOwotCiAgICAgYm9vbCBpc05vdE1vZGlmaWVkID0gcmVzcG9uc2UuaHR0
cFN0YXR1c0NvZGUoKSA9PSAzMDQ7CiAKICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3Vy
Y2UgPSAwOwpAQCAtMjc1LDYgKzI4NywxNCBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6
OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZQogCiAg
ICAgbV9yZXNvdXJjZXNEYXRhLT5yZXNwb25zZVJlY2VpdmVkKHJlcXVlc3RJZCwgbV9wYWdlQWdl
bnQtPmZyYW1lSWQobG9hZGVyLT5mcmFtZSgpKSwgcmVzcG9uc2UpOwogICAgIG1fcmVzb3VyY2Vz
RGF0YS0+c2V0UmVzb3VyY2VUeXBlKHJlcXVlc3RJZCwgdHlwZSk7CisKKyAgICBGcm9udGVuZExv
YWRSZXF1ZXN0SWRlbnRpZmllcnNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9mcm9udGVuZExvYWRSZXF1
ZXN0SWRlbnRpZmllcnMuZmluZChyZXF1ZXN0SWQpOworICAgIGlmIChpdCAhPSBtX2Zyb250ZW5k
TG9hZFJlcXVlc3RJZGVudGlmaWVycy5lbmQoKSkgeworICAgICAgICBTdHJpbmcgZnJvbnRlbmRM
b2FkSWRlbnRpZmllciA9IGl0LT52YWx1ZTsKKyAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlRm9y
RnJvbnRlbmRSZXF1ZXN0KGZyb250ZW5kTG9hZElkZW50aWZpZXIsIHJlc291cmNlUmVzcG9uc2Up
OworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgbV9mcm9udGVuZC0+cmVzcG9uc2VSZWNl
aXZlZChyZXF1ZXN0SWQsIG1fcGFnZUFnZW50LT5mcmFtZUlkKGxvYWRlci0+ZnJhbWUoKSksIG1f
cGFnZUFnZW50LT5sb2FkZXJJZChsb2FkZXIpLCBjdXJyZW50VGltZSgpLCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnJlc291cmNlVHlwZUpzb24odHlwZSksIHJlc291cmNlUmVzcG9uc2UpOwogICAgIC8v
IElmIHdlIHJldmFsaWRhdGVkIHRoZSByZXNvdXJjZSBhbmQgZ290IE5vdCBtb2RpZmllZCwgc2Vu
ZCBjb250ZW50IGxlbmd0aCBmb2xsb3dpbmcgZGlkUmVjZWl2ZVJlc3BvbnNlCiAgICAgLy8gYXMg
dGhlcmUgd2lsbCBiZSBubyBjYWxscyB0byBkaWRSZWNlaXZlRGF0YSBmcm9tIHRoZSBuZXR3b3Jr
IHN0YWNrLgpAQCAtMjk3LDYgKzMxNyw5IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
ZGlkUmVjZWl2ZURhdGEodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBjaGFyCiAgICAg
ICAgICAgICBtX3Jlc291cmNlc0RhdGEtPm1heWJlQWRkUmVzb3VyY2VEYXRhKHJlcXVlc3RJZCwg
ZGF0YSwgZGF0YUxlbmd0aCk7CiAgICAgfQogCisgICAgaWYgKG1fZnJvbnRlbmRMb2FkUmVxdWVz
dElkZW50aWZpZXJzLmNvbnRhaW5zKHJlcXVlc3RJZCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IG1fZnJvbnRlbmQtPmRhdGFSZWNlaXZlZChyZXF1ZXN0SWQsIGN1cnJlbnRUaW1lKCksIGRhdGFM
ZW5ndGgsIGVuY29kZWREYXRhTGVuZ3RoKTsKIH0KIApAQCAtMzEwLDYgKzMzMywxMyBAQCB2b2lk
IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBEb2N1bWVudAogCiAgICAgbV9yZXNvdXJjZXNEYXRhLT5tYXliZURlY29kZURh
dGFUb0NvbnRlbnQocmVxdWVzdElkKTsKIAorICAgIEZyb250ZW5kTG9hZFJlcXVlc3RJZGVudGlm
aWVyc01hcDo6aXRlcmF0b3IgaXQgPSBtX2Zyb250ZW5kTG9hZFJlcXVlc3RJZGVudGlmaWVycy5m
aW5kKHJlcXVlc3RJZCk7CisgICAgaWYgKGl0ICE9IG1fZnJvbnRlbmRMb2FkUmVxdWVzdElkZW50
aWZpZXJzLmVuZCgpKSB7CisgICAgICAgIFN0cmluZyBmcm9udGVuZExvYWRJZGVudGlmaWVyID0g
aXQtPnZhbHVlOworICAgICAgICBkaWRGaW5pc2hMb2FkaW5nRnJvbnRlbmRSZXF1ZXN0KGZyb250
ZW5kTG9hZElkZW50aWZpZXIsIHJlcXVlc3RJZCwgbG9hZGVyKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGlmICghZmluaXNoVGltZSkKICAgICAgICAgZmluaXNoVGltZSA9IGN1cnJl
bnRUaW1lKCk7CiAKQEAgLTMyOCw2ICszNTgsMTMgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50OjpkaWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG8K
ICAgICAgICAgfQogICAgIH0KIAorICAgIEZyb250ZW5kTG9hZFJlcXVlc3RJZGVudGlmaWVyc01h
cDo6aXRlcmF0b3IgaXQgPSBtX2Zyb250ZW5kTG9hZFJlcXVlc3RJZGVudGlmaWVycy5maW5kKHJl
cXVlc3RJZCk7CisgICAgaWYgKGl0ICE9IG1fZnJvbnRlbmRMb2FkUmVxdWVzdElkZW50aWZpZXJz
LmVuZCgpKSB7CisgICAgICAgIFN0cmluZyBmcm9udGVuZExvYWRJZGVudGlmaWVyID0gaXQtPnZh
bHVlOworICAgICAgICBkaWRGYWlsTG9hZGluZ0Zyb250ZW5kUmVxdWVzdChmcm9udGVuZExvYWRJ
ZGVudGlmaWVyLCByZXF1ZXN0SWQsIGxvYWRlciwgZXJyb3IpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCiAgICAgYm9vbCBjYW5jZWxlZCA9IGVycm9yLmlzQ2FuY2VsbGF0aW9uKCk7CiAgICAg
bV9mcm9udGVuZC0+bG9hZGluZ0ZhaWxlZChyZXF1ZXN0SWQsIGN1cnJlbnRUaW1lKCksIGVycm9y
LmxvY2FsaXplZERlc2NyaXB0aW9uKCksIGNhbmNlbGVkID8gJmNhbmNlbGVkIDogMCk7CiB9CkBA
IC0zNDAsNiArMzc3LDE1IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkTG9hZFJl
c291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkCiAgICAgU3RyaW5nIHJl
cXVlc3RJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpOwogICAg
IG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VDcmVhdGVkKHJlcXVlc3RJZCwgbG9hZGVySWQpOwog
ICAgIG1fcmVzb3VyY2VzRGF0YS0+YWRkQ2FjaGVkUmVzb3VyY2UocmVxdWVzdElkLCByZXNvdXJj
ZSk7CisKKyAgICBGcm9udGVuZExvYWRSZXF1ZXN0SWRlbnRpZmllcnNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9mcm9udGVuZExvYWRSZXF1ZXN0SWRlbnRpZmllcnMuZmluZChyZXF1ZXN0SWQpOworICAg
IGlmIChpdCAhPSBtX2Zyb250ZW5kTG9hZFJlcXVlc3RJZGVudGlmaWVycy5lbmQoKSkgeworICAg
ICAgICBTdHJpbmcgZnJvbnRlbmRMb2FkSWRlbnRpZmllciA9IGl0LT52YWx1ZTsKKyAgICAgICAg
ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yRnJvbnRlbmRSZXF1ZXN0KGZyb250ZW5kTG9hZElkZW50aWZp
ZXIsIGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZXNvdXJjZS0+cmVzcG9uc2UoKSwg
bG9hZGVyKSk7CisgICAgICAgIGRpZEZpbmlzaExvYWRpbmdGcm9udGVuZFJlcXVlc3QoZnJvbnRl
bmRMb2FkSWRlbnRpZmllciwgcmVxdWVzdElkLCBsb2FkZXIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCiAgICAgaWYgKHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlJhd1Jl
c291cmNlKSB7CiAgICAgICAgIENhY2hlZFJhd1Jlc291cmNlKiByYXdSZXNvdXJjZSA9IHN0YXRp
Y19jYXN0PENhY2hlZFJhd1Jlc291cmNlKj4ocmVzb3VyY2UpOwogICAgICAgICBTdHJpbmcgcmF3
UmVxdWVzdElkID0gSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQocmF3UmVzb3VyY2UtPmlk
ZW50aWZpZXIoKSk7CkBAIC0zNTEsNiArMzk3LDU5IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudDo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2Fk
CiAgICAgbV9mcm9udGVuZC0+cmVxdWVzdFNlcnZlZEZyb21NZW1vcnlDYWNoZShyZXF1ZXN0SWQs
IGZyYW1lSWQsIGxvYWRlcklkLCBsb2FkZXItPnVybCgpLnN0cmluZygpLCBjdXJyZW50VGltZSgp
LCBpbml0aWF0b3JPYmplY3QsIGJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVzb3VyY2UoKnJlc291cmNl
LCBsb2FkZXIpKTsKIH0KIAordm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZl
UmVzcG9uc2VGb3JGcm9udGVuZFJlcXVlc3QoY29uc3QgU3RyaW5nJiBmcm9udGVuZExvYWRJZGVu
dGlmaWVyLCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4gcmVzcG9u
c2UpCit7CisgICAgRnJvbnRlbmRMb2FkUmVzcG9uc2VzTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
bV9mcm9udGVuZExvYWRSZXNwb25zZXMuYWRkKGZyb250ZW5kTG9hZElkZW50aWZpZXIsIHJlc3Bv
bnNlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQor
Cit2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZEZpbmlzaExvYWRpbmdGcm9udGVuZFJl
cXVlc3QoY29uc3QgU3RyaW5nJiBmcm9udGVuZExvYWRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK3sKKyAgICBTdHJpbmcgZnJhbWVJ
ZCA9IG1fcGFnZUFnZW50LT5mcmFtZUlkKGxvYWRlci0+ZnJhbWUoKSk7CisKKyAgICBGcm9udGVu
ZExvYWRSZXNwb25zZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9mcm9udGVuZExvYWRSZXNwb25zZXMu
ZmluZChmcm9udGVuZExvYWRJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9mcm9udGVu
ZExvYWRSZXNwb25zZXMuZW5kKCkpOworICAgIGlmIChpdCA9PSBtX2Zyb250ZW5kTG9hZFJlc3Bv
bnNlcy5lbmQoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JUZXh0ID0gQVNDSUlMaXRlcmFsKCJD
b3VsZCBub3QgZmluZCByZXNwb25zZSBkYXRhIGZvciByZXF1ZXN0Iik7CisgICAgICAgIG1fZnJv
bnRlbmQtPnJlc291cmNlTG9hZGVkRm9yRnJvbnRlbmQoZnJvbnRlbmRMb2FkSWRlbnRpZmllciwg
cmVxdWVzdElkLCBmcmFtZUlkLCAwLCAmZXJyb3JUZXh0KTsKKyAgICAgICAgcmVtb3ZlRnJvbnRl
bmRMb2FkUmVxdWVzdChmcm9udGVuZExvYWRJZGVudGlmaWVyLCByZXF1ZXN0SWQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3JUZXh0OworICAgIFN0cmlu
ZyBjb250ZW50OworICAgIGJvb2wgYmFzZTY0RW5jb2RlZCA9IGZhbHNlOworICAgIGdldFJlc3Bv
bnNlQm9keSgmZXJyb3JUZXh0LCByZXF1ZXN0SWQsICZjb250ZW50LCAmYmFzZTY0RW5jb2RlZCk7
CisgICAgQVNTRVJUKGVycm9yVGV4dC5pc051bGwoKSk7CisgICAgaWYgKCFlcnJvclRleHQuaXNO
dWxsKCkpIHsKKyAgICAgICAgbV9mcm9udGVuZC0+cmVzb3VyY2VMb2FkZWRGb3JGcm9udGVuZChm
cm9udGVuZExvYWRJZGVudGlmaWVyLCByZXF1ZXN0SWQsIGZyYW1lSWQsIDAsICZlcnJvclRleHQp
OworICAgICAgICByZW1vdmVGcm9udGVuZExvYWRSZXF1ZXN0KGZyb250ZW5kTG9hZElkZW50aWZp
ZXIsIHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBUeXBlQnVpbGRl
cjo6TmV0d29yazo6UmVzcG9uc2UqIHJlc291cmNlUmVzcG9uc2VPYmplY3QgPSBpdC0+dmFsdWUu
Z2V0KCk7CisgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpGcm9udGVuZExvYWRSZXNw
b25zZT4gZnJvbnRlbmRMb2FkUmVzcG9uc2UgPSBUeXBlQnVpbGRlcjo6TmV0d29yazo6RnJvbnRl
bmRMb2FkUmVzcG9uc2U6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRSZXNwb25zZShyZXNvdXJjZVJl
c3BvbnNlT2JqZWN0KQorICAgICAgICAuc2V0Qm9keShjb250ZW50KQorICAgICAgICAuc2V0QmFz
ZTY0RW5jb2RlZChiYXNlNjRFbmNvZGVkKTsKKyAgICBtX2Zyb250ZW5kLT5yZXNvdXJjZUxvYWRl
ZEZvckZyb250ZW5kKGZyb250ZW5kTG9hZElkZW50aWZpZXIsIHJlcXVlc3RJZCwgZnJhbWVJZCwg
ZnJvbnRlbmRMb2FkUmVzcG9uc2UsIDApOworICAgIHJlbW92ZUZyb250ZW5kTG9hZFJlcXVlc3Qo
ZnJvbnRlbmRMb2FkSWRlbnRpZmllciwgcmVxdWVzdElkKTsKK30KKwordm9pZCBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OjpkaWRGYWlsTG9hZGluZ0Zyb250ZW5kUmVxdWVzdChjb25zdCBTdHJpbmcm
IGZyb250ZW5kTG9hZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBEb2N1bWVu
dExvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBTdHJp
bmcgZnJhbWVJZCA9IG1fcGFnZUFnZW50LT5mcmFtZUlkKGxvYWRlci0+ZnJhbWUoKSk7CisgICAg
U3RyaW5nIGVycm9yVGV4dCA9IGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCk7CisgICAgbV9m
cm9udGVuZC0+cmVzb3VyY2VMb2FkZWRGb3JGcm9udGVuZChmcm9udGVuZExvYWRJZGVudGlmaWVy
LCByZXF1ZXN0SWQsIGZyYW1lSWQsIDAsICZlcnJvclRleHQpOworICAgIHJlbW92ZUZyb250ZW5k
TG9hZFJlcXVlc3QoZnJvbnRlbmRMb2FkSWRlbnRpZmllciwgcmVxdWVzdElkKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZW1vdmVGcm9udGVuZExvYWRSZXF1ZXN0KGNvbnN0
IFN0cmluZyYgZnJvbnRlbmRMb2FkSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQp
Cit7CisgICAgbV9mcm9udGVuZExvYWRSZXF1ZXN0SWRlbnRpZmllcnMucmVtb3ZlKHJlcXVlc3RJ
ZCk7CisgICAgbV9mcm9udGVuZExvYWRSZXNwb25zZXMucmVtb3ZlKGZyb250ZW5kTG9hZElkZW50
aWZpZXIpOworfQorCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnNldEluaXRpYWxTY3Jp
cHRDb250ZW50KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VT
dHJpbmcpCiB7CiAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQoSWRlbnRp
ZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHNvdXJjZVN0cmluZyk7CkBAIC0z
NjYsMTcgKzQ2NSwyOSBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlclN0YXJ0ZWRMb2FkaW5nRm9yQ2xpZW50KHVucwogICAgIGlmICghY2xpZW50
KQogICAgICAgICByZXR1cm47CiAKKyAgICBTdHJpbmcgcmVxdWVzdElkID0gSWRlbnRpZmllcnNG
YWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllcik7CisgICAgaWYgKCFtX2Zyb250ZW5kTG9hZFJl
cXVlc3RJZGVudGlmaWVyLmlzTnVsbCgpKSB7ICAgIAorICAgICAgICBtX2Zyb250ZW5kTG9hZFJl
cXVlc3RJZGVudGlmaWVycy5zZXQocmVxdWVzdElkLCBtX2Zyb250ZW5kTG9hZFJlcXVlc3RJZGVu
dGlmaWVyKTsKKyAgICAgICAgbV9mcm9udGVuZExvYWRSZXF1ZXN0SWRlbnRpZmllciA9IFN0cmlu
ZygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fZnJvbnRlbmRMb2FkUmVx
dWVzdElkZW50aWZpZXJzLmNvbnRhaW5zKHJlcXVlc3RJZCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIFBlbmRpbmdYSFJSZXBsYXlEYXRhTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1hIUlJl
cGxheURhdGEuZmluZChjbGllbnQpOwogICAgIGlmIChpdCA9PSBtX3BlbmRpbmdYSFJSZXBsYXlE
YXRhLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBYSFJSZXBsYXlEYXRhKiB4aHJSZXBs
YXlEYXRhID0gaXQtPnZhbHVlLmdldCgpOwotICAgIFN0cmluZyByZXF1ZXN0SWQgPSBJZGVudGlm
aWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKTsKICAgICBtX3Jlc291cmNlc0RhdGEt
PnNldFhIUlJlcGxheURhdGEocmVxdWVzdElkLCB4aHJSZXBsYXlEYXRhKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsTG9hZFhIUihUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgYXN5
bmMsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBo
ZWFkZXJzLCBib29sIGluY2x1ZGVDcmVkZW50aWFscykKIHsKKyAgICBpZiAoIW1fZnJvbnRlbmRM
b2FkUmVxdWVzdElkZW50aWZpZXIuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFJl
ZlB0cjxYSFJSZXBsYXlEYXRhPiB4aHJSZXBsYXlEYXRhID0gWEhSUmVwbGF5RGF0YTo6Y3JlYXRl
KG1ldGhvZCwgdXJsLCBhc3luYywgZm9ybURhdGEsIGluY2x1ZGVDcmVkZW50aWFscyk7CiAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKICAgICBm
b3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBp
dCE9IGVuZDsgKytpdCkKQEAgLTM5MSwxNSArNTAyLDIzIEBAIHZvaWQgSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6ZGlkRmFpbFhIUkxvYWRpbmcoVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50
KQogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZEZpbmlzaFhIUkxvYWRpbmcoVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlU3RyaW5nKQogeworICAgIFN0cmluZyByZXF1ZXN0SWQgPSBJZGVu
dGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKTsKKyAgICBpZiAobV9mcm9udGVu
ZExvYWRSZXF1ZXN0SWRlbnRpZmllcnMuY29udGFpbnMocmVxdWVzdElkKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgLy8gRm9yIEFzeW5jaHJvbm91cyBYSFJzLCB0aGUgaW5zcGVjdG9yIGNhbiBn
cmFiIHRoZSBkYXRhIGRpcmVjdGx5IG9mZiBvZiB0aGUgQ2FjaGVkUmVzb3VyY2UuIEZvciBzeW5j
IFhIUnMsIHdlIG5lZWQgdG8KICAgICAvLyBwcm92aWRlIHRoZSBkYXRhIGhlcmUsIHNpbmNlIG5v
IENhY2hlZFJlc291cmNlIHdhcyBpbnZvbHZlZC4KICAgICBpZiAobV9sb2FkaW5nWEhSU3luY2hy
b25vdXNseSkKLSAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5zZXRSZXNvdXJjZUNvbnRlbnQoSWRl
bnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHNvdXJjZVN0cmluZyk7Cisg
ICAgICAgIG1fcmVzb3VyY2VzRGF0YS0+c2V0UmVzb3VyY2VDb250ZW50KHJlcXVlc3RJZCwgc291
cmNlU3RyaW5nKTsKICAgICBtX3BlbmRpbmdYSFJSZXBsYXlEYXRhLnJlbW92ZShjbGllbnQpOwog
fQogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVYSFJSZXNwb25zZSh1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7CisgICAgU3RyaW5nIHJlcXVlc3RJZCA9IElkZW50
aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpOworICAgIGlmIChtX2Zyb250ZW5k
TG9hZFJlcXVlc3RJZGVudGlmaWVycy5jb250YWlucyhyZXF1ZXN0SWQpKQorICAgICAgICByZXR1
cm47CisKICAgICBtX3Jlc291cmNlc0RhdGEtPnNldFJlc291cmNlVHlwZShJZGVudGlmaWVyc0Zh
Y3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgSW5zcGVjdG9yUGFnZUFnZW50OjpYSFJSZXNv
dXJjZSk7CiB9CiAKQEAgLTYyMiw3ICs3NDEsNyBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdl
bnQ6OnJlcGxheVhIUihFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKQogICAg
IEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHhoclJlcGxheURhdGEtPmhlYWRl
cnMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
eGhyUmVwbGF5RGF0YS0+aGVhZGVycygpLmJlZ2luKCk7IGl0IT0gZW5kOyArK2l0KQogICAgICAg
ICB4aHItPnNldFJlcXVlc3RIZWFkZXIoaXQtPmtleSwgaXQtPnZhbHVlLCBJR05PUkVfRVhDRVBU
SU9OKTsKLSAgICB4aHItPnNlbmRGcm9tSW5zcGVjdG9yKHhoclJlcGxheURhdGEtPmZvcm1EYXRh
KCksIElHTk9SRV9FWENFUFRJT04pOworICAgIHhoci0+c2VuZEZvckluc3BlY3RvclhIUlJlcGxh
eSh4aHJSZXBsYXlEYXRhLT5mb3JtRGF0YSgpLCBJR05PUkVfRVhDRVBUSU9OKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpjYW5DbGVhckJyb3dzZXJDYWNoZShFcnJvclN0cmlu
ZyosIGJvb2wqIHJlc3VsdCkKQEAgLTY1Miw2ICs3NzEsNTMgQEAgdm9pZCBJbnNwZWN0b3JSZXNv
dXJjZUFnZW50OjpzZXRDYWNoZURpc2FibGVkKEVycm9yU3RyaW5nKiwgYm9vbCBjYWNoZURpc2Fi
bGVkKQogICAgICAgICBtZW1vcnlDYWNoZSgpLT5ldmljdFJlc291cmNlcygpOwogfQogCit2b2lk
IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmxvYWRSZXNvdXJjZUZvckZyb250ZW5kKEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcm9udGVuZElkLCBjb25zdCBTdHJpbmcm
IGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIEFTU0VSVChtX2Zyb250ZW5kTG9h
ZFJlcXVlc3RJZGVudGlmaWVyLmlzTnVsbCgpKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFn
ZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZnJvbnRlbmRMb2FkUmVxdWVzdElkZW50
aWZpZXJzLmNvbnRhaW5zKGZyb250ZW5kSWQpKSB7CisgICAgICAgICplcnJvclN0cmluZyA9ICJG
cm9udGVuZCBsb2FkIGlkZW50aWZpZXIgYWxyZWFkeSBleGlzdHMiOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Cisg
ICAgaWYgKCFkb2N1bWVudCkgeworICAgICAgICAqZXJyb3JTdHJpbmcgPSAiTm8gRG9jdW1lbnQg
aW5zdGFuY2UgZm9yIHRoZSBzcGVjaWZpZWQgZnJhbWUiOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgS1VSTCBjb21wbGV0ZVVSTCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTCh1cmwpOwor
ICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KGNvbXBsZXRlVVJMKTsKKyNpZiBFTkFCTEUoQ0FD
SEVfUEFSVElUSU9OSU5HKQorICAgIHJlcXVlc3Quc2V0Q2FjaGVQYXJ0aXRpb24oZG9jdW1lbnQt
PnRvcE9yaWdpbigpLT5jYWNoZVBhcnRpdGlvbigpKTsKKyNlbmRpZgorCisgICAgUmVmUHRyPFhN
TEh0dHBSZXF1ZXN0PiB4aHIgPSBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50KTsKKwor
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHhoci0+b3BlbihBU0NJSUxpdGVyYWwoIkdF
VCIpLCBjb21wbGV0ZVVSTCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICAqZXJyb3JTdHJp
bmcgPSAiRXJyb3IgY3JlYXRpbmcgcmVxdWVzdCI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX2Zyb250ZW5kTG9hZFJlcXVlc3RJZGVudGlmaWVyID0gZnJvbnRlbmRJZDsKKyAgICB4
aHItPnNlbmRGb3JJbnNwZWN0b3IoZWMpOworICAgIGlmIChlYykgeworICAgICAgICBtX2Zyb250
ZW5kTG9hZFJlcXVlc3RJZGVudGlmaWVyID0gU3RyaW5nKCk7CisgICAgICAgICplcnJvclN0cmlu
ZyA9ICJFcnJvciBzZW5kaW5nIHJlcXVlc3QiOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUKG1fZnJvbnRlbmRMb2FkUmVxdWVzdElkZW50aWZpZXIuaXNOdWxsKCkpOworICAg
IGlmICghbV9mcm9udGVuZExvYWRSZXF1ZXN0SWRlbnRpZmllci5pc051bGwoKSkKKyAgICAgICAg
bV9mcm9udGVuZExvYWRSZXF1ZXN0SWRlbnRpZmllciA9IFN0cmluZygpOworfQorCiB2b2lkIElu
c3BlY3RvclJlc291cmNlQWdlbnQ6Om1haW5GcmFtZU5hdmlnYXRlZChEb2N1bWVudExvYWRlciog
bG9hZGVyKQogewogICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKFJlc291cmNlQWdlbnRTdGF0
ZTo6Y2FjaGVEaXNhYmxlZCkpCkBAIC02NzAsNiArODM2LDkgQEAgdm9pZCBJbnNwZWN0b3JSZXNv
dXJjZUFnZW50OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmpl
Y3RJbmYKICAgICBpbmZvLmFkZE1lbWJlcihtX3VzZXJBZ2VudE92ZXJyaWRlLCAidXNlckFnZW50
T3ZlcnJpZGUiKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3Jlc291cmNlc0RhdGEsICJyZXNvdXJj
ZXNEYXRhIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9wZW5kaW5nWEhSUmVwbGF5RGF0YSwgInBl
bmRpbmdYSFJSZXBsYXlEYXRhIik7CisgICAgaW5mby5hZGRNZW1iZXIobV9mcm9udGVuZExvYWRS
ZXF1ZXN0SWRlbnRpZmllciwgImZyb250ZW5kTG9hZFJlcXVlc3RJZGVudGlmaWVyIik7CisgICAg
aW5mby5hZGRNZW1iZXIobV9mcm9udGVuZExvYWRSZXF1ZXN0SWRlbnRpZmllcnMsICJmcm9udGVu
ZExvYWRSZXF1ZXN0SWRlbnRpZmllcnMiKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX2Zyb250ZW5k
TG9hZFJlc3BvbnNlcywgImZyb250ZW5kTG9hZFJlc3BvbnNlcyIpOwogICAgIGluZm8uYWRkTWVt
YmVyKG1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yLCAic3R5bGVSZWNhbGN1bGF0aW9uSW5p
dGlhdG9yIik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JSZXNvdXJjZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudC5oCmluZGV4IDQxYzVhNDkuLjFhYTZlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaApAQCAtOTcsNyArOTcs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgdm9pZCBtYXJrUmVzb3VyY2VBc0Nh
Y2hlZCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqIGxhb2RlciwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYsIFJlc291cmNlTG9hZGVyKik7CisgICAgdm9pZCBkaWRSZWNl
aXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciogbG9h
ZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgUmVzb3VyY2VMb2FkZXIqKTsKICAgICB2b2lk
IGRpZFJlY2VpdmVEYXRhKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgY2hhciogZGF0
YSwgaW50IGRhdGFMZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAgICAgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBk
b3VibGUgZmluaXNoVGltZSk7CiAgICAgdm9pZCBkaWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwpAQCAt
MTUzLDYgKzE1Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJCcm93c2VyQ29v
a2llcyhFcnJvclN0cmluZyopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDYWNoZURpc2FibGVkKEVy
cm9yU3RyaW5nKiwgYm9vbCBjYWNoZURpc2FibGVkKTsKIAorICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2VGb3JGcm9udGVuZChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnJvbnRlbmRJ
ZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCk7CisKICAgICB2aXJ0
dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0IE9WRVJS
SURFOwogCiBwcml2YXRlOgpAQCAtMTYwLDYgKzE2MiwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBlbmFibGUoKTsKIAorICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlRm9yRnJvbnRlbmRSZXF1
ZXN0KGNvbnN0IFN0cmluZyYgZnJvbnRlbmRMb2FkSWRlbnRpZmllciwgUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6TmV0d29yazo6UmVzcG9uc2U+KTsKKyAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmdG
cm9udGVuZFJlcXVlc3QoY29uc3QgU3RyaW5nJiBmcm9udGVuZExvYWRJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgRG9jdW1lbnRMb2FkZXIqKTsKKyAgICB2b2lkIGRpZEZhaWxM
b2FkaW5nRnJvbnRlbmRSZXF1ZXN0KGNvbnN0IFN0cmluZyYgZnJvbnRlbmRMb2FkSWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYpOworICAgIHZvaWQgcmVtb3ZlRnJvbnRlbmRMb2FkUmVxdWVzdChjb25zdCBTdHJp
bmcmIGZyb250ZW5kTG9hZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKTsKKwog
ICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAgSW5zcGVjdG9yQ2xpZW50
KiBtX2NsaWVudDsKICAgICBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yayogbV9mcm9udGVuZDsK
QEAgLTE2OSw2ICsxNzYsMTUgQEAgcHJpdmF0ZToKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50KiwgUmVmUHRyPFhIUlJlcGxheURhdGE+ID4gUGVuZGluZ1hIUlJl
cGxheURhdGFNYXA7CiAgICAgUGVuZGluZ1hIUlJlcGxheURhdGFNYXAgbV9wZW5kaW5nWEhSUmVw
bGF5RGF0YTsKKworICAgIFN0cmluZyBtX2Zyb250ZW5kTG9hZFJlcXVlc3RJZGVudGlmaWVyOwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gRnJvbnRlbmRMb2FkUmVxdWVzdElk
ZW50aWZpZXJzTWFwOworICAgIEZyb250ZW5kTG9hZFJlcXVlc3RJZGVudGlmaWVyc01hcCBtX2Zy
b250ZW5kTG9hZFJlcXVlc3RJZGVudGlmaWVyczsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiA+IEZyb250ZW5kTG9hZFJl
c3BvbnNlc01hcDsKKyAgICBGcm9udGVuZExvYWRSZXNwb25zZXNNYXAgbV9mcm9udGVuZExvYWRS
ZXNwb25zZXM7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFhNTEh0dHBSZXF1
ZXN0PiA+IEZyb250ZW5kTG9hZGVyc01hcDsKKyAgICBGcm9udGVuZExvYWRlcnNNYXAgbV9mcm9u
dGVuZExvYWRlcnM7CisKICAgICAvLyBGSVhNRTogSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCBzaG91
bGQgbm93IGJlIGF3YXJlIG9mIHN0eWxlIHJlY2FsY3VsYXRpb24uCiAgICAgUmVmUHRyPFR5cGVC
dWlsZGVyOjpOZXR3b3JrOjpJbml0aWF0b3I+IG1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9y
OwogICAgIGJvb2wgbV9pc1JlY2FsY3VsYXRpbmdTdHlsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwCmluZGV4IGVlMDI0MDAuLjA4MWI1MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcApAQCAtMTkyLDYgKzE5Miw3IEBAIFhNTEh0dHBSZXF1ZXN0OjpYTUxI
dHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNl
Y3VyCiAgICAgLCBtX3VwbG9hZEV2ZW50c0FsbG93ZWQodHJ1ZSkKICAgICAsIG1fdXBsb2FkQ29t
cGxldGUoZmFsc2UpCiAgICAgLCBtX3NhbWVPcmlnaW5SZXF1ZXN0KHRydWUpCisgICAgLCBtX2Fs
bG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cyhmYWxzZSkKICAgICAsIG1fcmVjZWl2ZWRMZW5ndGgoMCkK
ICAgICAsIG1fbGFzdFNlbmRMaW5lTnVtYmVyKDApCiAgICAgLCBtX2V4Y2VwdGlvbkNvZGUoMCkK
QEAgLTczMiw3ICs3MzMsMTMgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZEJ5dGVzRGF0YShj
b25zdCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBFeGNlcHRpb25Db2QKICAgICBjcmVhdGVS
ZXF1ZXN0KGVjKTsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZEZyb21JbnNwZWN0b3Io
UGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBY
TUxIdHRwUmVxdWVzdDo6c2VuZEZvckluc3BlY3RvcihFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBtX2FsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cyA9IHRydWU7CisgICAgc2VuZChlYyk7Cit9CisK
K3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmRGb3JJbnNwZWN0b3JYSFJSZXBsYXkoUGFzc1JlZlB0
cjxGb3JtRGF0YT4gZm9ybURhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIG1fcmVxdWVz
dEVudGl0eUJvZHkgPSBmb3JtRGF0YSA/IGZvcm1EYXRhLT5kZWVwQ29weSgpIDogMDsKICAgICBj
cmVhdGVSZXF1ZXN0KGVjKTsKQEAgLTc4OSw3ICs3OTYsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0
OjpjcmVhdGVSZXF1ZXN0KEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIG9wdGlvbnMuc25pZmZDb250
ZW50ID0gRG9Ob3RTbmlmZkNvbnRlbnQ7CiAgICAgb3B0aW9ucy5wcmVmbGlnaHRQb2xpY3kgPSB1
cGxvYWRFdmVudHMgPyBGb3JjZVByZWZsaWdodCA6IENvbnNpZGVyUHJlZmxpZ2h0OwogICAgIG9w
dGlvbnMuYWxsb3dDcmVkZW50aWFscyA9IChtX3NhbWVPcmlnaW5SZXF1ZXN0IHx8IG1faW5jbHVk
ZUNyZWRlbnRpYWxzKSA/IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgOiBEb05vdEFsbG93U3RvcmVk
Q3JlZGVudGlhbHM7Ci0gICAgb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBVc2VB
Y2Nlc3NDb250cm9sOworICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gbV9h
bGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHMgPyBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHMgOiBVc2VB
Y2Nlc3NDb250cm9sOwogICAgIG9wdGlvbnMuc2VjdXJpdHlPcmlnaW4gPSBzZWN1cml0eU9yaWdp
bigpOwogI2lmIEVOQUJMRShSRVNPVVJDRV9USU1JTkcpCiAgICAgb3B0aW9ucy5pbml0aWF0b3Ig
PSBjYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCkueG1saHR0cHJlcXVlc3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCmluZGV4IGY3MDFmM2EuLmY0YzQ4NGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCkBAIC0xMTQsNyArMTE0LDggQEAgcHVibGljOgogICAg
IHZvaWQgc2V0VGltZW91dCh1bnNpZ25lZCBsb25nIHRpbWVvdXQsIEV4Y2VwdGlvbkNvZGUmKTsK
ICNlbmRpZgogCi0gICAgdm9pZCBzZW5kRnJvbUluc3BlY3RvcihQYXNzUmVmUHRyPEZvcm1EYXRh
PiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2VuZEZvckluc3BlY3RvcihFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBzZW5kRm9ySW5zcGVjdG9yWEhSUmVwbGF5KFBhc3NSZWZQdHI8Rm9y
bURhdGE+LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICAvLyBFeHBvc2UgSFRUUCB2YWxpZGF0aW9u
IG1ldGhvZHMgZm9yIG90aGVyIHVudHJ1c3RlZCByZXF1ZXN0cy4KICAgICBzdGF0aWMgYm9vbCBp
c0FsbG93ZWRIVFRQTWV0aG9kKGNvbnN0IFN0cmluZyYpOwpAQCAtMjMxLDYgKzIzMiw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX3VwbG9hZENvbXBsZXRlOwogCiAgICAgYm9vbCBtX3NhbWVPcmln
aW5SZXF1ZXN0OworICAgIGJvb2wgbV9hbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHM7CiAKICAgICAv
LyBVc2VkIGZvciBvbnByb2dyZXNzIHRyYWNraW5nCiAgICAgbG9uZyBsb25nIG1fcmVjZWl2ZWRM
ZW5ndGg7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226167</attachid>
            <date>2014-03-07 14:01:04 -0800</date>
            <delta_ts>2014-03-07 23:46:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112071-20140307140103.patch</filename>
            <type>text/plain</type>
            <size>31261</size>
            <attacher name="Timothy Hatcher">timothy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0OTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTRjOWE5NGFlN2U5NzRi
YzcyZTU3MTFjMzYwYjM3Y2Q1YmMxZTY1YS4uOTQ5Y2M2YWIwYjMzZjQ3YjBhYjgwNDFmNTZhN2E5
YjQzYjMyMzZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTAzLTA3ICBUaW1v
dGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KKworICAgICAgICBMb2FkIHNvdXJjZSBt
YXBzIGFuZCB0aGVpciByZXNvdXJjZXMgYXN5bmNocm9ub3VzbHkuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjA3MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yRnJhbWVUcmVlKToKKyAgICAgICAgSG9ub3IgdGhlIGhpZGRlbkZyb21JbnNwZWN0
b3IgZmxhZy4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjptYXJrUmVz
b3VyY2VBc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50
OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVz
b3VyY2VBZ2VudDo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JSZXNvdXJjZUFnZW50OjpkaWRGYWlsTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50OjpyZXBsYXlYSFIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6bG9hZFJlc291cmNlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudC5oOgorICAgICAgICBIb25vciB0aGUgaGlkZGVuRnJvbUluc3Bl
Y3RvciBmbGFnIGJ5IGtlZXBpbmcgdHJhY2sgb2YKKyAgICAgICAgaGlkZGVuIGlkZW50aWZpZXJz
IGluIGEgSGFzaFNldC4KKworICAgICAgICAqIGluc3BlY3Rvci9wcm90b2NvbC9OZXR3b3JrLmpz
b246CisgICAgICAgIChOZXR3b3JrLmxvYWRSZXNvdXJjZSk6IEFkZGVkLgorCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpoaWRkZW5Gcm9tSW5zcGVjdG9yKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRIaWRkZW5Gcm9tSW5zcGVjdG9y
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXNvdXJj
ZVJlcXVlc3RCYXNlKToKKyAgICAgICAgQWRkIGEgZmxhZyB0byBoaWRlIHRoZSByZXF1ZXN0IGZy
b20gdGhlIEluc3BlY3Rvci4KKworICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNlbmRGb3JJbnNwZWN0b3IpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kRm9ySW5zcGVjdG9yWEhSUmVwbGF5
KTogUmVuYW1lZC4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1
ZXN0KToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuaDoKKyAgICAgICAgTWFrZSBJbnNw
ZWN0b3IgbG9hZHMgYWxsb3cgY3Jvc3Mtb3JpZ2lucyBhbmQgaGlkZSB0aGVpciByZXF1ZXN0Cisg
ICAgICAgIGZyb20gdGhlIEluc3BlY3RvciBpdHNlbGYuCisKIDIwMTQtMDMtMDMgIEJyaWFuIEJ1
cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggZm9y
IFdpbmRvd3MgYWZ0ZXIgcjE2NDk4Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGFmMmZm
ZTFlYjY4ZDUxZWRkMmEyNWQ4NjQ4YjRlNTY5NzE2ZDM1YjAuLjUwZTVkZWVjNjIwNTY0ZGI0YTI2
YjJmMGUzOWI0YmNlNTlhZWJjMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI1IEBACisyMDE0LTAzLTA3ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4K
KworICAgICAgICBMb2FkIHNvdXJjZSBtYXBzIGFuZCB0aGVpciByZXNvdXJjZXMgYXN5bmNocm9u
b3VzbHkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMjA3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Tb3VyY2VNYXBNYW5hZ2VyLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcE1hbmFnZXIucHJvdG90eXBlLmxvYWRBbmRQYXJzZVNv
dXJjZU1hcCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwTWFuYWdlci5wcm90b3R5
cGUuZG93bmxvYWRTb3VyY2VNYXApOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcE1h
bmFnZXIucHJvdG90eXBlLnNvdXJjZU1hcExvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlTWFwTWFuYWdlci5wcm90b3R5cGUuX2xvYWRBbmRQYXJzZVNvdXJjZU1hcCk6CisgICAg
ICAgIFVzZSBOZXR3b3JrQWdlbnQubG9hZFJlc291cmNlLgorCisgICAgICAgICogVXNlckludGVy
ZmFjZS9Nb2RlbHMvU291cmNlTWFwUmVzb3VyY2UuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlTWFwUmVzb3VyY2UucHJvdG90eXBlLnJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQuc291
cmNlTWFwUmVzb3VyY2VMb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJl
c291cmNlLnByb3RvdHlwZS5jcmVhdGVTb3VyY2VDb2RlVGV4dFJhbmdlKToKKyAgICAgICAgVXNl
IE5ldHdvcmtBZ2VudC5sb2FkUmVzb3VyY2UuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1By
b3RvY29sL0luc3BlY3RvcldlYkJhY2tlbmRDb21tYW5kcy5qczogVXBkYXRlZC4KKwogMjAxNC0w
My0wMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CiAKICAgICAgICAgTWFr
ZSBTdGFydCBUaW1lbGluZSBSZWNvcmRpbmcgaW4gdGhlIERldmVsb3AgbWVudSBzaG93IHRoZSBU
aW1lbGluZSB2aWV3IGFnYWluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcAppbmRleCBjZmVlNWQ4Y2IzMTJmMzBiMDZkMmNjMTJlOGMxZWJhMmFk
NDVhYjZjLi41NmE0MzQ5MjBjYjAyNzgwOWJlNGQ3YWQzMzgwNTYwOGNmZWI4MTY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtOTc5
LDYgKzk3OSw5IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJh
bWVSZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6CiAgICAgZm9yIChWZWN0b3I8Q2Fj
aGVkUmVzb3VyY2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxSZXNvdXJjZXMuYmVnaW4oKTsg
aXQgIT0gYWxsUmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIENhY2hlZFJlc291cmNl
KiBjYWNoZWRSZXNvdXJjZSA9ICppdDsKIAorICAgICAgICBpZiAoY2FjaGVkUmVzb3VyY2UtPnJl
c291cmNlUmVxdWVzdCgpLmhpZGRlbkZyb21JbnNwZWN0b3IoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFt
ZVJlc291cmNlVHJlZTo6UmVzb3VyY2VzPiByZXNvdXJjZU9iamVjdCA9IEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlOjpSZXNvdXJjZXM6OmNyZWF0ZSgpCiAg
ICAgICAgICAgICAuc2V0VXJsKGNhY2hlZFJlc291cmNlLT51cmwoKSkKICAgICAgICAgICAgIC5z
ZXRUeXBlKGNhY2hlZFJlc291cmNlVHlwZUpzb24oKmNhY2hlZFJlc291cmNlKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAppbmRl
eCBhNjU0OGI2Yjc5YmQ1ZmE4NDE0Njg0MWNmNWRmZjZjNTVlNjAzYjkyLi45ZmEzYzA4YTRiMzIw
YzgxMTk4YjE4ZTBjNWIwY2JkYjQ2NTY3YTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCkBAIC03NSw2ICs3NSw4IEBACiAK
IHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKK3R5cGVkZWYgSW5zcGVjdG9yOjpJbnNwZWN0
b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpMb2FkUmVzb3VyY2VDYWxsYmFjayBM
b2FkUmVzb3VyY2VDYWxsYmFjazsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIEluc3Bl
Y3RvclJlc291cmNlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
Okluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCkBAIC0xODMsNiArMTg1LDExIEBAIElu
c3BlY3RvclJlc291cmNlQWdlbnQ6On5JbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkKIAogdm9pZCBJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBEb2N1bWVudExvYWRlciogbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7CisgICAgaWYgKHJl
cXVlc3QuaGlkZGVuRnJvbUluc3BlY3RvcigpKSB7CisgICAgICAgIG1faGlkZGVuUmVxdWVzdElk
ZW50aWZpZXJzLmFkZChpZGVudGlmaWVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IFN0cmluZyByZXF1ZXN0SWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlm
aWVyKTsKICAgICBtX3Jlc291cmNlc0RhdGEtPnJlc291cmNlQ3JlYXRlZChyZXF1ZXN0SWQsIG1f
cGFnZUFnZW50LT5sb2FkZXJJZChsb2FkZXIpKTsKIApAQCAtMjI1LDExICsyMzIsMTcgQEAgdm9p
ZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBEb2N1bWVudEwKIAogdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjptYXJr
UmVzb3VyY2VBc0NhY2hlZCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7CisgICAgaWYgKG1f
aGlkZGVuUmVxdWVzdElkZW50aWZpZXJzLmNvbnRhaW5zKGlkZW50aWZpZXIpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFNlcnZlZEZyb21DYWNo
ZShJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UsIFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKIHsKKyAgICBpZiAo
bV9oaWRkZW5SZXF1ZXN0SWRlbnRpZmllcnMuY29udGFpbnMoaWRlbnRpZmllcikpCisgICAgICAg
IHJldHVybjsKKwogICAgIFN0cmluZyByZXF1ZXN0SWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJl
cXVlc3RJZChpZGVudGlmaWVyKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
TmV0d29yazo6UmVzcG9uc2U+IHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZvclJlc291
cmNlUmVzcG9uc2UocmVzcG9uc2UsIGxvYWRlcik7CiAKQEAgLTI3NCw2ICsyODcsOSBAQCBzdGF0
aWMgYm9vbCBpc0Vycm9yU3RhdHVzQ29kZShpbnQgc3RhdHVzQ29kZSkKIAogdm9pZCBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlRGF0YSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoLCBpbnQgZW5jb2RlZERhdGFMZW5ndGgp
CiB7CisgICAgaWYgKG1faGlkZGVuUmVxdWVzdElkZW50aWZpZXJzLmNvbnRhaW5zKGlkZW50aWZp
ZXIpKQorICAgICAgICByZXR1cm47CisKICAgICBTdHJpbmcgcmVxdWVzdElkID0gSWRlbnRpZmll
cnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllcik7CiAKICAgICBpZiAoZGF0YSkgewpAQCAt
Mjg3LDYgKzMwMywxMiBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVE
YXRhKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgY2hhcgogCiB2b2lkIEluc3BlY3Rv
clJlc291cmNlQWdlbnQ6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBEb2N1bWVudExvYWRlciogbG9hZGVyLCBkb3VibGUgZmluaXNoVGltZSkKIHsKKyAgICBhdXRv
IGhpZGRlblJlc3VsdCA9IG1faGlkZGVuUmVxdWVzdElkZW50aWZpZXJzLmZpbmQoaWRlbnRpZmll
cik7CisgICAgaWYgKGhpZGRlblJlc3VsdCAhPSBtX2hpZGRlblJlcXVlc3RJZGVudGlmaWVycy5l
bmQoKSkgeworICAgICAgICBtX2hpZGRlblJlcXVlc3RJZGVudGlmaWVycy5yZW1vdmUoaGlkZGVu
UmVzdWx0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIFN0cmluZyByZXF1ZXN0SWQg
PSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKTsKICAgICBpZiAobV9y
ZXNvdXJjZXNEYXRhLT5yZXNvdXJjZVR5cGUocmVxdWVzdElkKSA9PSBJbnNwZWN0b3JQYWdlQWdl
bnQ6OkRvY3VtZW50UmVzb3VyY2UpIHsKICAgICAgICAgUmVmUHRyPFJlc291cmNlQnVmZmVyPiBi
dWZmZXIgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPm1haW5SZXNv
dXJjZURhdGEoKTsKQEAgLTMxMSw2ICszMzMsMTIgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50OjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnQK
IAogdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRGYWlsTG9hZGluZyh1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQogeworICAgIGF1dG8gaGlkZGVuUmVzdWx0ID0gbV9oaWRkZW5SZXF1ZXN0SWRl
bnRpZmllcnMuZmluZChpZGVudGlmaWVyKTsKKyAgICBpZiAoaGlkZGVuUmVzdWx0ICE9IG1faGlk
ZGVuUmVxdWVzdElkZW50aWZpZXJzLmVuZCgpKSB7CisgICAgICAgIG1faGlkZGVuUmVxdWVzdElk
ZW50aWZpZXJzLnJlbW92ZShoaWRkZW5SZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgU3RyaW5nIHJlcXVlc3RJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlk
ZW50aWZpZXIpOwogCiAgICAgaWYgKG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VUeXBlKHJlcXVl
c3RJZCkgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpEb2N1bWVudFJlc291cmNlKSB7CkBAIC01OTQs
NiArNjIyLDcgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXBsYXlYSFIoRXJyb3JT
dHJpbmcqLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCkKICNpZiBFTkFCTEUoQ0FDSEVfUEFSVElU
SU9OSU5HKQogICAgIHJlcXVlc3Quc2V0Q2FjaGVQYXJ0aXRpb24obV9wYWdlQWdlbnQtPm1haW5G
cmFtZSgpLT5kb2N1bWVudCgpLT50b3BPcmlnaW4oKS0+Y2FjaGVQYXJ0aXRpb24oKSk7CiAjZW5k
aWYKKwogICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IG1lbW9yeUNhY2hlKCkt
PnJlc291cmNlRm9yUmVxdWVzdChyZXF1ZXN0KTsKICAgICBpZiAoY2FjaGVkUmVzb3VyY2UpCiAg
ICAgICAgIG1lbW9yeUNhY2hlKCktPnJlbW92ZShjYWNoZWRSZXNvdXJjZSk7CkBAIC02MDEsNyAr
NjMwLDkxIEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVwbGF5WEhSKEVycm9yU3Ry
aW5nKiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpCiAgICAgeGhyLT5vcGVuKHhoclJlcGxheURh
dGEtPm1ldGhvZCgpLCB4aHJSZXBsYXlEYXRhLT51cmwoKSwgeGhyUmVwbGF5RGF0YS0+YXN5bmMo
KSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiB4aHJS
ZXBsYXlEYXRhLT5oZWFkZXJzKCkpCiAgICAgICAgIHhoci0+c2V0UmVxdWVzdEhlYWRlcihoZWFk
ZXIua2V5LCBoZWFkZXIudmFsdWUsIElHTk9SRV9FWENFUFRJT04pOwotICAgIHhoci0+c2VuZEZy
b21JbnNwZWN0b3IoeGhyUmVwbGF5RGF0YS0+Zm9ybURhdGEoKSwgSUdOT1JFX0VYQ0VQVElPTik7
CisgICAgeGhyLT5zZW5kRm9ySW5zcGVjdG9yWEhSUmVwbGF5KHhoclJlcGxheURhdGEtPmZvcm1E
YXRhKCksIElHTk9SRV9FWENFUFRJT04pOworfQorCituYW1lc3BhY2UgeworCitjbGFzcyBMb2Fk
UmVzb3VyY2VMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShMb2FkUmVzb3VyY2VMaXN0ZW5lcik7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8TG9hZFJlc291cmNlTGlzdGVuZXI+IGNyZWF0ZShQYXNzUmVmUHRyPExvYWRSZXNv
dXJjZUNhbGxiYWNrPiBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTG9hZFJlc291cmNlTGlzdGVuZXIoY2FsbGJhY2spKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IH5Mb2FkUmVzb3VyY2VMaXN0ZW5lcigpIHsgfQorCisgICAgdmlydHVhbCBib29sIG9wZXJhdG9y
PT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgb3RoZXIpIG92ZXJyaWRlCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcyA9PSAmb3RoZXI7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2
ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCogZXZlbnQpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBpZiAoIW1fY2FsbGJhY2stPmlzQWN0aXZlKCkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZl
bnQpIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2stPnNlbmRGYWlsdXJlKCJFcnJvciBsb2FkaW5n
IHJlc291cmNlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkucmVhZHlzdGF0ZWNoYW5nZUV2ZW50KSB7
CisgICAgICAgICAgICBtX2NhbGxiYWNrLT5zZW5kRmFpbHVyZSgiVW5leHBlY3RlZCBldmVudCB0
eXBlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBYTUxIdHRw
UmVxdWVzdCogeGhyID0gc3RhdGljX2Nhc3Q8WE1MSHR0cFJlcXVlc3QqPihldmVudC0+dGFyZ2V0
KCkpOworICAgICAgICBpZiAoeGhyLT5yZWFkeVN0YXRlKCkgIT0gWE1MSHR0cFJlcXVlc3Q6OkRP
TkUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9jYWxsYmFjay0+c2VuZFN1Y2Nl
c3MoeGhyLT5yZXNwb25zZVRleHRJZ25vcmluZ1Jlc3BvbnNlVHlwZSgpLCB4aHItPnJlc3BvbnNl
TUlNRVR5cGUoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIExvYWRSZXNvdXJjZUxpc3RlbmVy
KFBhc3NSZWZQdHI8TG9hZFJlc291cmNlQ2FsbGJhY2s+IGNhbGxiYWNrKQorICAgICAgICA6IEV2
ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCisgICAgICAg
ICwgbV9jYWxsYmFjayhjYWxsYmFjaykgeyB9CisKKyAgICBSZWZQdHI8TG9hZFJlc291cmNlQ2Fs
bGJhY2s+IG1fY2FsbGJhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZQorCit2b2lkIEluc3BlY3Rv
clJlc291cmNlQWdlbnQ6OmxvYWRSZXNvdXJjZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIFBhc3NSZWZQdHI8
TG9hZFJlc291cmNlQ2FsbGJhY2s+IGNhbGxiYWNrKQoreworICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CisgICAgaWYgKCFm
cmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUt
PmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkgeworICAgICAgICAqZXJyb3JTdHJpbmcg
PSAiTm8gRG9jdW1lbnQgaW5zdGFuY2UgZm9yIHRoZSBzcGVjaWZpZWQgZnJhbWUiOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgVVJMIHVybCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTCh1
cmxTdHJpbmcpOworCisgICAgUmVmUHRyPFhNTEh0dHBSZXF1ZXN0PiB4aHIgPSBYTUxIdHRwUmVx
dWVzdDo6Y3JlYXRlKCpkb2N1bWVudCk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICB4aHItPm9wZW4oQVNDSUlMaXRlcmFsKCJHRVQiKSwgdXJsLCBlYyk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgICplcnJvclN0cmluZyA9ICJFcnJvciBjcmVhdGluZyByZXF1ZXN0IjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxMb2FkUmVzb3VyY2VMaXN0ZW5lcj4gbG9h
ZFJlc291cmNlTGlzdGVuZXIgPSBMb2FkUmVzb3VyY2VMaXN0ZW5lcjo6Y3JlYXRlKGNhbGxiYWNr
KTsKKyAgICB4aHItPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmFib3J0RXZlbnQsIGxv
YWRSZXNvdXJjZUxpc3RlbmVyLCBmYWxzZSk7CisgICAgeGhyLT5hZGRFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBsb2FkUmVzb3VyY2VMaXN0ZW5lciwgZmFsc2UpOworICAg
IHhoci0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmVhZHlzdGF0ZWNoYW5nZUV2ZW50
LCBsb2FkUmVzb3VyY2VMaXN0ZW5lciwgZmFsc2UpOworICAgIHhoci0+c2VuZEZvckluc3BlY3Rv
cihlYyk7CisKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgKmVycm9yU3RyaW5nID0gIkVycm9yIHNl
bmRpbmcgcmVxdWVzdCI7CisgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAKIHZvaWQgSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6Y2FuQ2xlYXJCcm93c2VyQ2FjaGUoRXJyb3JTdHJpbmcqLCBib29s
KiByZXN1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291
cmNlQWdlbnQuaAppbmRleCAxMmRhNzc4YzQ4ODNlNjg3ZWJhNDFlMTIyYWI1MDllNDhmNzZiOWI0
Li5lNDNmN2U5ODlkNDI2Yjc1ZjlkNTNlMGFmZWIzNzQ4YTVhMjIwNzgzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JXZWJBZ2VudEJhc2UuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JXZWJCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JXZWJG
cm9udGVuZERpc3BhdGNoZXJzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTEzNyw2ICsxMzgsOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGNsZWFyQnJvd3NlckNvb2tpZXMoRXJyb3JTdHJpbmcqKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q2FjaGVEaXNhYmxlZChFcnJvclN0cmluZyosIGJvb2wgY2FjaGVE
aXNhYmxlZCkgb3ZlcnJpZGU7CiAKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgUGFzc1Jl
ZlB0cjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4pIG92ZXJyaWRlOworCiBwcml2YXRlOgogICAgIHZv
aWQgZW5hYmxlKCk7CiAKQEAgLTE1MCw2ICsxNTMsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9s
b2FkaW5nWEhSU3luY2hyb25vdXNseTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IG1fZXh0cmFSZXF1ZXN0SGVhZGVyczsKIAorICAgIEhhc2hTZXQ8dW5zaWduZWQgbG9u
Zz4gbV9oaWRkZW5SZXF1ZXN0SWRlbnRpZmllcnM7CisKICAgICB0eXBlZGVmIEhhc2hNYXA8VGhy
ZWFkYWJsZUxvYWRlckNsaWVudCosIFJlZlB0cjxYSFJSZXBsYXlEYXRhPj4gUGVuZGluZ1hIUlJl
cGxheURhdGFNYXA7CiAgICAgUGVuZGluZ1hIUlJlcGxheURhdGFNYXAgbV9wZW5kaW5nWEhSUmVw
bGF5RGF0YTsKICAgICAvLyBGSVhNRTogSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCBzaG91bGQgbm93
IGJlIGF3YXJlIG9mIHN0eWxlIHJlY2FsY3VsYXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTmV0d29yay5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL05ldHdvcmsuanNvbgppbmRleCA3OWJhYjdhOWVlMTY1MjM4ZTc2YTJj
MDkxMjc5YjI2MmY1MjkwNWM0Li40YzYzMmFhN2UyMDY4Y2YzZjQxZjNlZDYxOWMyZmEzYWEzZjlk
N2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTmV0d29y
ay5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9OZXR3b3JrLmpz
b24KQEAgLTE5MCw2ICsxOTAsMTkgQEAKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNhY2hl
RGlzYWJsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgImRlc2NyaXB0aW9uIjogIkNhY2hlIGRpc2Fi
bGVkIHN0YXRlLiIgfQogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJUb2dnbGVzIGlnbm9yaW5nIGNhY2hlIGZvciBlYWNoIHJlcXVlc3QuIElmIDxjb2RlPnRydWU8
L2NvZGU+LCBjYWNoZSB3aWxsIG5vdCBiZSB1c2VkLiIKKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKKyAgICAgICAgICAgICJhc3luYyI6
IHRydWUsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImZyYW1lSWQiLCAiJHJlZiI6ICJGcmFtZUlkIiwgImRlc2NyaXB0aW9uIjogIkZyYW1l
IHRvIGxvYWQgdGhlIHJlc291cmNlIGZyb20uIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidXJsIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlVSTCBvZiB0aGUgcmVz
b3VyY2UgdG8gbG9hZC4iIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbnRlbnQiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgY29udGVudC4iIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJtaW1lVHlwZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJS
ZXNvdXJjZSBtaW1lVHlwZS4iIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRo
ZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgogICAgICAgICB9
CiAgICAgXSwKICAgICAiZXZlbnRzIjogWwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAppbmRleCBlYTY2ZDYxMjZlN2Q4YjMz
ZDE5NmM4MzE4YjNkMDM3NGNiZmU3Y2ZjLi5lNjllZWMzNmFkNjI5NzA5OGRmNjE0YTZjMDY0NDQw
ZTcwM2Y0ZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVxdWVzdEJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVxdWVzdEJhc2UuaApAQCAtMTM5LDYgKzEzOSwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIGJvb2wgcmVwb3J0UmF3SGVhZGVycygpIGNvbnN0IHsgcmV0dXJuIG1f
cmVwb3J0UmF3SGVhZGVyczsgfQogICAgICAgICB2b2lkIHNldFJlcG9ydFJhd0hlYWRlcnMoYm9v
bCByZXBvcnRSYXdIZWFkZXJzKSB7IG1fcmVwb3J0UmF3SGVhZGVycyA9IHJlcG9ydFJhd0hlYWRl
cnM7IH0KIAorICAgICAgICAvLyBXaGV0aGVyIHRoaXMgcmVxdWVzdCBzaG91bGQgYmUgaGlkZGVu
IGZyb20gdGhlIEluc3BlY3Rvci4KKyAgICAgICAgYm9vbCBoaWRkZW5Gcm9tSW5zcGVjdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9oaWRkZW5Gcm9tSW5zcGVjdG9yOyB9CisgICAgICAgIHZvaWQgc2V0
SGlkZGVuRnJvbUluc3BlY3Rvcihib29sIGhpZGRlbkZyb21JbnNwZWN0b3IpIHsgbV9oaWRkZW5G
cm9tSW5zcGVjdG9yID0gaGlkZGVuRnJvbUluc3BlY3RvcjsgfQorCiAgICAgICAgIHN0YXRpYyBk
b3VibGUgZGVmYXVsdFRpbWVvdXRJbnRlcnZhbCgpOyAvLyBNYXkgcmV0dXJuIDAgd2hlbiB1c2lu
ZyBwbGF0Zm9ybSBkZWZhdWx0LgogICAgICAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0VGltZW91
dEludGVydmFsKGRvdWJsZSk7CiAKQEAgLTE1OSw2ICsxNjMsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgICAgICAsIG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3MoZmFsc2UpCiAgICAgICAg
ICAgICAsIG1fcmVwb3J0TG9hZFRpbWluZyhmYWxzZSkKICAgICAgICAgICAgICwgbV9yZXBvcnRS
YXdIZWFkZXJzKGZhbHNlKQorICAgICAgICAgICAgLCBtX2hpZGRlbkZyb21JbnNwZWN0b3IoZmFs
c2UpCiAgICAgICAgICAgICAsIG1fcHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3cpCiAg
ICAgICAgIHsKICAgICAgICAgfQpAQCAtMTgwLDYgKzE4NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgICAgICwgbV9yZXBvcnRVcGxvYWRQcm9ncmVzcyhmYWxzZSkKICAgICAgICAg
ICAgICwgbV9yZXBvcnRMb2FkVGltaW5nKGZhbHNlKQogICAgICAgICAgICAgLCBtX3JlcG9ydFJh
d0hlYWRlcnMoZmFsc2UpCisgICAgICAgICAgICAsIG1faGlkZGVuRnJvbUluc3BlY3RvcihmYWxz
ZSkKICAgICAgICAgICAgICwgbV9wcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eUxvdykKICAg
ICAgICAgewogICAgICAgICB9CkBAIC0yMDYsNiArMjEyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBib29sIG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3MgOiAxOwogICAgICAgICBib29s
IG1fcmVwb3J0TG9hZFRpbWluZyA6IDE7CiAgICAgICAgIGJvb2wgbV9yZXBvcnRSYXdIZWFkZXJz
IDogMTsKKyAgICAgICAgYm9vbCBtX2hpZGRlbkZyb21JbnNwZWN0b3IgOiAxOwogICAgICAgICBS
ZXNvdXJjZUxvYWRQcmlvcml0eSBtX3ByaW9yaXR5IDogNDsKIAogICAgIHByaXZhdGU6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCA0NTQxODE0ZTc3YzM5OWNhNmQ2YjJi
M2JiYzUwMjY3ZTAyNTRmNTFhLi43OTFlMmJlMzQxM2JiY2M4ZTI4ZjYwOWNmMTE2MzcyOWNiN2Mx
NzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTE4NCw2ICsxODQs
NyBAQCBYTUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkKICAgICAsIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCh0cnVlKQogICAgICwgbV91
cGxvYWRDb21wbGV0ZShmYWxzZSkKICAgICAsIG1fc2FtZU9yaWdpblJlcXVlc3QodHJ1ZSkKKyAg
ICAsIG1fc2VuZGluZ0Zvckluc3BlY3RvcihmYWxzZSkKICAgICAsIG1fcmVjZWl2ZWRMZW5ndGgo
MCkKICAgICAsIG1fbGFzdFNlbmRMaW5lTnVtYmVyKDApCiAgICAgLCBtX2xhc3RTZW5kQ29sdW1u
TnVtYmVyKDApCkBAIC03MzcsNyArNzM4LDEzIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmRC
eXRlc0RhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgRXhjZXB0aW9uQ29kCiAg
ICAgY3JlYXRlUmVxdWVzdChlYyk7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmRGcm9t
SW5zcGVjdG9yKFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhLCBFeGNlcHRpb25Db2RlJiBl
YykKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmRGb3JJbnNwZWN0b3IoRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgbV9zZW5kaW5nRm9ySW5zcGVjdG9yID0gdHJ1ZTsKKyAgICBzZW5kKGVjKTsK
K30KKwordm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZEZvckluc3BlY3RvclhIUlJlcGxheShQYXNz
UmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgbV9y
ZXF1ZXN0RW50aXR5Qm9keSA9IGZvcm1EYXRhID8gZm9ybURhdGEtPmRlZXBDb3B5KCkgOiAwOwog
ICAgIGNyZWF0ZVJlcXVlc3QoZWMpOwpAQCAtNzc0LDYgKzc4MSw3IEBAIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6OmNyZWF0ZVJlcXVlc3QoRXhjZXB0aW9uQ29kZSYgZWMpCiAKICAgICBSZXNvdXJjZVJl
cXVlc3QgcmVxdWVzdChtX3VybCk7CiAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKG1fbWV0aG9k
KTsKKyAgICByZXF1ZXN0LnNldEhpZGRlbkZyb21JbnNwZWN0b3IobV9zZW5kaW5nRm9ySW5zcGVj
dG9yKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFIoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzLCBtX21ldGhvZCwgbV91cmwsIG1fYXN5bmMsIG1fcmVx
dWVzdEVudGl0eUJvZHkgPyBtX3JlcXVlc3RFbnRpdHlCb2R5LT5kZWVwQ29weSgpIDogMCwgbV9y
ZXF1ZXN0SGVhZGVycywgbV9pbmNsdWRlQ3JlZGVudGlhbHMpOwogCkBAIC03OTEsNyArNzk5LDcg
QEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVzdChFeGNlcHRpb25Db2RlJiBlYykK
ICAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IERvTm90U25pZmZDb250ZW50OwogICAgIG9wdGlv
bnMucHJlZmxpZ2h0UG9saWN5ID0gdXBsb2FkRXZlbnRzID8gRm9yY2VQcmVmbGlnaHQgOiBDb25z
aWRlclByZWZsaWdodDsKICAgICBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSAobV9zYW1lT3Jp
Z2luUmVxdWVzdCB8fCBtX2luY2x1ZGVDcmVkZW50aWFscykgPyBBbGxvd1N0b3JlZENyZWRlbnRp
YWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotICAgIG9wdGlvbnMuY3Jvc3NPcmln
aW5SZXF1ZXN0UG9saWN5ID0gVXNlQWNjZXNzQ29udHJvbDsKKyAgICBvcHRpb25zLmNyb3NzT3Jp
Z2luUmVxdWVzdFBvbGljeSA9IG1fc2VuZGluZ0Zvckluc3BlY3RvciA/IEFsbG93Q3Jvc3NPcmln
aW5SZXF1ZXN0cyA6IFVzZUFjY2Vzc0NvbnRyb2w7CiAgICAgb3B0aW9ucy5zZWN1cml0eU9yaWdp
biA9IHNlY3VyaXR5T3JpZ2luKCk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX1RJTUlORykKICAgICBv
cHRpb25zLmluaXRpYXRvciA9IGNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMoKS54bWxo
dHRwcmVxdWVzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dC5oIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKaW5kZXggNzVmZWYzNGE2
ZmU3MzFjNzdhMmU5YWMzNDg2MjNlMGM3YjgzZTU0YS4uMzdkOTg5MmFkMGEwODVmNDNmYTVlM2Q4
MWE3NWE1MzMwNzg1MWY5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKQEAgLTEw
OSw2ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldFJlc3BvbnNlSGVhZGVyKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgU3RyaW5nIHJlc3BvbnNlVGV4dChFeGNl
cHRpb25Db2RlJik7CiAgICAgU3RyaW5nIHJlc3BvbnNlVGV4dElnbm9yaW5nUmVzcG9uc2VUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZUJ1aWxkZXIudG9TdHJpbmdQcmVzZXJ2ZUNhcGFj
aXR5KCk7IH0KKyAgICBTdHJpbmcgcmVzcG9uc2VNSU1FVHlwZSgpIGNvbnN0OwogICAgIERvY3Vt
ZW50KiByZXNwb25zZVhNTChFeGNlcHRpb25Db2RlJik7CiAgICAgRG9jdW1lbnQqIG9wdGlvbmFs
UmVzcG9uc2VYTUwoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlRG9jdW1lbnQuZ2V0KCk7IH0K
ICAgICBCbG9iKiByZXNwb25zZUJsb2IoKTsKQEAgLTEyMSw3ICsxMjIsOCBAQCBwdWJsaWM6CiAg
ICAgYm9vbCByZXNwb25zZUNhY2hlSXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2VD
YWNoZUlzVmFsaWQ7IH0KICAgICB2b2lkIGRpZENhY2hlUmVzcG9uc2VKU09OKCk7CiAKLSAgICB2
b2lkIHNlbmRGcm9tSW5zcGVjdG9yKFBhc3NSZWZQdHI8Rm9ybURhdGE+LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCBzZW5kRm9ySW5zcGVjdG9yKEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lk
IHNlbmRGb3JJbnNwZWN0b3JYSFJSZXBsYXkoUGFzc1JlZlB0cjxGb3JtRGF0YT4sIEV4Y2VwdGlv
bkNvZGUmKTsKIAogICAgIC8vIEV4cG9zZSBIVFRQIHZhbGlkYXRpb24gbWV0aG9kcyBmb3Igb3Ro
ZXIgdW50cnVzdGVkIHJlcXVlc3RzLgogICAgIHN0YXRpYyBib29sIGlzQWxsb3dlZEhUVFBNZXRo
b2QoY29uc3QgU3RyaW5nJik7CkBAIC0xODMsNyArMTg1LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENoZWNrKCkgb3ZlcnJpZGU7CiAKLSAgICBTdHJpbmcg
cmVzcG9uc2VNSU1FVHlwZSgpIGNvbnN0OwogICAgIGJvb2wgcmVzcG9uc2VJc1hNTCgpIGNvbnN0
OwogCiAgICAgYm9vbCBpbml0U2VuZChFeGNlcHRpb25Db2RlJik7CkBAIC0yNDUsNiArMjQ2LDcg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fdXBsb2FkQ29tcGxldGU7CiAKICAgICBib29sIG1fc2Ft
ZU9yaWdpblJlcXVlc3Q7CisgICAgYm9vbCBtX3NlbmRpbmdGb3JJbnNwZWN0b3I7CiAKICAgICAv
LyBVc2VkIGZvciBvbnByb2dyZXNzIHRyYWNraW5nCiAgICAgbG9uZyBsb25nIG1fcmVjZWl2ZWRM
ZW5ndGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9Tb3VyY2VNYXBNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvU291cmNlTWFwTWFuYWdlci5qcwppbmRleCBiYTM2YzA0
MGEzNDY4YmJiYzhmZTdlNDk0NjM5YzUzMTY5ZGZhZjkzLi45YmIxMDRkMDE5ZTlkYWZkY2ViNjlh
ODE4MmVjZDQ5MjFmZDNhN2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9Tb3VyY2VNYXBNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1NvdXJjZU1hcE1hbmFnZXIu
anMKQEAgLTYxLDcgKzYxLDE5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgaWYgKHNvdXJjZU1hcFVSTCBpbiB0aGlzLl9kb3dubG9hZGluZ1Nv
dXJjZU1hcHMpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdGhpcy5fbG9hZEFuZFBh
cnNlU291cmNlTWFwKHNvdXJjZU1hcFVSTCwgYmFzZVVSTCwgb3JpZ2luYWxTb3VyY2VDb2RlKTsK
KyAgICAgICAgZnVuY3Rpb24gbG9hZEFuZFBhcnNlU291cmNlTWFwKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgdGhpcy5fbG9hZEFuZFBhcnNlU291cmNlTWFwKHNvdXJjZU1hcFVSTCwgYmFzZVVS
TCwgb3JpZ2luYWxTb3VyY2VDb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghV2ViSW5z
cGVjdG9yLmZyYW1lUmVzb3VyY2VNYW5hZ2VyLm1haW5GcmFtZSkgeworICAgICAgICAgICAgLy8g
SWYgd2UgZG9uJ3QgaGF2ZSBhIG1haW4gZnJhbWUsIHRoZW4gd2UgYXJlIGxpa2VseSBpbiB0aGUg
bWlkZGxlIG9mIGJ1aWxkaW5nIHRoZSByZXNvdXJjZSB0cmVlLgorICAgICAgICAgICAgLy8gRGVs
YXlpbmcgdW50aWwgdGhlIG5leHQgcnVubG9vcCBpcyBlbm91Z2ggaW4gdGhpcyBjYXNlIHRvIHRo
ZW4gc3RhcnQgbG9hZGluZyB0aGUgc291cmNlIG1hcC4KKyAgICAgICAgICAgIHNldFRpbWVvdXQo
bG9hZEFuZFBhcnNlU291cmNlTWFwLmJpbmQodGhpcyksIDApOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgbG9hZEFuZFBhcnNlU291cmNlTWFwLmNhbGwodGhpcyk7
CiAgICAgfSwKIAogICAgIC8vIFByaXZhdGUKQEAgLTcwLDMxICs4Miw0MSBAQCBXZWJJbnNwZWN0
b3IuU291cmNlTWFwTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICB0aGlzLl9k
b3dubG9hZGluZ1NvdXJjZU1hcHNbc291cmNlTWFwVVJMXSA9IHRydWU7CiAKLSAgICAgICAgLy8g
RklYTUU6IDxyZGFyOi8vcHJvYmxlbS8xMzIzODg4Nj4gU291cmNlIE1hcHM6IEZyb250ZW5kIG5l
ZWRzIGFzeW5jaHJvbm91cyByZXNvdXJjZSBsb2FkaW5nIG9mIGNvbnRlbnQgKyBtaW1lIHR5cGUK
LSAgICAgICAgdmFyIHJlc3BvbnNlID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkoc291cmNlTWFwVVJMKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlID09PSB1
bmRlZmluZWQpIHsKLSAgICAgICAgICAgIHRoaXMuX2xvYWRBbmRQYXJzZUZhaWxlZChzb3VyY2VN
YXBVUkwpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJl
c3BvbnNlLnNsaWNlKDAsIDMpID09PSAiKV19IikgewotICAgICAgICAgICAgdmFyIGZpcnN0TmV3
bGluZUluZGV4ID0gcmVzcG9uc2UuaW5kZXhPZigiXG4iKTsKLSAgICAgICAgICAgIGlmIChmaXJz
dE5ld2xpbmVJbmRleCA9PT0gLTEpIHsKKyAgICAgICAgZnVuY3Rpb24gc291cmNlTWFwTG9hZGVk
KGVycm9yLCBjb250ZW50LCBtaW1lVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVy
cm9yKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZEFuZFBhcnNlRmFpbGVkKHNvdXJjZU1h
cFVSTCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmVzcG9uc2UgPSByZXNwb25zZS5zdWJzdHJpbmcoZmlyc3ROZXdsaW5lSW5kZXgpOwotICAg
ICAgICB9CiAKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciBwYXlsb2FkID0gSlNPTi5w
YXJzZShyZXNwb25zZSk7Ci0gICAgICAgICAgICB2YXIgYmFzZVVSTCA9IHNvdXJjZU1hcFVSTC5z
dGFydHNXaXRoKCJkYXRhOiIpID8gb3JpZ2luYWxTb3VyY2VDb2RlLnVybCA6IHNvdXJjZU1hcFVS
TDsKLSAgICAgICAgICAgIHZhciBzb3VyY2VNYXAgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZU1h
cChiYXNlVVJMLCBwYXlsb2FkLCBvcmlnaW5hbFNvdXJjZUNvZGUpOwotICAgICAgICAgICAgdGhp
cy5fbG9hZEFuZFBhcnNlU3VjY2VlZGVkKHNvdXJjZU1hcFVSTCwgc291cmNlTWFwKTsKLSAgICAg
ICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUubWVzc2FnZSk7Ci0g
ICAgICAgICAgICB0aGlzLl9sb2FkQW5kUGFyc2VGYWlsZWQoc291cmNlTWFwVVJMKTsKKyAgICAg
ICAgICAgIGlmIChjb250ZW50LnNsaWNlKDAsIDMpID09PSAiKV19IikgeworICAgICAgICAgICAg
ICAgIHZhciBmaXJzdE5ld2xpbmVJbmRleCA9IGNvbnRlbnQuaW5kZXhPZigiXG4iKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZmlyc3ROZXdsaW5lSW5kZXggPT09IC0xKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX2xvYWRBbmRQYXJzZUZhaWxlZChzb3VyY2VNYXBVUkwpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Y29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKGZpcnN0TmV3bGluZUluZGV4KTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgcGF5bG9hZCA9
IEpTT04ucGFyc2UoY29udGVudCk7CisgICAgICAgICAgICAgICAgdmFyIGJhc2VVUkwgPSBzb3Vy
Y2VNYXBVUkwuc3RhcnRzV2l0aCgiZGF0YToiKSA/IG9yaWdpbmFsU291cmNlQ29kZS51cmwgOiBz
b3VyY2VNYXBVUkw7CisgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcCA9IG5ldyBXZWJJbnNw
ZWN0b3IuU291cmNlTWFwKGJhc2VVUkwsIHBheWxvYWQsIG9yaWdpbmFsU291cmNlQ29kZSk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fbG9hZEFuZFBhcnNlU3VjY2VlZGVkKHNvdXJjZU1hcFVSTCwg
c291cmNlTWFwKTsKKyAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgICAgIHRo
aXMuX2xvYWRBbmRQYXJzZUZhaWxlZChzb3VyY2VNYXBVUkwpOworICAgICAgICAgICAgfQogICAg
ICAgICB9CisKKyAgICAgICAgdmFyIGZyYW1lSWRlbnRpZmllciA9IG51bGw7CisgICAgICAgIGlm
IChvcmlnaW5hbFNvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVzb3VyY2UgJiYg
b3JpZ2luYWxTb3VyY2VDb2RlLnBhcmVudEZyYW1lKQorICAgICAgICAgICAgZnJhbWVJZGVudGlm
aWVyID0gb3JpZ2luYWxTb3VyY2VDb2RlLnBhcmVudEZyYW1lLmlkOworCisgICAgICAgIGlmICgh
ZnJhbWVJZGVudGlmaWVyKQorICAgICAgICAgICAgZnJhbWVJZGVudGlmaWVyID0gV2ViSW5zcGVj
dG9yLmZyYW1lUmVzb3VyY2VNYW5hZ2VyLm1haW5GcmFtZS5pZDsKKworICAgICAgICBOZXR3b3Jr
QWdlbnQubG9hZFJlc291cmNlKGZyYW1lSWRlbnRpZmllciwgc291cmNlTWFwVVJMLCBzb3VyY2VN
YXBMb2FkZWQuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIF9sb2FkQW5kUGFyc2VGYWlsZWQ6
IGZ1bmN0aW9uKHNvdXJjZU1hcFVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VNYXBSZXNvdXJjZS5qcyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VNYXBSZXNvdXJjZS5qcwppbmRl
eCAwZmVkMDM5M2ExZDkzM2NiZTE1MDY3ODAyYWM3MmY5ZTIyMDcyMjQ5Li5lNzJjNjI1YzdlYjc4
MWEyZjBlZjkxOGY1ZTdhMGViN2U0NGRjNTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNlTWFwUmVzb3VyY2UuanMKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZU1hcFJlc291cmNl
LmpzCkBAIC02NywxNyArNjcsMzggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlLnBy
b3RvdHlwZSA9IHsKIAogICAgIHJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKGNh
bGxiYWNrKQogICAgIHsKLSAgICAgICAgZnVuY3Rpb24gcmVxdWVzdEFzeW5jQ2FsbGJhY2soYm9k
eSwgYmFzZTY0ZW5jb2RlZCwgbWltZVR5cGUpCisgICAgICAgIHZhciBpbmxpbmVDb250ZW50ID0g
dGhpcy5fc291cmNlTWFwLnNvdXJjZUNvbnRlbnQodGhpcy51cmwpOworICAgICAgICBpZiAoaW5s
aW5lQ29udGVudCkgeworICAgICAgICAgICAgLy8gRm9yY2UgaW5saW5lIGNvbnRlbnQgdG8gYmUg
YXN5bmNocm9ub3VzIHRvIG1hdGNoIHRoZSBleHBlY3RlZCBsb2FkIHBhdHRlcm4uCisgICAgICAg
ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBkb24ndCBrbm93IHRoZSBNSU1FLXR5cGUgZm9yIGlubGluZSBjb250ZW50LiBHdWVzcyBieSBh
bmFseXppbmcgdGhlIGNvbnRlbnQ/CisgICAgICAgICAgICAgICAgLy8gR3Vlc3MgYnkgdXNpbmcg
dGhlIHR5cGUgb2YgdGhlIG9yaWdpbmFsIHJlc291cmNlPworICAgICAgICAgICAgICAgIHNvdXJj
ZU1hcFJlc291cmNlTG9hZGVkLmNhbGwodGhpcywgbnVsbCwgaW5saW5lQ29udGVudCwgInRleHQv
amF2YXNjcmlwdCIpOworICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTsKKworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzb3VyY2VNYXBSZXNv
dXJjZUxvYWRlZChlcnJvciwgYm9keSwgbWltZVR5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChib2R5ID09PSBudWxsKSB7CisgICAgICAgICAgICBjb25zdCBiYXNlNjRlbmNvZGVkID0g
ZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgICAgIHRoaXMu
bWFya0FzRmFpbGVkKCk7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soIkZhaWxlZCB0byBsb2Fk
IHJlc291cmNlIiwgYm9keSwgYmFzZTY0ZW5jb2RlZCk7CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2soZXJyb3IsIGJvZHksIGJhc2U2NGVuY29kZWQpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgdmFyIGZpbGVFeHRlbnNpb24gPSBXZWJJbnNw
ZWN0b3IuZmlsZUV4dGVuc2lvbkZvclVSTCh0aGlzLnVybCk7CisgICAgICAgICAgICB2YXIgZmls
ZUV4dGVuc2lvbk1JTUVUeXBlID0gV2ViSW5zcGVjdG9yLm1pbWVUeXBlRm9yRmlsZUV4dGVuc2lv
bihmaWxlRXh0ZW5zaW9uLCB0cnVlKSB8fCAidGV4dC9qYXZhc2NyaXB0IjsKKworICAgICAgICAg
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBwaWNraW5nIHRoZSBiZXN0IE1JTUUtdHlwZS4g
UmlnaHQgbm93IHRoZSBmaWxlIGV4dGVuc2lvbiBpcyB0aGUgYmVzdCBiZXQuCisgICAgICAgICAg
ICBtaW1lVHlwZSA9IGZpbGVFeHRlbnNpb25NSU1FVHlwZTsKKwogICAgICAgICAgICAgdmFyIG9s
ZFR5cGUgPSB0aGlzLl90eXBlOwogICAgICAgICAgICAgdmFyIG9sZE1JTUVUeXBlID0gdGhpcy5f
bWltZVR5cGU7CiAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgbGF5ZXJpbmcgdmlv
bGF0aW9uLiBJdCBzaG91bGQgdXNlIGEgaGVscGVyIGZ1bmN0aW9uIG9uIHRoZSBSZXNvdXJjZSBi
YXNlLWNsYXNzLgogICAgICAgICAgICAgdGhpcy5fbWltZVR5cGUgPSBtaW1lVHlwZTsKICAgICAg
ICAgICAgIHRoaXMuX3R5cGUgPSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5mcm9tTUlNRVR5
cGUodGhpcy5fbWltZVR5cGUpOwogCkBAIC05Niw3ICsxMTcsMTUgQEAgV2ViSW5zcGVjdG9yLlNv
dXJjZU1hcFJlc291cmNlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGNhbGxiYWNrKG51bGws
IGJvZHksIGJhc2U2NGVuY29kZWQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5fcmVxdWVz
dFJlc291cmNlQXN5bmNocm9ub3VzbHkocmVxdWVzdEFzeW5jQ2FsbGJhY2suYmluZCh0aGlzKSk7
CisgICAgICAgIHZhciBmcmFtZUlkZW50aWZpZXIgPSBudWxsOworICAgICAgICBpZiAodGhpcy5f
c291cmNlTWFwLm9yaWdpbmFsU291cmNlQ29kZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5SZXNv
dXJjZSAmJiB0aGlzLl9zb3VyY2VNYXAub3JpZ2luYWxTb3VyY2VDb2RlLnBhcmVudEZyYW1lKQor
ICAgICAgICAgICAgZnJhbWVJZGVudGlmaWVyID0gdGhpcy5fc291cmNlTWFwLm9yaWdpbmFsU291
cmNlQ29kZS5wYXJlbnRGcmFtZS5pZDsKKworICAgICAgICBpZiAoIWZyYW1lSWRlbnRpZmllcikK
KyAgICAgICAgICAgIGZyYW1lSWRlbnRpZmllciA9IFdlYkluc3BlY3Rvci5mcmFtZVJlc291cmNl
TWFuYWdlci5tYWluRnJhbWUuaWQ7CisKKyAgICAgICAgTmV0d29ya0FnZW50LmxvYWRSZXNvdXJj
ZShmcmFtZUlkZW50aWZpZXIsIHRoaXMudXJsLCBzb3VyY2VNYXBSZXNvdXJjZUxvYWRlZC5iaW5k
KHRoaXMpKTsKKwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9LAogCkBAIC0xMjgsMjUgKzE1
Nyw2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHZhciBzdGFydFNvdXJjZUNvZGVMb2NhdGlvbiA9IHRoaXMuY3JlYXRlU291cmNlQ29kZUxv
Y2F0aW9uKHRleHRSYW5nZS5zdGFydExpbmUsIHRleHRSYW5nZS5zdGFydENvbHVtbik7CiAgICAg
ICAgIHZhciBlbmRTb3VyY2VDb2RlTG9jYXRpb24gPSB0aGlzLmNyZWF0ZVNvdXJjZUNvZGVMb2Nh
dGlvbih0ZXh0UmFuZ2UuZW5kTGluZSwgdGV4dFJhbmdlLmVuZENvbHVtbik7CiAgICAgICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0UmFuZ2UodGhpcy5fc291cmNlTWFw
Lm9yaWdpbmFsU291cmNlQ29kZSwgc3RhcnRTb3VyY2VDb2RlTG9jYXRpb24sIGVuZFNvdXJjZUNv
ZGVMb2NhdGlvbik7Ci0gICAgfSwKLQotICAgIC8vIFByaXZhdGUKLQotICAgIF9yZXF1ZXN0UmVz
b3VyY2VBc3luY2hyb25vdXNseTogZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewotICAgICAgICAv
LyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzEzMjM4ODg2PiBTb3VyY2UgTWFwczogRnJvbnRlbmQg
bmVlZHMgYXN5bmNocm9ub3VzIHJlc291cmNlIGxvYWRpbmcgb2YgY29udGVudCArIG1pbWUgdHlw
ZQotCi0gICAgICAgIGZ1bmN0aW9uIGFzeW5jKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFy
IGJvZHkgPSB0aGlzLl9zb3VyY2VNYXAuc291cmNlQ29udGVudCh0aGlzLnVybCkgfHwgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodGhpcy51cmwpOwotICAg
ICAgICAgICAgaWYgKGJvZHkgPT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgICAgICBib2R5ID0g
bnVsbDsKLSAgICAgICAgICAgIHZhciBmaWxlRXh0ZW5zaW9uID0gV2ViSW5zcGVjdG9yLmZpbGVF
eHRlbnNpb25Gb3JVUkwodGhpcy51cmwpOwotICAgICAgICAgICAgdmFyIG1pbWVUeXBlID0gV2Vi
SW5zcGVjdG9yLm1pbWVUeXBlRm9yRmlsZUV4dGVuc2lvbihmaWxlRXh0ZW5zaW9uLCB0cnVlKSB8
fCAidGV4dC9qYXZhc2NyaXB0IjsKLSAgICAgICAgICAgIGNhbGxiYWNrKGJvZHksIGZhbHNlLCBt
aW1lVHlwZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzZXRUaW1lb3V0KGFzeW5jLmJpbmQodGhp
cyksIDApOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvcldlYkJhY2tlbmRDb21tYW5kcy5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvcldlYkJh
Y2tlbmRDb21tYW5kcy5qcwppbmRleCBkZjkzNTlkOTg0M2U0YjkwZjQ3MmNjNTdkYWI4NzlmMzE1
NGQzZTdhLi4zNzIzZDJlNzE0MTk5MzNhODJhNDM0M2Y3MjU5YmM5NTkxYmJlN2NmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9JbnNwZWN0
b3JXZWJCYWNrZW5kQ29tbWFuZHMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvUHJvdG9jb2wvSW5zcGVjdG9yV2ViQmFja2VuZENvbW1hbmRzLmpzCkBAIC0yMTAs
NiArMjEwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsuY2xl
YXJCcm93c2VyQ2FjaGUiLCBbXSwgW10pOwogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIk5ldHdvcmsuY2FuQ2xlYXJCcm93c2VyQ29va2llcyIsIFtdLCBbInJlc3VsdCJdKTsKIElu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrLmNsZWFyQnJvd3NlckNvb2tp
ZXMiLCBbXSwgW10pOwogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsu
c2V0Q2FjaGVEaXNhYmxlZCIsIFt7Im5hbWUiOiAiY2FjaGVEaXNhYmxlZCIsICJ0eXBlIjogImJv
b2xlYW4iLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyQ29tbWFuZCgiTmV0d29yay5sb2FkUmVzb3VyY2UiLCBbeyJuYW1lIjogImZyYW1lSWQiLCAi
dHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJ1cmwiLCAidHlw
ZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbnRlbnQiLCAibWltZVR5cGUi
XSk7CiAKIC8vIFBhZ2UuCiBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyUGFnZURpc3BhdGNoZXIg
PSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3Rv
ckJhY2tlbmQsICJQYWdlIik7CkBAIC0yODYsNyArMjg3LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckNvbW1hbmQoIlByb2ZpbGVyLmdldEhlYXBPYmplY3RJZCIsIFt7Im5hbWUiOiAib2Jq
ZWN0SWQKIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJUaW1lbGluZURpc3BhdGNoZXIgPSBJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tl
bmQsICJUaW1lbGluZSIpOwogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRpbWVsaW5l
LkV2ZW50VHlwZSIsIHtFdmVudERpc3BhdGNoOiAiRXZlbnREaXNwYXRjaCIsIEJlZ2luRnJhbWU6
ICJCZWdpbkZyYW1lIiwgU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb246ICJTY2hlZHVsZVN0eWxl
UmVjYWxjdWxhdGlvbiIsIFJlY2FsY3VsYXRlU3R5bGVzOiAiUmVjYWxjdWxhdGVTdHlsZXMiLCBJ
bnZhbGlkYXRlTGF5b3V0OiAiSW52YWxpZGF0ZUxheW91dCIsIExheW91dDogIkxheW91dCIsIFBh
aW50OiAiUGFpbnQiLCBTY3JvbGxMYXllcjogIlNjcm9sbExheWVyIiwgUmVzaXplSW1hZ2U6ICJS
ZXNpemVJbWFnZSIsIENvbXBvc2l0ZUxheWVyczogIkNvbXBvc2l0ZUxheWVycyIsIFBhcnNlSFRN
TDogIlBhcnNlSFRNTCIsIFRpbWVySW5zdGFsbDogIlRpbWVySW5zdGFsbCIsIFRpbWVyUmVtb3Zl
OiAiVGltZXJSZW1vdmUiLCBUaW1lckZpcmU6ICJUaW1lckZpcmUiLCBFdmFsdWF0ZVNjcmlwdDog
IkV2YWx1YXRlU2NyaXB0IiwgTWFya0xvYWQ6ICJNYXJrTG9hZCIsIE1hcmtET01Db250ZW50OiAi
TWFya0RPTUNvbnRlbnQiLCBUaW1lU3RhbXA6ICJUaW1lU3RhbXAiLCBUaW1lOiAiVGltZSIsIFRp
bWVFbmQ6ICJUaW1lRW5kIiwgU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3Q6ICJTY2hlZHVsZVJlc291
cmNlUmVxdWVzdCIsIFJlc291cmNlU2VuZFJlcXVlc3Q6ICJSZXNvdXJjZVNlbmRSZXF1ZXN0Iiwg
UmVzb3VyY2VSZWNlaXZlUmVzcG9uc2U6ICJSZXNvdXJjZVJlY2VpdmVSZXNwb25zZSIsIFJlc291
cmNlUmVjZWl2ZWREYXRhOiAiUmVzb3VyY2VSZWNlaXZlZERhdGEiLCBSZXNvdXJjZUZpbmlzaDog
IlJlc291cmNlRmluaXNoIiwgWEhSUmVhZHlTdGF0ZUNoYW5nZTogIlhIUlJlYWR5U3RhdGVDaGFu
Z2UiLCBYSFJMb2FkOiAiWEhSTG9hZCIsIEZ1bmN0aW9uQ2FsbDogIkZ1bmN0aW9uQ2FsbCIsIEdD
RXZlbnQ6ICJHQ0V2ZW50IiwgUmVxdWVzdEFuaW1hdGlvbkZyYW1lOiAiUmVxdWVzdEFuaW1hdGlv
bkZyYW1lIiwgQ2FuY2VsQW5pbWF0aW9uRnJhbWU6ICJDYW5jZWxBbmltYXRpb25GcmFtZSIsIEZp
cmVBbmltYXRpb25GcmFtZTogIkZpcmVBbmltYXRpb25GcmFtZSIsIFdlYlNvY2tldENyZWF0ZTog
IldlYlNvY2tldENyZWF0ZSIsIFdlYlNvY2tldFNlbmRIYW5kc2hha2VSZXF1ZXN0OiAiV2ViU29j
a2V0U2VuZEhhbmRzaGFrZVJlcXVlc3QiLCBXZWJTb2NrZXRSZWNlaXZlSGFuZHNoYWtlUmVzcG9u
c2U6ICJXZWJTb2NrZXRSZWNlaXZlSGFuZHNoYWtlUmVzcG9uc2UiLCBXZWJTb2NrZXREZXN0cm95
OiAiV2ViU29ja2V0RGVzdHJveSJ9KTsKIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgi
VGltZWxpbmUuZXZlbnRSZWNvcmRlZCIsIFsicmVjb3JkIl0pOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckNvbW1hbmQoIlRpbWVsaW5lLnN0YXJ0IiwgW3sibmFtZSI6ICJtYXhDYWxsU3RhY2tE
ZXB0aCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAiaW5j
bHVkZURvbUNvdW50ZXJzIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWV9XSwg
W10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIlRpbWVsaW5lLnN0YXJ0Iiwg
W3sibmFtZSI6ICJtYXhDYWxsU3RhY2tEZXB0aCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25h
bCI6IHRydWV9XSwgW10pOwogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIlRpbWVs
aW5lLnN0b3AiLCBbXSwgW10pOwogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIlRp
bWVsaW5lLnN1cHBvcnRzRnJhbWVJbnN0cnVtZW50YXRpb24iLCBbXSwgWyJyZXN1bHQiXSk7CiBJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiVGltZWxpbmUuY2FuTW9uaXRvck1haW5U
aHJlYWQiLCBbXSwgWyJyZXN1bHQiXSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226204</attachid>
            <date>2014-03-07 23:46:56 -0800</date>
            <delta_ts>2014-03-07 23:48:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112071-20140307234655.patch</filename>
            <type>text/plain</type>
            <size>31159</size>
            <attacher name="Timothy Hatcher">timothy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0OTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTRjOWE5NGFlN2U5NzRi
YzcyZTU3MTFjMzYwYjM3Y2Q1YmMxZTY1YS4uNmE0Y2FlY2RjNzljZmYxZThjNzBjNmNiY2Y5YmJj
ZTJjMzk0NDBkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTAzLTA3ICBUaW1v
dGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KKworICAgICAgICBMb2FkIHNvdXJjZSBt
YXBzIGFuZCB0aGVpciByZXNvdXJjZXMgYXN5bmNocm9ub3VzbHkuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjA3MQorCisgICAgICAgIFJldmll
d2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpidWls
ZE9iamVjdEZvckZyYW1lVHJlZSk6CisgICAgICAgIEhvbm9yIHRoZSBoaWRkZW5Gcm9tSW5zcGVj
dG9yIGZsYWcuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFJl
cXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6bWFya1Jl
c291cmNlQXNDYWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291
cmNlQWdlbnQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJl
c291cmNlQWdlbnQ6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6ZGlkRmFpbExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVwbGF5WEhSKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclJlc291cmNlQWdlbnQ6OmxvYWRSZXNvdXJjZSk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlQWdlbnQuaDoKKyAgICAgICAgSG9ub3IgdGhlIGhpZGRlbkZyb21JbnNw
ZWN0b3IgZmxhZyBieSBrZWVwaW5nIHRyYWNrIG9mCisgICAgICAgIGhpZGRlbiBpZGVudGlmaWVy
cyBpbiBhIEhhc2hTZXQuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvTmV0d29yay5q
c29uOgorICAgICAgICAoTmV0d29yay5sb2FkUmVzb3VyY2UpOiBBZGRlZC4KKworICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6aGlkZGVuRnJvbUluc3BlY3Rvcik6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0SGlkZGVuRnJvbUluc3BlY3Rv
cik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVzb3Vy
Y2VSZXF1ZXN0QmFzZSk6CisgICAgICAgIEFkZCBhIGZsYWcgdG8gaGlkZSB0aGUgcmVxdWVzdCBm
cm9tIHRoZSBJbnNwZWN0b3IuCisKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OlhNTEh0dHBSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kRm9ySW5zcGVjdG9yKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2VuZEZvckluc3BlY3RvclhIUlJlcGxh
eSk6IFJlbmFtZWQuCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVx
dWVzdCk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0Lmg6CisgICAgICAgIE1ha2UgSW5z
cGVjdG9yIGxvYWRzIGFsbG93IGNyb3NzLW9yaWdpbnMgYW5kIGhpZGUgdGhlaXIgcmVxdWVzdAor
ICAgICAgICBmcm9tIHRoZSBJbnNwZWN0b3IgaXRzZWxmLgorCiAyMDE0LTAzLTAzICBCcmlhbiBC
dXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGZv
ciBXaW5kb3dzIGFmdGVyIHIxNjQ5ODYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCBhZjJm
ZmUxZWI2OGQ1MWVkZDJhMjVkODY0OGI0ZTU2OTcxNmQzNWIwLi42ODM5MTIwNTExYjEzNjgzMDg3
NjQ1NjNmZTkwMmI5NGM2NTYxYzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNSBAQAorMjAxNC0wMy0wNyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+
CisKKyAgICAgICAgTG9hZCBzb3VyY2UgbWFwcyBhbmQgdGhlaXIgcmVzb3VyY2VzIGFzeW5jaHJv
bm91c2x5LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTIwNzEKKworICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCisKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1NvdXJjZU1hcE1hbmFnZXIuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwTWFuYWdlci5wcm90b3R5cGUubG9hZEFuZFBhcnNl
U291cmNlTWFwKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyLnByb3Rv
dHlwZS5kb3dubG9hZFNvdXJjZU1hcCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFw
TWFuYWdlci5wcm90b3R5cGUuc291cmNlTWFwTG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Tb3VyY2VNYXBNYW5hZ2VyLnByb3RvdHlwZS5fbG9hZEFuZFBhcnNlU291cmNlTWFwKToKKyAg
ICAgICAgVXNlIE5ldHdvcmtBZ2VudC5sb2FkUmVzb3VyY2UuCisKKyAgICAgICAgKiBVc2VySW50
ZXJmYWNlL01vZGVscy9Tb3VyY2VNYXBSZXNvdXJjZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Tb3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5cGUucmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZC5z
b3VyY2VNYXBSZXNvdXJjZUxvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFw
UmVzb3VyY2UucHJvdG90eXBlLmNyZWF0ZVNvdXJjZUNvZGVUZXh0UmFuZ2UpOgorICAgICAgICBV
c2UgTmV0d29ya0FnZW50LmxvYWRSZXNvdXJjZS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2Uv
UHJvdG9jb2wvSW5zcGVjdG9yV2ViQmFja2VuZENvbW1hbmRzLmpzOiBVcGRhdGVkLgorCiAyMDE0
LTAzLTAxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBN
YWtlIFN0YXJ0IFRpbWVsaW5lIFJlY29yZGluZyBpbiB0aGUgRGV2ZWxvcCBtZW51IHNob3cgdGhl
IFRpbWVsaW5lIHZpZXcgYWdhaW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IGNmZWU1ZDhjYjMxMmYzMGIwNmQyY2MxMmU4YzFlYmEy
YWQ0NWFiNmMuLjU2YTQzNDkyMGNiMDI3ODA5YmU0ZDdhZDMzODA1NjA4Y2ZlYjgxNjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC05
NzksNiArOTc5LDkgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpG
cmFtZVJlc291cmNlVHJlZT4gSW5zcGVjdG9yUGFnZUFnZW50OjoKICAgICBmb3IgKFZlY3RvcjxD
YWNoZWRSZXNvdXJjZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBhbGxSZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2UqIGNhY2hlZFJlc291cmNlID0gKml0OwogCisgICAgICAgIGlmIChjYWNoZWRSZXNvdXJjZS0+
cmVzb3VyY2VSZXF1ZXN0KCkuaGlkZGVuRnJvbUluc3BlY3RvcigpKQorICAgICAgICAgICAgY29u
dGludWU7CisKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZy
YW1lUmVzb3VyY2VUcmVlOjpSZXNvdXJjZXM+IHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OlJlc291cmNlczo6Y3JlYXRlKCkK
ICAgICAgICAgICAgIC5zZXRVcmwoY2FjaGVkUmVzb3VyY2UtPnVybCgpKQogICAgICAgICAgICAg
LnNldFR5cGUoY2FjaGVkUmVzb3VyY2VUeXBlSnNvbigqY2FjaGVkUmVzb3VyY2UpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCmlu
ZGV4IGE2NTQ4YjZiNzliZDVmYTg0MTQ2ODQxY2Y1ZGZmNmM1NWU2MDNiOTIuLjE3MGYwMjk5NWY4
YjU5NjY1N2YxYmUxNTBiMDMxYTUyMzI0YTUzMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKQEAgLTc1LDYgKzc1LDggQEAK
IAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAordHlwZWRlZiBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkxvYWRSZXNvdXJjZUNhbGxiYWNr
IExvYWRSZXNvdXJjZUNhbGxiYWNrOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKQEAgLTE4Myw2ICsxODUsMTEgQEAg
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6fkluc3BlY3RvclJlc291cmNlQWdlbnQoKQogCiB2b2lk
IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKKyAgICBpZiAo
cmVxdWVzdC5oaWRkZW5Gcm9tSW5zcGVjdG9yKCkpIHsKKyAgICAgICAgbV9oaWRkZW5SZXF1ZXN0
SWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAg
ICAgU3RyaW5nIHJlcXVlc3RJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50
aWZpZXIpOwogICAgIG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VDcmVhdGVkKHJlcXVlc3RJZCwg
bV9wYWdlQWdlbnQtPmxvYWRlcklkKGxvYWRlcikpOwogCkBAIC0yMjUsMTEgKzIzMiwxNyBAQCB2
b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIERvY3VtZW50TAogCiB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6Om1h
cmtSZXNvdXJjZUFzQ2FjaGVkKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKKyAgICBpZiAo
bV9oaWRkZW5SZXF1ZXN0SWRlbnRpZmllcnMuY29udGFpbnMoaWRlbnRpZmllcikpCisgICAgICAg
IHJldHVybjsKKwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXF1ZXN0U2VydmVkRnJvbUNh
Y2hlKElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQogeworICAgIGlm
IChtX2hpZGRlblJlcXVlc3RJZGVudGlmaWVycy5jb250YWlucyhpZGVudGlmaWVyKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgU3RyaW5nIHJlcXVlc3RJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6
cmVxdWVzdElkKGlkZW50aWZpZXIpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpOZXR3b3JrOjpSZXNwb25zZT4gcmVzb3VyY2VSZXNwb25zZSA9IGJ1aWxkT2JqZWN0Rm9yUmVz
b3VyY2VSZXNwb25zZShyZXNwb25zZSwgbG9hZGVyKTsKIApAQCAtMjc0LDYgKzI4Nyw5IEBAIHN0
YXRpYyBib29sIGlzRXJyb3JTdGF0dXNDb2RlKGludCBzdGF0dXNDb2RlKQogCiB2b2lkIEluc3Bl
Y3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVEYXRhKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0
aCkKIHsKKyAgICBpZiAobV9oaWRkZW5SZXF1ZXN0SWRlbnRpZmllcnMuY29udGFpbnMoaWRlbnRp
ZmllcikpCisgICAgICAgIHJldHVybjsKKwogICAgIFN0cmluZyByZXF1ZXN0SWQgPSBJZGVudGlm
aWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKTsKIAogICAgIGlmIChkYXRhKSB7CkBA
IC0yODcsNiArMzAzLDkgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZl
RGF0YSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IGNoYXIKIAogdm9pZCBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50OjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgZG91YmxlIGZpbmlzaFRpbWUpCiB7CisgICAgaWYg
KG1faGlkZGVuUmVxdWVzdElkZW50aWZpZXJzLnJlbW92ZShpZGVudGlmaWVyKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgU3RyaW5nIHJlcXVlc3RJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6cmVx
dWVzdElkKGlkZW50aWZpZXIpOwogICAgIGlmIChtX3Jlc291cmNlc0RhdGEtPnJlc291cmNlVHlw
ZShyZXF1ZXN0SWQpID09IEluc3BlY3RvclBhZ2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJjZSkgewog
ICAgICAgICBSZWZQdHI8UmVzb3VyY2VCdWZmZXI+IGJ1ZmZlciA9IGxvYWRlci0+ZnJhbWVMb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+bWFpblJlc291cmNlRGF0YSgpOwpAQCAtMzExLDYgKzMz
MCw5IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkRmluaXNoTG9hZGluZyh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50CiAKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudDo6ZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExv
YWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKKyAgICBpZiAobV9o
aWRkZW5SZXF1ZXN0SWRlbnRpZmllcnMucmVtb3ZlKGlkZW50aWZpZXIpKQorICAgICAgICByZXR1
cm47CisKICAgICBTdHJpbmcgcmVxdWVzdElkID0gSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0
SWQoaWRlbnRpZmllcik7CiAKICAgICBpZiAobV9yZXNvdXJjZXNEYXRhLT5yZXNvdXJjZVR5cGUo
cmVxdWVzdElkKSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OkRvY3VtZW50UmVzb3VyY2UpIHsKQEAg
LTU5NCw2ICs2MTYsNyBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnJlcGxheVhIUihF
cnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKQogI2lmIEVOQUJMRShDQUNIRV9Q
QVJUSVRJT05JTkcpCiAgICAgcmVxdWVzdC5zZXRDYWNoZVBhcnRpdGlvbihtX3BhZ2VBZ2VudC0+
bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnRvcE9yaWdpbigpLT5jYWNoZVBhcnRpdGlvbigpKTsK
ICNlbmRpZgorCiAgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gbWVtb3J5Q2Fj
aGUoKS0+cmVzb3VyY2VGb3JSZXF1ZXN0KHJlcXVlc3QpOwogICAgIGlmIChjYWNoZWRSZXNvdXJj
ZSkKICAgICAgICAgbWVtb3J5Q2FjaGUoKS0+cmVtb3ZlKGNhY2hlZFJlc291cmNlKTsKQEAgLTYw
MSw3ICs2MjQsODkgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXBsYXlYSFIoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCkKICAgICB4aHItPm9wZW4oeGhyUmVw
bGF5RGF0YS0+bWV0aG9kKCksIHhoclJlcGxheURhdGEtPnVybCgpLCB4aHJSZXBsYXlEYXRhLT5h
c3luYygpLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6
IHhoclJlcGxheURhdGEtPmhlYWRlcnMoKSkKICAgICAgICAgeGhyLT5zZXRSZXF1ZXN0SGVhZGVy
KGhlYWRlci5rZXksIGhlYWRlci52YWx1ZSwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgeGhyLT5z
ZW5kRnJvbUluc3BlY3Rvcih4aHJSZXBsYXlEYXRhLT5mb3JtRGF0YSgpLCBJR05PUkVfRVhDRVBU
SU9OKTsKKyAgICB4aHItPnNlbmRGb3JJbnNwZWN0b3JYSFJSZXBsYXkoeGhyUmVwbGF5RGF0YS0+
Zm9ybURhdGEoKSwgSUdOT1JFX0VYQ0VQVElPTik7Cit9CisKK25hbWVzcGFjZSB7CisKK2NsYXNz
IExvYWRSZXNvdXJjZUxpc3RlbmVyIGZpbmFsIDogcHVibGljIEV2ZW50TGlzdGVuZXIgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKExvYWRSZXNvdXJjZUxpc3RlbmVyKTsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxMb2FkUmVzb3VyY2VMaXN0ZW5lcj4gY3JlYXRlKFBhc3NSZWZQ
dHI8TG9hZFJlc291cmNlQ2FsbGJhY2s+IGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBMb2FkUmVzb3VyY2VMaXN0ZW5lcihjYWxsYmFjaykpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgfkxvYWRSZXNvdXJjZUxpc3RlbmVyKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBvdGhlcikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzID09ICZvdGhlcjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBldmVudCkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmICghbV9jYWxsYmFjay0+aXNBY3RpdmUoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuZXJyb3JFdmVudCkgeworICAgICAgICAgICAgbV9jYWxsYmFjay0+c2VuZEZhaWx1cmUoQVND
SUlMaXRlcmFsKCJFcnJvciBsb2FkaW5nIHJlc291cmNlIikpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygp
LnJlYWR5c3RhdGVjaGFuZ2VFdmVudCkgeworICAgICAgICAgICAgbV9jYWxsYmFjay0+c2VuZEZh
aWx1cmUoQVNDSUlMaXRlcmFsKCJVbmV4cGVjdGVkIGV2ZW50IHR5cGUiKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBYTUxIdHRwUmVxdWVzdCogeGhyID0gc3Rh
dGljX2Nhc3Q8WE1MSHR0cFJlcXVlc3QqPihldmVudC0+dGFyZ2V0KCkpOworICAgICAgICBpZiAo
eGhyLT5yZWFkeVN0YXRlKCkgIT0gWE1MSHR0cFJlcXVlc3Q6OkRPTkUpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgbV9jYWxsYmFjay0+c2VuZFN1Y2Nlc3MoeGhyLT5yZXNwb25zZVRl
eHRJZ25vcmluZ1Jlc3BvbnNlVHlwZSgpLCB4aHItPnJlc3BvbnNlTUlNRVR5cGUoKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIExvYWRSZXNvdXJjZUxpc3RlbmVyKFBhc3NSZWZQdHI8TG9hZFJl
c291cmNlQ2FsbGJhY2s+IGNhbGxiYWNrKQorICAgICAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRM
aXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCisgICAgICAgICwgbV9jYWxsYmFjayhjYWxs
YmFjaykgeyB9CisKKyAgICBSZWZQdHI8TG9hZFJlc291cmNlQ2FsbGJhY2s+IG1fY2FsbGJhY2s7
Cit9OworCit9IC8vIG5hbWVzcGFjZQorCit2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6Omxv
YWRSZXNvdXJjZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIFBhc3NSZWZQdHI8TG9hZFJlc291cmNlQ2FsbGJh
Y2s+IGNhbGxiYWNrKQoreworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZUFnZW50LT5hc3NlcnRG
cmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAg
aWYgKCFkb2N1bWVudCkgeworICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIk5v
IERvY3VtZW50IGluc3RhbmNlIGZvciB0aGUgc3BlY2lmaWVkIGZyYW1lIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8WE1MSHR0cFJlcXVlc3Q+IHhociA9IFhNTEh0dHBS
ZXF1ZXN0OjpjcmVhdGUoKmRvY3VtZW50KTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIHhoci0+b3BlbihBU0NJSUxpdGVyYWwoIkdFVCIpLCBkb2N1bWVudC0+Y29tcGxldGVVUkwo
dXJsU3RyaW5nKSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICAqZXJyb3JTdHJpbmcgPSBB
U0NJSUxpdGVyYWwoIkVycm9yIGNyZWF0aW5nIHJlcXVlc3QiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFJlZlB0cjxMb2FkUmVzb3VyY2VMaXN0ZW5lcj4gbG9hZFJlc291cmNlTGlz
dGVuZXIgPSBMb2FkUmVzb3VyY2VMaXN0ZW5lcjo6Y3JlYXRlKGNhbGxiYWNrKTsKKyAgICB4aHIt
PmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmFib3J0RXZlbnQsIGxvYWRSZXNvdXJjZUxp
c3RlbmVyLCBmYWxzZSk7CisgICAgeGhyLT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5l
cnJvckV2ZW50LCBsb2FkUmVzb3VyY2VMaXN0ZW5lciwgZmFsc2UpOworICAgIHhoci0+YWRkRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmVhZHlzdGF0ZWNoYW5nZUV2ZW50LCBsb2FkUmVzb3Vy
Y2VMaXN0ZW5lciwgZmFsc2UpOworICAgIHhoci0+c2VuZEZvckluc3BlY3RvcihlYyk7CisKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJFcnJvciBz
ZW5kaW5nIHJlcXVlc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogdm9pZCBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50OjpjYW5DbGVhckJyb3dzZXJDYWNoZShFcnJvclN0cmluZyosIGJv
b2wqIHJlc3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JSZXNvdXJjZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudC5oCmluZGV4IDEyZGE3NzhjNDg4M2U2ODdlYmE0MWUxMjJhYjUwOWU0OGY3NmI5
YjQuLmU0M2Y3ZTk4OWQ0MjZiNzVmOWQ1M2UwYWZlYjM3NDhhNWEyMjA3ODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaApAQCAtMzQs
NiArMzQsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvcldlYkFnZW50QmFzZS5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvcldlYkJhY2tlbmREaXNwYXRjaGVycy5oIgogI2luY2x1ZGUgIkluc3BlY3Rvcldl
YkZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMTM3LDYgKzEzOCw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJCcm93c2VyQ29va2llcyhFcnJvclN0cmluZyopIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRDYWNoZURpc2FibGVkKEVycm9yU3RyaW5nKiwgYm9vbCBjYWNo
ZURpc2FibGVkKSBvdmVycmlkZTsKIAorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBQYXNz
UmVmUHRyPExvYWRSZXNvdXJjZUNhbGxiYWNrPikgb3ZlcnJpZGU7CisKIHByaXZhdGU6CiAgICAg
dm9pZCBlbmFibGUoKTsKIApAQCAtMTUwLDYgKzE1Myw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2xvYWRpbmdYSFJTeW5jaHJvbm91c2x5OwogICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gbV9leHRyYVJlcXVlc3RIZWFkZXJzOwogCisgICAgSGFzaFNldDx1bnNpZ25lZCBs
b25nPiBtX2hpZGRlblJlcXVlc3RJZGVudGlmaWVyczsKKwogICAgIHR5cGVkZWYgSGFzaE1hcDxU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgUmVmUHRyPFhIUlJlcGxheURhdGE+PiBQZW5kaW5nWEhS
UmVwbGF5RGF0YU1hcDsKICAgICBQZW5kaW5nWEhSUmVwbGF5RGF0YU1hcCBtX3BlbmRpbmdYSFJS
ZXBsYXlEYXRhOwogICAgIC8vIEZJWE1FOiBJbnNwZWN0b3JSZXNvdXJjZUFnZW50IHNob3VsZCBu
b3cgYmUgYXdhcmUgb2Ygc3R5bGUgcmVjYWxjdWxhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9OZXR3b3JrLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvcHJvdG9jb2wvTmV0d29yay5qc29uCmluZGV4IDc5YmFiN2E5ZWUxNjUyMzhlNzZh
MmMwOTEyNzliMjYyZjUyOTA1YzQuLjRjNjMyYWE3ZTIwNjhjZjNmNDFmM2VkNjE5YzJmYTNhYTNm
OWQ3ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9OZXR3
b3JrLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL05ldHdvcmsu
anNvbgpAQCAtMTkwLDYgKzE5MCwxOSBAQAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2Fj
aGVEaXNhYmxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAiQ2FjaGUgZGlz
YWJsZWQgc3RhdGUuIiB9CiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlRvZ2dsZXMgaWdub3JpbmcgY2FjaGUgZm9yIGVhY2ggcmVxdWVzdC4gSWYgPGNvZGU+dHJ1
ZTwvY29kZT4sIGNhY2hlIHdpbGwgbm90IGJlIHVzZWQuIgorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAorICAgICAgICAgICAgImFzeW5j
IjogdHJ1ZSwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZnJhbWVJZCIsICIkcmVmIjogIkZyYW1lSWQiLCAiZGVzY3JpcHRpb24iOiAiRnJh
bWUgdG8gbG9hZCB0aGUgcmVzb3VyY2UgZnJvbS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiVVJMIG9mIHRoZSBy
ZXNvdXJjZSB0byBsb2FkLiIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5z
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29udGVudCIsICJ0eXBlIjogInN0cmlu
ZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBjb250ZW50LiIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm1pbWVUeXBlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjog
IlJlc291cmNlIG1pbWVUeXBlLiIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24g
dGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCiAgICAgICAg
IH0KICAgICBdLAogICAgICJldmVudHMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCmluZGV4IGVhNjZkNjEyNmU3ZDhi
MzNkMTk2YzgzMThiM2QwMzc0Y2JmZTdjZmMuLmQ0MjZiYWRiM2ZkYjQzMDJmZmRmNWZmOWNjYzAz
MWIwNDFlMjU1MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCkBAIC0xMzksNiArMTM5LDEyIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgYm9vbCByZXBvcnRSYXdIZWFkZXJzKCkgY29uc3QgeyByZXR1cm4g
bV9yZXBvcnRSYXdIZWFkZXJzOyB9CiAgICAgICAgIHZvaWQgc2V0UmVwb3J0UmF3SGVhZGVycyhi
b29sIHJlcG9ydFJhd0hlYWRlcnMpIHsgbV9yZXBvcnRSYXdIZWFkZXJzID0gcmVwb3J0UmF3SGVh
ZGVyczsgfQogCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICAgICAgLy8gV2hldGhlciB0aGlz
IHJlcXVlc3Qgc2hvdWxkIGJlIGhpZGRlbiBmcm9tIHRoZSBJbnNwZWN0b3IuCisgICAgICAgIGJv
b2wgaGlkZGVuRnJvbUluc3BlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGlkZGVuRnJvbUluc3Bl
Y3RvcjsgfQorICAgICAgICB2b2lkIHNldEhpZGRlbkZyb21JbnNwZWN0b3IoYm9vbCBoaWRkZW5G
cm9tSW5zcGVjdG9yKSB7IG1faGlkZGVuRnJvbUluc3BlY3RvciA9IGhpZGRlbkZyb21JbnNwZWN0
b3I7IH0KKyNlbmRpZgorCiAgICAgICAgIHN0YXRpYyBkb3VibGUgZGVmYXVsdFRpbWVvdXRJbnRl
cnZhbCgpOyAvLyBNYXkgcmV0dXJuIDAgd2hlbiB1c2luZyBwbGF0Zm9ybSBkZWZhdWx0LgogICAg
ICAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0VGltZW91dEludGVydmFsKGRvdWJsZSk7CiAKQEAg
LTE1OSw2ICsxNjUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fcmVw
b3J0VXBsb2FkUHJvZ3Jlc3MoZmFsc2UpCiAgICAgICAgICAgICAsIG1fcmVwb3J0TG9hZFRpbWlu
ZyhmYWxzZSkKICAgICAgICAgICAgICwgbV9yZXBvcnRSYXdIZWFkZXJzKGZhbHNlKQorI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisgICAgICAgICAgICAsIG1faGlkZGVuRnJvbUluc3BlY3RvcihmYWxz
ZSkKKyNlbmRpZgogICAgICAgICAgICAgLCBtX3ByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5
TG93KQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTE4MCw2ICsxODksOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3MoZmFsc2UpCiAg
ICAgICAgICAgICAsIG1fcmVwb3J0TG9hZFRpbWluZyhmYWxzZSkKICAgICAgICAgICAgICwgbV9y
ZXBvcnRSYXdIZWFkZXJzKGZhbHNlKQorI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgICAgICAg
ICAsIG1faGlkZGVuRnJvbUluc3BlY3RvcihmYWxzZSkKKyNlbmRpZgogICAgICAgICAgICAgLCBt
X3ByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5TG93KQogICAgICAgICB7CiAgICAgICAgIH0K
QEAgLTIwNiw2ICsyMTgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9y
ZXBvcnRVcGxvYWRQcm9ncmVzcyA6IDE7CiAgICAgICAgIGJvb2wgbV9yZXBvcnRMb2FkVGltaW5n
IDogMTsKICAgICAgICAgYm9vbCBtX3JlcG9ydFJhd0hlYWRlcnMgOiAxOworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisgICAgICAgIGJvb2wgbV9oaWRkZW5Gcm9tSW5zcGVjdG9yIDogMTsKKyNlbmRp
ZgogICAgICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBtX3ByaW9yaXR5IDogNDsKIAogICAgIHBy
aXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCA0NTQxODE0ZTc3
YzM5OWNhNmQ2YjJiM2JiYzUwMjY3ZTAyNTRmNTFhLi43OTFlMmJlMzQxM2JiY2M4ZTI4ZjYwOWNm
MTE2MzcyOWNiN2MxNzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAg
LTE4NCw2ICsxODQsNyBAQCBYTUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCkKICAgICAsIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCh0cnVl
KQogICAgICwgbV91cGxvYWRDb21wbGV0ZShmYWxzZSkKICAgICAsIG1fc2FtZU9yaWdpblJlcXVl
c3QodHJ1ZSkKKyAgICAsIG1fc2VuZGluZ0Zvckluc3BlY3RvcihmYWxzZSkKICAgICAsIG1fcmVj
ZWl2ZWRMZW5ndGgoMCkKICAgICAsIG1fbGFzdFNlbmRMaW5lTnVtYmVyKDApCiAgICAgLCBtX2xh
c3RTZW5kQ29sdW1uTnVtYmVyKDApCkBAIC03MzcsNyArNzM4LDEzIEBAIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6OnNlbmRCeXRlc0RhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgRXhj
ZXB0aW9uQ29kCiAgICAgY3JlYXRlUmVxdWVzdChlYyk7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVl
c3Q6OnNlbmRGcm9tSW5zcGVjdG9yKFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhLCBFeGNl
cHRpb25Db2RlJiBlYykKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmRGb3JJbnNwZWN0b3IoRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgbV9zZW5kaW5nRm9ySW5zcGVjdG9yID0gdHJ1ZTsKKyAg
ICBzZW5kKGVjKTsKK30KKwordm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZEZvckluc3BlY3RvclhI
UlJlcGxheShQYXNzUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IGZvcm1EYXRhID8gZm9ybURhdGEtPmRlZXBD
b3B5KCkgOiAwOwogICAgIGNyZWF0ZVJlcXVlc3QoZWMpOwpAQCAtNzc0LDYgKzc4MSw3IEBAIHZv
aWQgWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVlc3QoRXhjZXB0aW9uQ29kZSYgZWMpCiAKICAg
ICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChtX3VybCk7CiAgICAgcmVxdWVzdC5zZXRIVFRQTWV0
aG9kKG1fbWV0aG9kKTsKKyAgICByZXF1ZXN0LnNldEhpZGRlbkZyb21JbnNwZWN0b3IobV9zZW5k
aW5nRm9ySW5zcGVjdG9yKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExv
YWRYSFIoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzLCBtX21ldGhvZCwgbV91cmwsIG1f
YXN5bmMsIG1fcmVxdWVzdEVudGl0eUJvZHkgPyBtX3JlcXVlc3RFbnRpdHlCb2R5LT5kZWVwQ29w
eSgpIDogMCwgbV9yZXF1ZXN0SGVhZGVycywgbV9pbmNsdWRlQ3JlZGVudGlhbHMpOwogCkBAIC03
OTEsNyArNzk5LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVzdChFeGNlcHRp
b25Db2RlJiBlYykKICAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IERvTm90U25pZmZDb250ZW50
OwogICAgIG9wdGlvbnMucHJlZmxpZ2h0UG9saWN5ID0gdXBsb2FkRXZlbnRzID8gRm9yY2VQcmVm
bGlnaHQgOiBDb25zaWRlclByZWZsaWdodDsKICAgICBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMg
PSAobV9zYW1lT3JpZ2luUmVxdWVzdCB8fCBtX2luY2x1ZGVDcmVkZW50aWFscykgPyBBbGxvd1N0
b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotICAgIG9wdGlv
bnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gVXNlQWNjZXNzQ29udHJvbDsKKyAgICBvcHRp
b25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IG1fc2VuZGluZ0Zvckluc3BlY3RvciA/IEFs
bG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cyA6IFVzZUFjY2Vzc0NvbnRyb2w7CiAgICAgb3B0aW9ucy5z
ZWN1cml0eU9yaWdpbiA9IHNlY3VyaXR5T3JpZ2luKCk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX1RJ
TUlORykKICAgICBvcHRpb25zLmluaXRpYXRvciA9IGNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRp
YXRvcnMoKS54bWxodHRwcmVxdWVzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKaW5k
ZXggNzVmZWYzNGE2ZmU3MzFjNzdhMmU5YWMzNDg2MjNlMGM3YjgzZTU0YS4uMzdkOTg5MmFkMGEw
ODVmNDNmYTVlM2Q4MWE3NWE1MzMwNzg1MWY5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmgKQEAgLTEwOSw2ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldFJlc3BvbnNl
SGVhZGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgU3RyaW5nIHJlc3Bv
bnNlVGV4dChFeGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIHJlc3BvbnNlVGV4dElnbm9yaW5n
UmVzcG9uc2VUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZUJ1aWxkZXIudG9TdHJpbmdQ
cmVzZXJ2ZUNhcGFjaXR5KCk7IH0KKyAgICBTdHJpbmcgcmVzcG9uc2VNSU1FVHlwZSgpIGNvbnN0
OwogICAgIERvY3VtZW50KiByZXNwb25zZVhNTChFeGNlcHRpb25Db2RlJik7CiAgICAgRG9jdW1l
bnQqIG9wdGlvbmFsUmVzcG9uc2VYTUwoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlRG9jdW1l
bnQuZ2V0KCk7IH0KICAgICBCbG9iKiByZXNwb25zZUJsb2IoKTsKQEAgLTEyMSw3ICsxMjIsOCBA
QCBwdWJsaWM6CiAgICAgYm9vbCByZXNwb25zZUNhY2hlSXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVzcG9uc2VDYWNoZUlzVmFsaWQ7IH0KICAgICB2b2lkIGRpZENhY2hlUmVzcG9uc2VKU09O
KCk7CiAKLSAgICB2b2lkIHNlbmRGcm9tSW5zcGVjdG9yKFBhc3NSZWZQdHI8Rm9ybURhdGE+LCBF
eGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZW5kRm9ySW5zcGVjdG9yKEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2b2lkIHNlbmRGb3JJbnNwZWN0b3JYSFJSZXBsYXkoUGFzc1JlZlB0cjxGb3JtRGF0
YT4sIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIC8vIEV4cG9zZSBIVFRQIHZhbGlkYXRpb24gbWV0
aG9kcyBmb3Igb3RoZXIgdW50cnVzdGVkIHJlcXVlc3RzLgogICAgIHN0YXRpYyBib29sIGlzQWxs
b3dlZEhUVFBNZXRob2QoY29uc3QgU3RyaW5nJik7CkBAIC0xODMsNyArMTg1LDYgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENoZWNrKCkgb3ZlcnJpZGU7CiAK
LSAgICBTdHJpbmcgcmVzcG9uc2VNSU1FVHlwZSgpIGNvbnN0OwogICAgIGJvb2wgcmVzcG9uc2VJ
c1hNTCgpIGNvbnN0OwogCiAgICAgYm9vbCBpbml0U2VuZChFeGNlcHRpb25Db2RlJik7CkBAIC0y
NDUsNiArMjQ2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdXBsb2FkQ29tcGxldGU7CiAKICAg
ICBib29sIG1fc2FtZU9yaWdpblJlcXVlc3Q7CisgICAgYm9vbCBtX3NlbmRpbmdGb3JJbnNwZWN0
b3I7CiAKICAgICAvLyBVc2VkIGZvciBvbnByb2dyZXNzIHRyYWNraW5nCiAgICAgbG9uZyBsb25n
IG1fcmVjZWl2ZWRMZW5ndGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9Tb3VyY2VNYXBNYW5hZ2VyLmpzIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvU291cmNlTWFwTWFuYWdlci5qcwpp
bmRleCBiYTM2YzA0MGEzNDY4YmJiYzhmZTdlNDk0NjM5YzUzMTY5ZGZhZjkzLi45YmIxMDRkMDE5
ZTlkYWZkY2ViNjlhODE4MmVjZDQ5MjFmZDNhN2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Tb3VyY2VNYXBNYW5hZ2VyLmpzCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1NvdXJj
ZU1hcE1hbmFnZXIuanMKQEAgLTYxLDcgKzYxLDE5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKHNvdXJjZU1hcFVSTCBpbiB0aGlzLl9k
b3dubG9hZGluZ1NvdXJjZU1hcHMpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdGhp
cy5fbG9hZEFuZFBhcnNlU291cmNlTWFwKHNvdXJjZU1hcFVSTCwgYmFzZVVSTCwgb3JpZ2luYWxT
b3VyY2VDb2RlKTsKKyAgICAgICAgZnVuY3Rpb24gbG9hZEFuZFBhcnNlU291cmNlTWFwKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgdGhpcy5fbG9hZEFuZFBhcnNlU291cmNlTWFwKHNvdXJjZU1h
cFVSTCwgYmFzZVVSTCwgb3JpZ2luYWxTb3VyY2VDb2RlKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghV2ViSW5zcGVjdG9yLmZyYW1lUmVzb3VyY2VNYW5hZ2VyLm1haW5GcmFtZSkgeworICAg
ICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIG1haW4gZnJhbWUsIHRoZW4gd2UgYXJlIGxp
a2VseSBpbiB0aGUgbWlkZGxlIG9mIGJ1aWxkaW5nIHRoZSByZXNvdXJjZSB0cmVlLgorICAgICAg
ICAgICAgLy8gRGVsYXlpbmcgdW50aWwgdGhlIG5leHQgcnVubG9vcCBpcyBlbm91Z2ggaW4gdGhp
cyBjYXNlIHRvIHRoZW4gc3RhcnQgbG9hZGluZyB0aGUgc291cmNlIG1hcC4KKyAgICAgICAgICAg
IHNldFRpbWVvdXQobG9hZEFuZFBhcnNlU291cmNlTWFwLmJpbmQodGhpcyksIDApOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbG9hZEFuZFBhcnNlU291cmNlTWFw
LmNhbGwodGhpcyk7CiAgICAgfSwKIAogICAgIC8vIFByaXZhdGUKQEAgLTcwLDMxICs4Miw0MSBA
QCBXZWJJbnNwZWN0b3IuU291cmNlTWFwTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgewogICAg
ICAgICB0aGlzLl9kb3dubG9hZGluZ1NvdXJjZU1hcHNbc291cmNlTWFwVVJMXSA9IHRydWU7CiAK
LSAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8xMzIzODg4Nj4gU291cmNlIE1hcHM6
IEZyb250ZW5kIG5lZWRzIGFzeW5jaHJvbm91cyByZXNvdXJjZSBsb2FkaW5nIG9mIGNvbnRlbnQg
KyBtaW1lIHR5cGUKLSAgICAgICAgdmFyIHJlc3BvbnNlID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc291cmNlTWFwVVJMKTsKLSAgICAgICAgaWYgKHJl
c3BvbnNlID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgIHRoaXMuX2xvYWRBbmRQYXJzZUZh
aWxlZChzb3VyY2VNYXBVUkwpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKHJlc3BvbnNlLnNsaWNlKDAsIDMpID09PSAiKV19IikgewotICAgICAgICAgICAg
dmFyIGZpcnN0TmV3bGluZUluZGV4ID0gcmVzcG9uc2UuaW5kZXhPZigiXG4iKTsKLSAgICAgICAg
ICAgIGlmIChmaXJzdE5ld2xpbmVJbmRleCA9PT0gLTEpIHsKKyAgICAgICAgZnVuY3Rpb24gc291
cmNlTWFwTG9hZGVkKGVycm9yLCBjb250ZW50LCBtaW1lVHlwZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZEFuZFBhcnNlRmFp
bGVkKHNvdXJjZU1hcFVSTCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZS5zdWJzdHJpbmcoZmlyc3ROZXdsaW5l
SW5kZXgpOwotICAgICAgICB9CiAKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciBwYXls
b2FkID0gSlNPTi5wYXJzZShyZXNwb25zZSk7Ci0gICAgICAgICAgICB2YXIgYmFzZVVSTCA9IHNv
dXJjZU1hcFVSTC5zdGFydHNXaXRoKCJkYXRhOiIpID8gb3JpZ2luYWxTb3VyY2VDb2RlLnVybCA6
IHNvdXJjZU1hcFVSTDsKLSAgICAgICAgICAgIHZhciBzb3VyY2VNYXAgPSBuZXcgV2ViSW5zcGVj
dG9yLlNvdXJjZU1hcChiYXNlVVJMLCBwYXlsb2FkLCBvcmlnaW5hbFNvdXJjZUNvZGUpOwotICAg
ICAgICAgICAgdGhpcy5fbG9hZEFuZFBhcnNlU3VjY2VlZGVkKHNvdXJjZU1hcFVSTCwgc291cmNl
TWFwKTsKLSAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUu
bWVzc2FnZSk7Ci0gICAgICAgICAgICB0aGlzLl9sb2FkQW5kUGFyc2VGYWlsZWQoc291cmNlTWFw
VVJMKTsKKyAgICAgICAgICAgIGlmIChjb250ZW50LnNsaWNlKDAsIDMpID09PSAiKV19Iikgewor
ICAgICAgICAgICAgICAgIHZhciBmaXJzdE5ld2xpbmVJbmRleCA9IGNvbnRlbnQuaW5kZXhPZigi
XG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3ROZXdsaW5lSW5kZXggPT09IC0xKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRBbmRQYXJzZUZhaWxlZChzb3VyY2VNYXBVUkwp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKGZpcnN0TmV3bGluZUluZGV4
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2
YXIgcGF5bG9hZCA9IEpTT04ucGFyc2UoY29udGVudCk7CisgICAgICAgICAgICAgICAgdmFyIGJh
c2VVUkwgPSBzb3VyY2VNYXBVUkwuc3RhcnRzV2l0aCgiZGF0YToiKSA/IG9yaWdpbmFsU291cmNl
Q29kZS51cmwgOiBzb3VyY2VNYXBVUkw7CisgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcCA9
IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlTWFwKGJhc2VVUkwsIHBheWxvYWQsIG9yaWdpbmFsU291
cmNlQ29kZSk7CisgICAgICAgICAgICAgICAgdGhpcy5fbG9hZEFuZFBhcnNlU3VjY2VlZGVkKHNv
dXJjZU1hcFVSTCwgc291cmNlTWFwKTsKKyAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAg
ICAgICAgICAgIHRoaXMuX2xvYWRBbmRQYXJzZUZhaWxlZChzb3VyY2VNYXBVUkwpOworICAgICAg
ICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgdmFyIGZyYW1lSWRlbnRpZmllciA9IG51bGw7
CisgICAgICAgIGlmIChvcmlnaW5hbFNvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3Iu
UmVzb3VyY2UgJiYgb3JpZ2luYWxTb3VyY2VDb2RlLnBhcmVudEZyYW1lKQorICAgICAgICAgICAg
ZnJhbWVJZGVudGlmaWVyID0gb3JpZ2luYWxTb3VyY2VDb2RlLnBhcmVudEZyYW1lLmlkOworCisg
ICAgICAgIGlmICghZnJhbWVJZGVudGlmaWVyKQorICAgICAgICAgICAgZnJhbWVJZGVudGlmaWVy
ID0gV2ViSW5zcGVjdG9yLmZyYW1lUmVzb3VyY2VNYW5hZ2VyLm1haW5GcmFtZS5pZDsKKworICAg
ICAgICBOZXR3b3JrQWdlbnQubG9hZFJlc291cmNlKGZyYW1lSWRlbnRpZmllciwgc291cmNlTWFw
VVJMLCBzb3VyY2VNYXBMb2FkZWQuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIF9sb2FkQW5k
UGFyc2VGYWlsZWQ6IGZ1bmN0aW9uKHNvdXJjZU1hcFVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VNYXBSZXNvdXJjZS5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VNYXBSZXNv
dXJjZS5qcwppbmRleCAwZmVkMDM5M2ExZDkzM2NiZTE1MDY3ODAyYWM3MmY5ZTIyMDcyMjQ5Li5l
NzJjNjI1YzdlYjc4MWEyZjBlZjkxOGY1ZTdhMGViN2U0NGRjNTE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNlTWFwUmVzb3VyY2Uu
anMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJj
ZU1hcFJlc291cmNlLmpzCkBAIC02NywxNyArNjcsMzggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZU1h
cFJlc291cmNlLnByb3RvdHlwZSA9IHsKIAogICAgIHJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6
IGZ1bmN0aW9uKGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgZnVuY3Rpb24gcmVxdWVzdEFzeW5j
Q2FsbGJhY2soYm9keSwgYmFzZTY0ZW5jb2RlZCwgbWltZVR5cGUpCisgICAgICAgIHZhciBpbmxp
bmVDb250ZW50ID0gdGhpcy5fc291cmNlTWFwLnNvdXJjZUNvbnRlbnQodGhpcy51cmwpOworICAg
ICAgICBpZiAoaW5saW5lQ29udGVudCkgeworICAgICAgICAgICAgLy8gRm9yY2UgaW5saW5lIGNv
bnRlbnQgdG8gYmUgYXN5bmNocm9ub3VzIHRvIG1hdGNoIHRoZSBleHBlY3RlZCBsb2FkIHBhdHRl
cm4uCisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBkb24ndCBrbm93IHRoZSBNSU1FLXR5cGUgZm9yIGlubGluZSBjb250ZW50
LiBHdWVzcyBieSBhbmFseXppbmcgdGhlIGNvbnRlbnQ/CisgICAgICAgICAgICAgICAgLy8gR3Vl
c3MgYnkgdXNpbmcgdGhlIHR5cGUgb2YgdGhlIG9yaWdpbmFsIHJlc291cmNlPworICAgICAgICAg
ICAgICAgIHNvdXJjZU1hcFJlc291cmNlTG9hZGVkLmNhbGwodGhpcywgbnVsbCwgaW5saW5lQ29u
dGVudCwgInRleHQvamF2YXNjcmlwdCIpOworICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTsKKwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBz
b3VyY2VNYXBSZXNvdXJjZUxvYWRlZChlcnJvciwgYm9keSwgbWltZVR5cGUpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChib2R5ID09PSBudWxsKSB7CisgICAgICAgICAgICBjb25zdCBiYXNl
NjRlbmNvZGVkID0gZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAg
ICAgICAgIHRoaXMubWFya0FzRmFpbGVkKCk7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soIkZh
aWxlZCB0byBsb2FkIHJlc291cmNlIiwgYm9keSwgYmFzZTY0ZW5jb2RlZCk7CisgICAgICAgICAg
ICAgICAgY2FsbGJhY2soZXJyb3IsIGJvZHksIGJhc2U2NGVuY29kZWQpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgdmFyIGZpbGVFeHRlbnNp
b24gPSBXZWJJbnNwZWN0b3IuZmlsZUV4dGVuc2lvbkZvclVSTCh0aGlzLnVybCk7CisgICAgICAg
ICAgICB2YXIgZmlsZUV4dGVuc2lvbk1JTUVUeXBlID0gV2ViSW5zcGVjdG9yLm1pbWVUeXBlRm9y
RmlsZUV4dGVuc2lvbihmaWxlRXh0ZW5zaW9uLCB0cnVlKSB8fCAidGV4dC9qYXZhc2NyaXB0IjsK
KworICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBwaWNraW5nIHRoZSBiZXN0
IE1JTUUtdHlwZS4gUmlnaHQgbm93IHRoZSBmaWxlIGV4dGVuc2lvbiBpcyB0aGUgYmVzdCBiZXQu
CisgICAgICAgICAgICBtaW1lVHlwZSA9IGZpbGVFeHRlbnNpb25NSU1FVHlwZTsKKwogICAgICAg
ICAgICAgdmFyIG9sZFR5cGUgPSB0aGlzLl90eXBlOwogICAgICAgICAgICAgdmFyIG9sZE1JTUVU
eXBlID0gdGhpcy5fbWltZVR5cGU7CiAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEg
bGF5ZXJpbmcgdmlvbGF0aW9uLiBJdCBzaG91bGQgdXNlIGEgaGVscGVyIGZ1bmN0aW9uIG9uIHRo
ZSBSZXNvdXJjZSBiYXNlLWNsYXNzLgogICAgICAgICAgICAgdGhpcy5fbWltZVR5cGUgPSBtaW1l
VHlwZTsKICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlw
ZS5mcm9tTUlNRVR5cGUodGhpcy5fbWltZVR5cGUpOwogCkBAIC05Niw3ICsxMTcsMTUgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGNh
bGxiYWNrKG51bGwsIGJvZHksIGJhc2U2NGVuY29kZWQpOwogICAgICAgICB9CiAKLSAgICAgICAg
dGhpcy5fcmVxdWVzdFJlc291cmNlQXN5bmNocm9ub3VzbHkocmVxdWVzdEFzeW5jQ2FsbGJhY2su
YmluZCh0aGlzKSk7CisgICAgICAgIHZhciBmcmFtZUlkZW50aWZpZXIgPSBudWxsOworICAgICAg
ICBpZiAodGhpcy5fc291cmNlTWFwLm9yaWdpbmFsU291cmNlQ29kZSBpbnN0YW5jZW9mIFdlYklu
c3BlY3Rvci5SZXNvdXJjZSAmJiB0aGlzLl9zb3VyY2VNYXAub3JpZ2luYWxTb3VyY2VDb2RlLnBh
cmVudEZyYW1lKQorICAgICAgICAgICAgZnJhbWVJZGVudGlmaWVyID0gdGhpcy5fc291cmNlTWFw
Lm9yaWdpbmFsU291cmNlQ29kZS5wYXJlbnRGcmFtZS5pZDsKKworICAgICAgICBpZiAoIWZyYW1l
SWRlbnRpZmllcikKKyAgICAgICAgICAgIGZyYW1lSWRlbnRpZmllciA9IFdlYkluc3BlY3Rvci5m
cmFtZVJlc291cmNlTWFuYWdlci5tYWluRnJhbWUuaWQ7CisKKyAgICAgICAgTmV0d29ya0FnZW50
LmxvYWRSZXNvdXJjZShmcmFtZUlkZW50aWZpZXIsIHRoaXMudXJsLCBzb3VyY2VNYXBSZXNvdXJj
ZUxvYWRlZC5iaW5kKHRoaXMpKTsKKwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9LAogCkBA
IC0xMjgsMjUgKzE1Nyw2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHZhciBzdGFydFNvdXJjZUNvZGVMb2NhdGlvbiA9IHRoaXMuY3JlYXRl
U291cmNlQ29kZUxvY2F0aW9uKHRleHRSYW5nZS5zdGFydExpbmUsIHRleHRSYW5nZS5zdGFydENv
bHVtbik7CiAgICAgICAgIHZhciBlbmRTb3VyY2VDb2RlTG9jYXRpb24gPSB0aGlzLmNyZWF0ZVNv
dXJjZUNvZGVMb2NhdGlvbih0ZXh0UmFuZ2UuZW5kTGluZSwgdGV4dFJhbmdlLmVuZENvbHVtbik7
CiAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0UmFuZ2UodGhp
cy5fc291cmNlTWFwLm9yaWdpbmFsU291cmNlQ29kZSwgc3RhcnRTb3VyY2VDb2RlTG9jYXRpb24s
IGVuZFNvdXJjZUNvZGVMb2NhdGlvbik7Ci0gICAgfSwKLQotICAgIC8vIFByaXZhdGUKLQotICAg
IF9yZXF1ZXN0UmVzb3VyY2VBc3luY2hyb25vdXNseTogZnVuY3Rpb24oY2FsbGJhY2spCi0gICAg
ewotICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzEzMjM4ODg2PiBTb3VyY2UgTWFw
czogRnJvbnRlbmQgbmVlZHMgYXN5bmNocm9ub3VzIHJlc291cmNlIGxvYWRpbmcgb2YgY29udGVu
dCArIG1pbWUgdHlwZQotCi0gICAgICAgIGZ1bmN0aW9uIGFzeW5jKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgdmFyIGJvZHkgPSB0aGlzLl9zb3VyY2VNYXAuc291cmNlQ29udGVudCh0aGlzLnVy
bCkgfHwgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodGhp
cy51cmwpOwotICAgICAgICAgICAgaWYgKGJvZHkgPT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAg
ICAgICBib2R5ID0gbnVsbDsKLSAgICAgICAgICAgIHZhciBmaWxlRXh0ZW5zaW9uID0gV2ViSW5z
cGVjdG9yLmZpbGVFeHRlbnNpb25Gb3JVUkwodGhpcy51cmwpOwotICAgICAgICAgICAgdmFyIG1p
bWVUeXBlID0gV2ViSW5zcGVjdG9yLm1pbWVUeXBlRm9yRmlsZUV4dGVuc2lvbihmaWxlRXh0ZW5z
aW9uLCB0cnVlKSB8fCAidGV4dC9qYXZhc2NyaXB0IjsKLSAgICAgICAgICAgIGNhbGxiYWNrKGJv
ZHksIGZhbHNlLCBtaW1lVHlwZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzZXRUaW1lb3V0KGFz
eW5jLmJpbmQodGhpcyksIDApOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvcldlYkJhY2tlbmRDb21t
YW5kcy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0lu
c3BlY3RvcldlYkJhY2tlbmRDb21tYW5kcy5qcwppbmRleCBkZjkzNTlkOTg0M2U0YjkwZjQ3MmNj
NTdkYWI4NzlmMzE1NGQzZTdhLi4zNzIzZDJlNzE0MTk5MzNhODJhNDM0M2Y3MjU5YmM5NTkxYmJl
N2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90
b2NvbC9JbnNwZWN0b3JXZWJCYWNrZW5kQ29tbWFuZHMuanMKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvSW5zcGVjdG9yV2ViQmFja2VuZENvbW1hbmRz
LmpzCkBAIC0yMTAsNiArMjEwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQo
Ik5ldHdvcmsuY2xlYXJCcm93c2VyQ2FjaGUiLCBbXSwgW10pOwogSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsuY2FuQ2xlYXJCcm93c2VyQ29va2llcyIsIFtdLCBbInJl
c3VsdCJdKTsKIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrLmNsZWFy
QnJvd3NlckNvb2tpZXMiLCBbXSwgW10pOwogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIk5ldHdvcmsuc2V0Q2FjaGVEaXNhYmxlZCIsIFt7Im5hbWUiOiAiY2FjaGVEaXNhYmxlZCIs
ICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbXSk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yay5sb2FkUmVzb3VyY2UiLCBbeyJuYW1lIjog
ImZyYW1lSWQiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6
ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbnRlbnQi
LCAibWltZVR5cGUiXSk7CiAKIC8vIFBhZ2UuCiBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyUGFn
ZURpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5i
aW5kKEluc3BlY3RvckJhY2tlbmQsICJQYWdlIik7CkBAIC0yODYsNyArMjg3LDcgQEAgSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIlByb2ZpbGVyLmdldEhlYXBPYmplY3RJZCIsIFt7
Im5hbWUiOiAib2JqZWN0SWQKIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJUaW1lbGluZURpc3Bh
dGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKElu
c3BlY3RvckJhY2tlbmQsICJUaW1lbGluZSIpOwogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVu
dW0oIlRpbWVsaW5lLkV2ZW50VHlwZSIsIHtFdmVudERpc3BhdGNoOiAiRXZlbnREaXNwYXRjaCIs
IEJlZ2luRnJhbWU6ICJCZWdpbkZyYW1lIiwgU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb246ICJT
Y2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbiIsIFJlY2FsY3VsYXRlU3R5bGVzOiAiUmVjYWxjdWxh
dGVTdHlsZXMiLCBJbnZhbGlkYXRlTGF5b3V0OiAiSW52YWxpZGF0ZUxheW91dCIsIExheW91dDog
IkxheW91dCIsIFBhaW50OiAiUGFpbnQiLCBTY3JvbGxMYXllcjogIlNjcm9sbExheWVyIiwgUmVz
aXplSW1hZ2U6ICJSZXNpemVJbWFnZSIsIENvbXBvc2l0ZUxheWVyczogIkNvbXBvc2l0ZUxheWVy
cyIsIFBhcnNlSFRNTDogIlBhcnNlSFRNTCIsIFRpbWVySW5zdGFsbDogIlRpbWVySW5zdGFsbCIs
IFRpbWVyUmVtb3ZlOiAiVGltZXJSZW1vdmUiLCBUaW1lckZpcmU6ICJUaW1lckZpcmUiLCBFdmFs
dWF0ZVNjcmlwdDogIkV2YWx1YXRlU2NyaXB0IiwgTWFya0xvYWQ6ICJNYXJrTG9hZCIsIE1hcmtE
T01Db250ZW50OiAiTWFya0RPTUNvbnRlbnQiLCBUaW1lU3RhbXA6ICJUaW1lU3RhbXAiLCBUaW1l
OiAiVGltZSIsIFRpbWVFbmQ6ICJUaW1lRW5kIiwgU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3Q6ICJT
Y2hlZHVsZVJlc291cmNlUmVxdWVzdCIsIFJlc291cmNlU2VuZFJlcXVlc3Q6ICJSZXNvdXJjZVNl
bmRSZXF1ZXN0IiwgUmVzb3VyY2VSZWNlaXZlUmVzcG9uc2U6ICJSZXNvdXJjZVJlY2VpdmVSZXNw
b25zZSIsIFJlc291cmNlUmVjZWl2ZWREYXRhOiAiUmVzb3VyY2VSZWNlaXZlZERhdGEiLCBSZXNv
dXJjZUZpbmlzaDogIlJlc291cmNlRmluaXNoIiwgWEhSUmVhZHlTdGF0ZUNoYW5nZTogIlhIUlJl
YWR5U3RhdGVDaGFuZ2UiLCBYSFJMb2FkOiAiWEhSTG9hZCIsIEZ1bmN0aW9uQ2FsbDogIkZ1bmN0
aW9uQ2FsbCIsIEdDRXZlbnQ6ICJHQ0V2ZW50IiwgUmVxdWVzdEFuaW1hdGlvbkZyYW1lOiAiUmVx
dWVzdEFuaW1hdGlvbkZyYW1lIiwgQ2FuY2VsQW5pbWF0aW9uRnJhbWU6ICJDYW5jZWxBbmltYXRp
b25GcmFtZSIsIEZpcmVBbmltYXRpb25GcmFtZTogIkZpcmVBbmltYXRpb25GcmFtZSIsIFdlYlNv
Y2tldENyZWF0ZTogIldlYlNvY2tldENyZWF0ZSIsIFdlYlNvY2tldFNlbmRIYW5kc2hha2VSZXF1
ZXN0OiAiV2ViU29ja2V0U2VuZEhhbmRzaGFrZVJlcXVlc3QiLCBXZWJTb2NrZXRSZWNlaXZlSGFu
ZHNoYWtlUmVzcG9uc2U6ICJXZWJTb2NrZXRSZWNlaXZlSGFuZHNoYWtlUmVzcG9uc2UiLCBXZWJT
b2NrZXREZXN0cm95OiAiV2ViU29ja2V0RGVzdHJveSJ9KTsKIEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJFdmVudCgiVGltZWxpbmUuZXZlbnRSZWNvcmRlZCIsIFsicmVjb3JkIl0pOwotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIlRpbWVsaW5lLnN0YXJ0IiwgW3sibmFtZSI6ICJt
YXhDYWxsU3RhY2tEZXB0aCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7
Im5hbWUiOiAiaW5jbHVkZURvbUNvdW50ZXJzIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25h
bCI6IHRydWV9XSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIlRpbWVs
aW5lLnN0YXJ0IiwgW3sibmFtZSI6ICJtYXhDYWxsU3RhY2tEZXB0aCIsICJ0eXBlIjogIm51bWJl
ciIsICJvcHRpb25hbCI6IHRydWV9XSwgW10pOwogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIlRpbWVsaW5lLnN0b3AiLCBbXSwgW10pOwogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckNvbW1hbmQoIlRpbWVsaW5lLnN1cHBvcnRzRnJhbWVJbnN0cnVtZW50YXRpb24iLCBbXSwgWyJy
ZXN1bHQiXSk7CiBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiVGltZWxpbmUuY2Fu
TW9uaXRvck1haW5UaHJlYWQiLCBbXSwgWyJyZXN1bHQiXSk7Cg==
</data>
<flag name="commit-queue"
          id="250413"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>