<?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>47779</bug_id>
          
          <creation_ts>2010-10-17 06:30:22 -0700</creation_ts>
          <short_desc>Web Inspector: Introduce InspectorResourceAgent.h/cpp and ResourceManager.js to fill network panel with data.</short_desc>
          <delta_ts>2010-10-18 03:15:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>295214</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-17 06:30:22 -0700</bug_when>
    <thetext>New InspectorResourceAgent is introduced, its lifetime is equal to the front-end&apos;s. This new resource agent does not have state, instead it covers two functions: 1) forwards loader client messages to the front-end 2) is capable of building a tree of cached resources. (1) feeds network panel with data, (2) shows the resource tree in the new ResourcesPanel concept. This bug is for extracting this new InspectorResourceAgent class and its javascript counterpart. Once resources panel is refactored for the new concept, InspectorResource, InspectorController&apos;s resource-related routines, inspector.js&apos;s code dealing with resources, they all will be gone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295225</commentid>
    <comment_count>1</comment_count>
      <attachid>70974</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-17 09:30:55 -0700</bug_when>
    <thetext>Created attachment 70974
[PATCH] Proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295227</commentid>
    <comment_count>2</comment_count>
      <attachid>70974</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-17 09:43:16 -0700</bug_when>
    <thetext>Comment on attachment 70974
[PATCH] Proposed change.

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

Annotating the change since it is quite big. View it in context ^^.

&gt; WebCore/inspector/Inspector.idl:115
&gt; +        [handler=Resource] void cachedResources(out Array resources);

Instead of the stateful InspectorResource collection, we now pass all the events to the front-end. We collect nothing while there is no front-end.

&gt; WebCore/inspector/InspectorController.cpp:502
&gt; +    // FIXME: enable resource agent once front-end is ready.

The new agent is not yet enabled, so we are not breaking any code.

&gt; WebCore/inspector/InspectorController.cpp:1054
&gt; +void InspectorController::didReceiveResponse(unsigned long identifier, DocumentLoader* loader, const ResourceResponse&amp; response)

I needed a loader here, so I now push it to inspector. I think it was so long ago as well.

&gt; WebCore/inspector/InspectorResource.cpp:-193
&gt; -    if (!m_cached &amp;&amp; m_loadTiming &amp;&amp; m_loadTiming-&gt;requestTime)

This just moved to the front-end, it Resource.js is now responsible for using precise network timing.

&gt; WebCore/inspector/InspectorResource.cpp:338
&gt; +static InspectorResource::Type cachedResourceType(CachedResource* cachedResource)

Is now only used here, so moving it back from InspectorResourceAgent.

&gt; WebCore/inspector/InspectorResource.cpp:-381
&gt; -    if (!InspectorResourceAgent::resourceContent(m_frame-&gt;document(), m_requestURL, &amp;result))

I changed the signature of static InspectorResourceAgent methods to receive frame, not document.

&gt; WebCore/inspector/InspectorResource.cpp:-411
&gt; -    if (actualEndTime) {

This logic just moved to Resource.js

&gt; WebCore/inspector/InspectorResourceAgent.cpp:135
&gt; +static PassRefPtr&lt;InspectorObject&gt; buildObjectForHeaders(const HTTPHeaderMap&amp; headers)

Here and below, these are new instance methods that will replace InspectorResource.cpp and InspectorController&apos;s networking aspect soon.

&gt; WebCore/inspector/InspectorResourceAgent.cpp:289
&gt; +    String type = &quot;Other&quot;;

This logic is taken from InspectorResource.cpp. That&apos;s the one I need DocumentLoader instance for (in the provisional load cases).

&gt; WebCore/inspector/InspectorResourceAgent.cpp:358
&gt; +// Create human-readable binary representation, like &quot;01:23:45:67:89:AB:CD:EF&quot;.

This is taken from InspectorResource, original will get nuked once we migrate.

&gt; WebCore/inspector/front-end/ExtensionServer.js:-243
&gt; -        resource = typeof id === &quot;number&quot; ? WebInspector.resources[id] : WebInspector.resourceForURL(id);

Ids can be non-numbers, changed extension code a bit.

&gt; WebCore/inspector/front-end/NetworkPanel.js:130
&gt; +            // Glue status to bottom.

Drive-by fix.

&gt; WebCore/inspector/front-end/NetworkPanel.js:365
&gt; +            if (this._summaryBarElement._isDisplayingWarning)

Drive-by &apos;no resources&apos; status to avoid confusion with the blank network panel.

&gt; WebCore/inspector/front-end/NetworkPanel.js:-728
&gt; -        delete this.currentQuery;

There is no search support in network panel yet, just nuking what has left from the ResourcesPanel cloning.

&gt; WebCore/inspector/front-end/ResourceManager.js:31
&gt; +WebInspector.ResourceManager = function()

This guy is the javascript counterpart of the InspectorResourceAgent. It binds notify methods using _registerNotifyHandlers.

&gt; WebCore/loader/appcache/ApplicationCacheGroup.cpp:-526
&gt; -            page-&gt;inspectorController()-&gt;didReceiveResponse(m_currentResourceIdentifier, response);

This thing shows the diff poorly to me. See text diff for real changes in case you hit the same issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295277</commentid>
    <comment_count>3</comment_count>
      <attachid>70974</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-10-17 13:41:36 -0700</bug_when>
    <thetext>Comment on attachment 70974
[PATCH] Proposed change.

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

&gt; WebCore/inspector/InspectorController.cpp:1061
&gt; +    if (m_resourceAgent)
&gt; +        m_resourceAgent-&gt;didReceiveResponse(identifier, loader, response);
&gt; +

What do you think about moving such calls under control of InspectorInstrumentation API?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295403</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-18 02:24:54 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 70974 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70974&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/InspectorController.cpp:1061
&gt; &gt; +    if (m_resourceAgent)
&gt; &gt; +        m_resourceAgent-&gt;didReceiveResponse(identifier, loader, response);
&gt; &gt; +
&gt; 
&gt; What do you think about moving such calls under control of InspectorInstrumentation API?

Yep, as soon as InspectorResourceAgent becomes the only guy receiving network events, they will get routed via InspectorInstrumentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295408</commentid>
    <comment_count>5</comment_count>
      <attachid>71010</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-18 02:42:52 -0700</bug_when>
    <thetext>Created attachment 71010
[PATCH] For bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295409</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-18 02:45:46 -0700</bug_when>
    <thetext>Attachment 71010 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/inspector/InspectorResourceAgent.cpp:223:  More than one command on the same line  [whitespace/newline] [4]
WebCore/inspector/InspectorResourceAgent.cpp:225:  More than one command on the same line  [whitespace/newline] [4]
WebCore/inspector/InspectorResourceAgent.cpp:231:  More than one command on the same line  [whitespace/newline] [4]
WebCore/inspector/InspectorResourceAgent.cpp:233:  More than one command on the same line  [whitespace/newline] [4]
WebCore/inspector/InspectorResourceAgent.cpp:334:  More than one command on the same line  [whitespace/newline] [4]
WebCore/inspector/InspectorResourceAgent.cpp:336:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 6 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295411</commentid>
    <comment_count>7</comment_count>
      <attachid>70974</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-10-18 02:48:18 -0700</bug_when>
    <thetext>Comment on attachment 70974
[PATCH] Proposed change.

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

&gt; WebCore/inspector/Inspector.idl:116
&gt; +        [handler=Resource] void resourceContent(in unsigned long frameID, in String url, out String content);

should be getResourceContent

&gt; WebCore/inspector/InspectorController.cpp:503
&gt; +    // m_resourceAgent = InspectorResourceAgent::create(m_inspectedPage, m_frontend.get());

This code should be hidden behind a macro definition.

&gt;&gt; WebCore/inspector/InspectorResourceAgent.cpp:135
&gt;&gt; +static PassRefPtr&lt;InspectorObject&gt; buildObjectForHeaders(const HTTPHeaderMap&amp; headers)
&gt; 
&gt; Here and below, these are new instance methods that will replace InspectorResource.cpp and InspectorController&apos;s networking aspect soon.

These are static functions, seems like you meant the methods a few screens below:)

&gt; WebCore/inspector/InspectorResourceAgent.cpp:223
&gt; +        type = &quot;Image&quot;; break;

Prefer early exit, just return &quot;Image&quot;;

&gt; WebCore/inspector/InspectorResourceAgent.cpp:225
&gt; +        type = &quot;Font&quot;; break;

ditto

&gt; WebCore/inspector/InspectorResourceAgent.cpp:231
&gt; +        type = &quot;Stylesheet&quot;; break;

ditto

&gt; WebCore/inspector/InspectorResourceAgent.cpp:233
&gt; +        type = &quot;Script&quot;; break;

ditto

&gt; WebCore/inspector/InspectorResourceAgent.cpp:235
&gt; +        type = &quot;Other&quot;;

ditto

&gt; WebCore/inspector/InspectorResourceAgent.cpp:272
&gt; +void InspectorResourceAgent::identifierForInitialRequest(unsigned long identifier, const KURL&amp; url, DocumentLoader* loader, bool isMainResource)

There is no much sense in keeping clones of these methods on IC since they are pure delegates, are you going to remove it from there?

&gt; WebCore/inspector/InspectorResourceAgent.cpp:362
&gt; +    static const char hexDigits[17] = &quot;0123456789ABCDEF&quot;;

Why not move this code to the FE?

&gt;&gt; WebCore/inspector/front-end/ExtensionServer.js:-243
&gt;&gt; -        resource = typeof id === &quot;number&quot; ? WebInspector.resources[id] : WebInspector.resourceForURL(id);
&gt; 
&gt; Ids can be non-numbers, changed extension code a bit.

Previous version was clearer, can you revert this?

&gt; WebCore/inspector/front-end/Resource.js:169
&gt; +            return this.timing.requestTime + this.timing.receiveHeadersEnd / 1000.0;

The comment is inconsistent with the code and I don&apos;t understand why the formula will give you response receive time, could you provide more details?

&gt; WebCore/inspector/front-end/Resource.js:630
&gt; +            InspectorBackend.getResourceContent(this.identifier, false, callback);

there is no getResourceContent in Inspector.idl, only resourceContent. Please fix this.

&gt;&gt; WebCore/loader/appcache/ApplicationCacheGroup.cpp:-526
&gt;&gt; -            page-&gt;inspectorController()-&gt;didReceiveResponse(m_currentResourceIdentifier, response);
&gt; 
&gt; This thing shows the diff poorly to me. See text diff for real changes in case you hit the same issue.

I see the line is deleted even in the plain text diff. Should the &quot;else&quot; be removed too? or how is it supposed to compiled?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295413</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-18 02:59:44 -0700</bug_when>
    <thetext>Thanks for the review!

(In reply to comment #7)
&gt; (From update of attachment 70974 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70974&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/Inspector.idl:116
&gt; &gt; +        [handler=Resource] void resourceContent(in unsigned long frameID, in String url, out String content);
&gt; 
&gt; should be getResourceContent
&gt; 

There alreadty is one (for the old code path that will go away with InspectorResource).

&gt; &gt; WebCore/inspector/InspectorController.cpp:503
&gt; &gt; +    // m_resourceAgent = InspectorResourceAgent::create(m_inspectedPage, m_frontend.get());
&gt; 
&gt; This code should be hidden behind a macro definition.
&gt; 

Please let me ignore this for now.

&gt; &gt;&gt; WebCore/inspector/InspectorResourceAgent.cpp:135
&gt; &gt;&gt; +static PassRefPtr&lt;InspectorObject&gt; buildObjectForHeaders(const HTTPHeaderMap&amp; headers)
&gt; &gt; 
&gt; &gt; Here and below, these are new instance methods that will replace InspectorResource.cpp and InspectorController&apos;s networking aspect soon.
&gt; 
&gt; These are static functions, seems like you meant the methods a few screens below:)
&gt; 

Yep.

&gt; &gt; WebCore/inspector/InspectorResourceAgent.cpp:223
&gt; &gt; +        type = &quot;Image&quot;; break;
&gt; 
&gt; Prefer early exit, just return &quot;Image&quot;;
&gt; 
&gt; &gt; WebCore/inspector/InspectorResourceAgent.cpp:225
&gt; &gt; +        type = &quot;Font&quot;; break;
&gt; 
&gt; ditto
&gt; 
&gt; &gt; WebCore/inspector/InspectorResourceAgent.cpp:231
&gt; &gt; +        type = &quot;Stylesheet&quot;; break;
&gt; 
&gt; ditto
&gt; 
&gt; &gt; WebCore/inspector/InspectorResourceAgent.cpp:233
&gt; &gt; +        type = &quot;Script&quot;; break;
&gt; 
&gt; ditto
&gt; 
&gt; &gt; WebCore/inspector/InspectorResourceAgent.cpp:235
&gt; &gt; +        type = &quot;Other&quot;;
&gt; 
&gt; ditto
&gt; 

Done. It was extracted late, could not use return inline.

&gt; &gt; WebCore/inspector/InspectorResourceAgent.cpp:272
&gt; &gt; +void InspectorResourceAgent::identifierForInitialRequest(unsigned long identifier, const KURL&amp; url, DocumentLoader* loader, bool isMainResource)
&gt; 
&gt; There is no much sense in keeping clones of these methods on IC since they are pure delegates, are you going to remove it from there?
&gt; 

Exactly.

&gt; &gt; WebCore/inspector/InspectorResourceAgent.cpp:362
&gt; &gt; +    static const char hexDigits[17] = &quot;0123456789ABCDEF&quot;;
&gt; 
&gt; Why not move this code to the FE?
&gt; 

I will think about it :) FIXME for now.

&gt; &gt;&gt; WebCore/inspector/front-end/ExtensionServer.js:-243
&gt; &gt;&gt; -        resource = typeof id === &quot;number&quot; ? WebInspector.resources[id] : WebInspector.resourceForURL(id);
&gt; &gt; 
&gt; &gt; Ids can be non-numbers, changed extension code a bit.
&gt; 
&gt; Previous version was clearer, can you revert this?
&gt; 

Not really, it is important that IDs can be non-numbers,

&gt; &gt; WebCore/inspector/front-end/Resource.js:169
&gt; &gt; +            return this.timing.requestTime + this.timing.receiveHeadersEnd / 1000.0;
&gt; 
&gt; The comment is inconsistent with the code and I don&apos;t understand why the formula will give you response receive time, could you provide more details?
&gt; 

It was simply moved from native code. Added comment.

&gt; &gt; WebCore/inspector/front-end/Resource.js:630
&gt; &gt; +            InspectorBackend.getResourceContent(this.identifier, false, callback);
&gt; 
&gt; there is no getResourceContent in Inspector.idl, only resourceContent. Please fix this.
&gt; 

There is one.

&gt; &gt;&gt; WebCore/loader/appcache/ApplicationCacheGroup.cpp:-526
&gt; &gt;&gt; -            page-&gt;inspectorController()-&gt;didReceiveResponse(m_currentResourceIdentifier, response);
&gt; &gt; 
&gt; &gt; This thing shows the diff poorly to me. See text diff for real changes in case you hit the same issue.
&gt; 
&gt; I see the line is deleted even in the plain text diff. Should the &quot;else&quot; be removed too? or how is it supposed to compiled?

There is a good diff - that file was corrupt. Bots compile!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295418</commentid>
    <comment_count>9</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-18 03:15:15 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/English.lproj/localizedStrings.js
	M	WebCore/WebCore.gypi
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/inspector/CodeGeneratorInspector.pm
	M	WebCore/inspector/Inspector.idl
	M	WebCore/inspector/InspectorApplicationCacheAgent.cpp
	M	WebCore/inspector/InspectorController.cpp
	M	WebCore/inspector/InspectorController.h
	M	WebCore/inspector/InspectorResource.cpp
	M	WebCore/inspector/InspectorResourceAgent.cpp
	M	WebCore/inspector/InspectorResourceAgent.h
	M	WebCore/inspector/InspectorStyleSheet.cpp
	M	WebCore/inspector/front-end/DataGrid.js
	M	WebCore/inspector/front-end/ExtensionServer.js
	M	WebCore/inspector/front-end/NetworkPanel.js
	M	WebCore/inspector/front-end/Resource.js
	A	WebCore/inspector/front-end/ResourceManager.js
	M	WebCore/inspector/front-end/ResourcesPanel.js
	M	WebCore/inspector/front-end/SourceView.js
	M	WebCore/inspector/front-end/WebKit.qrc
	M	WebCore/inspector/front-end/inspector.html
	M	WebCore/inspector/front-end/inspector.js
	M	WebCore/inspector/front-end/networkPanel.css
	M	WebCore/loader/ResourceLoadNotifier.cpp
	M	WebCore/loader/appcache/ApplicationCacheGroup.cpp
	M	WebKit/chromium/ChangeLog
	M	WebKit/chromium/src/WebDevToolsAgentImpl.cpp
Committed r69948</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70974</attachid>
            <date>2010-10-17 09:30:55 -0700</date>
            <delta_ts>2010-10-18 02:48:18 -0700</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>resource_agent</filename>
            <type>text/plain</type>
            <size>73728</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzY4NGEwMS4uY2FkMmUyNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDggQEAKKzIwMTAtMTAtMTcgIFBhdmVsIEZlbGRt
YW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogSW50cm9kdWNlIEluc3BlY3RvclJl
c291cmNlQWdlbnQuaC9jcHAgYW5kIFJlc291cmNlTWFuYWdlci5qcyB0bworICAgICAgICBmaWxs
IG5ldHdvcmsgcGFuZWwgd2l0aCBkYXRhLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDc3NzkKKyAgICAgICAgCisgICAgICAgIEluc3BlY3RvclJlc291
cmNlQWdlbnQgaW5zdGFuY2UgLyBKUyBwYXJ0IGFyZSBpbnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2gu
IEFnZW50J3MgbGlmZXRpbWUgaXMgZXF1YWwKKyAgICAgICAgdG8gdGhlIGZyb250LWVuZCdzLiBU
aGlzIG5ldyByZXNvdXJjZSBhZ2VudCBkb2VzIG5vdCBoYXZlIHN0YXRlLCBpbnN0ZWFkIGl0IGNv
dmVycyB0d28gZnVuY3Rpb25zOgorICAgICAgICAgMSkgZm9yd2FyZHMgbG9hZGVyIGNsaWVudCBt
ZXNzYWdlcyB0byB0aGUgZnJvbnQtZW5kIDIpIGlzIGNhcGFibGUgb2YgYnVpbGRpbmcgYSB0cmVl
IG9mIGNhY2hlZCByZXNvdXJjZXMuCisgICAgICAgICgxKSBmZWVkcyBuZXR3b3JrIHBhbmVsIHdp
dGggZGF0YSwgKDIpIHNob3dzIHRoZSByZXNvdXJjZSB0cmVlIGluIHRoZSBuZXcgUmVzb3VyY2Vz
UGFuZWwgY29uY2VwdC4KKyAgICAgICAgVGhpcyBidWcgaXMgZm9yIGV4dHJhY3RpbmcgdGhpcyBu
ZXcgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCBjbGFzcyBhbmQgaXRzIGphdmFzY3JpcHQgY291bnRl
cnBhcnQuCisgICAgICAgIE9uY2UgcmVzb3VyY2VzIHBhbmVsIGlzIHJlZmFjdG9yZWQgZm9yIHRo
ZSBuZXcgY29uY2VwdCwgSW5zcGVjdG9yUmVzb3VyY2UsIEluc3BlY3RvckNvbnRyb2xsZXIncwor
ICAgICAgICByZXNvdXJjZS1yZWxhdGVkIHJvdXRpbmVzLCBpbnNwZWN0b3IuanMncyBjb2RlIGRl
YWxpbmcgd2l0aCByZXNvdXJjZXMsIHRoZXkgYWxsIHdpbGwgYmUgZ29uZS4KKworICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6ZGlkUmVjZWl2ZU1hbmlmZXN0UmVzcG9uc2UpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmZyYW1lRGV0YWNoZWRGcm9tUGFy
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZExvYWRSZXNv
dXJjZUZyb21NZW1vcnlDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6Om1hcmtSZXNvdXJjZUFzQ2FjaGVkKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRSZWNlaXZlQ29udGVudExlbmd0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRGaW5pc2hMb2FkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEZhaWxMb2FkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlUmV0cmlldmVk
QnlYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzY3JpcHRJbXBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRDcmVhdGVXZWJTb2NrZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNw
b25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDbG9zZVdl
YlNvY2tldCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUmVzb3VyY2U6OnVwZGF0ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNhY2hlZFJlc291cmNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJj
ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZTo6c291cmNlU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlOjpzb3VyY2VCeXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZTo6ZW5kVGltaW5nKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzb3VyY2VDb250ZW50QmFzZTY0KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OnJlc291cmNlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpjYWNoZWRSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvckhlYWRlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6YnVpbGRPYmplY3RGb3JUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRP
YmplY3RGb3JSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RG
b3JSZXNvdXJjZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yTWFp
blJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZFJlc291cmNlVHlwZVN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvckNhY2hlZFJlc291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVSZXNvdXJjZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6fkluc3BlY3RvclJlc291cmNlQWdlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6aWRlbnRpZmllckZvcklu
aXRpYWxSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6
OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50OjptYXJrUmVzb3VyY2VBc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRGYWlsTG9hZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRMb2FkUmVzb3VyY2VG
cm9tTWVtb3J5Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6c2V0T3ZlcnJpZGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291
cmNlQWdlbnQ6OmRpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVz
b3VyY2VBZ2VudDo6ZnJhbWVEZXRhY2hlZEZyb21QYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlUmVhZGFibGVTdHJpbmdGcm9tQmluYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclJlc291cmNlQWdlbnQ6OmRpZENyZWF0ZVdlYlNvY2tldCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2
ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clJlc291cmNlQWdlbnQ6OmRpZENsb3NlV2ViU29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclJlc291cmNlQWdlbnQ6OmNhY2hlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHls
ZVNoZWV0OjpyZXNvdXJjZVN0eWxlU2hlZXRUZXh0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0V4dGVuc2lvblNlcnZlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FeHRlbnNp
b25TZXJ2ZXIucHJvdG90eXBlLl9vblJldmVhbEFuZFNlbGVjdFJlc291cmNlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLl9vbkdldFJlc291cmNlQ29u
dGVudCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZS5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0IHJlc3BvbnNlUmVjZWl2ZWRU
aW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuc2V0IGVuZFRp
bWUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanM6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLnNldHVwU291cmNlRnJhbWVJZk5lZWRlZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzczoKKyAgICAgICAgKC50YWJiZWQtcGFuZS1oZWFkZXIg
bGkpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IudXBkYXRlUmVzb3VyY2UpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWROb3Rp
Zmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWROb3RpZmllcjo6ZGlzcGF0
Y2hEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdy
b3VwOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorCiAyMDEwLTEwLTE2ICBQYXZlbCBGZWxkbWFuICA8
cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3Mu
anMgYi9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwppbmRleCAyMTA4
MWIxLi44ZjNhMjI4IDEwMDY0NApCaW5hcnkgZmlsZXMgYS9XZWJDb3JlL0VuZ2xpc2gubHByb2ov
bG9jYWxpemVkU3RyaW5ncy5qcyBhbmQgYi9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVk
U3RyaW5ncy5qcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOGQ3MDI4My4uY2Y5YjY3YSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ0MDEsNiAr
NDQwMSw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9SZW1vdGVPYmplY3Qu
anMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2UuanMnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VDYXRlZ29yeS5qcycsCisgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZU1hbmFnZXIuanMnLAogICAgICAg
ICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMnLAogICAgICAgICAg
ICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VWaWV3LmpzJywKICAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL1Njb3BlQ2hhaW5TaWRlYmFyUGFuZS5qcycsCmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBlYzIwYWZmLi5hN2NmZjUyIDEwMDY0NAotLS0g
YS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTYzNjU4LDYgKzYzNjU4LDEwIEBACiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXFJlc291cmNlTWFuYWdlci5qcyINCisJCQkJCT4NCisJCQkJPC9GaWxl
Pg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XFJlc291cmNlc1BhbmVsLmpzIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbSBiL1dlYkNvcmUvaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KaW5kZXggMTNlMDViMC4uYTU2NjU3NiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCkBAIC0yOCw2
ICsyOCwxMSBAQCAkdHlwZVRyYW5zZm9ybXsiRGVidWcifSA9IHsKICAgICAiaGVhZGVyIiA9PiAi
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIiwKICAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKSIsCiB9OworJHR5cGVUcmFuc2Zvcm17
IlJlc291cmNlIn0gPSB7CisgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50
IiwKKyAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIiwKKyAgICAiZG9t
YWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fcmVzb3VyY2VBZ2VudCIs
Cit9OwogJHR5cGVUcmFuc2Zvcm17IkRPTSJ9ID0gewogICAgICJmb3J3YXJkIiA9PiAiSW5zcGVj
dG9yRE9NQWdlbnQiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JET01BZ2VudC5oIiwKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3IuaWRsCmluZGV4IGM0NzczY2YuLmI3ZjRhMGQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yLmlkbApAQCAtMTEyLDYgKzExMiwyNSBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFto
YW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgc3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7CiAgICAgICAg
IFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgc3RvcFRpbWVsaW5lUHJvZmlsZXIoKTsKIAorICAg
ICAgICBbaGFuZGxlcj1SZXNvdXJjZV0gdm9pZCBjYWNoZWRSZXNvdXJjZXMob3V0IEFycmF5IHJl
c291cmNlcyk7CisgICAgICAgIFtoYW5kbGVyPVJlc291cmNlXSB2b2lkIHJlc291cmNlQ29udGVu
dChpbiB1bnNpZ25lZCBsb25nIGZyYW1lSUQsIGluIFN0cmluZyB1cmwsIG91dCBTdHJpbmcgY29u
dGVudCk7CisgICAgICAgIFtub3RpZnldIHZvaWQgaWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0
KG91dCBsb25nIGlkZW50aWZpZXIsIG91dCBTdHJpbmcgdXJsLCBvdXQgdW5zaWduZWQgbG9uZyBm
cmFtZUlELCBvdXQgYm9vbGVhbiBpc01haW5SZXNvdXJjZSk7CisgICAgICAgIFtub3RpZnldIHZv
aWQgd2lsbFNlbmRSZXF1ZXN0KG91dCBsb25nIGlkZW50aWZpZXIsIG91dCBkb3VibGUgdGltZSwg
b3V0IE9iamVjdCByZXF1ZXN0LCBvdXQgT2JqZWN0IHJlZGlyZWN0UmVzcG9uc2UpOworICAgICAg
ICBbbm90aWZ5XSB2b2lkIG1hcmtSZXNvdXJjZUFzQ2FjaGVkKG91dCBsb25nIGlkZW50aWZpZXIp
OworICAgICAgICBbbm90aWZ5XSB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShvdXQgbG9uZyBpZGVu
dGlmaWVyLCBvdXQgZG91YmxlIHRpbWUsIG91dCBTdHJpbmcgcmVzb3VyY2VUeXBlLCBvdXQgT2Jq
ZWN0IHJlc3BvbnNlKTsKKyAgICAgICAgW25vdGlmeV0gdm9pZCBkaWRSZWNlaXZlQ29udGVudExl
bmd0aChvdXQgbG9uZyBpZGVudGlmaWVyLCBvdXQgZG91YmxlIHRpbWUsIG91dCBsb25nIGxlbmd0
aFJlY2VpdmVkKTsKKyAgICAgICAgW25vdGlmeV0gdm9pZCBkaWRGaW5pc2hMb2FkaW5nKG91dCBs
b25nIGlkZW50aWZpZXIsIG91dCBkb3VibGUgZmluaXNoVGltZSk7CisgICAgICAgIFtub3RpZnld
IHZvaWQgZGlkRmFpbExvYWRpbmcob3V0IGxvbmcgaWRlbnRpZmllciwgb3V0IGRvdWJsZSB0aW1l
LCBvdXQgU3RyaW5nIGxvY2FsaXplZERlc2NyaXB0aW9uKTsKKyAgICAgICAgW25vdGlmeV0gdm9p
ZCBkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUob3V0IGRvdWJsZSB0aW1lLCBvdXQgdW5z
aWduZWQgbG9uZyBmcmFtZUlELCBvdXQgT2JqZWN0IHJlc291cmNlKTsKKyAgICAgICAgW25vdGlm
eV0gdm9pZCBzZXRPdmVycmlkZUNvbnRlbnQob3V0IGxvbmcgaWRlbnRpZmllciwgb3V0IFN0cmlu
ZyBzb3VyY2VTdHJpbmcsIG91dCBTdHJpbmcgdHlwZSk7CisgICAgICAgIFtub3RpZnldIHZvaWQg
ZGlkQ29tbWl0TG9hZChvdXQgdW5zaWduZWQgbG9uZyBmcmFtZUlEKTsKKyAgICAgICAgW25vdGlm
eV0gdm9pZCBmcmFtZURldGFjaGVkRnJvbVBhcmVudChvdXQgdW5zaWduZWQgbG9uZyBmcmFtZUlE
KTsKKworICAgICAgICBbbm90aWZ5XSB2b2lkIGRpZENyZWF0ZVdlYlNvY2tldChvdXQgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBvdXQgU3RyaW5nIHJlcXVlc3RVUkwpOworICAgICAgICBbbm90
aWZ5XSB2b2lkIHdpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdChvdXQgdW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBvdXQgZG91YmxlIHRpbWUsIG91dCBPYmplY3QgcmVxdWVzdCk7Cisg
ICAgICAgIFtub3RpZnldIHZvaWQgZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNl
KG91dCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIG91dCBkb3VibGUgdGltZSwgb3V0IE9iamVj
dCByZXNwb25zZSk7CisgICAgICAgIFtub3RpZnldIHZvaWQgZGlkQ2xvc2VXZWJTb2NrZXQob3V0
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgb3V0IGRvdWJsZSB0aW1lKTsKKwogI2lmIGRlZmlu
ZWQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVH
R0VSCiAgICAgICAgIFtoYW5kbGVyPUJhY2tlbmRdIHZvaWQgZW5hYmxlRGVidWdnZXIoaW4gYm9v
bGVhbiBhbHdheXMpOwogICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIGRpc2FibGVE
ZWJ1Z2dlcihpbiBib29sZWFuIGFsd2F5cyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAppbmRleCA5MTg2NDNiLi5jZWQ2MWM1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50OjpJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQoSW5zcGVjdG9yQ29udHJvbGwKIAog
dm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmRpZFJlY2VpdmVNYW5pZmVzdFJl
c3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCiB7Ci0gICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaWRSZWNlaXZlUmVzcG9u
c2UoaWRlbnRpZmllciwgcmVzcG9uc2UpOworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGlk
UmVjZWl2ZVJlc3BvbnNlKGlkZW50aWZpZXIsIDAsIHJlc3BvbnNlKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OnVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMo
QXBwbGljYXRpb25DYWNoZUhvc3Q6OlN0YXR1cyBzdGF0dXMpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDMyYmJlYTYuLjg2ODMyYjAgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC02OSw2ICs2OSw3IEBACiAjaW5j
bHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yU3RvcmFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudC5oIgpAQCAtNDk4LDYgKzQ5OSw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6Y29ubmVjdEZyb250ZW5kKCkKICAgICByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygp
OwogICAgIG1fZnJvbnRlbmQgPSBuZXcgSW5zcGVjdG9yRnJvbnRlbmQobV9jbGllbnQpOwogICAg
IG1fZG9tQWdlbnQgPSBJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1fY3NzU3RvcmUuZ2V0KCks
IG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIC8vIEZJWE1FOiBlbmFibGUgcmVzb3VyY2UgYWdlbnQg
b25jZSBmcm9udC1lbmQgaXMgcmVhZHkuCisgICAgLy8gbV9yZXNvdXJjZUFnZW50ID0gSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6Y3JlYXRlKG1faW5zcGVjdGVkUGFnZSwgbV9mcm9udGVuZC5nZXQo
KSk7CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgbV9zdG9yYWdlQWdlbnQgPSBJbnNwZWN0
b3JTdG9yYWdlQWdlbnQ6OmNyZWF0ZShtX2Zyb250ZW5kLmdldCgpKTsKQEAgLTYwNyw2ICs2MTAs
OCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZCgpCiAKIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKQog
eworICAgIG1fcmVzb3VyY2VBZ2VudC5jbGVhcigpOworCiAgICAgLy8gbV9kb21BZ2VudCBpcyBS
ZWZQdHIuIFJlbW92ZSBET00gbGlzdGVuZXJzIGZpcnN0IHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFy
ZQogICAgIC8vIG5vIHJlZmVyZW5jZXMgdG8gdGhlIERPTSBhZ2VudCBmcm9tIHRoZSBET00gdHJl
ZS4KICAgICBpZiAobV9kb21BZ2VudCkKQEAgLTc0Nyw2ICs3NTIsOSBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICBp
ZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKG1fcmVzb3VyY2VBZ2Vu
dCkKKyAgICAgICAgbV9yZXNvdXJjZUFnZW50LT5kaWRDb21taXRMb2FkKGxvYWRlcik7CisKICAg
ICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKIAogICAgIGlmIChsb2FkZXItPmZyYW1lKCkgPT0g
bV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkgewpAQCAtODIxLDYgKzgyOSwxMCBAQCB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OmZyYW1lRGV0YWNoZWRGcm9tUGFyZW50KEZyYW1lKiBmcmFt
ZSkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
cmVzb3VyY2VBZ2VudCkKKyAgICAgICAgbV9yZXNvdXJjZUFnZW50LT5mcmFtZURldGFjaGVkRnJv
bVBhcmVudChmcmFtZSk7CisKICAgICBpZiAoUmVzb3VyY2VzTWFwKiByZXNvdXJjZU1hcCA9IG1f
ZnJhbWVSZXNvdXJjZXMuZ2V0KGZyYW1lKSkKICAgICAgICAgcmVtb3ZlQWxsUmVzb3VyY2VzKHJl
c291cmNlTWFwKTsKIH0KQEAgLTg5NSw2ICs5MDcsOSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciogbG9hZGVy
LAogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAobV9yZXNv
dXJjZUFnZW50KQorICAgICAgICBtX3Jlc291cmNlQWdlbnQtPmRpZExvYWRSZXNvdXJjZUZyb21N
ZW1vcnlDYWNoZShsb2FkZXIsIGNhY2hlZFJlc291cmNlKTsKKwogICAgIC8vIElmIHRoZSByZXNv
dXJjZSBVUkwgaXMgYWxyZWFkeSBrbm93biwgd2UgZG9uJ3QgbmVlZCB0byBhZGQgaXQgYWdhaW4g
c2luY2UgdGhpcyBpcyBqdXN0IGEgY2FjaGVkIGxvYWQuCiAgICAgaWYgKG1fa25vd25SZXNvdXJj
ZXMuY29udGFpbnMoY2FjaGVkUmVzb3VyY2UtPnVybCgpKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
OTI1LDYgKzk0MCwxMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmlkZW50aWZpZXJGb3JJ
bml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsCiAgICAgQVNTRVJUKG1faW5z
cGVjdGVkUGFnZSk7CiAKICAgICBib29sIGlzTWFpblJlc291cmNlID0gaXNNYWluUmVzb3VyY2VM
b2FkZXIobG9hZGVyLCByZXF1ZXN0LnVybCgpKTsKKworICAgIGlmIChtX3Jlc291cmNlQWdlbnQp
CisgICAgICAgIG1fcmVzb3VyY2VBZ2VudC0+aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0KGlk
ZW50aWZpZXIsIHJlcXVlc3QudXJsKCksIGxvYWRlciwgaXNNYWluUmVzb3VyY2UpOworCiAgICAg
ZW5zdXJlU2V0dGluZ3NMb2FkZWQoKTsKICAgICBpZiAoIWlzTWFpblJlc291cmNlICYmICFyZXNv
dXJjZVRyYWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC05NzYsNiArOTk1LDkg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXUKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCisgICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKKyAgICAgICAgbV9yZXNvdXJjZUFn
ZW50LT53aWxsU2VuZFJlcXVlc3QoaWRlbnRpZmllciwgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25z
ZSk7CisKICAgICBib29sIGlzTWFpblJlc291cmNlID0gKG1fbWFpblJlc291cmNlICYmIG1fbWFp
blJlc291cmNlLT5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcik7CiAgICAgaWYgKG1fdGltZWxp
bmVBZ2VudCkKICAgICAgICAgbV90aW1lbGluZUFnZW50LT53aWxsU2VuZFJlc291cmNlUmVxdWVz
dChpZGVudGlmaWVyLCBpc01haW5SZXNvdXJjZSwgcmVxdWVzdCk7CkBAIC0xMDIyLDE1ICsxMDQ0
LDIxIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bWFya1Jlc291cmNlQXNDYWNoZWQodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyKQogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKKyAgICBpZiAobV9yZXNvdXJjZUFnZW50KQorICAgICAgICBtX3Jlc291cmNlQWdlbnQt
Pm1hcmtSZXNvdXJjZUFzQ2FjaGVkKGlkZW50aWZpZXIpOworCiAgICAgaWYgKFJlZlB0cjxJbnNw
ZWN0b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBnZXRUcmFja2VkUmVzb3VyY2UoaWRlbnRpZmllcikp
CiAgICAgICAgIHJlc291cmNlLT5tYXJrQXNDYWNoZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRM
b2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAg
aWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChtX3Jlc291cmNlQWdl
bnQpCisgICAgICAgIG1fcmVzb3VyY2VBZ2VudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGlkZW50aWZp
ZXIsIGxvYWRlciwgcmVzcG9uc2UpOworCiAgICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJj
ZT4gcmVzb3VyY2UgPSBnZXRUcmFja2VkUmVzb3VyY2UoaWRlbnRpZmllcikpIHsKICAgICAgICAg
cmVzb3VyY2UtPnVwZGF0ZVJlc3BvbnNlKHJlc3BvbnNlKTsKIApAQCAtMTA0OCw2ICsxMDc2LDkg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRSZWNlaXZlQ29udGVudExlbmd0aCh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGludAogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBpZiAobV9yZXNvdXJjZUFnZW50KQorICAgICAgICBtX3Jlc291cmNlQWdl
bnQtPmRpZFJlY2VpdmVDb250ZW50TGVuZ3RoKGlkZW50aWZpZXIsIGxlbmd0aFJlY2VpdmVkKTsK
KwogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBnZXRUcmFja2VkUmVz
b3VyY2UoaWRlbnRpZmllcik7CiAgICAgaWYgKCFyZXNvdXJjZSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTA2Myw2ICsxMDk0LDkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRGaW5pc2hM
b2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmkKICAgICBpZiAoIWVu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKKyAg
ICAgICAgbV9yZXNvdXJjZUFnZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIsIGZpbmlz
aFRpbWUpOworCiAgICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKICAgICAgICAgbV90aW1lbGluZUFn
ZW50LT5kaWRGaW5pc2hMb2FkaW5nUmVzb3VyY2UoaWRlbnRpZmllciwgZmFsc2UsIGZpbmlzaFRp
bWUpOwogCkBAIC0xMDgyLDYgKzExMTYsOSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRp
ZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyYwogICAg
IGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAobV9yZXNvdXJjZUFn
ZW50KQorICAgICAgICBtX3Jlc291cmNlQWdlbnQtPmRpZEZhaWxMb2FkaW5nKGlkZW50aWZpZXIs
IGVycm9yKTsKKwogICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCiAgICAgICAgIG1fdGltZWxpbmVB
Z2VudC0+ZGlkRmluaXNoTG9hZGluZ1Jlc291cmNlKGlkZW50aWZpZXIsIHRydWUsIDApOwogCkBA
IC0xMTA3LDYgKzExNDQsOSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlUmV0
cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aQogICAgIGlmICghZW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAobV9yZXNvdXJjZUFnZW50KQorICAg
ICAgICBtX3Jlc291cmNlQWdlbnQtPnNldE92ZXJyaWRlQ29udGVudChpZGVudGlmaWVyLCBzb3Vy
Y2VTdHJpbmcsIEluc3BlY3RvclJlc291cmNlOjpYSFIpOworCiAgICAgaWYgKG1fc3RhdGUtPmdl
dEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6Om1vbml0b3JpbmdYSFIpKQogICAgICAgICBhZGRNZXNz
YWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VM
ZXZlbCwgIlhIUiBmaW5pc2hlZCBsb2FkaW5nOiBcIiIgKyB1cmwgKyAiXCIuIiwgc2VuZExpbmVO
dW1iZXIsIHNlbmRVUkwpOwogCkBAIC0xMTI1LDcgKzExNjUsMTMgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9u
ZyBpZGVudGkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRJbXBvcnRlZCh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nKQogewotICAg
IGlmICghZW5hYmxlZCgpIHx8ICFyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpKQorICAgIGlmICgh
ZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9yZXNvdXJjZUFnZW50KQor
ICAgICAgICBtX3Jlc291cmNlQWdlbnQtPnNldE92ZXJyaWRlQ29udGVudChpZGVudGlmaWVyLCBz
b3VyY2VTdHJpbmcsIEluc3BlY3RvclJlc291cmNlOjpTY3JpcHQpOworCisgICAgaWYgKCFyZXNv
dXJjZVRyYWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBJbnNwZWN0b3JS
ZXNvdXJjZSogcmVzb3VyY2UgPSBtX3Jlc291cmNlcy5nZXQoaWRlbnRpZmllcikuZ2V0KCk7CkBA
IC0xNDgxLDYgKzE1MjcsOSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENyZWF0ZVdl
YlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUgogICAgICAgICByZXR1
cm47CiAgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7CiAKKyAgICBpZiAobV9yZXNvdXJjZUFn
ZW50KQorICAgICAgICBtX3Jlc291cmNlQWdlbnQtPmRpZENyZWF0ZVdlYlNvY2tldChpZGVudGlm
aWVyLCByZXF1ZXN0VVJMKTsKKwogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3Vy
Y2UgPSBJbnNwZWN0b3JSZXNvdXJjZTo6Y3JlYXRlV2ViU29ja2V0KGlkZW50aWZpZXIsIHJlcXVl
c3RVUkwsIGRvY3VtZW50VVJMKTsKICAgICBhZGRSZXNvdXJjZShyZXNvdXJjZS5nZXQoKSk7CiAK
QEAgLTE0OTAsNiArMTUzOSw5IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ3JlYXRl
V2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgS1VSCiAKIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCYgcmVx
dWVzdCkKIHsKKyAgICBpZiAobV9yZXNvdXJjZUFnZW50KQorICAgICAgICBtX3Jlc291cmNlQWdl
bnQtPndpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdChpZGVudGlmaWVyLCByZXF1ZXN0
KTsKKwogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBnZXRUcmFja2Vk
UmVzb3VyY2UoaWRlbnRpZmllcik7CiAgICAgaWYgKCFyZXNvdXJjZSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTUwMSw2ICsxNTUzLDkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsU2Vu
ZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGkKIAogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2Uo
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25z
ZSYgcmVzcG9uc2UpCiB7CisgICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKKyAgICAgICAgbV9yZXNv
dXJjZUFnZW50LT5kaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UoaWRlbnRpZmll
ciwgcmVzcG9uc2UpOworCiAgICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9
IGdldFRyYWNrZWRSZXNvdXJjZShpZGVudGlmaWVyKTsKICAgICBpZiAoIXJlc291cmNlKQogICAg
ICAgICByZXR1cm47CkBAIC0xNTE0LDYgKzE1NjksOSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlk
ZQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENsb3NlV2ViU29ja2V0KHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllcikKIHsKKyAgICBpZiAobV9yZXNvdXJjZUFnZW50KQorICAgICAgICBt
X3Jlc291cmNlQWdlbnQtPmRpZENsb3NlV2ViU29ja2V0KGlkZW50aWZpZXIpOworCiAgICAgUmVm
UHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IGdldFRyYWNrZWRSZXNvdXJjZShpZGVu
dGlmaWVyKTsKICAgICBpZiAoIXJlc291cmNlKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggODBlYmNhMS4uNmQ0ZDllMCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNjgsNiArNjgsNyBAQCBjbGFz
cyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKIGNsYXNz
IEluc3BlY3RvclByb2ZpbGVyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JSZXNvdXJjZTsKK2NsYXNz
IEluc3BlY3RvclJlc291cmNlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JTdGF0ZTsKIGNsYXNzIElu
c3BlY3RvclN0b3JhZ2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7CkBAIC0x
NjUsNyArMTY2LDcgQEAgcHVibGljOgogICAgIHZvaWQgaWRlbnRpZmllckZvckluaXRpYWxSZXF1
ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmKTsKICAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGly
ZWN0UmVzcG9uc2UpOwogICAgIHZvaWQgbWFya1Jlc291cmNlQXNDYWNoZWQodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lkIGRpZFJlY2Vp
dmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgo
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOwogICAgIHZvaWQg
ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pc2hU
aW1lKTsKICAgICB2b2lkIGRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgUmVzb3VyY2VFcnJvciYpOwpAQCAtMzQ0LDYgKzM0NSw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX29wZW5pbmdGcm9udGVuZDsKICAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+IG1f
ZnJvbnRlbmQ7CiAgICAgUmVmUHRyPEluc3BlY3RvckRPTUFnZW50PiBtX2RvbUFnZW50OworICAg
IFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZUFnZW50PiBtX3Jlc291cmNlQWdlbnQ7CiAgICAgUmVm
UHRyPEluc3BlY3RvclN0b3JhZ2VBZ2VudD4gbV9zdG9yYWdlQWdlbnQ7CiAgICAgT3duUHRyPElu
c3BlY3RvckNTU1N0b3JlPiBtX2Nzc1N0b3JlOwogICAgIE93blB0cjxJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50PiBtX3RpbWVsaW5lQWdlbnQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZS5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZS5jcHAKaW5kZXggNWE2Y2FhZC4uZjFiMjcwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clJlc291cmNlLmNwcApAQCAtMTg5LDEyICsxODksNyBAQCB2b2lkIEluc3BlY3RvclJlc291cmNl
Ojp1cGRhdGVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKICAgICBt
X2Nvbm5lY3Rpb25SZXVzZWQgPSByZXNwb25zZS5jb25uZWN0aW9uUmV1c2VkKCk7CiAgICAgbV9s
b2FkVGltaW5nID0gcmVzcG9uc2UucmVzb3VyY2VMb2FkVGltaW5nKCk7CiAgICAgbV9jYWNoZWQg
PSBtX2NhY2hlZCB8fCByZXNwb25zZS53YXNDYWNoZWQoKTsKLQotICAgIGlmICghbV9jYWNoZWQg
JiYgbV9sb2FkVGltaW5nICYmIG1fbG9hZFRpbWluZy0+cmVxdWVzdFRpbWUpCi0gICAgICAgIG1f
cmVzcG9uc2VSZWNlaXZlZFRpbWUgPSBtX2xvYWRUaW1pbmctPnJlcXVlc3RUaW1lICsgbV9sb2Fk
VGltaW5nLT5yZWNlaXZlSGVhZGVyc0VuZCAvIDEwMDAuMDsKLSAgICBlbHNlCi0gICAgICAgIG1f
cmVzcG9uc2VSZWNlaXZlZFRpbWUgPSBjdXJyZW50VGltZSgpOwotCisgICAgbV9yZXNwb25zZVJl
Y2VpdmVkVGltZSA9IGN1cnJlbnRUaW1lKCk7CiAgICAgbV9jaGFuZ2VzLnNldChUaW1pbmdDaGFu
Z2UpOwogICAgIG1fY2hhbmdlcy5zZXQoUmVzcG9uc2VDaGFuZ2UpOwogICAgIG1fY2hhbmdlcy5z
ZXQoVHlwZUNoYW5nZSk7CkBAIC0zNDAsNiArMzM1LDI4IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3Vy
Y2U6OnJlbGVhc2VTY3JpcHRPYmplY3QoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogICAg
ICAgICBmcm9udGVuZC0+cmVtb3ZlUmVzb3VyY2UobV9pZGVudGlmaWVyKTsKIH0KIAorc3RhdGlj
IEluc3BlY3RvclJlc291cmNlOjpUeXBlIGNhY2hlZFJlc291cmNlVHlwZShDYWNoZWRSZXNvdXJj
ZSogY2FjaGVkUmVzb3VyY2UpCit7CisgICAgaWYgKCFjYWNoZWRSZXNvdXJjZSkKKyAgICAgICAg
cmV0dXJuIEluc3BlY3RvclJlc291cmNlOjpPdGhlcjsKKworICAgIHN3aXRjaCAoY2FjaGVkUmVz
b3VyY2UtPnR5cGUoKSkgeworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6
CisgICAgICAgIHJldHVybiBJbnNwZWN0b3JSZXNvdXJjZTo6SW1hZ2U7CisgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgorICAgICAgICByZXR1cm4gSW5zcGVjdG9yUmVzb3Vy
Y2U6OkZvbnQ7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKKyNpZiBF
TkFCTEUoWFNMVCkKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgorI2Vu
ZGlmCisgICAgICAgIHJldHVybiBJbnNwZWN0b3JSZXNvdXJjZTo6U3R5bGVzaGVldDsKKyAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6CisgICAgICAgIHJldHVybiBJbnNwZWN0b3JSZXNv
dXJjZTo6U2NyaXB0OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBJbnNwZWN0b3JSZXNv
dXJjZTo6T3RoZXI7CisgICAgfQorfQorCiBJbnNwZWN0b3JSZXNvdXJjZTo6VHlwZSBJbnNwZWN0
b3JSZXNvdXJjZTo6dHlwZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX292ZXJyaWRlQ29udGVudC5p
c051bGwoKSkKQEAgLTM1OCw3ICszNzUsNyBAQCBJbnNwZWN0b3JSZXNvdXJjZTo6VHlwZSBJbnNw
ZWN0b3JSZXNvdXJjZTo6dHlwZSgpIGNvbnN0CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICBy
ZXR1cm4gT3RoZXI7CiAKLSAgICBJbnNwZWN0b3JSZXNvdXJjZTo6VHlwZSByZXNvdXJjZVR5cGUg
PSBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUobV9mcmFtZS0+ZG9j
dW1lbnQoKSwgbV9yZXF1ZXN0VVJMKTsKKyAgICBJbnNwZWN0b3JSZXNvdXJjZTo6VHlwZSByZXNv
dXJjZVR5cGUgPSBjYWNoZWRSZXNvdXJjZVR5cGUoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Y2Fj
aGVkUmVzb3VyY2UobV9mcmFtZS5nZXQoKSwgbV9yZXF1ZXN0VVJMKSk7CiAgICAgaWYgKGVxdWFs
SWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIobV9yZXF1ZXN0VVJMLCBtX2xvYWRlci0+cmVxdWVz
dFVSTCgpKSAmJiByZXNvdXJjZVR5cGUgPT0gT3RoZXIpCiAgICAgICAgIHJldHVybiBEb2M7CiAK
QEAgLTM3OCw3ICszOTUsNyBAQCBTdHJpbmcgSW5zcGVjdG9yUmVzb3VyY2U6OnNvdXJjZVN0cmlu
ZygpIGNvbnN0CiAgICAgICAgIHJldHVybiBTdHJpbmcobV9vdmVycmlkZUNvbnRlbnQpOwogCiAg
ICAgU3RyaW5nIHJlc3VsdDsKLSAgICBpZiAoIUluc3BlY3RvclJlc291cmNlQWdlbnQ6OnJlc291
cmNlQ29udGVudChtX2ZyYW1lLT5kb2N1bWVudCgpLCBtX3JlcXVlc3RVUkwsICZyZXN1bHQpKQor
ICAgIGlmICghSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzb3VyY2VDb250ZW50KG1fZnJhbWUu
Z2V0KCksIG1fcmVxdWVzdFVSTCwgJnJlc3VsdCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMzk1LDcgKzQxMiw3IEBAIFN0cmluZyBJbnNwZWN0
b3JSZXNvdXJjZTo6c291cmNlQnl0ZXMoKSBjb25zdAogICAgIH0KIAogICAgIFN0cmluZyByZXN1
bHQ7Ci0gICAgaWYgKCFJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXNvdXJjZUNvbnRlbnRCYXNl
NjQobV9mcmFtZS0+ZG9jdW1lbnQoKSwgbV9yZXF1ZXN0VVJMLCAmcmVzdWx0KSkKKyAgICBpZiAo
IUluc3BlY3RvclJlc291cmNlQWdlbnQ6OnJlc291cmNlQ29udGVudEJhc2U2NChtX2ZyYW1lLmdl
dCgpLCBtX3JlcXVlc3RVUkwsICZyZXN1bHQpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQwOCwxNCArNDI1LDkgQEAgdm9pZCBJbnNwZWN0b3JS
ZXNvdXJjZTo6c3RhcnRUaW1pbmcoKQogCiB2b2lkIEluc3BlY3RvclJlc291cmNlOjplbmRUaW1p
bmcoZG91YmxlIGFjdHVhbEVuZFRpbWUpCiB7Ci0gICAgaWYgKGFjdHVhbEVuZFRpbWUpIHsKKyAg
ICBpZiAoYWN0dWFsRW5kVGltZSkKICAgICAgICAgbV9lbmRUaW1lID0gYWN0dWFsRW5kVGltZTsK
LSAgICAgICAgLy8gSW4gY2FzZSBvZiBmYXN0IGxvYWQgKG9yIGluIGNhc2Ugb2YgY2FjaGVkIHJl
c291cmNlcyksIGVuZFRpbWUgb24gbmV0d29yayBzdGFjawotICAgICAgICAvLyBjYW4gYmUgbGVz
cyB0aGVuIG1fcmVzcG9uc2VSZWNlaXZlZFRpbWUgbWVhc3VyZWQgaW4gV2ViQ29yZS4gTm9ybWFs
aXplIGl0IGhlcmUsCi0gICAgICAgIC8vIHByZWZlciBhY3R1YWxFbmRUaW1lIHRvIG1fcmVzcG9u
c2VSZWNlaXZlZFRpbWUuCi0gICAgICAgIGlmIChtX2VuZFRpbWUgPCBtX3Jlc3BvbnNlUmVjZWl2
ZWRUaW1lKQotICAgICAgICAgICAgbV9yZXNwb25zZVJlY2VpdmVkVGltZSA9IG1fZW5kVGltZTsK
LSAgICB9IGVsc2UKKyAgICBlbHNlCiAgICAgICAgIG1fZW5kVGltZSA9IGN1cnJlbnRUaW1lKCk7
CiAKICAgICBtX2ZpbmlzaGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudC5jcHAKaW5kZXggZTM5YzUxOC4uYzcxZmE3MiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKQEAgLTM5LDIzICszOSwzNSBAQAog
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1
ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2Vy
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXRIYW5k
c2hha2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UuaCIK
IAorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50
OjpyZXNvdXJjZUNvbnRlbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFN0
cmluZyogcmVzdWx0KQorYm9vbCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXNvdXJjZUNvbnRl
bnQoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwsIFN0cmluZyogcmVzdWx0KQogewotICAg
IGlmICghZG9jdW1lbnQpCisgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWU7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
YnVmZmVyID0gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzb3VyY2VEYXRhKGRvY3VtZW50LCB1
cmwsICZ0ZXh0RW5jb2RpbmdOYW1lKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIg
PSBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXNvdXJjZURhdGEoZnJhbWUsIHVybCwgJnRleHRF
bmNvZGluZ05hbWUpOwogCiAgICAgaWYgKGJ1ZmZlcikgewogICAgICAgICBUZXh0RW5jb2Rpbmcg
ZW5jb2RpbmcodGV4dEVuY29kaW5nTmFtZSk7CkBAIC02OCwxMSArODAsMTEgQEAgYm9vbCBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMJiB1cmwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudDo6cmVzb3VyY2VDb250ZW50QmFzZTY0KERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgS1VSTCYgdXJsLCBTdHJpbmcqIHJlc3VsdCkKK2Jvb2wgSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6cmVzb3VyY2VDb250ZW50QmFzZTY0KEZyYW1lKiBmcmFtZSwgY29uc3QgS1VSTCYgdXJsLCBT
dHJpbmcqIHJlc3VsdCkKIHsKICAgICBWZWN0b3I8Y2hhcj4gb3V0OwogICAgIFN0cmluZyB0ZXh0
RW5jb2RpbmdOYW1lOwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OjpyZXNvdXJjZURhdGEoZG9jdW1lbnQsIHVybCwgJnRleHRFbmNvZGluZ05h
bWUpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50OjpyZXNvdXJjZURhdGEoZnJhbWUsIHVybCwgJnRleHRFbmNvZGluZ05hbWUpOwogICAgIGlm
ICghZGF0YSkgewogICAgICAgICAqcmVzdWx0ID0gU3RyaW5nKCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTgzLDE2ICs5NSwxNiBAQCBib29sIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnJl
c291cmNlQ29udGVudEJhc2U2NChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUgogICAgIHJl
dHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6cmVzb3VyY2VEYXRhKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJs
LCBTdHJpbmcqIHRleHRFbmNvZGluZ05hbWUpCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzb3VyY2VEYXRhKEZyYW1lKiBmcmFtZSwgY29uc3QgS1VS
TCYgdXJsLCBTdHJpbmcqIHRleHRFbmNvZGluZ05hbWUpCiB7Ci0gICAgRnJhbWVMb2FkZXIqIGZy
YW1lTG9hZGVyID0gZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpOworICAgIEZyYW1lTG9hZGVy
KiBmcmFtZUxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKICAgICBEb2N1bWVudExvYWRlciogbG9h
ZGVyID0gZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCk7CiAgICAgaWYgKGVxdWFsSWdub3Jp
bmdGcmFnbWVudElkZW50aWZpZXIodXJsLCBsb2FkZXItPnVybCgpKSkgewotICAgICAgICAqdGV4
dEVuY29kaW5nTmFtZSA9IGRvY3VtZW50LT5pbnB1dEVuY29kaW5nKCk7CisgICAgICAgICp0ZXh0
RW5jb2RpbmdOYW1lID0gZnJhbWUtPmRvY3VtZW50KCktPmlucHV0RW5jb2RpbmcoKTsKICAgICAg
ICAgcmV0dXJuIGZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5tYWluUmVzb3VyY2VEYXRh
KCk7CiAgICAgfQogCi0gICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2UoZG9jdW1lbnQsIHVybCk7CisgICAgQ2Fj
aGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Y2Fj
aGVkUmVzb3VyY2UoZnJhbWUsIHVybCk7CiAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKQEAgLTExMSwzNiArMTIzLDMwNiBAQCBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzb3VyY2VEYXRhKERvY3VtZW50KiBkb2N1
bWVudAogICAgIHJldHVybiBjYWNoZWRSZXNvdXJjZS0+ZGF0YSgpOwogfQogCi1JbnNwZWN0b3JS
ZXNvdXJjZTo6VHlwZSBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitDYWNoZWRSZXNvdXJjZSogSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2UoRnJhbWUqIGZyYW1lLCBjb25zdCBL
VVJMJiB1cmwpCiB7Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2UoZG9jdW1lbnQsIHVybCk7CisgICAgY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcgPSB1cmwuc3RyaW5nKCk7CisgICAgQ2FjaGVkUmVzb3VyY2Uq
IGNhY2hlZFJlc291cmNlID0gZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVy
KCktPmNhY2hlZFJlc291cmNlKHVybFN0cmluZyk7CiAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZSkK
LSAgICAgICAgcmV0dXJuIEluc3BlY3RvclJlc291cmNlOjpPdGhlcjsKKyAgICAgICAgY2FjaGVk
UmVzb3VyY2UgPSBjYWNoZSgpLT5yZXNvdXJjZUZvclVSTCh1cmxTdHJpbmcpOworICAgIHJldHVy
biBjYWNoZWRSZXNvdXJjZTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBidWlsZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKK3sK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBo
ZWFkZXJzLmVuZCgpOworICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaGVhZGVyc09iamVj
dC0+c2V0U3RyaW5nKGl0LT5maXJzdC5zdHJpbmcoKSwgaXQtPnNlY29uZCk7CisgICAgcmV0dXJu
IGhlYWRlcnNPYmplY3Q7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
YnVpbGRPYmplY3RGb3JUaW1pbmcoY29uc3QgUmVzb3VyY2VMb2FkVGltaW5nJiB0aW1pbmcpCit7
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdGltaW5nT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICB0aW1pbmdPYmplY3QtPnNldE51bWJlcigicmVxdWVzdFRpbWUi
LCB0aW1pbmcucmVxdWVzdFRpbWUpOworICAgIHRpbWluZ09iamVjdC0+c2V0TnVtYmVyKCJwcm94
eVN0YXJ0IiwgdGltaW5nLnByb3h5U3RhcnQpOworICAgIHRpbWluZ09iamVjdC0+c2V0TnVtYmVy
KCJwcm94eUVuZCIsIHRpbWluZy5wcm94eUVuZCk7CisgICAgdGltaW5nT2JqZWN0LT5zZXROdW1i
ZXIoImRuc1N0YXJ0IiwgdGltaW5nLmRuc1N0YXJ0KTsKKyAgICB0aW1pbmdPYmplY3QtPnNldE51
bWJlcigiZG5zRW5kIiwgdGltaW5nLmRuc0VuZCk7CisgICAgdGltaW5nT2JqZWN0LT5zZXROdW1i
ZXIoImNvbm5lY3RTdGFydCIsIHRpbWluZy5jb25uZWN0U3RhcnQpOworICAgIHRpbWluZ09iamVj
dC0+c2V0TnVtYmVyKCJjb25uZWN0RW5kIiwgdGltaW5nLmNvbm5lY3RFbmQpOworICAgIHRpbWlu
Z09iamVjdC0+c2V0TnVtYmVyKCJzc2xTdGFydCIsIHRpbWluZy5zc2xTdGFydCk7CisgICAgdGlt
aW5nT2JqZWN0LT5zZXROdW1iZXIoInNzbEVuZCIsIHRpbWluZy5zc2xFbmQpOworICAgIHRpbWlu
Z09iamVjdC0+c2V0TnVtYmVyKCJzZW5kU3RhcnQiLCB0aW1pbmcuc2VuZFN0YXJ0KTsKKyAgICB0
aW1pbmdPYmplY3QtPnNldE51bWJlcigic2VuZEVuZCIsIHRpbWluZy5zZW5kRW5kKTsKKyAgICB0
aW1pbmdPYmplY3QtPnNldE51bWJlcigicmVjZWl2ZUhlYWRlcnNFbmQiLCB0aW1pbmcucmVjZWl2
ZUhlYWRlcnNFbmQpOworICAgIHJldHVybiB0aW1pbmdPYmplY3Q7Cit9CisKK3N0YXRpYyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3QoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlcXVlc3RPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJlcXVl
c3RPYmplY3QtPnNldFN0cmluZygidXJsIiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7CisgICAg
cmVxdWVzdE9iamVjdC0+c2V0U3RyaW5nKCJodHRwTWV0aG9kIiwgcmVxdWVzdC5odHRwTWV0aG9k
KCkpOworICAgIHJlcXVlc3RPYmplY3QtPnNldE9iamVjdCgiaHR0cEhlYWRlckZpZWxkcyIsIGJ1
aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpOworICAgIGlm
IChyZXF1ZXN0Lmh0dHBCb2R5KCkgJiYgIXJlcXVlc3QuaHR0cEJvZHkoKS0+aXNFbXB0eSgpKQor
ICAgICAgICByZXF1ZXN0T2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RGb3JtRGF0YSIsIHJlcXVl
c3QuaHR0cEJvZHkoKS0+ZmxhdHRlblRvU3RyaW5nKCkpOworICAgIHJldHVybiByZXF1ZXN0T2Jq
ZWN0OworfQogCi0gICAgc3dpdGNoIChjYWNoZWRSZXNvdXJjZS0+dHlwZSgpKSB7CitzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25z
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXNwb25zZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgaWYgKHJlc3BvbnNlLmlzTnVsbCgpKSB7CisgICAgICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRC
b29sZWFuKCJpc051bGwiLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0Owor
ICAgIH0KKyAgICByZXNwb25zZU9iamVjdC0+c2V0U3RyaW5nKCJ1cmwiLCByZXNwb25zZS51cmwo
KS5zdHJpbmcoKSk7CisgICAgcmVzcG9uc2VPYmplY3QtPnNldFN0cmluZygibWltZVR5cGUiLCBy
ZXNwb25zZS5taW1lVHlwZSgpKTsKKyAgICByZXNwb25zZU9iamVjdC0+c2V0TnVtYmVyKCJleHBl
Y3RlZENvbnRlbnRMZW5ndGgiLCByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSk7Cisg
ICAgcmVzcG9uc2VPYmplY3QtPnNldFN0cmluZygidGV4dEVuY29kaW5nTmFtZSIsIHJlc3BvbnNl
LnRleHRFbmNvZGluZ05hbWUoKSk7CisgICAgcmVzcG9uc2VPYmplY3QtPnNldFN0cmluZygic3Vn
Z2VzdGVkRmlsZW5hbWUiLCByZXNwb25zZS5zdWdnZXN0ZWRGaWxlbmFtZSgpKTsKKyAgICByZXNw
b25zZU9iamVjdC0+c2V0TnVtYmVyKCJodHRwU3RhdHVzQ29kZSIsIHJlc3BvbnNlLmh0dHBTdGF0
dXNDb2RlKCkpOworICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRTdHJpbmcoImh0dHBTdGF0dXNUZXh0
IiwgcmVzcG9uc2UuaHR0cFN0YXR1c1RleHQoKSk7CisgICAgcmVzcG9uc2VPYmplY3QtPnNldE9i
amVjdCgiaHR0cEhlYWRlckZpZWxkcyIsIGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXNwb25zZS5o
dHRwSGVhZGVyRmllbGRzKCkpKTsKKyAgICByZXNwb25zZU9iamVjdC0+c2V0Qm9vbGVhbigiY29u
bmVjdGlvblJldXNlZCIsIHJlc3BvbnNlLmNvbm5lY3Rpb25SZXVzZWQoKSk7CisgICAgcmVzcG9u
c2VPYmplY3QtPnNldE51bWJlcigiY29ubmVjdGlvbklEIiwgcmVzcG9uc2UuY29ubmVjdGlvbklE
KCkpOworICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRCb29sZWFuKCJ3YXNDYWNoZWQiLCByZXNwb25z
ZS53YXNDYWNoZWQoKSk7CisgICAgaWYgKHJlc3BvbnNlLnJlc291cmNlTG9hZFRpbWluZygpKQor
ICAgICAgICByZXNwb25zZU9iamVjdC0+c2V0T2JqZWN0KCJ0aW1pbmciLCBidWlsZE9iamVjdEZv
clRpbWluZygqcmVzcG9uc2UucmVzb3VyY2VMb2FkVGltaW5nKCkpKTsKKyAgICBpZiAocmVzcG9u
c2UucmVzb3VyY2VSYXdIZWFkZXJzKCkpIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmF3SGVhZGVyc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IHJhd0hlYWRlcnNPYmplY3QtPnNldE9iamVjdCgicmVxdWVzdEhlYWRlcnMiLCBidWlsZE9iamVj
dEZvckhlYWRlcnMocmVzcG9uc2UucmVzb3VyY2VSYXdIZWFkZXJzKCktPnJlcXVlc3RIZWFkZXJz
KSk7CisgICAgICAgIHJhd0hlYWRlcnNPYmplY3QtPnNldE9iamVjdCgicmVzcG9uc2VIZWFkZXJz
IiwgYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlc3BvbnNlLnJlc291cmNlUmF3SGVhZGVycygpLT5y
ZXNwb25zZUhlYWRlcnMpKTsKKyAgICAgICAgcmVzcG9uc2VPYmplY3QtPnNldE9iamVjdCgicmF3
SGVhZGVycyIsIHJhd0hlYWRlcnNPYmplY3QpOworICAgIH0KKyAgICByZXR1cm4gcmVzcG9uc2VP
YmplY3Q7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmpl
Y3RGb3JNYWluUmVzb3VyY2UoRnJhbWUqIGZyYW1lKQoreworICAgIEZyYW1lTG9hZGVyKiBmcmFt
ZUxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICBEb2N1bWVudExvYWRlciogbG9hZGVyID0g
ZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXNvdXJjZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcmVz
b3VyY2VPYmplY3QtPnNldFN0cmluZygidXJsIiwgbG9hZGVyLT51cmwoKS5zdHJpbmcoKSk7Cisg
ICAgcmVzb3VyY2VPYmplY3QtPnNldFN0cmluZygiaG9zdCIsIGxvYWRlci0+dXJsKCkuaG9zdCgp
KTsKKyAgICByZXNvdXJjZU9iamVjdC0+c2V0U3RyaW5nKCJwYXRoIiwgbG9hZGVyLT51cmwoKS5w
YXRoKCkpOworICAgIHJlc291cmNlT2JqZWN0LT5zZXRTdHJpbmcoImxhc3RQYXRoQ29tcG9uZW50
IiwgbG9hZGVyLT51cmwoKS5sYXN0UGF0aENvbXBvbmVudCgpKTsKKyAgICByZXNvdXJjZU9iamVj
dC0+c2V0U3RyaW5nKCJ0eXBlIiwgIkRvY3VtZW50Iik7CisgICAgcmVzb3VyY2VPYmplY3QtPnNl
dE9iamVjdCgicmVxdWVzdCIsIGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KGxvYWRlci0+
cmVxdWVzdCgpKSk7CisgICAgcmVzb3VyY2VPYmplY3QtPnNldE9iamVjdCgicmVzcG9uc2UiLCBi
dWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UobG9hZGVyLT5yZXNwb25zZSgpKSk7CisgICAg
cmV0dXJuIHJlc291cmNlT2JqZWN0OworfQorCitzdGF0aWMgU3RyaW5nIGNhY2hlZFJlc291cmNl
VHlwZVN0cmluZyhjb25zdCBDYWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCit7CisgICAg
U3RyaW5nIHR5cGU7CisgICAgc3dpdGNoIChjYWNoZWRSZXNvdXJjZS50eXBlKCkpIHsKICAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVj
dG9yUmVzb3VyY2U6OkltYWdlOworICAgICAgICB0eXBlID0gIkltYWdlIjsgYnJlYWs7CiAgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVj
dG9yUmVzb3VyY2U6OkZvbnQ7CisgICAgICAgIHR5cGUgPSAiRm9udCI7IGJyZWFrOwogICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisgICAgICAgIC8vIEZhbGwgdGhyb3Vn
aC4KICNpZiBFTkFCTEUoWFNMVCkKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNo
ZWV0OgogI2VuZGlmCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3JSZXNvdXJjZTo6U3R5bGVzaGVl
dDsKKyAgICAgICAgdHlwZSA9ICJTdHlsZXNoZWV0IjsgYnJlYWs7CiAgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6U2NyaXB0OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yUmVzb3VyY2U6OlNjcmlw
dDsKKyAgICAgICAgdHlwZSA9ICJTY3JpcHQiOyBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yUmVzb3VyY2U6Ok90aGVyOworICAgICAgICB0eXBlID0gIk90aGVy
IjsKICAgICB9CisgICAgcmV0dXJuIHR5cGU7CiB9CiAKLUNhY2hlZFJlc291cmNlKiBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50OjpjYWNoZWRSZXNvdXJjZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCkKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmpl
Y3RGb3JDYWNoZWRSZXNvdXJjZShjb25zdCBDYWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2Up
Cit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJlc291cmNlT2JqZWN0LT5zZXRTdHJpbmcoInVybCIs
IGNhY2hlZFJlc291cmNlLnVybCgpKTsKKyAgICByZXNvdXJjZU9iamVjdC0+c2V0U3RyaW5nKCJ0
eXBlIiwgY2FjaGVkUmVzb3VyY2VUeXBlU3RyaW5nKGNhY2hlZFJlc291cmNlKSk7CisgICAgcmVz
b3VyY2VPYmplY3QtPnNldE51bWJlcigiZW5jb2RlZFNpemUiLCBjYWNoZWRSZXNvdXJjZS5lbmNv
ZGVkU2l6ZSgpKTsKKyAgICByZXNvdXJjZU9iamVjdC0+c2V0T2JqZWN0KCJyZXNwb25zZSIsIGJ1
aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShjYWNoZWRSZXNvdXJjZS5yZXNwb25zZSgpKSk7
CisgICAgcmV0dXJuIHJlc291cmNlT2JqZWN0OworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yRnJhbWVSZXNvdXJjZXMoRnJhbWUqIGZyYW1lKQor
eworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZyYW1lUmVzb3VyY2VzID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBmcmFtZVJlc291cmNlcy0+c2V0TnVtYmVyKCJmcmFtZUlE
IiwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGZyYW1lKSk7CisgICAgZnJhbWVSZXNvdXJj
ZXMtPnNldE9iamVjdCgibWFpblJlc291cmNlIiwgYnVpbGRPYmplY3RGb3JNYWluUmVzb3VyY2Uo
ZnJhbWUpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHN1YnJlc291cmNlcyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBmcmFtZVJlc291cmNlcy0+c2V0QXJyYXkoInN1YnJl
c291cmNlcyIsIHN1YnJlc291cmNlcyk7CisKKyAgICBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYgYWxsUmVzb3VyY2VzID0gZnJhbWUtPmRvY3VtZW50KCkt
PmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmFsbENhY2hlZFJlc291cmNlcygpOworICAgIENhY2hl
ZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBhbGxSZXNvdXJjZXMuZW5kKCk7CisgICAgZm9yIChDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9j
dW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxSZXNvdXJjZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNv
dXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGlmIChjYWNoZWRSZXNvdXJjZSkKKyAg
ICAgICAgICAgIHN1YnJlc291cmNlcy0+cHVzaFZhbHVlKGJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVz
b3VyY2UoKmNhY2hlZFJlc291cmNlKSk7CisgICAgfQorICAgIHJldHVybiBmcmFtZVJlc291cmNl
czsKK30KKworSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6fkluc3BlY3RvclJlc291cmNlQWdlbnQo
KQoreworfQorCit2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmlkZW50aWZpZXJGb3JJbml0
aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwmIHVybCwgRG9j
dW1lbnRMb2FkZXIqIGxvYWRlciwgYm9vbCBpc01haW5SZXNvdXJjZSkKK3sKKyAgICBtX2Zyb250
ZW5kLT5pZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QoaWRlbnRpZmllciwgdXJsLnN0cmluZygp
LCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obG9hZGVyLT5mcmFtZSgpKSwgaXNNYWluUmVz
b3VyY2UpOworfQorCit2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVz
dCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBtX2Zyb250ZW5k
LT53aWxsU2VuZFJlcXVlc3QoaWRlbnRpZmllciwgY3VycmVudFRpbWUoKSwgYnVpbGRPYmplY3RG
b3JSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCksIGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25z
ZShyZWRpcmVjdFJlc3BvbnNlKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
bWFya1Jlc291cmNlQXNDYWNoZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQoreworICAgIG1f
ZnJvbnRlbmQtPm1hcmtSZXNvdXJjZUFzQ2FjaGVkKGlkZW50aWZpZXIpOworfQorCit2b2lkIElu
c3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworICAgIFN0cmluZyB0eXBlID0gIk90aGVyIjsKKyAgICBpZiAobG9hZGVy
KSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKHJlc3BvbnNl
LnVybCgpLCBsb2FkZXItPmZyYW1lTG9hZGVyKCktPmljb25VUkwoKSkpCisgICAgICAgICAgICB0
eXBlID0gIkltYWdlIjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBDYWNoZWRSZXNvdXJj
ZSogY2FjaGVkUmVzb3VyY2UgPSBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpjYWNoZWRSZXNvdXJj
ZShsb2FkZXItPmZyYW1lKCksIHJlc3BvbnNlLnVybCgpKTsKKyAgICAgICAgICAgIGlmIChjYWNo
ZWRSZXNvdXJjZSkKKyAgICAgICAgICAgICAgICB0eXBlID0gY2FjaGVkUmVzb3VyY2VUeXBlU3Ry
aW5nKCpjYWNoZWRSZXNvdXJjZSk7CisKKyAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nRnJh
Z21lbnRJZGVudGlmaWVyKHJlc3BvbnNlLnVybCgpLCBsb2FkZXItPnVybCgpKSAmJiB0eXBlID09
ICJPdGhlciIpCisgICAgICAgICAgICAgICAgdHlwZSA9ICJEb2N1bWVudCI7CisgICAgICAgIH0K
KyAgICB9CisgICAgbV9mcm9udGVuZC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGlkZW50aWZpZXIsIGN1
cnJlbnRUaW1lKCksIHR5cGUsIGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZXNwb25z
ZSkpOworfQorCit2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZFJlY2VpdmVDb250ZW50
TGVuZ3RoKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgaW50IGxlbmd0aFJlY2VpdmVkKQorewor
ICAgIG1fZnJvbnRlbmQtPmRpZFJlY2VpdmVDb250ZW50TGVuZ3RoKGlkZW50aWZpZXIsIGN1cnJl
bnRUaW1lKCksIGxlbmd0aFJlY2VpdmVkKTsKK30KKwordm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50OjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZp
bmlzaFRpbWUpCit7CisgICAgaWYgKCFmaW5pc2hUaW1lKQorICAgICAgICBmaW5pc2hUaW1lID0g
Y3VycmVudFRpbWUoKTsKKworICAgIG1fZnJvbnRlbmQtPmRpZEZpbmlzaExvYWRpbmcoaWRlbnRp
ZmllciwgZmluaXNoVGltZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlk
RmFpbExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9y
JiBlcnJvcikKK3sKKyAgICBtX2Zyb250ZW5kLT5kaWRGYWlsTG9hZGluZyhpZGVudGlmaWVyLCBj
dXJyZW50VGltZSgpLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9j
dW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQorewor
ICAgIEZyYW1lKiBmcmFtZSA9IGxvYWRlci0+ZnJhbWUoKTsKKyAgICBtX2Zyb250ZW5kLT5kaWRM
b2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoY3VycmVudFRpbWUoKSwgcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGZyYW1lKSwgYnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZSgqcmVzb3Vy
Y2UpKTsKK30KKwordm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpzZXRPdmVycmlkZUNvbnRl
bnQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywg
SW5zcGVjdG9yUmVzb3VyY2U6OlR5cGUgdHlwZSkKK3sKKyAgICBTdHJpbmcgdHlwZVN0cmluZzsK
KyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEluc3BlY3RvclJlc291cmNlOjpYSFI6Cisg
ICAgICAgIHR5cGVTdHJpbmcgPSAiWEhSIjsgYnJlYWs7CisgICAgY2FzZSBJbnNwZWN0b3JSZXNv
dXJjZTo6U2NyaXB0OgorICAgICAgICB0eXBlU3RyaW5nID0gIlNjcmlwdCI7IGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHR5cGVTdHJpbmcgPSAiT3RoZXIiOworICAgIH0KKworICAgIG1f
ZnJvbnRlbmQtPnNldE92ZXJyaWRlQ29udGVudChpZGVudGlmaWVyLCBzb3VyY2VTdHJpbmcsIHR5
cGVTdHJpbmcpOworfQorCit2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZENvbW1pdExv
YWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBsb2FkZXIt
PmZyYW1lKCk7CisgICAgbV9mcm9udGVuZC0+ZGlkQ29tbWl0TG9hZChyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oZnJhbWUpKTsKK30KKwordm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojpm
cmFtZURldGFjaGVkRnJvbVBhcmVudChGcmFtZSogZnJhbWUpCit7CisgICAgbV9mcm9udGVuZC0+
ZnJhbWVEZXRhY2hlZEZyb21QYXJlbnQocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGZyYW1l
KSk7Cit9CisKKworI2lmIEVOQUJMRShXRUJfU09DS0VUUykKKworLy8gQ3JlYXRlIGh1bWFuLXJl
YWRhYmxlIGJpbmFyeSByZXByZXNlbnRhdGlvbiwgbGlrZSAiMDE6MjM6NDU6Njc6ODk6QUI6Q0Q6
RUYiLgorc3RhdGljIFN0cmluZyBjcmVhdGVSZWFkYWJsZVN0cmluZ0Zyb21CaW5hcnkoY29uc3Qg
dW5zaWduZWQgY2hhciogdmFsdWUsIHNpemVfdCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGxlbmd0
aCA+IDApOworICAgIHN0YXRpYyBjb25zdCBjaGFyIGhleERpZ2l0c1sxN10gPSAiMDEyMzQ1Njc4
OUFCQ0RFRiI7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBsZW5ndGggKiAzIC0gMTsKKyAgICBT
dHJpbmdCdWZmZXIgYnVmZmVyKGJ1ZmZlclNpemUpOworICAgIHNpemVfdCBpbmRleCA9IDA7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoaSA+
IDApCisgICAgICAgICAgICBidWZmZXJbaW5kZXgrK10gPSAnOic7CisgICAgICAgIGJ1ZmZlcltp
bmRleCsrXSA9IGhleERpZ2l0c1t2YWx1ZVtpXSA+PiA0XTsKKyAgICAgICAgYnVmZmVyW2luZGV4
KytdID0gaGV4RGlnaXRzW3ZhbHVlW2ldICYgMHhGXTsKKyAgICB9CisgICAgQVNTRVJUKGluZGV4
ID09IGJ1ZmZlclNpemUpOworICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkQ3JlYXRlV2ViU29ja2V0KHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgS1VSTCYgcmVxdWVzdFVSTCkKK3sKKyAgICBtX2Zyb250
ZW5kLT5kaWRDcmVhdGVXZWJTb2NrZXQoaWRlbnRpZmllciwgcmVxdWVzdFVSTC5zdHJpbmcoKSk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRXZWJTb2NrZXRIYW5k
c2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFu
ZHNoYWtlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXF1ZXN0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICByZXF1ZXN0T2Jq
ZWN0LT5zZXRPYmplY3QoIndlYlNvY2tldEhlYWRlckZpZWxkcyIsIGJ1aWxkT2JqZWN0Rm9ySGVh
ZGVycyhyZXF1ZXN0LmhlYWRlckZpZWxkcygpKSk7CisgICAgcmVxdWVzdE9iamVjdC0+c2V0U3Ry
aW5nKCJ3ZWJTb2NrZXRSZXF1ZXN0S2V5MyIsIGNyZWF0ZVJlYWRhYmxlU3RyaW5nRnJvbUJpbmFy
eShyZXF1ZXN0LmtleTMoKS52YWx1ZSwgc2l6ZW9mKHJlcXVlc3Qua2V5MygpLnZhbHVlKSkpOwor
ICAgIG1fZnJvbnRlbmQtPndpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdChpZGVudGlm
aWVyLCBjdXJyZW50VGltZSgpLCByZXF1ZXN0T2JqZWN0KTsKK30KKwordm9pZCBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSYgcmVz
cG9uc2UpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJlc3BvbnNlT2JqZWN0LT5zZXROdW1iZXIo
InN0YXR1c0NvZGUiLCByZXNwb25zZS5zdGF0dXNDb2RlKCkpOworICAgIHJlc3BvbnNlT2JqZWN0
LT5zZXRTdHJpbmcoInN0YXR1c1RleHQiLCByZXNwb25zZS5zdGF0dXNUZXh0KCkpOworICAgIHJl
c3BvbnNlT2JqZWN0LT5zZXRPYmplY3QoIndlYlNvY2tldEhlYWRlckZpZWxkcyIsIGJ1aWxkT2Jq
ZWN0Rm9ySGVhZGVycyhyZXNwb25zZS5oZWFkZXJGaWVsZHMoKSkpOworICAgIHJlc3BvbnNlT2Jq
ZWN0LT5zZXRTdHJpbmcoIndlYlNvY2tldENoYWxsZW5nZVJlc3BvbnNlIiwgY3JlYXRlUmVhZGFi
bGVTdHJpbmdGcm9tQmluYXJ5KHJlc3BvbnNlLmNoYWxsZW5nZVJlc3BvbnNlKCkudmFsdWUsIHNp
emVvZihyZXNwb25zZS5jaGFsbGVuZ2VSZXNwb25zZSgpLnZhbHVlKSkpOworICAgIG1fZnJvbnRl
bmQtPmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZShpZGVudGlmaWVyLCBjdXJy
ZW50VGltZSgpLCByZXNwb25zZU9iamVjdCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudDo6ZGlkQ2xvc2VXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQoreworICAg
IG1fZnJvbnRlbmQtPmRpZENsb3NlV2ViU29ja2V0KGlkZW50aWZpZXIsIGN1cnJlbnRUaW1lKCkp
OworfQorI2VuZGlmIC8vIEVOQUJMRShXRUJfU09DS0VUUykKKwordm9pZCBJbnNwZWN0b3JSZXNv
dXJjZUFnZW50OjpjYWNoZWRSZXNvdXJjZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzb3Vy
Y2VzKQoreworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1fcGFnZS0+bWFpbkZyYW1l
KCkpKQorICAgICAgICAoKnJlc291cmNlcyktPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JGcmFt
ZVJlc291cmNlcyhmcmFtZSkpOworfQorCit2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnJl
c291cmNlQ29udGVudCh1bnNpZ25lZCBsb25nIGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBT
dHJpbmcqIGNvbnRlbnQpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBmcmFtZVJlc291
cmNlcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
IG1fcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZl
cnNlTmV4dChtX3BhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICBpZiAocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGZyYW1lKSAhPSBmcmFtZUlEKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnJlc291cmNlQ29udGVudChmcmFtZSwg
S1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIGNvbnRlbnQpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK0luc3BlY3RvclJlc291cmNlQWdlbnQ6Okluc3BlY3RvclJlc291cmNlQWdlbnQo
UGFnZSogcGFnZSwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQorICAgIDogbV9wYWdlKHBh
Z2UpCisgICAgLCBtX2Zyb250ZW5kKGZyb250ZW5kKQogewotICAgIGNvbnN0IFN0cmluZyYgdXJs
U3RyaW5nID0gdXJsLnN0cmluZygpOwotICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJj
ZSA9IGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5jYWNoZWRSZXNvdXJjZSh1cmxT
dHJpbmcpOwotICAgIGlmICghY2FjaGVkUmVzb3VyY2UpCi0gICAgICAgIGNhY2hlZFJlc291cmNl
ID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwodXJsU3RyaW5nKTsKLSAgICByZXR1cm4gY2FjaGVk
UmVzb3VyY2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclJlc291cmNlQWdlbnQuaAppbmRleCAzYmZmZDJmLi5mMGJlYWQ4IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oCkBAIC0zMiw4ICszMiwxMCBA
QAogI2RlZmluZSBJbnNwZWN0b3JSZXNvdXJjZUFnZW50X2gKIAogI2luY2x1ZGUgIkluc3BlY3Rv
clJlc291cmNlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKIApAQCAtNDUsMTYgKzQ3LDY0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ2FjaGVkUmVzb3VyY2U7CiBjbGFzcyBEb2N1bWVudDsKK2NsYXNzIERvY3VtZW50TG9hZGVy
OworY2xhc3MgSW5zcGVjdG9yQXJyYXk7CitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBJ
bnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEtVUkw7CitjbGFzcyBQYWdlOworY2xhc3MgUmVzb3Vy
Y2VFcnJvcjsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7
CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKLWNsYXNzIEluc3BlY3RvclJlc291cmNlQWdlbnQgewor
I2lmIEVOQUJMRShXRUJfU09DS0VUUykKK2NsYXNzIFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3Q7
CitjbGFzcyBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZTsKKyNlbmRpZgorCitjbGFzcyBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yUmVzb3VyY2VB
Z2VudD4gewogcHVibGljOgotICAgIHN0YXRpYyBib29sIHJlc291cmNlQ29udGVudChEb2N1bWVu
dCosIGNvbnN0IEtVUkwmLCBTdHJpbmcqIHJlc3VsdCk7Ci0gICAgc3RhdGljIGJvb2wgcmVzb3Vy
Y2VDb250ZW50QmFzZTY0KERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFN0cmluZyogcmVzdWx0KTsK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHJlc291cmNlRGF0YShEb2N1bWVu
dCosIGNvbnN0IEtVUkwmLCBTdHJpbmcqIHRleHRFbmNvZGluZ05hbWUpOwotICAgIHN0YXRpYyBJ
bnNwZWN0b3JSZXNvdXJjZTo6VHlwZSBjYWNoZWRSZXNvdXJjZVR5cGUoRG9jdW1lbnQqLCBjb25z
dCBLVVJMJik7Ci0gICAgc3RhdGljIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZShEb2N1
bWVudCosIGNvbnN0IEtVUkwmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JSZXNv
dXJjZUFnZW50PiBjcmVhdGUoUGFnZSogcGFnZSwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5k
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50KHBhZ2UsIGZyb250ZW5kKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgcmVzb3VyY2VD
b250ZW50KEZyYW1lKiwgY29uc3QgS1VSTCYsIFN0cmluZyogcmVzdWx0KTsKKyAgICBzdGF0aWMg
Ym9vbCByZXNvdXJjZUNvbnRlbnRCYXNlNjQoRnJhbWUqLCBjb25zdCBLVVJMJiwgU3RyaW5nKiBy
ZXN1bHQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVzb3VyY2VEYXRh
KEZyYW1lKiwgY29uc3QgS1VSTCYsIFN0cmluZyogdGV4dEVuY29kaW5nTmFtZSk7CisgICAgc3Rh
dGljIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZShGcmFtZSosIGNvbnN0IEtVUkwmKTsK
KworICAgIH5JbnNwZWN0b3JSZXNvdXJjZUFnZW50KCk7CisKKyAgICB2b2lkIGlkZW50aWZpZXJG
b3JJbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwmLCBE
b2N1bWVudExvYWRlciosIGJvb2wgaXNNYWluUmVzb3VyY2UpOworICAgIHZvaWQgd2lsbFNlbmRS
ZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgdm9pZCBtYXJrUmVzb3Vy
Y2VBc0NhY2hlZCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOworICAgIHZvaWQgZGlkUmVjZWl2
ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqIGxhb2Rl
ciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZvaWQgZGlkUmVjZWl2ZUNvbnRlbnRM
ZW5ndGgodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAg
IHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBm
aW5pc2hUaW1lKTsKKyAgICB2b2lkIGRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgIHZvaWQgZGlkTG9hZFJlc291cmNlRnJv
bU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiwgY29uc3QgQ2FjaGVkUmVzb3VyY2UqKTsKKyAg
ICB2b2lkIHNldE92ZXJyaWRlQ29udGVudCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgc291cmNlU3RyaW5nLCBJbnNwZWN0b3JSZXNvdXJjZTo6VHlwZSk7CisgICAgdm9p
ZCBkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKik7CisgICAgdm9pZCBmcmFtZURldGFjaGVk
RnJvbVBhcmVudChGcmFtZSopOworCisjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQorICAgIHZvaWQg
ZGlkQ3JlYXRlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgS1VSTCYg
cmVxdWVzdFVSTCk7CisgICAgdm9pZCB3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3Qo
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0
Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSYpOwor
ICAgIHZvaWQgZGlkQ2xvc2VXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKKyNl
bmRpZgorCisgICAgLy8gQ2FsbGVkIGZyb20gZnJvbnRlbmQgCisgICAgdm9pZCBjYWNoZWRSZXNv
dXJjZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiopOworICAgIHZvaWQgcmVzb3VyY2VDb250ZW50
KHVuc2lnbmVkIGxvbmcgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiB1cmwsIFN0cmluZyogY29udGVu
dCk7CisKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudChQYWdlKiBwYWdlLCBJ
bnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpOworCisgICAgUGFnZSogbV9wYWdlOworICAgIElu
c3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCA5ZWUxZjUx
Li4xMWNkNjQ5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApA
QCAtNDY4LDcgKzQ2OCw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6cmVzb3VyY2VTdHls
ZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKICAgICBpZiAoIW1fcGFnZVN0eWxlU2hl
ZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQob3duZXJEb2N1bWVudCgpLCBtX3BhZ2VTdHlsZVNoZWV0
LT5maW5hbFVSTCgpLCByZXN1bHQpOworICAgIHJldHVybiBJbnNwZWN0b3JSZXNvdXJjZUFnZW50
OjpyZXNvdXJjZUNvbnRlbnQob3duZXJEb2N1bWVudCgpLT5mcmFtZSgpLCBtX3BhZ2VTdHlsZVNo
ZWV0LT5maW5hbFVSTCgpLCByZXN1bHQpOwogfQogCiBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6
OmlubGluZVN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFHcmlkLmpzIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0RhdGFHcmlkLmpzCmluZGV4IDEyYzcxMzguLjMwMDc0OTcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5qcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YUdyaWQuanMKQEAgLTY2MSw3ICs2NjEsNyBAQCBXZWJJ
bnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlID0gewogICAgICAgICB2YXIgZmlsbGVyUm93ID0g
Y2hpbGROb2Rlc1tjaGlsZE5vZGVzLmxlbmd0aCAtIDFdOwogCiAgICAgICAgIHZhciBzb3J0ZWRS
b3dzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoY2hpbGROb2RlcywgMCwgY2hpbGROb2Rl
cy5sZW5ndGggLSAxKTsKLSAgICAgICAgc29ydGVkUm93cy5zb3J0KGNvbXBhcmF0b3JXcmFwcGVy
LmJpbmQodGhpcykpOworICAgICAgICBzb3J0ZWRSb3dzLnNvcnQoY29tcGFyYXRvcldyYXBwZXIp
OwogICAgICAgICB2YXIgc29ydGVkUm93c0xlbmd0aCA9IHNvcnRlZFJvd3MubGVuZ3RoOwogCiAg
ICAgICAgIHRib2R5LnJlbW92ZUNoaWxkcmVuKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0V4dGVuc2lvblNlcnZlci5qcwppbmRleCA0NzljYzAyLi5iYzYzM2NhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpzCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMKQEAgLTI0MCw3
ICsyNDAsNyBAQCBXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgdmFyIGlkID0gbWVzc2FnZS5pZDsKICAgICAgICAgdmFyIHJlc291cmNlID0gbnVsbDsK
IAotICAgICAgICByZXNvdXJjZSA9IHR5cGVvZiBpZCA9PT0gIm51bWJlciIgPyBXZWJJbnNwZWN0
b3IucmVzb3VyY2VzW2lkXSA6IFdlYkluc3BlY3Rvci5yZXNvdXJjZUZvclVSTChpZCk7CisgICAg
ICAgIHJlc291cmNlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlc1tpZF0gfHwgV2ViSW5zcGVjdG9y
LnJlc291cmNlRm9yVVJMKGlkKTsKICAgICAgICAgaWYgKCFyZXNvdXJjZSkKICAgICAgICAgICAg
IHJldHVybiB0aGlzLl9zdGF0dXMuRV9OT1RGT1VORCh0eXBlb2YgaWQgKyAiOiAiICsgaWQpOwog
ICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5zaG93UmVzb3VyY2UocmVzb3Vy
Y2UsIG1lc3NhZ2UubGluZSk7CkBAIC0yODQsMTMgKzI4NCwxMiBAQCBXZWJJbnNwZWN0b3IuRXh0
ZW5zaW9uU2VydmVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICB0aGlzLl9kaXNwYXRj
aENhbGxiYWNrKG1lc3NhZ2UucmVxdWVzdElkLCBwb3J0LCByZXNwb25zZSk7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UuaWRzID09PSAibnVtYmVyIikgeworICAgICAg
ICBpZiAodHlwZW9mIG1lc3NhZ2UuaWRzID09PSAibnVtYmVyIikKICAgICAgICAgICAgIGlkcyA9
IFsgbWVzc2FnZS5pZHMgXTsKLSAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmlkcyBpbnN0YW5j
ZW9mIEFycmF5KSB7CisgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UuaWRzIGluc3RhbmNlb2YgQXJy
YXkpCiAgICAgICAgICAgICBpZHMgPSBtZXNzYWdlLmlkczsKLSAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5FX0JBREFSR1RZUEUo
Im1lc3NhZ2UuaWRzIiwgIkFycmF5IiwgdHlwZW9mIG1lc3NhZ2UuaWRzKTsKLSAgICAgICAgfQog
CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAg
ICAgICB2YXIgaWQgPSBpZHNbaV07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvTmV0d29ya1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05ldHdv
cmtQYW5lbC5qcwppbmRleCAxYjhmNTE1Li44ZWVkNDI1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvTmV0d29ya1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9OZXR3b3JrUGFuZWwuanMKQEAgLTEyNywxNSArMTI3LDE5IEBAIFdlYkluc3Bl
Y3Rvci5OZXR3b3JrUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB2YXIgcGFyZW50RWxlbWVu
dCA9IHRoaXMuX3N1bW1hcnlCYXJFbGVtZW50LnBhcmVudEVsZW1lbnQ7CiAKICAgICAgICAgaWYg
KHRoaXMuX3N1bW1hcnlCYXJFbGVtZW50LnBhcmVudEVsZW1lbnQgIT09IHRoaXMuZWxlbWVudCAm
JiBvZmZzZXRIZWlnaHQgPiAodGhpcy5fZGF0YUdyaWQuY2hpbGRyZW4ubGVuZ3RoIC0gMSkgKiBy
b3dIZWlnaHQgKyBzdW1tYXJ5QmFySGVpZ2h0KSB7Ci0gICAgICAgICAgICB0aGlzLl9kYXRhR3Jp
ZC5yZW1vdmVDaGlsZCh0aGlzLl9zdW1tYXJ5QmFyUm93Tm9kZSk7CisgICAgICAgICAgICAvLyBH
bHVlIHN0YXR1cyB0byBib3R0b20uCisgICAgICAgICAgICBpZiAodGhpcy5fc3VtbWFyeUJhclJv
d05vZGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9kYXRhR3JpZC5yZW1vdmVDaGlsZCh0aGlz
Ll9zdW1tYXJ5QmFyUm93Tm9kZSk7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3N1bW1h
cnlCYXJSb3dOb2RlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgdGhpcy5fc3VtbWFyeUJh
ckVsZW1lbnQuYWRkU3R5bGVDbGFzcygibmV0d29yay1zdW1tYXJ5LWJhci1ib3R0b20iKTsKLSAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zdW1tYXJ5QmFyUm93Tm9kZTsKICAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9zdW1tYXJ5QmFyRWxlbWVudCk7CiAgICAgICAg
ICAgICB0aGlzLl9kYXRhR3JpZC5lbGVtZW50LnN0eWxlLmJvdHRvbSA9ICIyMHB4IjsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghdGhpcy5fc3VtbWFyeUJh
clJvd05vZGUgJiYgb2Zmc2V0SGVpZ2h0IC0gc3VtbWFyeUJhckhlaWdodCA8IHRoaXMuX2RhdGFH
cmlkLmNoaWxkcmVuLmxlbmd0aCAqIHJvd0hlaWdodCkgeworICAgICAgICAgICAgLy8gR2x1ZSBz
dGF0dXMgdG8gdGFibGUuCiAgICAgICAgICAgICB0aGlzLl9zdW1tYXJ5QmFyUm93Tm9kZSA9IG5l
dyBXZWJJbnNwZWN0b3IuTmV0d29ya1RvdGFsR3JpZE5vZGUodGhpcy5fc3VtbWFyeUJhckVsZW1l
bnQpOwogICAgICAgICAgICAgdGhpcy5fc3VtbWFyeUJhckVsZW1lbnQucmVtb3ZlU3R5bGVDbGFz
cygibmV0d29yay1zdW1tYXJ5LWJhci1ib3R0b20iKTsKICAgICAgICAgICAgIHRoaXMuX2RhdGFH
cmlkLmFwcGVuZENoaWxkKHRoaXMuX3N1bW1hcnlCYXJSb3dOb2RlKTsKQEAgLTE0NCw2ICsxNDgs
MTMgQEAgV2ViSW5zcGVjdG9yLk5ldHdvcmtQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0K
ICAgICB9LAogCisgICAgX3Jlc2V0U3VtbWFyeUJhcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgZGVsZXRlIHRoaXMuX3N1bW1hcnlCYXJSb3dOb2RlOworICAgICAgICB0aGlzLl9zdW1tYXJ5
QmFyRWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX3N1bW1hcnlCYXJFbGVt
ZW50KTsKKyAgICAgICAgdGhpcy5fdXBkYXRlU3VtbWFyeUJhcigpOworICAgIH0sCisKICAgICBf
Y3JlYXRlVGltZWxpbmVHcmlkOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl90aW1l
bGluZUdyaWQgPSBuZXcgV2ViSW5zcGVjdG9yLlRpbWVsaW5lR3JpZCgpOwpAQCAtMzQ5LDIwICsz
NjAsMzcgQEAgV2ViSW5zcGVjdG9yLk5ldHdvcmtQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgewog
ICAgICAgICB0aGlzLl9wb3NpdGlvblN1bW1hcnlCYXIoKTsgLy8gR3JpZCBpcyBncm93aW5nLgog
ICAgICAgICB2YXIgbnVtUmVxdWVzdHMgPSB0aGlzLl9yZXNvdXJjZXMubGVuZ3RoOworCisgICAg
ICAgIGlmICghbnVtUmVxdWVzdHMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9zdW1tYXJ5QmFy
RWxlbWVudC5faXNEaXNwbGF5aW5nV2FybmluZykKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB0aGlzLl9zdW1tYXJ5QmFyRWxlbWVudC5faXNEaXNwbGF5aW5nV2FybmluZyA9
IHRydWU7CisKKyAgICAgICAgICAgIHZhciBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJp
bWciKTsKKyAgICAgICAgICAgIGltZy5zcmMgPSAiSW1hZ2VzL3dhcm5pbmdJY29uLnBuZyI7Cisg
ICAgICAgICAgICB0aGlzLl9zdW1tYXJ5QmFyRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAg
ICAgICAgICAgdGhpcy5fc3VtbWFyeUJhckVsZW1lbnQuYXBwZW5kQ2hpbGQoaW1nKTsKKyAgICAg
ICAgICAgIHRoaXMuX3N1bW1hcnlCYXJFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCIgIikpOworICAgICAgICAgICAgdGhpcy5fc3VtbWFyeUJhckVsZW1lbnQuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoCisgICAgICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJObyByZXF1ZXN0cyBjYXB0dXJlZC4gUmVsb2FkIHRoZSBwYWdlIHRv
IHNlZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgbmV0d29yayBhY3Rpdml0eS4iKSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZSB0aGlzLl9zdW1t
YXJ5QmFyRWxlbWVudC5faXNEaXNwbGF5aW5nV2FybmluZzsKKwogICAgICAgICB2YXIgdHJhbnNm
ZXJTaXplID0gMDsKICAgICAgICAgdmFyIGJhc2VUaW1lID0gLTE7CiAgICAgICAgIHZhciBtYXhU
aW1lID0gLTE7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcmVzb3VyY2VzLmxl
bmd0aDsgKytpKSB7CiAgICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSB0aGlzLl9yZXNvdXJjZXNb
aV07CiAgICAgICAgICAgICB0cmFuc2ZlclNpemUgKz0gcmVzb3VyY2UuY2FjaGVkID8gMCA6IHJl
c291cmNlLnRyYW5zZmVyU2l6ZTsKLSAgICAgICAgICAgIGlmIChyZXNvdXJjZSA9PT0gV2ViSW5z
cGVjdG9yLm1haW5SZXNvdXJjZSkKKyAgICAgICAgICAgIGlmIChyZXNvdXJjZS5pc01haW5SZXNv
dXJjZSkKICAgICAgICAgICAgICAgICBiYXNlVGltZSA9IHJlc291cmNlLnN0YXJ0VGltZTsKICAg
ICAgICAgICAgIGlmIChyZXNvdXJjZS5lbmRUaW1lID4gbWF4VGltZSkgCiAgICAgICAgICAgICAg
ICAgbWF4VGltZSA9IHJlc291cmNlLmVuZFRpbWU7CiAgICAgICAgIH0KICAgICAgICAgdmFyIHRl
eHQgPSBTdHJpbmcuc3ByaW50ZihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVkIHJlcXVlc3RzIiks
IG51bVJlcXVlc3RzKTsKICAgICAgICAgdGV4dCArPSAiICBcdTI3NTggICIgKyBTdHJpbmcuc3By
aW50ZihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVzIHRyYW5zZmVycmVkIiksIE51bWJlci5ieXRl
c1RvU3RyaW5nKHRyYW5zZmVyU2l6ZSkpOwotICAgICAgICBpZiAoYmFzZVRpbWUgIT09IC0xICYm
IHRoaXMuX21haW5SZXNvdXJjZUxvYWRUaW1lICE9PSAtMSAmJiB0aGlzLl9tYWluUmVzb3VyY2VE
T01Db250ZW50VGltZSAhPT0gLTEpIHsKKyAgICAgICAgaWYgKGJhc2VUaW1lICE9PSAtMSAmJiB0
aGlzLl9tYWluUmVzb3VyY2VMb2FkVGltZSAhPT0gLTEgJiYgdGhpcy5fbWFpblJlc291cmNlRE9N
Q29udGVudFRpbWUgIT09IC0xICYmIHRoaXMuX21haW5SZXNvdXJjZURPTUNvbnRlbnRUaW1lID4g
YmFzZVRpbWUpIHsKICAgICAgICAgICAgIHRleHQgKz0gIiAgXHUyNzU4ICAiICsgU3RyaW5nLnNw
cmludGYoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlcyAob25sb2FkOiAlcywgRE9NQ29udGVudExv
YWRlZDogJXMpIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIuc2Vjb25kc1RvU3Ry
aW5nKG1heFRpbWUgLSBiYXNlVGltZSksCiAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIu
c2Vjb25kc1RvU3RyaW5nKHRoaXMuX21haW5SZXNvdXJjZUxvYWRUaW1lIC0gYmFzZVRpbWUpLApA
QCAtNTc4LDcgKzYwNiw3IEBAIFdlYkluc3BlY3Rvci5OZXR3b3JrUGFuZWwucHJvdG90eXBlID0g
ewogICAgIF9jcmVhdGVTdGF0dXNiYXJCdXR0b25zOiBmdW5jdGlvbigpCiAgICAgewogICAgICAg
ICB0aGlzLl9jbGVhckJ1dHRvbiA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdHVzQmFyQnV0dG9uKFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiQ2xlYXIiKSwgImNsZWFyLXN0YXR1cy1iYXItaXRlbSIpOwot
ICAgICAgICB0aGlzLl9jbGVhckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMu
cmVzZXQuYmluZCh0aGlzKSwgZmFsc2UpOworICAgICAgICB0aGlzLl9jbGVhckJ1dHRvbi5hZGRF
dmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3Jlc2V0LmJpbmQodGhpcyksIGZhbHNlKTsKIAog
ICAgICAgICB0aGlzLl9sYXJnZXJSZXNvdXJjZXNCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0
YXR1c0JhckJ1dHRvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlVzZSBzbWFsbCByZXNvdXJjZSBy
b3dzLiIpLCAibmV0d29yay1sYXJnZXItcmVzb3VyY2VzLXN0YXR1cy1iYXItaXRlbSIpOwogICAg
ICAgICBXZWJJbnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncy5hZGRFdmVudExpc3RlbmVyKCJs
b2FkZWQiLCB0aGlzLl9zZXR0aW5nc0xvYWRlZCwgdGhpcyk7CkBAIC03MTgsMzkgKzc0NiwxNyBA
QCBXZWJJbnNwZWN0b3IuTmV0d29ya1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5f
ZGF0YUdyaWQudXBkYXRlV2lkdGhzKCk7CiAgICAgfSwKIAotICAgIHJlc2V0OiBmdW5jdGlvbigp
CisgICAgX3Jlc2V0OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9wb3BvdmVySGVs
cGVyLmhpZGVQb3B1cCgpOwogICAgICAgICB0aGlzLl9jbG9zZVZpc2libGVSZXNvdXJjZSgpOwog
CiAgICAgICAgIHRoaXMuX3RvZ2dsZUdyaWRNb2RlKCk7CiAKLSAgICAgICAgZGVsZXRlIHRoaXMu
Y3VycmVudFF1ZXJ5OwotICAgICAgICB0aGlzLnNlYXJjaENhbmNlbGVkKCk7Ci0KLSAgICAgICAg
aWYgKHRoaXMuX3Jlc291cmNlcykgewotICAgICAgICAgICAgdmFyIHJlc291cmNlc0xlbmd0aCA9
IHRoaXMuX3Jlc291cmNlcy5sZW5ndGg7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHJlc291cmNlc0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJlc291cmNlID0g
dGhpcy5fcmVzb3VyY2VzW2ldOwotCi0gICAgICAgICAgICAgICAgcmVzb3VyY2Uud2FybmluZ3Mg
PSAwOwotICAgICAgICAgICAgICAgIHJlc291cmNlLmVycm9ycyA9IDA7Ci0KLSAgICAgICAgICAg
ICAgICBkZWxldGUgcmVzb3VyY2UuX3Jlc291cmNlc1ZpZXc7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQogICAgICAgICAvLyBCZWdpbiByZXNldCB0aW1lbGluZQogICAgICAgICBpZiAodGhp
cy5fY2FsY3VsYXRvcikKICAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0b3IucmVzZXQoKTsKIAot
ICAgICAgICBpZiAodGhpcy5fcmVzb3VyY2VzKSB7Ci0gICAgICAgICAgICB2YXIgaXRlbXNMZW5n
dGggPSB0aGlzLl9yZXNvdXJjZXMubGVuZ3RoOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBpdGVtc0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlz
Ll9yZXNvdXJjZXNbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICB0aGlz
Ll9yZXNvdXJjZXMgPSBbXTsKICAgICAgICAgdGhpcy5fc3RhbGVSZXNvdXJjZXMgPSBbXTsKICAg
ICAgICAgdGhpcy5fcmVzb3VyY2VHcmlkTm9kZXMgPSB7fTsKQEAgLTc2NCw2ICs3NzAsNyBAQCBX
ZWJJbnNwZWN0b3IuTmV0d29ya1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fbWFp
blJlc291cmNlRE9NQ29udGVudFRpbWUgPSAtMTsKICAKICAgICAgICAgdGhpcy5fdmlld3NDb250
YWluZXJFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIHRoaXMuX3Jlc2V0U3VtbWFy
eUJhcigpOwogICAgIH0sCiAKICAgICBhZGRSZXNvdXJjZTogZnVuY3Rpb24ocmVzb3VyY2UpCkBA
IC03ODcsOSArNzk0LDYgQEAgV2ViSW5zcGVjdG9yLk5ldHdvcmtQYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIGlmIChuZXdWaWV3Ll9fcHJvdG9fXyA9PT0gcmVzb3VyY2UuX3Jlc291cmNlc1Zp
ZXcuX19wcm90b19fKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmICghdGhpcy5j
dXJyZW50UXVlcnkgJiYgdGhpcy5fcmVzb3VyY2VHcmlkTm9kZShyZXNvdXJjZSkpCi0gICAgICAg
ICAgICB0aGlzLl9yZXNvdXJjZUdyaWROb2RlKHJlc291cmNlKS51cGRhdGVFcnJvcnNBbmRXYXJu
aW5ncygpOwotCiAgICAgICAgIHZhciBvbGRWaWV3ID0gcmVzb3VyY2UuX3Jlc291cmNlc1ZpZXc7
CiAgICAgICAgIHZhciBvbGRWaWV3UGFyZW50Tm9kZSA9IG9sZFZpZXcudmlzaWJsZSA/IG9sZFZp
ZXcuZWxlbWVudC5wYXJlbnROb2RlIDogbnVsbDsKIApAQCAtMTA5NywxMSArMTEwMSw2IEBAIFdl
Ykluc3BlY3Rvci5OZXR3b3JrUGFuZWwucHJvdG90eXBlID0gewogCiBXZWJJbnNwZWN0b3IuTmV0
d29ya1BhbmVsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90
eXBlOwogCi1XZWJJbnNwZWN0b3IuZ2V0UmVzb3VyY2VDb250ZW50ID0gZnVuY3Rpb24oaWRlbnRp
ZmllciwgY2FsbGJhY2spCi17Ci0gICAgSW5zcGVjdG9yQmFja2VuZC5nZXRSZXNvdXJjZUNvbnRl
bnQoaWRlbnRpZmllciwgZmFsc2UsIGNhbGxiYWNrKTsKLX0KLQogV2ViSW5zcGVjdG9yLk5ldHdv
cmtCYXNlQ2FsY3VsYXRvciA9IGZ1bmN0aW9uKCkKIHsKIH0KQEAgLTE2MTEsNiArMTYxMCw4IEBA
IFdlYkluc3BlY3Rvci5OZXR3b3JrRGF0YUdyaWROb2RlLnByb3RvdHlwZSA9IHsKIAogICAgIF9y
ZWZyZXNoTGFiZWxQb3NpdGlvbnM6IGZ1bmN0aW9uKCkKICAgICB7CisgICAgICAgIGlmICghdGhp
cy5fcGVyY2VudGFnZXMpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHRoaXMuX2xhYmVs
TGVmdEVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoImxlZnQiKTsKICAgICAgICAgdGhpcy5f
bGFiZWxMZWZ0RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgicmlnaHQiKTsKICAgICAgICAg
dGhpcy5fbGFiZWxMZWZ0RWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJiZWZvcmUiKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZS5qcyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZS5qcwppbmRleCA5YmJmOTBiLi5kZDRlMjIxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2UuanMKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlLmpzCkBAIC0xNjQsNiArMTY0LDEw
IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAKICAgICBnZXQgcmVzcG9u
c2VSZWNlaXZlZFRpbWUoKQogICAgIHsKKyAgICAgICAgaWYgKHRoaXMudGltaW5nICYmIHRoaXMu
dGltaW5nLnJlcXVlc3RUaW1lKSB7CisgICAgICAgICAgICAvLyBSZWFkIHJlc3BvbnNlUmVjZWl2
ZWRUaW1lIGZyb20gdGltaW5nIGZvciBiZXR0ZXIgYWNjdXJhY3kuCisgICAgICAgICAgICByZXR1
cm4gdGhpcy50aW1pbmcucmVxdWVzdFRpbWUgKyB0aGlzLnRpbWluZy5yZWNlaXZlSGVhZGVyc0Vu
ZCAvIDEwMDAuMDsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VSZWNl
aXZlZFRpbWUgfHwgLTE7CiAgICAgfSwKIApAQCAtMTg1LDYgKzE4OSwxMiBAQCBXZWJJbnNwZWN0
b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogCiAgICAgc2V0IGVuZFRpbWUoeCkKICAgICB7Cisg
ICAgICAgIC8vIEluIGNhc2Ugb2YgZmFzdCBsb2FkIChvciBpbiBjYXNlIG9mIGNhY2hlZCByZXNv
dXJjZXMpLCBlbmRUaW1lIG9uIG5ldHdvcmsgc3RhY2sKKyAgICAgICAgLy8gY2FuIGJlIGxlc3Mg
dGhlbiBtX3Jlc3BvbnNlUmVjZWl2ZWRUaW1lIG1lYXN1cmVkIGluIFdlYkNvcmUuIE5vcm1hbGl6
ZSBpdCBoZXJlLAorICAgICAgICAvLyBwcmVmZXIgYWN0dWFsRW5kVGltZSB0byBtX3Jlc3BvbnNl
UmVjZWl2ZWRUaW1lLgorICAgICAgICBpZiAoeCA8IHRoaXMucmVzcG9uc2VSZWNlaXZlZFRpbWUp
CisgICAgICAgICAgICB0aGlzLnJlc3BvbnNlUmVjZWl2ZWRUaW1lID0geDsKKwogICAgICAgICBp
ZiAodGhpcy5fZW5kVGltZSA9PT0geCkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtNjA5LDYg
KzYxOSwxNSBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogCiAgICAgICAg
IGlmIChtc2cpCiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY29uc29sZS5hZGRNZXNzYWdlKG1z
Zyk7CisgICAgfSwKKworICAgIGdldENvbnRlbnRzOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICB7
CisgICAgICAgIC8vIEZJWE1FOiBldmVudHVhbGx5LCBjYWNoZWQgcmVzb3VyY2VzIHdpbGwgaGF2
ZSBubyBpZGVudGlmaWVycy4KKyAgICAgICAgaWYgKHRoaXMuZnJhbWVJRCkKKyAgICAgICAgICAg
IEluc3BlY3RvckJhY2tlbmQucmVzb3VyY2VDb250ZW50KHRoaXMuZnJhbWVJRCwgdGhpcy51cmws
IGNhbGxiYWNrKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5n
ZXRSZXNvdXJjZUNvbnRlbnQodGhpcy5pZGVudGlmaWVyLCBmYWxzZSwgY2FsbGJhY2spOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNl
TWFuYWdlci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZU1hbmFnZXIu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI0NGNlYQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZU1hbmFnZXIuanMK
QEAgLTAsMCArMSwyOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuUmVzb3VyY2VNYW5hZ2VyID0gZnVu
Y3Rpb24oKQoreworICAgIHRoaXMuX3JlZ2lzdGVyTm90aWZ5SGFuZGxlcnMoCisgICAgICAgICJp
ZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QiLAorICAgICAgICAid2lsbFNlbmRSZXF1ZXN0IiwK
KyAgICAgICAgIm1hcmtSZXNvdXJjZUFzQ2FjaGVkIiwKKyAgICAgICAgImRpZFJlY2VpdmVSZXNw
b25zZSIsCisgICAgICAgICJkaWRSZWNlaXZlQ29udGVudExlbmd0aCIsCisgICAgICAgICJkaWRG
aW5pc2hMb2FkaW5nIiwKKyAgICAgICAgImRpZEZhaWxMb2FkaW5nIiwKKyAgICAgICAgImRpZExv
YWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZSIsCisgICAgICAgICJzZXRPdmVycmlkZUNvbnRlbnQi
LAorICAgICAgICAiZGlkQ29tbWl0TG9hZCIsCisgICAgICAgICJmcmFtZURldGFjaGVkRnJvbVBh
cmVudCIsCisgICAgICAgICJkaWRDcmVhdGVXZWJTb2NrZXQiLAorICAgICAgICAid2lsbFNlbmRX
ZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0IiwKKyAgICAgICAgImRpZFJlY2VpdmVXZWJTb2NrZXRI
YW5kc2hha2VSZXNwb25zZSIsCisgICAgICAgICJkaWRDbG9zZVdlYlNvY2tldCIpOworCisgICAg
dGhpcy5fcmVzb3VyY2VzID0ge307CisgICAgdGhpcy5fcmVzb3VyY2VzQnlGcmFtZSA9IHt9Owor
ICAgIHRoaXMuX2xhc3RDYWNoZWRJZCA9IDA7Cit9CisKK1dlYkluc3BlY3Rvci5SZXNvdXJjZU1h
bmFnZXIucHJvdG90eXBlID0geworICAgIF9yZWdpc3Rlck5vdGlmeUhhbmRsZXJzOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7
ICsraSkKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvclthcmd1bWVudHNbaV1dID0gdGhpc1thcmd1
bWVudHNbaV1dLmJpbmQodGhpcyk7CisgICAgfSwKKworICAgIGlkZW50aWZpZXJGb3JJbml0aWFs
UmVxdWVzdDogZnVuY3Rpb24oaWRlbnRpZmllciwgdXJsLCBmcmFtZUlELCBpc01haW5SZXNvdXJj
ZSkKKyAgICB7CisgICAgICAgIHZhciByZXNvdXJjZSA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2UoaWRlbnRpZmllciwgdXJsKTsKKyAgICAgICAgaWYgKGlzTWFpblJlc291cmNlKQorICAgICAg
ICAgICAgcmVzb3VyY2UuaXNNYWluUmVzb3VyY2UgPSB0cnVlOworICAgICAgICB0aGlzLl9yZXNv
dXJjZXNbaWRlbnRpZmllcl0gPSByZXNvdXJjZTsKKworICAgICAgICBpZiAoZnJhbWVJRCkgewor
ICAgICAgICAgICAgcmVzb3VyY2UuZnJhbWVJRCA9IGZyYW1lSUQ7CisgICAgICAgICAgICB2YXIg
cmVzb3VyY2VzRm9yRnJhbWUgPSB0aGlzLl9yZXNvdXJjZXNCeUZyYW1lW2ZyYW1lSURdOworICAg
ICAgICAgICAgaWYgKCFyZXNvdXJjZXNGb3JGcmFtZSkgeworICAgICAgICAgICAgICAgIHJlc291
cmNlc0ZvckZyYW1lID0gW107CisgICAgICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2VzQnlGcmFt
ZVtmcmFtZUlEXSA9IHJlc291cmNlc0ZvckZyYW1lOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmVzb3VyY2VzRm9yRnJhbWUucHVzaChyZXNvdXJjZSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5uZXR3b3JrKQorICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLnBhbmVscy5uZXR3b3JrLmFkZFJlc291cmNlKHJlc291cmNlKTsKKyAgICB9LAorCisgICAg
d2lsbFNlbmRSZXF1ZXN0OiBmdW5jdGlvbihpZGVudGlmaWVyLCB0aW1lLCByZXF1ZXN0LCByZWRp
cmVjdFJlc3BvbnNlKQorICAgIHsKKyAgICAgICAgdmFyIHJlc291cmNlID0gdGhpcy5fcmVzb3Vy
Y2VzW2lkZW50aWZpZXJdOworICAgICAgICBpZiAoIXJlc291cmNlKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIC8vIFJlZGlyZWN0IG1heSBoYXZlIGVtcHR5IFVSTCBhbmQgd2UnZCBs
aWtlIHRvIG5vdCBjcmFzaCB3aXRoIGludmFsaWQgSGFzaE1hcCBlbnRyeS4KKyAgICAgICAgLy8g
U2VlIGh0dHAvdGVzdHMvbWlzYy93aWxsLXNlbmQtcmVxdWVzdC1yZXR1cm5zLW51bGwtb24tcmVk
aXJlY3QuaHRtbAorICAgICAgICBpZiAoIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsICYmIHJlcXVl
c3QudXJsLmxlbmd0aCkgeworICAgICAgICAgICAgcmVzb3VyY2UuZW5kVGltZSA9IHRpbWU7Cisg
ICAgICAgICAgICB0aGlzLmRpZFJlY2VpdmVSZXNwb25zZShpZGVudGlmaWVyLCB0aW1lLCAiT3Ro
ZXIiLCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICAgICAgICAgIHJlc291cmNlID0gdGhpcy5fYXBw
ZW5kUmVkaXJlY3QocmVzb3VyY2UuaWRlbnRpZmllciwgcmVxdWVzdC51cmwpOworICAgICAgICB9
CisKKyAgICAgICAgcmVzb3VyY2UucmVxdWVzdE1ldGhvZCA9IHJlcXVlc3QuaHR0cE1ldGhvZDsK
KyAgICAgICAgcmVzb3VyY2UucmVxdWVzdEhlYWRlcnMgPSByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVs
ZHM7CisgICAgICAgIHJlc291cmNlLnJlcXVlc3RGb3JtRGF0YSA9IHJlcXVlc3QucmVxdWVzdEZv
cm1EYXRhOworICAgICAgICByZXNvdXJjZS5zdGFydFRpbWUgPSB0aW1lOworCisgICAgICAgIGlm
IChXZWJJbnNwZWN0b3IucGFuZWxzLm5ldHdvcmspCisgICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
cGFuZWxzLm5ldHdvcmsucmVmcmVzaFJlc291cmNlKHJlc291cmNlKTsKKyAgICB9LAorCisgICAg
X2FwcGVuZFJlZGlyZWN0OiBmdW5jdGlvbihpZGVudGlmaWVyLCByZWRpcmVjdFVSTCkKKyAgICB7
CisgICAgICAgIC8vIFdlIGFsd2F5cyBzdG9yZSBsYXN0IHJlZGlyZWN0IGJ5IHRoZSBvcmlnaW5h
bCBpZCBrZXkuIFJlc3Qgb2YgdGhlIHJlZGlyZWN0cyBhcmUgcmVmZXJlbmNlZCBmcm9tIHdpdGhp
biB0aGUgbGFzdCBvbmUuCisKKyAgICAgICAgdmFyIG9yaWdpbmFsUmVzb3VyY2UgPSB0aGlzLl9y
ZXNvdXJjZXNbaWRlbnRpZmllcl07CisgICAgICAgIHZhciByZWRpcmVjdElkZW50aWZpZXIgPSBv
cmlnaW5hbFJlc291cmNlLmlkZW50aWZpZXIgKyAiOiIgKyAob3JpZ2luYWxSZXNvdXJjZS5yZWRp
cmVjdHMgPyBvcmlnaW5hbFJlc291cmNlLnJlZGlyZWN0cy5sZW5ndGggOiAwKTsKKyAgICAgICAg
b3JpZ2luYWxSZXNvdXJjZS5pZGVudGlmaWVyID0gcmVkaXJlY3RJZGVudGlmaWVyOworICAgICAg
ICB0aGlzLl9yZXNvdXJjZXNbcmVkaXJlY3RJZGVudGlmaWVyXSA9IG9yaWdpbmFsUmVzb3VyY2U7
CisKKyAgICAgICAgdGhpcy5pZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QoaWRlbnRpZmllciwg
cmVkaXJlY3RVUkwsIG9yaWdpbmFsUmVzb3VyY2UuZnJhbWVJRCk7CisKKyAgICAgICAgdmFyIG5l
d1Jlc291cmNlID0gdGhpcy5fcmVzb3VyY2VzW2lkZW50aWZpZXJdOworICAgICAgICBuZXdSZXNv
dXJjZS5yZWRpcmVjdHMgPSBvcmlnaW5hbFJlc291cmNlLnJlZGlyZWN0cyB8fCBbXTsKKyAgICAg
ICAgZGVsZXRlIG9yaWdpbmFsUmVzb3VyY2UucmVkaXJlY3RzOworICAgICAgICBuZXdSZXNvdXJj
ZS5yZWRpcmVjdHMucHVzaChvcmlnaW5hbFJlc291cmNlKTsKKyAgICAgICAgcmV0dXJuIG5ld1Jl
c291cmNlOworICAgIH0sCisKKyAgICBtYXJrUmVzb3VyY2VBc0NhY2hlZDogZnVuY3Rpb24oaWRl
bnRpZmllcikKKyAgICB7CisgICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMuX3Jlc291cmNlc1tp
ZGVudGlmaWVyXTsKKyAgICAgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICByZXNvdXJjZS5jYWNoZWQgPSB0cnVlOworCisgICAgICAgIGlmIChXZWJJbnNw
ZWN0b3IucGFuZWxzLm5ldHdvcmspCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLm5l
dHdvcmsucmVmcmVzaFJlc291cmNlKHJlc291cmNlKTsKKyAgICB9LAorCisgICAgZGlkUmVjZWl2
ZVJlc3BvbnNlOiBmdW5jdGlvbihpZGVudGlmaWVyLCB0aW1lLCByZXNvdXJjZVR5cGUsIHJlc3Bv
bnNlKQorICAgIHsKKyAgICAgICAgdmFyIHJlc291cmNlID0gdGhpcy5fcmVzb3VyY2VzW2lkZW50
aWZpZXJdOworICAgICAgICBpZiAoIXJlc291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHJlc291cmNlLnR5cGUgPSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZVtyZXNvdXJj
ZVR5cGVdOworICAgICAgICByZXNvdXJjZS5taW1lVHlwZSA9IHJlc3BvbnNlLm1pbWVUeXBlOwor
ICAgICAgICByZXNvdXJjZS5leHBlY3RlZENvbnRlbnRMZW5ndGggPSByZXNwb25zZS5leHBlY3Rl
ZENvbnRlbnRMZW5ndGg7CisgICAgICAgIHJlc291cmNlLnRleHRFbmNvZGluZ05hbWUgPSByZXNw
b25zZS50ZXh0RW5jb2RpbmdOYW1lOworICAgICAgICByZXNvdXJjZS5zdWdnZXN0ZWRGaWxlbmFt
ZSA9IHJlc3BvbnNlLnN1Z2dlc3RlZEZpbGVuYW1lOworICAgICAgICByZXNvdXJjZS5zdGF0dXND
b2RlID0gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGU7CisgICAgICAgIHJlc291cmNlLnN0YXR1c1Rl
eHQgPSByZXNwb25zZS5odHRwU3RhdHVzVGV4dDsKKworICAgICAgICByZXNvdXJjZS5yZXNwb25z
ZUhlYWRlcnMgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGRzOworICAgICAgICByZXNvdXJjZS5j
b25uZWN0aW9uUmV1c2VkID0gcmVzcG9uc2UuY29ubmVjdGlvblJldXNlZDsKKyAgICAgICAgcmVz
b3VyY2UuY29ubmVjdGlvbklEID0gcmVzcG9uc2UuY29ubmVjdGlvbklEOworICAgICAgICByZXNv
dXJjZS5yZXNwb25zZVJlY2VpdmVkVGltZSA9IHRpbWU7CisKKyAgICAgICAgaWYgKHJlc3BvbnNl
Lndhc0NhY2hlZCkKKyAgICAgICAgICAgIHJlc291cmNlLmNhY2hlZCA9IHRydWU7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJlc291cmNlLnRpbWluZyA9IHJlc3BvbnNlLnRpbWluZzsKKwor
ICAgICAgICBpZiAocmVzcG9uc2UucmF3SGVhZGVycykgeworICAgICAgICAgICAgcmVzb3VyY2Uu
cmVxdWVzdEhlYWRlcnMgPSByZXNwb25zZS5yYXdIZWFkZXJzLnJlcXVlc3RIZWFkZXJzOworICAg
ICAgICAgICAgcmVzb3VyY2UucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2UucmF3SGVhZGVycy5y
ZXNwb25zZUhlYWRlcnM7CisgICAgICAgIH0KKworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnBh
bmVscy5uZXR3b3JrKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5uZXR3b3JrLnJl
ZnJlc2hSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgfSwKKworICAgIGRpZFJlY2VpdmVDb250ZW50
TGVuZ3RoOiBmdW5jdGlvbihpZGVudGlmaWVyLCB0aW1lLCBsZW5ndGhSZWNlaXZlZCkKKyAgICB7
CisgICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMuX3Jlc291cmNlc1tpZGVudGlmaWVyXTsKKyAg
ICAgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICByZXNv
dXJjZS5yZXNvdXJjZVNpemUgKz0gbGVuZ3RoUmVjZWl2ZWQ7CisgICAgICAgIHJlc291cmNlLmVu
ZFRpbWUgPSB0aW1lOworCisgICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWxzLm5ldHdvcmsp
CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLm5ldHdvcmsucmVmcmVzaFJlc291cmNl
KHJlc291cmNlKTsKKyAgICB9LAorCisgICAgZGlkRmluaXNoTG9hZGluZzogZnVuY3Rpb24oaWRl
bnRpZmllciwgZmluaXNoVGltZSkKKyAgICB7CisgICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMu
X3Jlc291cmNlc1tpZGVudGlmaWVyXTsKKyAgICAgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICByZXNvdXJjZS5maW5pc2hlZCA9IHRydWU7CisgICAgICAg
IHJlc291cmNlLmVuZFRpbWUgPSBmaW5pc2hUaW1lOworCisgICAgICAgIGlmIChXZWJJbnNwZWN0
b3IucGFuZWxzLm5ldHdvcmspCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLm5ldHdv
cmsucmVmcmVzaFJlc291cmNlKHJlc291cmNlKTsKKyAgICB9LAorCisgICAgZGlkRmFpbExvYWRp
bmc6IGZ1bmN0aW9uKGlkZW50aWZpZXIsIHRpbWUsIGxvY2FsaXplZERlc2NyaXB0aW9uKQorICAg
IHsKKyAgICAgICAgdmFyIHJlc291cmNlID0gdGhpcy5fcmVzb3VyY2VzW2lkZW50aWZpZXJdOwor
ICAgICAgICBpZiAoIXJlc291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHJl
c291cmNlLmZhaWxlZCA9IHRydWU7CisgICAgICAgIHJlc291cmNlLmVuZFRpbWUgPSB0aW1lOwor
CisgICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWxzLm5ldHdvcmspCisgICAgICAgICAgICBX
ZWJJbnNwZWN0b3IucGFuZWxzLm5ldHdvcmsucmVmcmVzaFJlc291cmNlKHJlc291cmNlKTsKKyAg
ICB9LAorCisgICAgZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlOiBmdW5jdGlvbih0aW1l
LCBmcmFtZUlELCBjYWNoZWRSZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHZhciBpZGVudGlmaWVy
ID0gImNhY2hlZDoiICsgdGhpcy5fbGFzdENhY2hlZElkKys7CisgICAgICAgIHRoaXMuaWRlbnRp
ZmllckZvckluaXRpYWxSZXF1ZXN0KGlkZW50aWZpZXIsIGNhY2hlZFJlc291cmNlLnVybCwgZnJh
bWVJRCk7CisKKyAgICAgICAgdmFyIHJlc291cmNlID0gdGhpcy5fcmVzb3VyY2VzW2lkZW50aWZp
ZXJdOworICAgICAgICByZXNvdXJjZS5jYWNoZWQgPSB0cnVlOworICAgICAgICByZXNvdXJjZS5z
dGFydFRpbWUgPSByZXNvdXJjZS5yZXNwb25zZVJlY2VpdmVkVGltZSA9IHRpbWU7CisgICAgICAg
IHJlc291cmNlLnJlc291cmNlU2l6ZSA9IGNhY2hlZFJlc291cmNlLmVuY29kZWRTaXplKCk7CisK
KyAgICAgICAgdGhpcy5kaWRSZWNlaXZlUmVzcG9uc2UoaWRlbnRpZmllciwgdGltZSwgY2FjaGVk
UmVzb3VyY2UucmVzcG9uc2UpOworICAgIH0sCisKKyAgICBzZXRPdmVycmlkZUNvbnRlbnQ6IGZ1
bmN0aW9uKGlkZW50aWZpZXIsIHNvdXJjZVN0cmluZywgdHlwZSkKKyAgICB7CisgICAgICAgIHZh
ciByZXNvdXJjZSA9IHRoaXMuX3Jlc291cmNlc1tpZGVudGlmaWVyXTsKKyAgICAgICAgaWYgKCFy
ZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICByZXNvdXJjZS50eXBlID0g
V2ViSW5zcGVjdG9yLlJlc291cmNlLlR5cGVbdHlwZV07CisgICAgICAgIHJlc291cmNlLm92ZXJy
aWRlbkNvbnRlbnQgPSBzb3VyY2VTdHJpbmc7CisKKyAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5w
YW5lbHMubmV0d29yaykKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMubmV0d29yay5h
ZGRSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgfSwKKworICAgIGRpZENvbW1pdExvYWQ6IGZ1bmN0
aW9uKGZyYW1lSUQpCisgICAgeworICAgIH0sCisKKyAgICBmcmFtZURldGFjaGVkRnJvbVBhcmVu
dDogZnVuY3Rpb24oZnJhbWVJRCkKKyAgICB7CisgICAgICAgIHZhciByZXNvdXJjZXNGb3JGcmFt
ZSA9IHRoaXMuX3Jlc291cmNlc0J5RnJhbWVbZnJhbWVJRF07CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyByZXNvdXJjZXNGb3JGcmFtZSAmJiBpIDwgcmVzb3VyY2VzRm9yRnJhbWUubGVuZ3RoOyAr
K2kpCisgICAgICAgICAgICBkZWxldGUgdGhpcy5fcmVzb3VyY2VzW3Jlc291cmNlc0ZvckZyYW1l
W2ldLmlkZW50aWZpZXJdOworICAgICAgICBkZWxldGUgdGhpcy5fcmVzb3VyY2VzQnlGcmFtZVtm
cmFtZUlEXTsKKyAgICB9LAorCisgICAgZGlkQ3JlYXRlV2ViU29ja2V0OiBmdW5jdGlvbihpZGVu
dGlmaWVyLCByZXF1ZXN0VVJMKQorICAgIHsKKyAgICAgICAgdGhpcy5pZGVudGlmaWVyRm9ySW5p
dGlhbFJlcXVlc3QoaWRlbnRpZmllciwgcmVxdWVzdFVSTCk7CisgICAgICAgIHZhciByZXNvdXJj
ZSA9IHRoaXMuX3Jlc291cmNlc1tpZGVudGlmaWVyXTsKKyAgICAgICAgcmVzb3VyY2UudHlwZSA9
IFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLldlYlNvY2tldDsKKworICAgICAgICBpZiAoV2Vi
SW5zcGVjdG9yLnBhbmVscy5uZXR3b3JrKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVs
cy5uZXR3b3JrLmFkZFJlc291cmNlKHJlc291cmNlKTsKKyAgICB9LAorCisgICAgd2lsbFNlbmRX
ZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0OiBmdW5jdGlvbihpZGVudGlmaWVyLCB0aW1lLCByZXF1
ZXN0KQorICAgIHsKKyAgICAgICAgdmFyIHJlc291cmNlID0gdGhpcy5fcmVzb3VyY2VzW2lkZW50
aWZpZXJdOworICAgICAgICBpZiAoIXJlc291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHJlc291cmNlLnJlcXVlc3RNZXRob2QgPSAiR0VUIjsKKyAgICAgICAgcmVzb3VyY2Uu
cmVxdWVzdEhlYWRlcnMgPSByZXF1ZXN0LndlYlNvY2tldEhlYWRlckZpZWxkczsKKyAgICAgICAg
cmVzb3VyY2Uud2ViU29ja2V0UmVxdWVzdEtleTMgPSByZXF1ZXN0LndlYlNvY2tldFJlcXVlc3RL
ZXkzOworICAgICAgICByZXNvdXJjZS5zdGFydFRpbWUgPSB0aW1lOworCisgICAgICAgIGlmIChX
ZWJJbnNwZWN0b3IucGFuZWxzLm5ldHdvcmspCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFu
ZWxzLm5ldHdvcmsucmVmcmVzaFJlc291cmNlKHJlc291cmNlKTsKKyAgICB9LAorCisgICAgZGlk
UmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlOiBmdW5jdGlvbihpZGVudGlmaWVyLCB0
aW1lLCByZXNwb25zZSkKKyAgICB7CisgICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMuX3Jlc291
cmNlc1tpZGVudGlmaWVyXTsKKyAgICAgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICByZXNvdXJjZS5zdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzQ29k
ZTsKKyAgICAgICAgcmVzb3VyY2Uuc3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXR1c1RleHQ7Cisg
ICAgICAgIHJlc291cmNlLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlLndlYlNvY2tldEhlYWRl
ckZpZWxkczsKKyAgICAgICAgcmVzb3VyY2Uud2ViU29ja2V0Q2hhbGxlbmdlUmVzcG9uc2UgPSBy
ZXNwb25zZS53ZWJTb2NrZXRDaGFsbGVuZ2VSZXNwb25zZTsKKyAgICAgICAgcmVzb3VyY2UucmVz
cG9uc2VSZWNlaXZlZFRpbWUgPSB0aW1lOworCisgICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFu
ZWxzLm5ldHdvcmspCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLm5ldHdvcmsucmVm
cmVzaFJlc291cmNlKHJlc291cmNlKTsKKyAgICB9LAorCisgICAgZGlkQ2xvc2VXZWJTb2NrZXQ6
IGZ1bmN0aW9uKGlkZW50aWZpZXIsIHRpbWUpCisgICAgeworICAgICAgICB2YXIgcmVzb3VyY2Ug
PSB0aGlzLl9yZXNvdXJjZXNbaWRlbnRpZmllcl07CisgICAgICAgIGlmICghcmVzb3VyY2UpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJlc291cmNlLmVuZFRpbWUgPSB0aW1lOworCisg
ICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWxzLm5ldHdvcmspCisgICAgICAgICAgICBXZWJJ
bnNwZWN0b3IucGFuZWxzLm5ldHdvcmsucmVmcmVzaFJlc291cmNlKHJlc291cmNlKTsKKyAgICB9
Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFu
ZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMKaW5k
ZXggOGZmODJjOS4uZmQxNjg0NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1Jlc291cmNlc1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9S
ZXNvdXJjZXNQYW5lbC5qcwpAQCAtMTI5MSwxMSArMTI5MSw2IEBAIFdlYkluc3BlY3Rvci5SZXNv
dXJjZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAKIFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5w
cm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZTsKIAotV2Vi
SW5zcGVjdG9yLmdldFJlc291cmNlQ29udGVudCA9IGZ1bmN0aW9uKGlkZW50aWZpZXIsIGNhbGxi
YWNrKQotewotICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0UmVzb3VyY2VDb250ZW50KGlkZW50aWZp
ZXIsIGZhbHNlLCBjYWxsYmFjayk7Ci19Ci0KIFdlYkluc3BlY3Rvci5SZXNvdXJjZUJhc2VDYWxj
dWxhdG9yID0gZnVuY3Rpb24oKQogewogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291
cmNlVmlldy5qcwppbmRleCAwOTU0OWJmLi44MDkyNTA1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU291cmNlVmlldy5qcwpAQCAtODMsNyArODMsNyBAQCBXZWJJbnNwZWN0b3IuU291
cmNlVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuYXR0YWNoKCk7CiAKICAgICAgICAg
ZGVsZXRlIHRoaXMuX2ZyYW1lTmVlZHNTZXR1cDsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmdldFJl
c291cmNlQ29udGVudCh0aGlzLnJlc291cmNlLmlkZW50aWZpZXIsIHRoaXMuX2NvbnRlbnRMb2Fk
ZWQuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMucmVzb3VyY2UuZ2V0Q29udGVudHModGhpcy5f
Y29udGVudExvYWRlZC5iaW5kKHRoaXMpKTsKICAgICB9LAogCiAgICAgaGFzQ29udGVudFRhYjog
ZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktp
dC5xcmMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwppbmRleCAxMTM4
MmNkLi5hNTkzM2FmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2Vi
S2l0LnFyYworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwpAQCAt
NjgsNiArNjgsNyBAQAogICAgIDxmaWxlPlJlbW90ZU9iamVjdC5qczwvZmlsZT4KICAgICA8Zmls
ZT5SZXNvdXJjZS5qczwvZmlsZT4KICAgICA8ZmlsZT5SZXNvdXJjZUNhdGVnb3J5LmpzPC9maWxl
PgorICAgIDxmaWxlPlJlc291cmNlTWFuYWdlci5qczwvZmlsZT4KICAgICA8ZmlsZT5SZXNvdXJj
ZXNQYW5lbC5qczwvZmlsZT4KICAgICA8ZmlsZT5SZXNvdXJjZVZpZXcuanM8L2ZpbGU+CiAgICAg
PGZpbGU+U2NvcGVDaGFpblNpZGViYXJQYW5lLmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IDk0OWIxOGYuLjU5YTVmNzkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTYxLDYgKzYxLDcgQEAg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJQYW5lbC5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iVGlt
ZWxpbmVHcmlkLmpzIj48L3NjcmlwdD4gICAgCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iUmVzb3VyY2UuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9IlJlc291cmNlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUmVzb3VyY2VDYXRlZ29yeS5qcyI+PC9z
Y3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRGF0YWJhc2Uu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRP
TVN0b3JhZ2UuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuanMKaW5kZXggYTZiNDg0NS4uNDExNjQxNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzCkBAIC01MDcsNiArNTA3LDcgQEAgV2ViSW5zcGVjdG9yLmRvTG9hZGVk
RG9uZSA9IGZ1bmN0aW9uKCkKICAgICAvLyB0aGlzLmNoYW5nZXMgPSBuZXcgV2ViSW5zcGVjdG9y
LkNoYW5nZXNWaWV3KHRoaXMuZHJhd2VyKTsKICAgICAvLyBUT0RPOiBSZW1vdmUgY2xhc3M9Imhp
ZGRlbiIgZnJvbSBpbnNwZWN0b3IuaHRtbCBvbiBidXR0b24jY2hhbmdlcy1zdGF0dXMtYmFyLWl0
ZW0KICAgICB0aGlzLmRyYXdlci52aXNpYmxlVmlldyA9IHRoaXMuY29uc29sZTsKKyAgICB0aGlz
LnJlc291cmNlTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VNYW5hZ2VyKCk7CiAg
ICAgdGhpcy5kb21BZ2VudCA9IG5ldyBXZWJJbnNwZWN0b3IuRE9NQWdlbnQoKTsKIAogICAgIHRo
aXMucmVzb3VyY2VDYXRlZ29yaWVzID0gewpAQCAtMTIyMCw4ICsxMjIxLDYgQEAgV2ViSW5zcGVj
dG9yLnVwZGF0ZVJlc291cmNlID0gZnVuY3Rpb24ocGF5bG9hZCkKICAgICAgICAgdGhpcy5yZXNv
dXJjZVVSTE1hcFtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2U7CiAgICAgICAgIHRoaXMucGFuZWxz
LnJlc291cmNlcy5hZGRSZXNvdXJjZShyZXNvdXJjZSk7CiAgICAgICAgIHRoaXMucGFuZWxzLmF1
ZGl0cy5yZXNvdXJjZVN0YXJ0ZWQocmVzb3VyY2UpOwotICAgICAgICBpZiAodGhpcy5wYW5lbHMu
bmV0d29yaykKLSAgICAgICAgICAgIHRoaXMucGFuZWxzLm5ldHdvcmsuYWRkUmVzb3VyY2UocmVz
b3VyY2UpOwogICAgIH0KIAogICAgIGlmIChwYXlsb2FkLmRpZFJlcXVlc3RDaGFuZ2UpIHsKQEAg
LTEyODEsMTIgKzEyODAsOCBAQCBXZWJJbnNwZWN0b3IudXBkYXRlUmVzb3VyY2UgPSBmdW5jdGlv
bihwYXlsb2FkKQogICAgICAgICBpZiAocGF5bG9hZC5lbmRUaW1lKQogICAgICAgICAgICAgcmVz
b3VyY2UuZW5kVGltZSA9IHBheWxvYWQuZW5kVGltZTsKICAgICB9Ci0KLSAgICBpZiAodGhpcy5w
YW5lbHMubmV0d29yaykKLSAgICAgICAgdGhpcy5wYW5lbHMubmV0d29yay5yZWZyZXNoUmVzb3Vy
Y2UocmVzb3VyY2UpOwogfQogCi0KIFdlYkluc3BlY3Rvci5kb21Db250ZW50RXZlbnRGaXJlZCA9
IGZ1bmN0aW9uKHRpbWUpCiB7CiAgICAgdGhpcy5wYW5lbHMucmVzb3VyY2VzLm1haW5SZXNvdXJj
ZURPTUNvbnRlbnRUaW1lID0gdGltZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9uZXR3b3JrUGFuZWwuY3NzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL25l
dHdvcmtQYW5lbC5jc3MKaW5kZXggMDk4Y2E1Mi4uNzczZmU5OSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL25ldHdvcmtQYW5lbC5jc3MKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL25ldHdvcmtQYW5lbC5jc3MKQEAgLTYwLDYgKzYwLDExIEBACiAgICAg
Zm9udC1zaXplOiAxMXB4OwogICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogfQorCisubmV0d29yay5w
YW5lbCAuZGF0YS1ncmlkIHRyLmZpbGxlciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7
Cit9CisKIC5uZXR3b3JrLnBhbmVsIC5kYXRhLWdyaWQgdGQubmFtZS1jb2x1bW4gewogICAgIGZv
bnQtd2VpZ2h0OiBib2xkOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkTm90aWZpZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3Bw
CmluZGV4IGM0M2ExZGEuLmIzMmI3MzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZE5vdGlmaWVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWROb3Rp
Zmllci5jcHAKQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIFJlc291cmNlTG9hZE5vdGlmaWVyOjpk
aXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciogbG9hZGVyLCB1bgogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2Uo
KSkKLSAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kaWRSZWNlaXZlUmVzcG9u
c2UoaWRlbnRpZmllciwgcik7CisgICAgICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+
ZGlkUmVjZWl2ZVJlc3BvbnNlKGlkZW50aWZpZXIsIGxvYWRlciwgcik7CiAjZW5kaWYKIH0KIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3Vw
LmNwcCBiL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAK
aW5kZXggZGMxZTY2MS4uOGQ1ZDVjMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCkBAIC01MjMsNyArNTIzLDcgQEAgdm9pZCBBcHBs
aWNhdGlvbkNhY2hlR3JvdXA6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSogaGFu
ZGxlLCBjb25zdCBSZXMKICAgICAgICAgICAgIGlmIChJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQqIGFwcGxpY2F0aW9uQ2FjaGVBZ2VudCA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+YXBwbGljYXRpb25DYWNoZUFnZW50KCkpCiAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25D
YWNoZUFnZW50LT5kaWRSZWNlaXZlTWFuaWZlc3RSZXNwb25zZShtX2N1cnJlbnRSZXNvdXJjZUlk
ZW50aWZpZXIsIHJlc3BvbnNlKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwYWdlLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPmRpZFJlY2VpdmVSZXNwb25zZShtX2N1cnJlbnRSZXNvdXJj
ZUlkZW50aWZpZXIsIHJlc3BvbnNlKTsKKyAg
</data>
<flag name="review"
          id="60915"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71010</attachid>
            <date>2010-10-18 02:42:52 -0700</date>
            <delta_ts>2010-10-18 03:15:27 -0700</delta_ts>
            <desc>[PATCH] For bots.</desc>
            <filename>resource_agent</filename>
            <type>text/plain</type>
            <size>75030</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmU2MmQ3NC4uNTZhNTg0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDggQEAKKzIwMTAtMTAtMTcgIFBhdmVsIEZlbGRt
YW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogSW50cm9kdWNlIEluc3BlY3RvclJl
c291cmNlQWdlbnQuaC9jcHAgYW5kIFJlc291cmNlTWFuYWdlci5qcyB0bworICAgICAgICBmaWxs
IG5ldHdvcmsgcGFuZWwgd2l0aCBkYXRhLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDc3NzkKKyAgICAgICAgCisgICAgICAgIEluc3BlY3RvclJlc291
cmNlQWdlbnQgaW5zdGFuY2UgLyBKUyBwYXJ0IGFyZSBpbnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2gu
IEFnZW50J3MgbGlmZXRpbWUgaXMgZXF1YWwKKyAgICAgICAgdG8gdGhlIGZyb250LWVuZCdzLiBU
aGlzIG5ldyByZXNvdXJjZSBhZ2VudCBkb2VzIG5vdCBoYXZlIHN0YXRlLCBpbnN0ZWFkIGl0IGNv
dmVycyB0d28gZnVuY3Rpb25zOgorICAgICAgICAgMSkgZm9yd2FyZHMgbG9hZGVyIGNsaWVudCBt
ZXNzYWdlcyB0byB0aGUgZnJvbnQtZW5kIDIpIGlzIGNhcGFibGUgb2YgYnVpbGRpbmcgYSB0cmVl
IG9mIGNhY2hlZCByZXNvdXJjZXMuCisgICAgICAgICgxKSBmZWVkcyBuZXR3b3JrIHBhbmVsIHdp
dGggZGF0YSwgKDIpIHNob3dzIHRoZSByZXNvdXJjZSB0cmVlIGluIHRoZSBuZXcgUmVzb3VyY2Vz
UGFuZWwgY29uY2VwdC4KKyAgICAgICAgVGhpcyBidWcgaXMgZm9yIGV4dHJhY3RpbmcgdGhpcyBu
ZXcgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCBjbGFzcyBhbmQgaXRzIGphdmFzY3JpcHQgY291bnRl
cnBhcnQuCisgICAgICAgIE9uY2UgcmVzb3VyY2VzIHBhbmVsIGlzIHJlZmFjdG9yZWQgZm9yIHRo
ZSBuZXcgY29uY2VwdCwgSW5zcGVjdG9yUmVzb3VyY2UsIEluc3BlY3RvckNvbnRyb2xsZXIncwor
ICAgICAgICByZXNvdXJjZS1yZWxhdGVkIHJvdXRpbmVzLCBpbnNwZWN0b3IuanMncyBjb2RlIGRl
YWxpbmcgd2l0aCByZXNvdXJjZXMsIHRoZXkgYWxsIHdpbGwgYmUgZ29uZS4KKworICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6ZGlkUmVjZWl2ZU1hbmlmZXN0UmVzcG9uc2UpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmZyYW1lRGV0YWNoZWRGcm9tUGFy
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZExvYWRSZXNv
dXJjZUZyb21NZW1vcnlDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6Om1hcmtSZXNvdXJjZUFzQ2FjaGVkKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRSZWNlaXZlQ29udGVudExlbmd0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRGaW5pc2hMb2FkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEZhaWxMb2FkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlUmV0cmlldmVk
QnlYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzY3JpcHRJbXBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRDcmVhdGVXZWJTb2NrZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNw
b25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDbG9zZVdl
YlNvY2tldCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUmVzb3VyY2U6OnVwZGF0ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNhY2hlZFJlc291cmNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJj
ZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZTo6c291cmNlU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlOjpzb3VyY2VCeXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZTo6ZW5kVGltaW5nKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzb3VyY2VDb250ZW50QmFzZTY0KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OnJlc291cmNlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpjYWNoZWRSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvckhlYWRlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6YnVpbGRPYmplY3RGb3JUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRP
YmplY3RGb3JSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRPYmplY3RG
b3JSZXNvdXJjZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yTWFp
blJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZFJlc291cmNlVHlwZVN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvckNhY2hlZFJlc291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVSZXNvdXJjZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6fkluc3BlY3RvclJlc291cmNlQWdlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6aWRlbnRpZmllckZvcklu
aXRpYWxSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6
OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50OjptYXJrUmVzb3VyY2VBc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRGYWlsTG9hZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRMb2FkUmVzb3VyY2VG
cm9tTWVtb3J5Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6c2V0T3ZlcnJpZGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291
cmNlQWdlbnQ6OmRpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVz
b3VyY2VBZ2VudDo6ZnJhbWVEZXRhY2hlZEZyb21QYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlUmVhZGFibGVTdHJpbmdGcm9tQmluYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclJlc291cmNlQWdlbnQ6OmRpZENyZWF0ZVdlYlNvY2tldCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkUmVjZWl2
ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clJlc291cmNlQWdlbnQ6OmRpZENsb3NlV2ViU29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclJlc291cmNlQWdlbnQ6OmNhY2hlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHls
ZVNoZWV0OjpyZXNvdXJjZVN0eWxlU2hlZXRUZXh0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0V4dGVuc2lvblNlcnZlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FeHRlbnNp
b25TZXJ2ZXIucHJvdG90eXBlLl9vblJldmVhbEFuZFNlbGVjdFJlc291cmNlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLl9vbkdldFJlc291cmNlQ29u
dGVudCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZS5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0IHJlc3BvbnNlUmVjZWl2ZWRU
aW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuc2V0IGVuZFRp
bWUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanM6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLnNldHVwU291cmNlRnJhbWVJZk5lZWRlZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzczoKKyAgICAgICAgKC50YWJiZWQtcGFuZS1oZWFkZXIg
bGkpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IudXBkYXRlUmVzb3VyY2UpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWROb3Rp
Zmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWROb3RpZmllcjo6ZGlzcGF0
Y2hEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdy
b3VwOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorCiAyMDEwLTEwLTE2ICBQYXZlbCBGZWxkbWFuICA8
cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWto
YXRza3kuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IDVjNmMzZDIuLjc4ODA2MDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00NDAzLDYgKzQ0MDMsNyBAQAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvUmVtb3RlT2JqZWN0LmpzJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlLmpzJywKICAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlQ2F0ZWdvcnkuanMnLAorICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VNYW5hZ2VyLmpzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL1Jlc291cmNlVmlldy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9TY29wZUNoYWluU2lkZWJhclBhbmUuanMnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKaW5kZXggZWMyMGFmZi4uYTdjZmY1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCkBAIC02MzY1OCw2ICs2MzY1OCwxMCBAQAogCQkJCQk+DQogCQkJCTwv
RmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxSZXNvdXJjZU1hbmFnZXIuanMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZp
bGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxSZXNvdXJjZXNQ
YW5lbC5qcyINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gYi9XZWJDb3JlL2luc3BlY3Rvci9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnBtCmluZGV4IDEzZTA1YjAuLmE1NjY1NzYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQpAQCAtMjgsNiArMjgsMTEgQEAg
JHR5cGVUcmFuc2Zvcm17IkRlYnVnIn0gPSB7CiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvckRl
YnVnZ2VyQWdlbnQuaCIsCiAgICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250
cm9sbGVyLT5kZWJ1Z2dlckFnZW50KCkiLAogfTsKKyR0eXBlVHJhbnNmb3JteyJSZXNvdXJjZSJ9
ID0geworICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCIsCisgICAgImhl
YWRlciIgPT4gIkluc3BlY3RvclJlc291cmNlQWdlbnQuaCIsCisgICAgImRvbWFpbkFjY2Vzc29y
IiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX3Jlc291cmNlQWdlbnQiLAorfTsKICR0eXBl
VHJhbnNmb3JteyJET00ifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckRPTUFnZW50
IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRE9NQWdlbnQuaCIsCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yLmlkbAppbmRleCBjNDc3M2NmLi5iN2Y0YTBkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwK
QEAgLTExMiw2ICsxMTIsMjUgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBbaGFuZGxlcj1Db250
cm9sbGVyXSB2b2lkIHN0YXJ0VGltZWxpbmVQcm9maWxlcigpOwogICAgICAgICBbaGFuZGxlcj1D
b250cm9sbGVyXSB2b2lkIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CiAKKyAgICAgICAgW2hhbmRs
ZXI9UmVzb3VyY2VdIHZvaWQgY2FjaGVkUmVzb3VyY2VzKG91dCBBcnJheSByZXNvdXJjZXMpOwor
ICAgICAgICBbaGFuZGxlcj1SZXNvdXJjZV0gdm9pZCByZXNvdXJjZUNvbnRlbnQoaW4gdW5zaWdu
ZWQgbG9uZyBmcmFtZUlELCBpbiBTdHJpbmcgdXJsLCBvdXQgU3RyaW5nIGNvbnRlbnQpOworICAg
ICAgICBbbm90aWZ5XSB2b2lkIGlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdChvdXQgbG9uZyBp
ZGVudGlmaWVyLCBvdXQgU3RyaW5nIHVybCwgb3V0IHVuc2lnbmVkIGxvbmcgZnJhbWVJRCwgb3V0
IGJvb2xlYW4gaXNNYWluUmVzb3VyY2UpOworICAgICAgICBbbm90aWZ5XSB2b2lkIHdpbGxTZW5k
UmVxdWVzdChvdXQgbG9uZyBpZGVudGlmaWVyLCBvdXQgZG91YmxlIHRpbWUsIG91dCBPYmplY3Qg
cmVxdWVzdCwgb3V0IE9iamVjdCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICAgICAgW25vdGlmeV0g
dm9pZCBtYXJrUmVzb3VyY2VBc0NhY2hlZChvdXQgbG9uZyBpZGVudGlmaWVyKTsKKyAgICAgICAg
W25vdGlmeV0gdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2Uob3V0IGxvbmcgaWRlbnRpZmllciwgb3V0
IGRvdWJsZSB0aW1lLCBvdXQgU3RyaW5nIHJlc291cmNlVHlwZSwgb3V0IE9iamVjdCByZXNwb25z
ZSk7CisgICAgICAgIFtub3RpZnldIHZvaWQgZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgob3V0IGxv
bmcgaWRlbnRpZmllciwgb3V0IGRvdWJsZSB0aW1lLCBvdXQgbG9uZyBsZW5ndGhSZWNlaXZlZCk7
CisgICAgICAgIFtub3RpZnldIHZvaWQgZGlkRmluaXNoTG9hZGluZyhvdXQgbG9uZyBpZGVudGlm
aWVyLCBvdXQgZG91YmxlIGZpbmlzaFRpbWUpOworICAgICAgICBbbm90aWZ5XSB2b2lkIGRpZEZh
aWxMb2FkaW5nKG91dCBsb25nIGlkZW50aWZpZXIsIG91dCBkb3VibGUgdGltZSwgb3V0IFN0cmlu
ZyBsb2NhbGl6ZWREZXNjcmlwdGlvbik7CisgICAgICAgIFtub3RpZnldIHZvaWQgZGlkTG9hZFJl
c291cmNlRnJvbU1lbW9yeUNhY2hlKG91dCBkb3VibGUgdGltZSwgb3V0IHVuc2lnbmVkIGxvbmcg
ZnJhbWVJRCwgb3V0IE9iamVjdCByZXNvdXJjZSk7CisgICAgICAgIFtub3RpZnldIHZvaWQgc2V0
T3ZlcnJpZGVDb250ZW50KG91dCBsb25nIGlkZW50aWZpZXIsIG91dCBTdHJpbmcgc291cmNlU3Ry
aW5nLCBvdXQgU3RyaW5nIHR5cGUpOworICAgICAgICBbbm90aWZ5XSB2b2lkIGRpZENvbW1pdExv
YWQob3V0IHVuc2lnbmVkIGxvbmcgZnJhbWVJRCk7CisgICAgICAgIFtub3RpZnldIHZvaWQgZnJh
bWVEZXRhY2hlZEZyb21QYXJlbnQob3V0IHVuc2lnbmVkIGxvbmcgZnJhbWVJRCk7CisKKyAgICAg
ICAgW25vdGlmeV0gdm9pZCBkaWRDcmVhdGVXZWJTb2NrZXQob3V0IHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgb3V0IFN0cmluZyByZXF1ZXN0VVJMKTsKKyAgICAgICAgW25vdGlmeV0gdm9pZCB3
aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3Qob3V0IHVuc2lnbmVkIGxvbmcgaWRlbnRp
Zmllciwgb3V0IGRvdWJsZSB0aW1lLCBvdXQgT2JqZWN0IHJlcXVlc3QpOworICAgICAgICBbbm90
aWZ5XSB2b2lkIGRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZShvdXQgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBvdXQgZG91YmxlIHRpbWUsIG91dCBPYmplY3QgcmVzcG9uc2Up
OworICAgICAgICBbbm90aWZ5XSB2b2lkIGRpZENsb3NlV2ViU29ja2V0KG91dCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIG91dCBkb3VibGUgdGltZSk7CisKICNpZiBkZWZpbmVkKEVOQUJMRV9K
QVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUgogICAgICAg
ICBbaGFuZGxlcj1CYWNrZW5kXSB2b2lkIGVuYWJsZURlYnVnZ2VyKGluIGJvb2xlYW4gYWx3YXlz
KTsKICAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBkaXNhYmxlRGVidWdnZXIoaW4g
Ym9vbGVhbiBhbHdheXMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKaW5kZXggOTE4NjQzYi4uY2VkNjFjNSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3Bw
CkBAIC00OCw3ICs0OCw3IEBAIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6SW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50KEluc3BlY3RvckNvbnRyb2xsCiAKIHZvaWQgSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpkaWRSZWNlaXZlTWFuaWZlc3RSZXNwb25zZSh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQog
ewotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGlkZW50aWZp
ZXIsIHJlc3BvbnNlKTsKKyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpZFJlY2VpdmVSZXNw
b25zZShpZGVudGlmaWVyLCAwLCByZXNwb25zZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50Ojp1cGRhdGVBcHBsaWNhdGlvbkNhY2hlU3RhdHVzKEFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjpTdGF0dXMgc3RhdHVzKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcAppbmRleCA0ZDgzOTI5Li44NDcyYWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgIkluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkluc3BlY3RvclByb2ZpbGVyQWdlbnQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvclJl
c291cmNlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIklu
c3BlY3RvclN0b3JhZ2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclRpbWVsaW5lQWdlbnQu
aCIKQEAgLTQ5OSw2ICs1MDAsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RG
cm9udGVuZCgpCiAgICAgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKICAgICBtX2Zy
b250ZW5kID0gbmV3IEluc3BlY3RvckZyb250ZW5kKG1fY2xpZW50KTsKICAgICBtX2RvbUFnZW50
ID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2Nzc1N0b3JlLmdldCgpLCBtX2Zyb250ZW5k
LmdldCgpKTsKKyAgICAvLyBGSVhNRTogZW5hYmxlIHJlc291cmNlIGFnZW50IG9uY2UgZnJvbnQt
ZW5kIGlzIHJlYWR5LgorICAgIC8vIG1fcmVzb3VyY2VBZ2VudCA9IEluc3BlY3RvclJlc291cmNl
QWdlbnQ6OmNyZWF0ZShtX2luc3BlY3RlZFBhZ2UsIG1fZnJvbnRlbmQuZ2V0KCkpOwogCiAjaWYg
RU5BQkxFKERBVEFCQVNFKQogICAgIG1fc3RvcmFnZUFnZW50ID0gSW5zcGVjdG9yU3RvcmFnZUFn
ZW50OjpjcmVhdGUobV9mcm9udGVuZC5nZXQoKSk7CkBAIC02MDgsNiArNjExLDggQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQoKQogCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCkKIHsKKyAgICBtX3Jl
c291cmNlQWdlbnQuY2xlYXIoKTsKKwogICAgIC8vIG1fZG9tQWdlbnQgaXMgUmVmUHRyLiBSZW1v
dmUgRE9NIGxpc3RlbmVycyBmaXJzdCB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmUKICAgICAvLyBu
byByZWZlcmVuY2VzIHRvIHRoZSBET00gYWdlbnQgZnJvbSB0aGUgRE9NIHRyZWUuCiAgICAgaWYg
KG1fZG9tQWdlbnQpCkBAIC03NDgsNiArNzUzLDkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgaWYgKCFlbmFibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChtX3Jlc291cmNlQWdlbnQpCisgICAgICAg
IG1fcmVzb3VyY2VBZ2VudC0+ZGlkQ29tbWl0TG9hZChsb2FkZXIpOworCiAgICAgQVNTRVJUKG1f
aW5zcGVjdGVkUGFnZSk7CiAKICAgICBpZiAobG9hZGVyLT5mcmFtZSgpID09IG1faW5zcGVjdGVk
UGFnZS0+bWFpbkZyYW1lKCkpIHsKQEAgLTgyMiw2ICs4MzAsMTAgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpmcmFtZURldGFjaGVkRnJvbVBhcmVudChGcmFtZSogZnJhbWUpCiB7CiAgICAg
aWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3Jlc291cmNlQWdl
bnQpCisgICAgICAgIG1fcmVzb3VyY2VBZ2VudC0+ZnJhbWVEZXRhY2hlZEZyb21QYXJlbnQoZnJh
bWUpOworCiAgICAgaWYgKFJlc291cmNlc01hcCogcmVzb3VyY2VNYXAgPSBtX2ZyYW1lUmVzb3Vy
Y2VzLmdldChmcmFtZSkpCiAgICAgICAgIHJlbW92ZUFsbFJlc291cmNlcyhyZXNvdXJjZU1hcCk7
CiB9CkBAIC04OTYsNiArOTA4LDkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRMb2Fk
UmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwKICAgICBpZiAo
IWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkK
KyAgICAgICAgbV9yZXNvdXJjZUFnZW50LT5kaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUo
bG9hZGVyLCBjYWNoZWRSZXNvdXJjZSk7CisKICAgICAvLyBJZiB0aGUgcmVzb3VyY2UgVVJMIGlz
IGFscmVhZHkga25vd24sIHdlIGRvbid0IG5lZWQgdG8gYWRkIGl0IGFnYWluIHNpbmNlIHRoaXMg
aXMganVzdCBhIGNhY2hlZCBsb2FkLgogICAgIGlmIChtX2tub3duUmVzb3VyY2VzLmNvbnRhaW5z
KGNhY2hlZFJlc291cmNlLT51cmwoKSkpCiAgICAgICAgIHJldHVybjsKQEAgLTkyNiw2ICs5NDEs
MTAgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVl
c3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLAogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2Up
OwogCiAgICAgYm9vbCBpc01haW5SZXNvdXJjZSA9IGlzTWFpblJlc291cmNlTG9hZGVyKGxvYWRl
ciwgcmVxdWVzdC51cmwoKSk7CisKKyAgICBpZiAobV9yZXNvdXJjZUFnZW50KQorICAgICAgICBt
X3Jlc291cmNlQWdlbnQtPmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdChpZGVudGlmaWVyLCBy
ZXF1ZXN0LnVybCgpLCBsb2FkZXIsIGlzTWFpblJlc291cmNlKTsKKwogICAgIGVuc3VyZVNldHRp
bmdzTG9hZGVkKCk7CiAgICAgaWYgKCFpc01haW5SZXNvdXJjZSAmJiAhcmVzb3VyY2VUcmFja2lu
Z0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTc3LDYgKzk5Niw5IEBAIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgUmVzb3VyY2VSZXF1CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIGlmIChtX3Jlc291cmNlQWdlbnQpCisgICAgICAgIG1fcmVzb3VyY2VBZ2VudC0+d2lsbFNl
bmRSZXF1ZXN0KGlkZW50aWZpZXIsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworCiAgICAg
Ym9vbCBpc01haW5SZXNvdXJjZSA9IChtX21haW5SZXNvdXJjZSAmJiBtX21haW5SZXNvdXJjZS0+
aWRlbnRpZmllcigpID09IGlkZW50aWZpZXIpOwogICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCiAg
ICAgICAgIG1fdGltZWxpbmVBZ2VudC0+d2lsbFNlbmRSZXNvdXJjZVJlcXVlc3QoaWRlbnRpZmll
ciwgaXNNYWluUmVzb3VyY2UsIHJlcXVlc3QpOwpAQCAtMTAyMywxNSArMTA0NSwyMSBAQCB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6Om1hcmtSZXNvdXJjZUFzQ2FjaGVkKHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllcikKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAg
aWYgKG1fcmVzb3VyY2VBZ2VudCkKKyAgICAgICAgbV9yZXNvdXJjZUFnZW50LT5tYXJrUmVzb3Vy
Y2VBc0NhY2hlZChpZGVudGlmaWVyKTsKKwogICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yUmVzb3Vy
Y2U+IHJlc291cmNlID0gZ2V0VHJhY2tlZFJlc291cmNlKGlkZW50aWZpZXIpKQogICAgICAgICBy
ZXNvdXJjZS0+bWFya0FzQ2FjaGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlY2Vp
dmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIGlmICghZW5hYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAobV9yZXNvdXJjZUFnZW50KQorICAgICAg
ICBtX3Jlc291cmNlQWdlbnQtPmRpZFJlY2VpdmVSZXNwb25zZShpZGVudGlmaWVyLCBsb2FkZXIs
IHJlc3BvbnNlKTsKKwogICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+IHJlc291cmNl
ID0gZ2V0VHJhY2tlZFJlc291cmNlKGlkZW50aWZpZXIpKSB7CiAgICAgICAgIHJlc291cmNlLT51
cGRhdGVSZXNwb25zZShyZXNwb25zZSk7CiAKQEAgLTEwNDksNiArMTA3Nyw5IEBAIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBpbnQKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKKyAgICAgICAgbV9yZXNvdXJjZUFnZW50LT5kaWRSZWNl
aXZlQ29udGVudExlbmd0aChpZGVudGlmaWVyLCBsZW5ndGhSZWNlaXZlZCk7CisKICAgICBSZWZQ
dHI8SW5zcGVjdG9yUmVzb3VyY2U+IHJlc291cmNlID0gZ2V0VHJhY2tlZFJlc291cmNlKGlkZW50
aWZpZXIpOwogICAgIGlmICghcmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNjQsNiAr
MTA5NSw5IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pCiAgICAgaWYgKCFlbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIGlmIChtX3Jlc291cmNlQWdlbnQpCisgICAgICAgIG1fcmVz
b3VyY2VBZ2VudC0+ZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyLCBmaW5pc2hUaW1lKTsKKwog
ICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCiAgICAgICAgIG1fdGltZWxpbmVBZ2VudC0+ZGlkRmlu
aXNoTG9hZGluZ1Jlc291cmNlKGlkZW50aWZpZXIsIGZhbHNlLCBmaW5pc2hUaW1lKTsKIApAQCAt
MTA4Myw2ICsxMTE3LDkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRGYWlsTG9hZGlu
Zyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmMKICAgICBpZiAoIWVuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKKyAgICAg
ICAgbV9yZXNvdXJjZUFnZW50LT5kaWRGYWlsTG9hZGluZyhpZGVudGlmaWVyLCBlcnJvcik7CisK
ICAgICBpZiAobV90aW1lbGluZUFnZW50KQogICAgICAgICBtX3RpbWVsaW5lQWdlbnQtPmRpZEZp
bmlzaExvYWRpbmdSZXNvdXJjZShpZGVudGlmaWVyLCB0cnVlLCAwKTsKIApAQCAtMTEwOCw2ICsx
MTQ1LDkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1M
SHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGkKICAgICBpZiAoIWVuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKKyAgICAgICAgbV9yZXNv
dXJjZUFnZW50LT5zZXRPdmVycmlkZUNvbnRlbnQoaWRlbnRpZmllciwgc291cmNlU3RyaW5nLCBJ
bnNwZWN0b3JSZXNvdXJjZTo6WEhSKTsKKwogICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKElu
c3BlY3RvclN0YXRlOjptb25pdG9yaW5nWEhSKSkKICAgICAgICAgYWRkTWVzc2FnZVRvQ29uc29s
ZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsICJYSFIg
ZmluaXNoZWQgbG9hZGluZzogXCIiICsgdXJsICsgIlwiLiIsIHNlbmRMaW5lTnVtYmVyLCBzZW5k
VVJMKTsKIApAQCAtMTEyNiw3ICsxMTY2LDEzIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpCiAK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZykKIHsKLSAgICBpZiAoIWVuYWJs
ZWQoKSB8fCAhcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoKSkKKyAgICBpZiAoIWVuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKKyAgICAgICAgbV9y
ZXNvdXJjZUFnZW50LT5zZXRPdmVycmlkZUNvbnRlbnQoaWRlbnRpZmllciwgc291cmNlU3RyaW5n
LCBJbnNwZWN0b3JSZXNvdXJjZTo6U2NyaXB0KTsKKworICAgIGlmICghcmVzb3VyY2VUcmFja2lu
Z0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW5zcGVjdG9yUmVzb3VyY2UqIHJl
c291cmNlID0gbV9yZXNvdXJjZXMuZ2V0KGlkZW50aWZpZXIpLmdldCgpOwpAQCAtMTQ4Miw2ICsx
NTI4LDkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDcmVhdGVXZWJTb2NrZXQodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBLVVIKICAgICAgICAgcmV0dXJuOwogICAgIEFT
U0VSVChtX2luc3BlY3RlZFBhZ2UpOwogCisgICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKKyAgICAg
ICAgbV9yZXNvdXJjZUFnZW50LT5kaWRDcmVhdGVXZWJTb2NrZXQoaWRlbnRpZmllciwgcmVxdWVz
dFVSTCk7CisKICAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+IHJlc291cmNlID0gSW5zcGVj
dG9yUmVzb3VyY2U6OmNyZWF0ZVdlYlNvY2tldChpZGVudGlmaWVyLCByZXF1ZXN0VVJMLCBkb2N1
bWVudFVSTCk7CiAgICAgYWRkUmVzb3VyY2UocmVzb3VyY2UuZ2V0KCkpOwogCkBAIC0xNDkxLDYg
KzE1NDAsOSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENyZWF0ZVdlYlNvY2tldCh1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUgogCiB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OndpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QmIHJlcXVlc3QpCiB7Cisg
ICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKKyAgICAgICAgbV9yZXNvdXJjZUFnZW50LT53aWxsU2Vu
ZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QoaWRlbnRpZmllciwgcmVxdWVzdCk7CisKICAgICBS
ZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+IHJlc291cmNlID0gZ2V0VHJhY2tlZFJlc291cmNlKGlk
ZW50aWZpZXIpOwogICAgIGlmICghcmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsKQEAgLTE1MDIs
NiArMTU1NCw5IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbFNlbmRXZWJTb2NrZXRI
YW5kc2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpCiAKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UmIHJlc3BvbnNl
KQogeworICAgIGlmIChtX3Jlc291cmNlQWdlbnQpCisgICAgICAgIG1fcmVzb3VyY2VBZ2VudC0+
ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKGlkZW50aWZpZXIsIHJlc3BvbnNl
KTsKKwogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBnZXRUcmFja2Vk
UmVzb3VyY2UoaWRlbnRpZmllcik7CiAgICAgaWYgKCFyZXNvdXJjZSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTUxNSw2ICsxNTcwLDkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRSZWNl
aXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGUKIAogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWRDbG9zZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIpCiB7CisgICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKKyAgICAgICAgbV9yZXNvdXJjZUFn
ZW50LT5kaWRDbG9zZVdlYlNvY2tldChpZGVudGlmaWVyKTsKKwogICAgIFJlZlB0cjxJbnNwZWN0
b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBnZXRUcmFja2VkUmVzb3VyY2UoaWRlbnRpZmllcik7CiAg
ICAgaWYgKCFyZXNvdXJjZSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5oCmluZGV4IDgwZWJjYTEuLjZkNGQ5ZTAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTY4LDYgKzY4LDcgQEAgY2xhc3MgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CiBjbGFzcyBJbnNwZWN0b3JQ
cm9maWxlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CitjbGFzcyBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yU3RhdGU7CiBjbGFzcyBJbnNwZWN0b3JTdG9y
YWdlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OwpAQCAtMTY1LDcgKzE2Niw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
Jik7CiAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNl
KTsKICAgICB2b2lkIG1hcmtSZXNvdXJjZUFzQ2FjaGVkKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
cik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2Uo
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKICAgICB2b2lkIGRpZFJlY2VpdmVDb250ZW50TGVuZ3RoKHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgaW50IGxlbmd0aFJlY2VpdmVkKTsKICAgICB2b2lkIGRpZEZpbmlzaExv
YWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSk7CiAgICAg
dm9pZCBkaWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291
cmNlRXJyb3ImKTsKQEAgLTM0NCw2ICszNDUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9vcGVu
aW5nRnJvbnRlbmQ7CiAgICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBtX2Zyb250ZW5kOwog
ICAgIFJlZlB0cjxJbnNwZWN0b3JET01BZ2VudD4gbV9kb21BZ2VudDsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yUmVzb3VyY2VBZ2VudD4gbV9yZXNvdXJjZUFnZW50OwogICAgIFJlZlB0cjxJbnNwZWN0
b3JTdG9yYWdlQWdlbnQ+IG1fc3RvcmFnZUFnZW50OwogICAgIE93blB0cjxJbnNwZWN0b3JDU1NT
dG9yZT4gbV9jc3NTdG9yZTsKICAgICBPd25QdHI8SW5zcGVjdG9yVGltZWxpbmVBZ2VudD4gbV90
aW1lbGluZUFnZW50OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVz
b3VyY2UuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCmluZGV4
IDVhNmNhYWQuLmYxYjI3MGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clJlc291cmNlLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5j
cHAKQEAgLTE4OSwxMiArMTg5LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZTo6dXBkYXRlUmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiAgICAgbV9jb25uZWN0aW9u
UmV1c2VkID0gcmVzcG9uc2UuY29ubmVjdGlvblJldXNlZCgpOwogICAgIG1fbG9hZFRpbWluZyA9
IHJlc3BvbnNlLnJlc291cmNlTG9hZFRpbWluZygpOwogICAgIG1fY2FjaGVkID0gbV9jYWNoZWQg
fHwgcmVzcG9uc2Uud2FzQ2FjaGVkKCk7Ci0KLSAgICBpZiAoIW1fY2FjaGVkICYmIG1fbG9hZFRp
bWluZyAmJiBtX2xvYWRUaW1pbmctPnJlcXVlc3RUaW1lKQotICAgICAgICBtX3Jlc3BvbnNlUmVj
ZWl2ZWRUaW1lID0gbV9sb2FkVGltaW5nLT5yZXF1ZXN0VGltZSArIG1fbG9hZFRpbWluZy0+cmVj
ZWl2ZUhlYWRlcnNFbmQgLyAxMDAwLjA7Ci0gICAgZWxzZQotICAgICAgICBtX3Jlc3BvbnNlUmVj
ZWl2ZWRUaW1lID0gY3VycmVudFRpbWUoKTsKLQorICAgIG1fcmVzcG9uc2VSZWNlaXZlZFRpbWUg
PSBjdXJyZW50VGltZSgpOwogICAgIG1fY2hhbmdlcy5zZXQoVGltaW5nQ2hhbmdlKTsKICAgICBt
X2NoYW5nZXMuc2V0KFJlc3BvbnNlQ2hhbmdlKTsKICAgICBtX2NoYW5nZXMuc2V0KFR5cGVDaGFu
Z2UpOwpAQCAtMzQwLDYgKzMzNSwyOCBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlOjpyZWxlYXNl
U2NyaXB0T2JqZWN0KEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICAgICAgZnJvbnRl
bmQtPnJlbW92ZVJlc291cmNlKG1faWRlbnRpZmllcik7CiB9CiAKK3N0YXRpYyBJbnNwZWN0b3JS
ZXNvdXJjZTo6VHlwZSBjYWNoZWRSZXNvdXJjZVR5cGUoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJl
c291cmNlKQoreworICAgIGlmICghY2FjaGVkUmVzb3VyY2UpCisgICAgICAgIHJldHVybiBJbnNw
ZWN0b3JSZXNvdXJjZTo6T3RoZXI7CisKKyAgICBzd2l0Y2ggKGNhY2hlZFJlc291cmNlLT50eXBl
KCkpIHsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgorICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yUmVzb3VyY2U6OkltYWdlOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkZvbnRSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIEluc3BlY3RvclJlc291cmNlOjpGb250Owor
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisjaWYgRU5BQkxFKFhTTFQp
CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKKyNlbmRpZgorICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yUmVzb3VyY2U6OlN0eWxlc2hlZXQ7CisgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6U2NyaXB0OgorICAgICAgICByZXR1cm4gSW5zcGVjdG9yUmVzb3VyY2U6OlNjcmlw
dDsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gSW5zcGVjdG9yUmVzb3VyY2U6Ok90aGVy
OworICAgIH0KK30KKwogSW5zcGVjdG9yUmVzb3VyY2U6OlR5cGUgSW5zcGVjdG9yUmVzb3VyY2U6
OnR5cGUoKSBjb25zdAogewogICAgIGlmICghbV9vdmVycmlkZUNvbnRlbnQuaXNOdWxsKCkpCkBA
IC0zNTgsNyArMzc1LDcgQEAgSW5zcGVjdG9yUmVzb3VyY2U6OlR5cGUgSW5zcGVjdG9yUmVzb3Vy
Y2U6OnR5cGUoKSBjb25zdAogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIE90aGVy
OwogCi0gICAgSW5zcGVjdG9yUmVzb3VyY2U6OlR5cGUgcmVzb3VyY2VUeXBlID0gSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlKG1fZnJhbWUtPmRvY3VtZW50KCksIG1f
cmVxdWVzdFVSTCk7CisgICAgSW5zcGVjdG9yUmVzb3VyY2U6OlR5cGUgcmVzb3VyY2VUeXBlID0g
Y2FjaGVkUmVzb3VyY2VUeXBlKEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmNhY2hlZFJlc291cmNl
KG1fZnJhbWUuZ2V0KCksIG1fcmVxdWVzdFVSTCkpOwogICAgIGlmIChlcXVhbElnbm9yaW5nRnJh
Z21lbnRJZGVudGlmaWVyKG1fcmVxdWVzdFVSTCwgbV9sb2FkZXItPnJlcXVlc3RVUkwoKSkgJiYg
cmVzb3VyY2VUeXBlID09IE90aGVyKQogICAgICAgICByZXR1cm4gRG9jOwogCkBAIC0zNzgsNyAr
Mzk1LDcgQEAgU3RyaW5nIEluc3BlY3RvclJlc291cmNlOjpzb3VyY2VTdHJpbmcoKSBjb25zdAog
ICAgICAgICByZXR1cm4gU3RyaW5nKG1fb3ZlcnJpZGVDb250ZW50KTsKIAogICAgIFN0cmluZyBy
ZXN1bHQ7Ci0gICAgaWYgKCFJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQo
bV9mcmFtZS0+ZG9jdW1lbnQoKSwgbV9yZXF1ZXN0VVJMLCAmcmVzdWx0KSkKKyAgICBpZiAoIUlu
c3BlY3RvclJlc291cmNlQWdlbnQ6OnJlc291cmNlQ29udGVudChtX2ZyYW1lLmdldCgpLCBtX3Jl
cXVlc3RVUkwsICZyZXN1bHQpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KQEAgLTM5NSw3ICs0MTIsNyBAQCBTdHJpbmcgSW5zcGVjdG9yUmVzb3VyY2U6
OnNvdXJjZUJ5dGVzKCkgY29uc3QKICAgICB9CiAKICAgICBTdHJpbmcgcmVzdWx0OwotICAgIGlm
ICghSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzb3VyY2VDb250ZW50QmFzZTY0KG1fZnJhbWUt
PmRvY3VtZW50KCksIG1fcmVxdWVzdFVSTCwgJnJlc3VsdCkpCisgICAgaWYgKCFJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OjpyZXNvdXJjZUNvbnRlbnRCYXNlNjQobV9mcmFtZS5nZXQoKSwgbV9yZXF1
ZXN0VVJMLCAmcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC00MDgsMTQgKzQyNSw5IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2U6OnN0
YXJ0VGltaW5nKCkKIAogdm9pZCBJbnNwZWN0b3JSZXNvdXJjZTo6ZW5kVGltaW5nKGRvdWJsZSBh
Y3R1YWxFbmRUaW1lKQogewotICAgIGlmIChhY3R1YWxFbmRUaW1lKSB7CisgICAgaWYgKGFjdHVh
bEVuZFRpbWUpCiAgICAgICAgIG1fZW5kVGltZSA9IGFjdHVhbEVuZFRpbWU7Ci0gICAgICAgIC8v
IEluIGNhc2Ugb2YgZmFzdCBsb2FkIChvciBpbiBjYXNlIG9mIGNhY2hlZCByZXNvdXJjZXMpLCBl
bmRUaW1lIG9uIG5ldHdvcmsgc3RhY2sKLSAgICAgICAgLy8gY2FuIGJlIGxlc3MgdGhlbiBtX3Jl
c3BvbnNlUmVjZWl2ZWRUaW1lIG1lYXN1cmVkIGluIFdlYkNvcmUuIE5vcm1hbGl6ZSBpdCBoZXJl
LAotICAgICAgICAvLyBwcmVmZXIgYWN0dWFsRW5kVGltZSB0byBtX3Jlc3BvbnNlUmVjZWl2ZWRU
aW1lLgotICAgICAgICBpZiAobV9lbmRUaW1lIDwgbV9yZXNwb25zZVJlY2VpdmVkVGltZSkKLSAg
ICAgICAgICAgIG1fcmVzcG9uc2VSZWNlaXZlZFRpbWUgPSBtX2VuZFRpbWU7Ci0gICAgfSBlbHNl
CisgICAgZWxzZQogICAgICAgICBtX2VuZFRpbWUgPSBjdXJyZW50VGltZSgpOwogCiAgICAgbV9m
aW5pc2hlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdl
bnQuY3BwCmluZGV4IGUzOWM1MTguLmM3MWZhNzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlQWdlbnQuY3BwCkBAIC0zOSwyMyArMzksMzUgQEAKICNpbmNsdWRlICJE
b2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJv
bnRlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJLVVJMLmgi
CisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1
ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5j
bHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVz
dC5oIgorI2luY2x1ZGUgIldlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlLmgiCiAKKyNpbmNsdWRl
IDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVmZmVyLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzb3VyY2VD
b250ZW50KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBTdHJpbmcqIHJlc3Vs
dCkKK2Jvb2wgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzb3VyY2VDb250ZW50KEZyYW1lKiBm
cmFtZSwgY29uc3QgS1VSTCYgdXJsLCBTdHJpbmcqIHJlc3VsdCkKIHsKLSAgICBpZiAoIWRvY3Vt
ZW50KQorICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFN0cmlu
ZyB0ZXh0RW5jb2RpbmdOYW1lOwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IElu
c3BlY3RvclJlc291cmNlQWdlbnQ6OnJlc291cmNlRGF0YShkb2N1bWVudCwgdXJsLCAmdGV4dEVu
Y29kaW5nTmFtZSk7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudDo6cmVzb3VyY2VEYXRhKGZyYW1lLCB1cmwsICZ0ZXh0RW5jb2RpbmdOYW1l
KTsKIAogICAgIGlmIChidWZmZXIpIHsKICAgICAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nKHRl
eHRFbmNvZGluZ05hbWUpOwpAQCAtNjgsMTEgKzgwLDExIEBAIGJvb2wgSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDo6cmVzb3VyY2VDb250ZW50KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEluc3BlY3RvclJlc291cmNlQWdlbnQ6
OnJlc291cmNlQ29udGVudEJhc2U2NChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgU3RyaW5nKiByZXN1bHQpCitib29sIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnJlc291cmNl
Q29udGVudEJhc2U2NChGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nKiByZXN1
bHQpCiB7CiAgICAgVmVjdG9yPGNoYXI+IG91dDsKICAgICBTdHJpbmcgdGV4dEVuY29kaW5nTmFt
ZTsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6cmVzb3VyY2VEYXRhKGRvY3VtZW50LCB1cmwsICZ0ZXh0RW5jb2RpbmdOYW1lKTsKKyAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzb3Vy
Y2VEYXRhKGZyYW1lLCB1cmwsICZ0ZXh0RW5jb2RpbmdOYW1lKTsKICAgICBpZiAoIWRhdGEpIHsK
ICAgICAgICAgKnJlc3VsdCA9IFN0cmluZygpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04
MywxNiArOTUsMTYgQEAgYm9vbCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXNvdXJjZUNvbnRl
bnRCYXNlNjQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVIKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnJl
c291cmNlRGF0YShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nKiB0
ZXh0RW5jb2RpbmdOYW1lKQorUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IEluc3BlY3RvclJlc291
cmNlQWdlbnQ6OnJlc291cmNlRGF0YShGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCwgU3Ry
aW5nKiB0ZXh0RW5jb2RpbmdOYW1lKQogewotICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9
IGRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKTsKKyAgICBGcmFtZUxvYWRlciogZnJhbWVMb2Fk
ZXIgPSBmcmFtZS0+bG9hZGVyKCk7CiAgICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGZyYW1l
TG9hZGVyLT5kb2N1bWVudExvYWRlcigpOwogICAgIGlmIChlcXVhbElnbm9yaW5nRnJhZ21lbnRJ
ZGVudGlmaWVyKHVybCwgbG9hZGVyLT51cmwoKSkpIHsKLSAgICAgICAgKnRleHRFbmNvZGluZ05h
bWUgPSBkb2N1bWVudC0+aW5wdXRFbmNvZGluZygpOworICAgICAgICAqdGV4dEVuY29kaW5nTmFt
ZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5pbnB1dEVuY29kaW5nKCk7CiAgICAgICAgIHJldHVybiBm
cmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+bWFpblJlc291cmNlRGF0YSgpOwogICAgIH0K
IAotICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IEluc3BlY3RvclJlc291cmNl
QWdlbnQ6OmNhY2hlZFJlc291cmNlKGRvY3VtZW50LCB1cmwpOworICAgIENhY2hlZFJlc291cmNl
KiBjYWNoZWRSZXNvdXJjZSA9IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmNhY2hlZFJlc291cmNl
KGZyYW1lLCB1cmwpOwogICAgIGlmICghY2FjaGVkUmVzb3VyY2UpCiAgICAgICAgIHJldHVybiAw
OwogCkBAIC0xMTEsMzYgKzEyMywzMDYgQEAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IEluc3Bl
Y3RvclJlc291cmNlQWdlbnQ6OnJlc291cmNlRGF0YShEb2N1bWVudCogZG9jdW1lbnQKICAgICBy
ZXR1cm4gY2FjaGVkUmVzb3VyY2UtPmRhdGEoKTsKIH0KIAotSW5zcGVjdG9yUmVzb3VyY2U6OlR5
cGUgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorQ2FjaGVkUmVzb3VyY2UqIEluc3BlY3RvclJlc291
cmNlQWdlbnQ6OmNhY2hlZFJlc291cmNlKEZyYW1lKiBmcmFtZSwgY29uc3QgS1VSTCYgdXJsKQog
ewotICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IEluc3BlY3RvclJlc291cmNl
QWdlbnQ6OmNhY2hlZFJlc291cmNlKGRvY3VtZW50LCB1cmwpOworICAgIGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nID0gdXJsLnN0cmluZygpOworICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNv
dXJjZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5jYWNoZWRS
ZXNvdXJjZSh1cmxTdHJpbmcpOwogICAgIGlmICghY2FjaGVkUmVzb3VyY2UpCi0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3JSZXNvdXJjZTo6T3RoZXI7CisgICAgICAgIGNhY2hlZFJlc291cmNlID0g
Y2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwodXJsU3RyaW5nKTsKKyAgICByZXR1cm4gY2FjaGVkUmVz
b3VyY2U7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmpl
Y3RGb3JIZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMpCit7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gaGVhZGVyc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQo
KTsKKyAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGhlYWRlcnNPYmplY3QtPnNldFN0cmlu
ZyhpdC0+Zmlyc3Quc3RyaW5nKCksIGl0LT5zZWNvbmQpOworICAgIHJldHVybiBoZWFkZXJzT2Jq
ZWN0OworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0
Rm9yVGltaW5nKGNvbnN0IFJlc291cmNlTG9hZFRpbWluZyYgdGltaW5nKQoreworICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHRpbWluZ09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgdGltaW5nT2JqZWN0LT5zZXROdW1iZXIoInJlcXVlc3RUaW1lIiwgdGltaW5nLnJl
cXVlc3RUaW1lKTsKKyAgICB0aW1pbmdPYmplY3QtPnNldE51bWJlcigicHJveHlTdGFydCIsIHRp
bWluZy5wcm94eVN0YXJ0KTsKKyAgICB0aW1pbmdPYmplY3QtPnNldE51bWJlcigicHJveHlFbmQi
LCB0aW1pbmcucHJveHlFbmQpOworICAgIHRpbWluZ09iamVjdC0+c2V0TnVtYmVyKCJkbnNTdGFy
dCIsIHRpbWluZy5kbnNTdGFydCk7CisgICAgdGltaW5nT2JqZWN0LT5zZXROdW1iZXIoImRuc0Vu
ZCIsIHRpbWluZy5kbnNFbmQpOworICAgIHRpbWluZ09iamVjdC0+c2V0TnVtYmVyKCJjb25uZWN0
U3RhcnQiLCB0aW1pbmcuY29ubmVjdFN0YXJ0KTsKKyAgICB0aW1pbmdPYmplY3QtPnNldE51bWJl
cigiY29ubmVjdEVuZCIsIHRpbWluZy5jb25uZWN0RW5kKTsKKyAgICB0aW1pbmdPYmplY3QtPnNl
dE51bWJlcigic3NsU3RhcnQiLCB0aW1pbmcuc3NsU3RhcnQpOworICAgIHRpbWluZ09iamVjdC0+
c2V0TnVtYmVyKCJzc2xFbmQiLCB0aW1pbmcuc3NsRW5kKTsKKyAgICB0aW1pbmdPYmplY3QtPnNl
dE51bWJlcigic2VuZFN0YXJ0IiwgdGltaW5nLnNlbmRTdGFydCk7CisgICAgdGltaW5nT2JqZWN0
LT5zZXROdW1iZXIoInNlbmRFbmQiLCB0aW1pbmcuc2VuZEVuZCk7CisgICAgdGltaW5nT2JqZWN0
LT5zZXROdW1iZXIoInJlY2VpdmVIZWFkZXJzRW5kIiwgdGltaW5nLnJlY2VpdmVIZWFkZXJzRW5k
KTsKKyAgICByZXR1cm4gdGltaW5nT2JqZWN0OworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICByZXF1ZXN0T2JqZWN0LT5z
ZXRTdHJpbmcoInVybCIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpOworICAgIHJlcXVlc3RPYmpl
Y3QtPnNldFN0cmluZygiaHR0cE1ldGhvZCIsIHJlcXVlc3QuaHR0cE1ldGhvZCgpKTsKKyAgICBy
ZXF1ZXN0T2JqZWN0LT5zZXRPYmplY3QoImh0dHBIZWFkZXJGaWVsZHMiLCBidWlsZE9iamVjdEZv
ckhlYWRlcnMocmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKTsKKyAgICBpZiAocmVxdWVzdC5o
dHRwQm9keSgpICYmICFyZXF1ZXN0Lmh0dHBCb2R5KCktPmlzRW1wdHkoKSkKKyAgICAgICAgcmVx
dWVzdE9iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0Rm9ybURhdGEiLCByZXF1ZXN0Lmh0dHBCb2R5
KCktPmZsYXR0ZW5Ub1N0cmluZygpKTsKKyAgICByZXR1cm4gcmVxdWVzdE9iamVjdDsKK30KIAot
ICAgIHN3aXRjaCAoY2FjaGVkUmVzb3VyY2UtPnR5cGUoKSkgeworc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzcG9uc2VPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChyZXNw
b25zZS5pc051bGwoKSkgeworICAgICAgICByZXNwb25zZU9iamVjdC0+c2V0Qm9vbGVhbigiaXNO
dWxsIiwgdHJ1ZSk7CisgICAgICAgIHJldHVybiByZXNwb25zZU9iamVjdDsKKyAgICB9CisgICAg
cmVzcG9uc2VPYmplY3QtPnNldFN0cmluZygidXJsIiwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkp
OworICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgcmVzcG9uc2UubWlt
ZVR5cGUoKSk7CisgICAgcmVzcG9uc2VPYmplY3QtPnNldE51bWJlcigiZXhwZWN0ZWRDb250ZW50
TGVuZ3RoIiwgcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkpOworICAgIHJlc3BvbnNl
T2JqZWN0LT5zZXRTdHJpbmcoInRleHRFbmNvZGluZ05hbWUiLCByZXNwb25zZS50ZXh0RW5jb2Rp
bmdOYW1lKCkpOworICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRTdHJpbmcoInN1Z2dlc3RlZEZpbGVu
YW1lIiwgcmVzcG9uc2Uuc3VnZ2VzdGVkRmlsZW5hbWUoKSk7CisgICAgcmVzcG9uc2VPYmplY3Qt
PnNldE51bWJlcigiaHR0cFN0YXR1c0NvZGUiLCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKTsK
KyAgICByZXNwb25zZU9iamVjdC0+c2V0U3RyaW5nKCJodHRwU3RhdHVzVGV4dCIsIHJlc3BvbnNl
Lmh0dHBTdGF0dXNUZXh0KCkpOworICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRPYmplY3QoImh0dHBI
ZWFkZXJGaWVsZHMiLCBidWlsZE9iamVjdEZvckhlYWRlcnMocmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkcygpKSk7CisgICAgcmVzcG9uc2VPYmplY3QtPnNldEJvb2xlYW4oImNvbm5lY3Rpb25SZXVz
ZWQiLCByZXNwb25zZS5jb25uZWN0aW9uUmV1c2VkKCkpOworICAgIHJlc3BvbnNlT2JqZWN0LT5z
ZXROdW1iZXIoImNvbm5lY3Rpb25JRCIsIHJlc3BvbnNlLmNvbm5lY3Rpb25JRCgpKTsKKyAgICBy
ZXNwb25zZU9iamVjdC0+c2V0Qm9vbGVhbigid2FzQ2FjaGVkIiwgcmVzcG9uc2Uud2FzQ2FjaGVk
KCkpOworICAgIGlmIChyZXNwb25zZS5yZXNvdXJjZUxvYWRUaW1pbmcoKSkKKyAgICAgICAgcmVz
cG9uc2VPYmplY3QtPnNldE9iamVjdCgidGltaW5nIiwgYnVpbGRPYmplY3RGb3JUaW1pbmcoKnJl
c3BvbnNlLnJlc291cmNlTG9hZFRpbWluZygpKSk7CisgICAgaWYgKHJlc3BvbnNlLnJlc291cmNl
UmF3SGVhZGVycygpKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJhd0hlYWRl
cnNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICByYXdIZWFkZXJz
T2JqZWN0LT5zZXRPYmplY3QoInJlcXVlc3RIZWFkZXJzIiwgYnVpbGRPYmplY3RGb3JIZWFkZXJz
KHJlc3BvbnNlLnJlc291cmNlUmF3SGVhZGVycygpLT5yZXF1ZXN0SGVhZGVycykpOworICAgICAg
ICByYXdIZWFkZXJzT2JqZWN0LT5zZXRPYmplY3QoInJlc3BvbnNlSGVhZGVycyIsIGJ1aWxkT2Jq
ZWN0Rm9ySGVhZGVycyhyZXNwb25zZS5yZXNvdXJjZVJhd0hlYWRlcnMoKS0+cmVzcG9uc2VIZWFk
ZXJzKSk7CisgICAgICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRPYmplY3QoInJhd0hlYWRlcnMiLCBy
YXdIZWFkZXJzT2JqZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0OworfQor
CitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yTWFpblJl
c291cmNlKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBm
cmFtZS0+bG9hZGVyKCk7CisgICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGZyYW1lTG9hZGVy
LT5kb2N1bWVudExvYWRlcigpOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzb3Vy
Y2VPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJlc291cmNlT2JqZWN0
LT5zZXRTdHJpbmcoInVybCIsIGxvYWRlci0+dXJsKCkuc3RyaW5nKCkpOworICAgIHJlc291cmNl
T2JqZWN0LT5zZXRTdHJpbmcoImhvc3QiLCBsb2FkZXItPnVybCgpLmhvc3QoKSk7CisgICAgcmVz
b3VyY2VPYmplY3QtPnNldFN0cmluZygicGF0aCIsIGxvYWRlci0+dXJsKCkucGF0aCgpKTsKKyAg
ICByZXNvdXJjZU9iamVjdC0+c2V0U3RyaW5nKCJsYXN0UGF0aENvbXBvbmVudCIsIGxvYWRlci0+
dXJsKCkubGFzdFBhdGhDb21wb25lbnQoKSk7CisgICAgcmVzb3VyY2VPYmplY3QtPnNldFN0cmlu
ZygidHlwZSIsICJEb2N1bWVudCIpOworICAgIHJlc291cmNlT2JqZWN0LT5zZXRPYmplY3QoInJl
cXVlc3QiLCBidWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdChsb2FkZXItPnJlcXVlc3QoKSkp
OworICAgIHJlc291cmNlT2JqZWN0LT5zZXRPYmplY3QoInJlc3BvbnNlIiwgYnVpbGRPYmplY3RG
b3JSZXNvdXJjZVJlc3BvbnNlKGxvYWRlci0+cmVzcG9uc2UoKSkpOworICAgIHJldHVybiByZXNv
dXJjZU9iamVjdDsKK30KKworc3RhdGljIFN0cmluZyBjYWNoZWRSZXNvdXJjZVR5cGVTdHJpbmco
Y29uc3QgQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQoreworICAgIFN0cmluZyB0eXBl
OworICAgIHN3aXRjaCAoY2FjaGVkUmVzb3VyY2UudHlwZSgpKSB7CiAgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3RvclJlc291cmNl
OjpJbWFnZTsKKyAgICAgICAgdHlwZSA9ICJJbWFnZSI7IGJyZWFrOwogICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3RvclJlc291cmNl
OjpGb250OworICAgICAgICB0eXBlID0gIkZvbnQiOyBicmVhazsKICAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpDU1NTdHlsZVNoZWV0OgorICAgICAgICAvLyBGYWxsIHRocm91Z2guCiAjaWYgRU5B
QkxFKFhTTFQpCiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKICNlbmRp
ZgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yUmVzb3VyY2U6OlN0eWxlc2hlZXQ7CisgICAgICAg
IHR5cGUgPSAiU3R5bGVzaGVldCI7IGJyZWFrOwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNj
cmlwdDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3RvclJlc291cmNlOjpTY3JpcHQ7CisgICAgICAg
IHR5cGUgPSAiU2NyaXB0IjsgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIElu
c3BlY3RvclJlc291cmNlOjpPdGhlcjsKKyAgICAgICAgdHlwZSA9ICJPdGhlciI7CiAgICAgfQor
ICAgIHJldHVybiB0eXBlOwogfQogCi1DYWNoZWRSZXNvdXJjZSogSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudDo6Y2FjaGVkUmVzb3VyY2UoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwp
CitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQ2FjaGVk
UmVzb3VyY2UoY29uc3QgQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQoreworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICByZXNvdXJjZU9iamVjdC0+c2V0U3RyaW5nKCJ1cmwiLCBjYWNoZWRSZXNv
dXJjZS51cmwoKSk7CisgICAgcmVzb3VyY2VPYmplY3QtPnNldFN0cmluZygidHlwZSIsIGNhY2hl
ZFJlc291cmNlVHlwZVN0cmluZyhjYWNoZWRSZXNvdXJjZSkpOworICAgIHJlc291cmNlT2JqZWN0
LT5zZXROdW1iZXIoImVuY29kZWRTaXplIiwgY2FjaGVkUmVzb3VyY2UuZW5jb2RlZFNpemUoKSk7
CisgICAgcmVzb3VyY2VPYmplY3QtPnNldE9iamVjdCgicmVzcG9uc2UiLCBidWlsZE9iamVjdEZv
clJlc291cmNlUmVzcG9uc2UoY2FjaGVkUmVzb3VyY2UucmVzcG9uc2UoKSkpOworICAgIHJldHVy
biByZXNvdXJjZU9iamVjdDsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBidWlsZE9iamVjdEZvckZyYW1lUmVzb3VyY2VzKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZVJlc291cmNlcyA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgZnJhbWVSZXNvdXJjZXMtPnNldE51bWJlcigiZnJhbWVJRCIsIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihmcmFtZSkpOworICAgIGZyYW1lUmVzb3VyY2VzLT5zZXRPYmpl
Y3QoIm1haW5SZXNvdXJjZSIsIGJ1aWxkT2JqZWN0Rm9yTWFpblJlc291cmNlKGZyYW1lKSk7Cisg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBzdWJyZXNvdXJjZXMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CisgICAgZnJhbWVSZXNvdXJjZXMtPnNldEFycmF5KCJzdWJyZXNvdXJjZXMiLCBz
dWJyZXNvdXJjZXMpOworCisgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50
UmVzb3VyY2VNYXAmIGFsbFJlc291cmNlcyA9IGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNv
dXJjZUxvYWRlcigpLT5hbGxDYWNoZWRSZXNvdXJjZXMoKTsKKyAgICBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3Vy
Y2VzLmVuZCgpOworICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3Vy
Y2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBpdC0+
c2Vjb25kLmdldCgpOworICAgICAgICBpZiAoY2FjaGVkUmVzb3VyY2UpCisgICAgICAgICAgICBz
dWJyZXNvdXJjZXMtPnB1c2hWYWx1ZShidWlsZE9iamVjdEZvckNhY2hlZFJlc291cmNlKCpjYWNo
ZWRSZXNvdXJjZSkpOworICAgIH0KKyAgICByZXR1cm4gZnJhbWVSZXNvdXJjZXM7Cit9CisKK0lu
c3BlY3RvclJlc291cmNlQWdlbnQ6On5JbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkKK3sKK30KKwor
dm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3Qo
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBLVVJMJiB1cmwsIERvY3VtZW50TG9hZGVy
KiBsb2FkZXIsIGJvb2wgaXNNYWluUmVzb3VyY2UpCit7CisgICAgbV9mcm9udGVuZC0+aWRlbnRp
ZmllckZvckluaXRpYWxSZXF1ZXN0KGlkZW50aWZpZXIsIHVybC5zdHJpbmcoKSwgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KGxvYWRlci0+ZnJhbWUoKSksIGlzTWFpblJlc291cmNlKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFJlcXVlc3QodW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit7CisgICAgbV9mcm9udGVuZC0+d2lsbFNlbmRS
ZXF1ZXN0KGlkZW50aWZpZXIsIGN1cnJlbnRUaW1lKCksIGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VS
ZXF1ZXN0KHJlcXVlc3QpLCBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UocmVkaXJlY3RS
ZXNwb25zZSkpOworfQorCit2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6Om1hcmtSZXNvdXJj
ZUFzQ2FjaGVkKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK3sKKyAgICBtX2Zyb250ZW5kLT5t
YXJrUmVzb3VyY2VBc0NhY2hlZChpZGVudGlmaWVyKTsKK30KKwordm9pZCBJbnNwZWN0b3JSZXNv
dXJjZUFnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBE
b2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
K3sKKyAgICBTdHJpbmcgdHlwZSA9ICJPdGhlciI7CisgICAgaWYgKGxvYWRlcikgeworICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihyZXNwb25zZS51cmwoKSwgbG9h
ZGVyLT5mcmFtZUxvYWRlcigpLT5pY29uVVJMKCkpKQorICAgICAgICAgICAgdHlwZSA9ICJJbWFn
ZSI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJl
c291cmNlID0gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2UobG9hZGVyLT5m
cmFtZSgpLCByZXNwb25zZS51cmwoKSk7CisgICAgICAgICAgICBpZiAoY2FjaGVkUmVzb3VyY2Up
CisgICAgICAgICAgICAgICAgdHlwZSA9IGNhY2hlZFJlc291cmNlVHlwZVN0cmluZygqY2FjaGVk
UmVzb3VyY2UpOworCisgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRp
ZmllcihyZXNwb25zZS51cmwoKSwgbG9hZGVyLT51cmwoKSkgJiYgdHlwZSA9PSAiT3RoZXIiKQor
ICAgICAgICAgICAgICAgIHR5cGUgPSAiRG9jdW1lbnQiOworICAgICAgICB9CisgICAgfQorICAg
IG1fZnJvbnRlbmQtPmRpZFJlY2VpdmVSZXNwb25zZShpZGVudGlmaWVyLCBjdXJyZW50VGltZSgp
LCB0eXBlLCBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UocmVzcG9uc2UpKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRSZWNlaXZlQ29udGVudExlbmd0aCh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBtX2Zyb250
ZW5kLT5kaWRSZWNlaXZlQ29udGVudExlbmd0aChpZGVudGlmaWVyLCBjdXJyZW50VGltZSgpLCBs
ZW5ndGhSZWNlaXZlZCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkRmlu
aXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pc2hUaW1lKQor
eworICAgIGlmICghZmluaXNoVGltZSkKKyAgICAgICAgZmluaXNoVGltZSA9IGN1cnJlbnRUaW1l
KCk7CisKKyAgICBtX2Zyb250ZW5kLT5kaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIsIGZpbmlz
aFRpbWUpOworfQorCit2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZEZhaWxMb2FkaW5n
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7
CisgICAgbV9mcm9udGVuZC0+ZGlkRmFpbExvYWRpbmcoaWRlbnRpZmllciwgY3VycmVudFRpbWUo
KSwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudDo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVy
KiBsb2FkZXIsIGNvbnN0IENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKK3sKKyAgICBGcmFtZSog
ZnJhbWUgPSBsb2FkZXItPmZyYW1lKCk7CisgICAgbV9mcm9udGVuZC0+ZGlkTG9hZFJlc291cmNl
RnJvbU1lbW9yeUNhY2hlKGN1cnJlbnRUaW1lKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihmcmFtZSksIGJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVzb3VyY2UoKnJlc291cmNlKSk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6c2V0T3ZlcnJpZGVDb250ZW50KHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsIEluc3BlY3RvclJl
c291cmNlOjpUeXBlIHR5cGUpCit7CisgICAgU3RyaW5nIHR5cGVTdHJpbmc7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBJbnNwZWN0b3JSZXNvdXJjZTo6WEhSOgorICAgICAgICB0eXBl
U3RyaW5nID0gIlhIUiI7IGJyZWFrOworICAgIGNhc2UgSW5zcGVjdG9yUmVzb3VyY2U6OlNjcmlw
dDoKKyAgICAgICAgdHlwZVN0cmluZyA9ICJTY3JpcHQiOyBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICB0eXBlU3RyaW5nID0gIk90aGVyIjsKKyAgICB9CisKKyAgICBtX2Zyb250ZW5kLT5z
ZXRPdmVycmlkZUNvbnRlbnQoaWRlbnRpZmllciwgc291cmNlU3RyaW5nLCB0eXBlU3RyaW5nKTsK
K30KKwordm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpkaWRDb21taXRMb2FkKERvY3VtZW50
TG9hZGVyKiBsb2FkZXIpCit7CisgICAgRnJhbWUqIGZyYW1lID0gbG9hZGVyLT5mcmFtZSgpOwor
ICAgIG1fZnJvbnRlbmQtPmRpZENvbW1pdExvYWQocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGZyYW1lKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZnJhbWVEZXRhY2hl
ZEZyb21QYXJlbnQoRnJhbWUqIGZyYW1lKQoreworICAgIG1fZnJvbnRlbmQtPmZyYW1lRGV0YWNo
ZWRGcm9tUGFyZW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihmcmFtZSkpOworfQorCisK
KyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKy8vIENyZWF0ZSBodW1hbi1yZWFkYWJsZSBiaW5h
cnkgcmVwcmVzZW50YXRpb24sIGxpa2UgIjAxOjIzOjQ1OjY3Ojg5OkFCOkNEOkVGIi4KK3N0YXRp
YyBTdHJpbmcgY3JlYXRlUmVhZGFibGVTdHJpbmdGcm9tQmluYXJ5KGNvbnN0IHVuc2lnbmVkIGNo
YXIqIHZhbHVlLCBzaXplX3QgbGVuZ3RoKQoreworICAgIEFTU0VSVChsZW5ndGggPiAwKTsKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciBoZXhEaWdpdHNbMTddID0gIjAxMjM0NTY3ODlBQkNERUYiOwor
ICAgIHNpemVfdCBidWZmZXJTaXplID0gbGVuZ3RoICogMyAtIDE7CisgICAgU3RyaW5nQnVmZmVy
IGJ1ZmZlcihidWZmZXJTaXplKTsKKyAgICBzaXplX3QgaW5kZXggPSAwOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGkgPiAwKQorICAgICAg
ICAgICAgYnVmZmVyW2luZGV4KytdID0gJzonOworICAgICAgICBidWZmZXJbaW5kZXgrK10gPSBo
ZXhEaWdpdHNbdmFsdWVbaV0gPj4gNF07CisgICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IGhleERp
Z2l0c1t2YWx1ZVtpXSAmIDB4Rl07CisgICAgfQorICAgIEFTU0VSVChpbmRleCA9PSBidWZmZXJT
aXplKTsKKyAgICByZXR1cm4gU3RyaW5nOjphZG9wdChidWZmZXIpOworfQorCit2b2lkIEluc3Bl
Y3RvclJlc291cmNlQWdlbnQ6OmRpZENyZWF0ZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwpCit7CisgICAgbV9mcm9udGVuZC0+ZGlkQ3Jl
YXRlV2ViU29ja2V0KGlkZW50aWZpZXIsIHJlcXVlc3RVUkwuc3RyaW5nKCkpOworfQorCit2b2lk
IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVz
dCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEhhbmRzaGFrZVJlcXVl
c3QmIHJlcXVlc3QpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdE9iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcmVxdWVzdE9iamVjdC0+c2V0T2Jq
ZWN0KCJ3ZWJTb2NrZXRIZWFkZXJGaWVsZHMiLCBidWlsZE9iamVjdEZvckhlYWRlcnMocmVxdWVz
dC5oZWFkZXJGaWVsZHMoKSkpOworICAgIHJlcXVlc3RPYmplY3QtPnNldFN0cmluZygid2ViU29j
a2V0UmVxdWVzdEtleTMiLCBjcmVhdGVSZWFkYWJsZVN0cmluZ0Zyb21CaW5hcnkocmVxdWVzdC5r
ZXkzKCkudmFsdWUsIHNpemVvZihyZXF1ZXN0LmtleTMoKS52YWx1ZSkpKTsKKyAgICBtX2Zyb250
ZW5kLT53aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QoaWRlbnRpZmllciwgY3VycmVu
dFRpbWUoKSwgcmVxdWVzdE9iamVjdCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UmIHJlc3BvbnNlKQorewor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICByZXNwb25zZU9iamVjdC0+c2V0TnVtYmVyKCJzdGF0dXNDb2Rl
IiwgcmVzcG9uc2Uuc3RhdHVzQ29kZSgpKTsKKyAgICByZXNwb25zZU9iamVjdC0+c2V0U3RyaW5n
KCJzdGF0dXNUZXh0IiwgcmVzcG9uc2Uuc3RhdHVzVGV4dCgpKTsKKyAgICByZXNwb25zZU9iamVj
dC0+c2V0T2JqZWN0KCJ3ZWJTb2NrZXRIZWFkZXJGaWVsZHMiLCBidWlsZE9iamVjdEZvckhlYWRl
cnMocmVzcG9uc2UuaGVhZGVyRmllbGRzKCkpKTsKKyAgICByZXNwb25zZU9iamVjdC0+c2V0U3Ry
aW5nKCJ3ZWJTb2NrZXRDaGFsbGVuZ2VSZXNwb25zZSIsIGNyZWF0ZVJlYWRhYmxlU3RyaW5nRnJv
bUJpbmFyeShyZXNwb25zZS5jaGFsbGVuZ2VSZXNwb25zZSgpLnZhbHVlLCBzaXplb2YocmVzcG9u
c2UuY2hhbGxlbmdlUmVzcG9uc2UoKS52YWx1ZSkpKTsKKyAgICBtX2Zyb250ZW5kLT5kaWRSZWNl
aXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UoaWRlbnRpZmllciwgY3VycmVudFRpbWUoKSwg
cmVzcG9uc2VPYmplY3QpOworfQorCit2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZENs
b3NlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK3sKKyAgICBtX2Zyb250ZW5k
LT5kaWRDbG9zZVdlYlNvY2tldChpZGVudGlmaWVyLCBjdXJyZW50VGltZSgpKTsKK30KKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
Y2FjaGVkUmVzb3VyY2VzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc291cmNlcykKK3sKKyAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtX3BhZ2UtPm1haW5GcmFtZSgpKSkKKyAgICAg
ICAgKCpyZXNvdXJjZXMpLT5wdXNoT2JqZWN0KGJ1aWxkT2JqZWN0Rm9yRnJhbWVSZXNvdXJjZXMo
ZnJhbWUpKTsKK30KKwordm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXNvdXJjZUNvbnRl
bnQodW5zaWduZWQgbG9uZyBmcmFtZUlELCBjb25zdCBTdHJpbmcmIHVybCwgU3RyaW5nKiBjb250
ZW50KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gZnJhbWVSZXNvdXJjZXMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1h
aW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQobV9w
YWdlLT5tYWluRnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihmcmFtZSkgIT0gZnJhbWVJRCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQoZnJhbWUsIEtVUkwoUGFyc2Vk
VVJMU3RyaW5nLCB1cmwpLCBjb250ZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50OjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50KFBhZ2UqIHBhZ2Us
IEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwg
bV9mcm9udGVuZChmcm9udGVuZCkKIHsKLSAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZyA9IHVy
bC5zdHJpbmcoKTsKLSAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBkb2N1bWVu
dC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+Y2FjaGVkUmVzb3VyY2UodXJsU3RyaW5nKTsKLSAg
ICBpZiAoIWNhY2hlZFJlc291cmNlKQotICAgICAgICBjYWNoZWRSZXNvdXJjZSA9IGNhY2hlKCkt
PnJlc291cmNlRm9yVVJMKHVybFN0cmluZyk7Ci0gICAgcmV0dXJuIGNhY2hlZFJlc291cmNlOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmgKaW5kZXggM2JmZmQyZi4uZjBiZWFkOCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaApAQCAtMzIsOCArMzIsMTAgQEAKICNkZWZpbmUg
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudF9oCiAKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAK
QEAgLTQ1LDE2ICs0Nyw2NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlZFJl
c291cmNlOwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBEb2N1bWVudExvYWRlcjsKK2NsYXNzIElu
c3BlY3RvckFycmF5OworY2xhc3MgSW5zcGVjdG9yT2JqZWN0OworY2xhc3MgSW5zcGVjdG9yRnJv
bnRlbmQ7CiBjbGFzcyBLVVJMOworY2xhc3MgUGFnZTsKK2NsYXNzIFJlc291cmNlRXJyb3I7Citj
bGFzcyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogY2xhc3MgU2hh
cmVkQnVmZmVyOwogCi1jbGFzcyBJbnNwZWN0b3JSZXNvdXJjZUFnZW50IHsKKyNpZiBFTkFCTEUo
V0VCX1NPQ0tFVFMpCitjbGFzcyBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0OworY2xhc3MgV2Vi
U29ja2V0SGFuZHNoYWtlUmVzcG9uc2U7CisjZW5kaWYKKworY2xhc3MgSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclJlc291cmNlQWdlbnQ+IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgYm9vbCByZXNvdXJjZUNvbnRlbnQoRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiwgU3RyaW5nKiByZXN1bHQpOwotICAgIHN0YXRpYyBib29sIHJlc291cmNlQ29udGVudEJh
c2U2NChEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBTdHJpbmcqIHJlc3VsdCk7Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiByZXNvdXJjZURhdGEoRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiwgU3RyaW5nKiB0ZXh0RW5jb2RpbmdOYW1lKTsKLSAgICBzdGF0aWMgSW5zcGVjdG9yUmVz
b3VyY2U6OlR5cGUgY2FjaGVkUmVzb3VyY2VUeXBlKERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwot
ICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UoRG9jdW1lbnQqLCBjb25z
dCBLVVJMJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2VBZ2VudD4g
Y3JlYXRlKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudChwYWdlLCBm
cm9udGVuZCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIHJlc291cmNlQ29udGVudChGcmFt
ZSosIGNvbnN0IEtVUkwmLCBTdHJpbmcqIHJlc3VsdCk7CisgICAgc3RhdGljIGJvb2wgcmVzb3Vy
Y2VDb250ZW50QmFzZTY0KEZyYW1lKiwgY29uc3QgS1VSTCYsIFN0cmluZyogcmVzdWx0KTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHJlc291cmNlRGF0YShGcmFtZSosIGNv
bnN0IEtVUkwmLCBTdHJpbmcqIHRleHRFbmNvZGluZ05hbWUpOworICAgIHN0YXRpYyBDYWNoZWRS
ZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UoRnJhbWUqLCBjb25zdCBLVVJMJik7CisKKyAgICB+SW5z
cGVjdG9yUmVzb3VyY2VBZ2VudCgpOworCisgICAgdm9pZCBpZGVudGlmaWVyRm9ySW5pdGlhbFJl
cXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBLVVJMJiwgRG9jdW1lbnRMb2Fk
ZXIqLCBib29sIGlzTWFpblJlc291cmNlKTsKKyAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdCh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOworICAgIHZvaWQgbWFya1Jlc291cmNlQXNDYWNoZWQo
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsYW9kZXIsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVDb250ZW50TGVuZ3RoKHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgaW50IGxlbmd0aFJlY2VpdmVkKTsKKyAgICB2b2lkIGRpZEZp
bmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSk7
CisgICAgdm9pZCBkaWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFJlc291cmNlRXJyb3ImKTsKKyAgICB2b2lkIGRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNo
ZShEb2N1bWVudExvYWRlciosIGNvbnN0IENhY2hlZFJlc291cmNlKik7CisgICAgdm9pZCBzZXRP
dmVycmlkZUNvbnRlbnQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVN0cmluZywgSW5zcGVjdG9yUmVzb3VyY2U6OlR5cGUpOworICAgIHZvaWQgZGlkQ29tbWl0
TG9hZChEb2N1bWVudExvYWRlciopOworICAgIHZvaWQgZnJhbWVEZXRhY2hlZEZyb21QYXJlbnQo
RnJhbWUqKTsKKworI2lmIEVOQUJMRShXRUJfU09DS0VUUykKKyAgICB2b2lkIGRpZENyZWF0ZVdl
YlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwp
OworICAgIHZvaWQgd2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCYpOworICAgIHZv
aWQgZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UmKTsKKyAgICB2b2lkIGRp
ZENsb3NlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisjZW5kaWYKKworICAg
IC8vIENhbGxlZCBmcm9tIGZyb250ZW5kIAorICAgIHZvaWQgY2FjaGVkUmVzb3VyY2VzKFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qKTsKKyAgICB2b2lkIHJlc291cmNlQ29udGVudCh1bnNpZ25lZCBs
b25nIGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGNvbnRlbnQpOworCitwcml2
YXRlOgorICAgIEluc3BlY3RvclJlc291cmNlQWdlbnQoUGFnZSogcGFnZSwgSW5zcGVjdG9yRnJv
bnRlbmQqIGZyb250ZW5kKTsKKworICAgIFBhZ2UqIG1fcGFnZTsKKyAgICBJbnNwZWN0b3JGcm9u
dGVuZCogbV9mcm9udGVuZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggOWVlMWY1MS4uMTFjZDY0OSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTQ2OCw3ICs0
NjgsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJlc291cmNlU3R5bGVTaGVldFRleHQo
U3RyaW5nKiByZXN1bHQpIGNvbnN0CiAgICAgaWYgKCFtX3BhZ2VTdHlsZVNoZWV0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVz
b3VyY2VDb250ZW50KG93bmVyRG9jdW1lbnQoKSwgbV9wYWdlU3R5bGVTaGVldC0+ZmluYWxVUkwo
KSwgcmVzdWx0KTsKKyAgICByZXR1cm4gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzb3VyY2VD
b250ZW50KG93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSwgbV9wYWdlU3R5bGVTaGVldC0+ZmluYWxV
UkwoKSwgcmVzdWx0KTsKIH0KIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjppbmxpbmVTdHls
ZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9EYXRhR3JpZC5qcwppbmRleCAxMmM3MTM4Li4zMDA3NDk3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YUdyaWQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0RhdGFHcmlkLmpzCkBAIC02NjEsNyArNjYxLDcgQEAgV2ViSW5zcGVjdG9yLkRh
dGFHcmlkLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGZpbGxlclJvdyA9IGNoaWxkTm9kZXNb
Y2hpbGROb2Rlcy5sZW5ndGggLSAxXTsKIAogICAgICAgICB2YXIgc29ydGVkUm93cyA9IEFycmF5
LnByb3RvdHlwZS5zbGljZS5jYWxsKGNoaWxkTm9kZXMsIDAsIGNoaWxkTm9kZXMubGVuZ3RoIC0g
MSk7Ci0gICAgICAgIHNvcnRlZFJvd3Muc29ydChjb21wYXJhdG9yV3JhcHBlci5iaW5kKHRoaXMp
KTsKKyAgICAgICAgc29ydGVkUm93cy5zb3J0KGNvbXBhcmF0b3JXcmFwcGVyKTsKICAgICAgICAg
dmFyIHNvcnRlZFJvd3NMZW5ndGggPSBzb3J0ZWRSb3dzLmxlbmd0aDsKIAogICAgICAgICB0Ym9k
eS5yZW1vdmVDaGlsZHJlbigpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0V4dGVuc2lvblNlcnZlci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRl
bnNpb25TZXJ2ZXIuanMKaW5kZXggNDc5Y2MwMi4uYmM2MzNjYSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvblNlcnZlci5qcworKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpzCkBAIC0yNDAsNyArMjQwLDcgQEAg
V2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBp
ZCA9IG1lc3NhZ2UuaWQ7CiAgICAgICAgIHZhciByZXNvdXJjZSA9IG51bGw7CiAKLSAgICAgICAg
cmVzb3VyY2UgPSB0eXBlb2YgaWQgPT09ICJudW1iZXIiID8gV2ViSW5zcGVjdG9yLnJlc291cmNl
c1tpZF0gOiBXZWJJbnNwZWN0b3IucmVzb3VyY2VGb3JVUkwoaWQpOworICAgICAgICByZXNvdXJj
ZSA9IFdlYkluc3BlY3Rvci5yZXNvdXJjZXNbaWRdIHx8IFdlYkluc3BlY3Rvci5yZXNvdXJjZUZv
clVSTChpZCk7CiAgICAgICAgIGlmICghcmVzb3VyY2UpCiAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fc3RhdHVzLkVfTk9URk9VTkQodHlwZW9mIGlkICsgIjogIiArIGlkKTsKICAgICAgICAgV2Vi
SW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMuc2hvd1Jlc291cmNlKHJlc291cmNlLCBtZXNzYWdl
LmxpbmUpOwpAQCAtMjg0LDEzICsyODQsMTIgQEAgV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZl
ci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgdGhpcy5fZGlzcGF0Y2hDYWxsYmFjayht
ZXNzYWdlLnJlcXVlc3RJZCwgcG9ydCwgcmVzcG9uc2UpOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKHR5cGVvZiBtZXNzYWdlLmlkcyA9PT0gIm51bWJlciIpIHsKKyAgICAgICAgaWYgKHR5cGVv
ZiBtZXNzYWdlLmlkcyA9PT0gIm51bWJlciIpCiAgICAgICAgICAgICBpZHMgPSBbIG1lc3NhZ2Uu
aWRzIF07Ci0gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pZHMgaW5zdGFuY2VvZiBBcnJheSkg
eworICAgICAgICBlbHNlIGlmIChtZXNzYWdlLmlkcyBpbnN0YW5jZW9mIEFycmF5KQogICAgICAg
ICAgICAgaWRzID0gbWVzc2FnZS5pZHM7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMuRV9CQURBUkdUWVBFKCJtZXNzYWdlLmlk
cyIsICJBcnJheSIsIHR5cGVvZiBtZXNzYWdlLmlkcyk7Ci0gICAgICAgIH0KIAogICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGlkcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgdmFyIGlk
ID0gaWRzW2ldOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05ldHdv
cmtQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OZXR3b3JrUGFuZWwuanMK
aW5kZXggMWI4ZjUxNS4uOGVlZDQyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL05ldHdvcmtQYW5lbC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
TmV0d29ya1BhbmVsLmpzCkBAIC0xMjcsMTUgKzEyNywxOSBAQCBXZWJJbnNwZWN0b3IuTmV0d29y
a1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQgPSB0aGlzLl9z
dW1tYXJ5QmFyRWxlbWVudC5wYXJlbnRFbGVtZW50OwogCiAgICAgICAgIGlmICh0aGlzLl9zdW1t
YXJ5QmFyRWxlbWVudC5wYXJlbnRFbGVtZW50ICE9PSB0aGlzLmVsZW1lbnQgJiYgb2Zmc2V0SGVp
Z2h0ID4gKHRoaXMuX2RhdGFHcmlkLmNoaWxkcmVuLmxlbmd0aCAtIDEpICogcm93SGVpZ2h0ICsg
c3VtbWFyeUJhckhlaWdodCkgewotICAgICAgICAgICAgdGhpcy5fZGF0YUdyaWQucmVtb3ZlQ2hp
bGQodGhpcy5fc3VtbWFyeUJhclJvd05vZGUpOworICAgICAgICAgICAgLy8gR2x1ZSBzdGF0dXMg
dG8gYm90dG9tLgorICAgICAgICAgICAgaWYgKHRoaXMuX3N1bW1hcnlCYXJSb3dOb2RlKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fZGF0YUdyaWQucmVtb3ZlQ2hpbGQodGhpcy5fc3VtbWFyeUJh
clJvd05vZGUpOworICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zdW1tYXJ5QmFyUm93Tm9k
ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMuX3N1bW1hcnlCYXJFbGVtZW50LmFk
ZFN0eWxlQ2xhc3MoIm5ldHdvcmstc3VtbWFyeS1iYXItYm90dG9tIik7Ci0gICAgICAgICAgICBk
ZWxldGUgdGhpcy5fc3VtbWFyeUJhclJvd05vZGU7CiAgICAgICAgICAgICB0aGlzLmVsZW1lbnQu
YXBwZW5kQ2hpbGQodGhpcy5fc3VtbWFyeUJhckVsZW1lbnQpOwogICAgICAgICAgICAgdGhpcy5f
ZGF0YUdyaWQuZWxlbWVudC5zdHlsZS5ib3R0b20gPSAiMjBweCI7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXRoaXMuX3N1bW1hcnlCYXJSb3dOb2RlICYm
IG9mZnNldEhlaWdodCAtIHN1bW1hcnlCYXJIZWlnaHQgPCB0aGlzLl9kYXRhR3JpZC5jaGlsZHJl
bi5sZW5ndGggKiByb3dIZWlnaHQpIHsKKyAgICAgICAgICAgIC8vIEdsdWUgc3RhdHVzIHRvIHRh
YmxlLgogICAgICAgICAgICAgdGhpcy5fc3VtbWFyeUJhclJvd05vZGUgPSBuZXcgV2ViSW5zcGVj
dG9yLk5ldHdvcmtUb3RhbEdyaWROb2RlKHRoaXMuX3N1bW1hcnlCYXJFbGVtZW50KTsKICAgICAg
ICAgICAgIHRoaXMuX3N1bW1hcnlCYXJFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoIm5ldHdvcmst
c3VtbWFyeS1iYXItYm90dG9tIik7CiAgICAgICAgICAgICB0aGlzLl9kYXRhR3JpZC5hcHBlbmRD
aGlsZCh0aGlzLl9zdW1tYXJ5QmFyUm93Tm9kZSk7CkBAIC0xNDQsNiArMTQ4LDEzIEBAIFdlYklu
c3BlY3Rvci5OZXR3b3JrUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAor
ICAgIF9yZXNldFN1bW1hcnlCYXI6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSB0
aGlzLl9zdW1tYXJ5QmFyUm93Tm9kZTsKKyAgICAgICAgdGhpcy5fc3VtbWFyeUJhckVsZW1lbnQu
cGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9zdW1tYXJ5QmFyRWxlbWVudCk7CisgICAg
ICAgIHRoaXMuX3VwZGF0ZVN1bW1hcnlCYXIoKTsKKyAgICB9LAorCiAgICAgX2NyZWF0ZVRpbWVs
aW5lR3JpZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5fdGltZWxpbmVHcmlkID0g
bmV3IFdlYkluc3BlY3Rvci5UaW1lbGluZUdyaWQoKTsKQEAgLTM0OSwyMCArMzYwLDM3IEBAIFdl
Ykluc3BlY3Rvci5OZXR3b3JrUGFuZWwucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgdGhp
cy5fcG9zaXRpb25TdW1tYXJ5QmFyKCk7IC8vIEdyaWQgaXMgZ3Jvd2luZy4KICAgICAgICAgdmFy
IG51bVJlcXVlc3RzID0gdGhpcy5fcmVzb3VyY2VzLmxlbmd0aDsKKworICAgICAgICBpZiAoIW51
bVJlcXVlc3RzKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fc3VtbWFyeUJhckVsZW1lbnQuX2lz
RGlzcGxheWluZ1dhcm5pbmcpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
dGhpcy5fc3VtbWFyeUJhckVsZW1lbnQuX2lzRGlzcGxheWluZ1dhcm5pbmcgPSB0cnVlOworCisg
ICAgICAgICAgICB2YXIgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CisgICAg
ICAgICAgICBpbWcuc3JjID0gIkltYWdlcy93YXJuaW5nSWNvbi5wbmciOworICAgICAgICAgICAg
dGhpcy5fc3VtbWFyeUJhckVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIHRo
aXMuX3N1bW1hcnlCYXJFbGVtZW50LmFwcGVuZENoaWxkKGltZyk7CisgICAgICAgICAgICB0aGlz
Ll9zdW1tYXJ5QmFyRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgi
ICIpKTsKKyAgICAgICAgICAgIHRoaXMuX3N1bW1hcnlCYXJFbGVtZW50LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKAorICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5VSVN0
cmluZygiTm8gcmVxdWVzdHMgY2FwdHVyZWQuIFJlbG9hZCB0aGUgcGFnZSB0byBzZWUgZGV0YWls
ZWQgaW5mb3JtYXRpb24gb24gdGhlIG5ldHdvcmsgYWN0aXZpdHkuIikpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBkZWxldGUgdGhpcy5fc3VtbWFyeUJhckVsZW1l
bnQuX2lzRGlzcGxheWluZ1dhcm5pbmc7CisKICAgICAgICAgdmFyIHRyYW5zZmVyU2l6ZSA9IDA7
CiAgICAgICAgIHZhciBiYXNlVGltZSA9IC0xOwogICAgICAgICB2YXIgbWF4VGltZSA9IC0xOwog
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Jlc291cmNlcy5sZW5ndGg7ICsraSkg
ewogICAgICAgICAgICAgdmFyIHJlc291cmNlID0gdGhpcy5fcmVzb3VyY2VzW2ldOwogICAgICAg
ICAgICAgdHJhbnNmZXJTaXplICs9IHJlc291cmNlLmNhY2hlZCA/IDAgOiByZXNvdXJjZS50cmFu
c2ZlclNpemU7Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2UgPT09IFdlYkluc3BlY3Rvci5tYWlu
UmVzb3VyY2UpCisgICAgICAgICAgICBpZiAocmVzb3VyY2UuaXNNYWluUmVzb3VyY2UpCiAgICAg
ICAgICAgICAgICAgYmFzZVRpbWUgPSByZXNvdXJjZS5zdGFydFRpbWU7CiAgICAgICAgICAgICBp
ZiAocmVzb3VyY2UuZW5kVGltZSA+IG1heFRpbWUpIAogICAgICAgICAgICAgICAgIG1heFRpbWUg
PSByZXNvdXJjZS5lbmRUaW1lOwogICAgICAgICB9CiAgICAgICAgIHZhciB0ZXh0ID0gU3RyaW5n
LnNwcmludGYoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlZCByZXF1ZXN0cyIpLCBudW1SZXF1ZXN0
cyk7CiAgICAgICAgIHRleHQgKz0gIiAgXHUyNzU4ICAiICsgU3RyaW5nLnNwcmludGYoV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCIlcyB0cmFuc2ZlcnJlZCIpLCBOdW1iZXIuYnl0ZXNUb1N0cmluZyh0
cmFuc2ZlclNpemUpKTsKLSAgICAgICAgaWYgKGJhc2VUaW1lICE9PSAtMSAmJiB0aGlzLl9tYWlu
UmVzb3VyY2VMb2FkVGltZSAhPT0gLTEgJiYgdGhpcy5fbWFpblJlc291cmNlRE9NQ29udGVudFRp
bWUgIT09IC0xKSB7CisgICAgICAgIGlmIChiYXNlVGltZSAhPT0gLTEgJiYgdGhpcy5fbWFpblJl
c291cmNlTG9hZFRpbWUgIT09IC0xICYmIHRoaXMuX21haW5SZXNvdXJjZURPTUNvbnRlbnRUaW1l
ICE9PSAtMSAmJiB0aGlzLl9tYWluUmVzb3VyY2VET01Db250ZW50VGltZSA+IGJhc2VUaW1lKSB7
CiAgICAgICAgICAgICB0ZXh0ICs9ICIgIFx1Mjc1OCAgIiArIFN0cmluZy5zcHJpbnRmKFdlYklu
c3BlY3Rvci5VSVN0cmluZygiJXMgKG9ubG9hZDogJXMsIERPTUNvbnRlbnRMb2FkZWQ6ICVzKSIp
LAogICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyLnNlY29uZHNUb1N0cmluZyhtYXhUaW1l
IC0gYmFzZVRpbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyLnNlY29uZHNUb1N0
cmluZyh0aGlzLl9tYWluUmVzb3VyY2VMb2FkVGltZSAtIGJhc2VUaW1lKSwKQEAgLTU3OCw3ICs2
MDYsNyBAQCBXZWJJbnNwZWN0b3IuTmV0d29ya1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICBfY3Jl
YXRlU3RhdHVzYmFyQnV0dG9uczogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5fY2xl
YXJCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRvbihXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIkNsZWFyIiksICJjbGVhci1zdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICAgICAgdGhp
cy5fY2xlYXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLnJlc2V0LmJpbmQo
dGhpcyksIGZhbHNlKTsKKyAgICAgICAgdGhpcy5fY2xlYXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5l
cigiY2xpY2siLCB0aGlzLl9yZXNldC5iaW5kKHRoaXMpLCBmYWxzZSk7CiAKICAgICAgICAgdGhp
cy5fbGFyZ2VyUmVzb3VyY2VzQnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJCdXR0
b24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJVc2Ugc21hbGwgcmVzb3VyY2Ugcm93cy4iKSwgIm5l
dHdvcmstbGFyZ2VyLXJlc291cmNlcy1zdGF0dXMtYmFyLWl0ZW0iKTsKICAgICAgICAgV2ViSW5z
cGVjdG9yLmFwcGxpY2F0aW9uU2V0dGluZ3MuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkIiwgdGhp
cy5fc2V0dGluZ3NMb2FkZWQsIHRoaXMpOwpAQCAtNzE4LDM5ICs3NDYsMTcgQEAgV2ViSW5zcGVj
dG9yLk5ldHdvcmtQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2RhdGFHcmlkLnVw
ZGF0ZVdpZHRocygpOwogICAgIH0sCiAKLSAgICByZXNldDogZnVuY3Rpb24oKQorICAgIF9yZXNl
dDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5fcG9wb3ZlckhlbHBlci5oaWRlUG9w
dXAoKTsKICAgICAgICAgdGhpcy5fY2xvc2VWaXNpYmxlUmVzb3VyY2UoKTsKIAogICAgICAgICB0
aGlzLl90b2dnbGVHcmlkTW9kZSgpOwogCi0gICAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRRdWVy
eTsKLSAgICAgICAgdGhpcy5zZWFyY2hDYW5jZWxlZCgpOwotCi0gICAgICAgIGlmICh0aGlzLl9y
ZXNvdXJjZXMpIHsKLSAgICAgICAgICAgIHZhciByZXNvdXJjZXNMZW5ndGggPSB0aGlzLl9yZXNv
dXJjZXMubGVuZ3RoOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXNvdXJjZXNM
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMuX3Jlc291
cmNlc1tpXTsKLQotICAgICAgICAgICAgICAgIHJlc291cmNlLndhcm5pbmdzID0gMDsKLSAgICAg
ICAgICAgICAgICByZXNvdXJjZS5lcnJvcnMgPSAwOwotCi0gICAgICAgICAgICAgICAgZGVsZXRl
IHJlc291cmNlLl9yZXNvdXJjZXNWaWV3OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KICAg
ICAgICAgLy8gQmVnaW4gcmVzZXQgdGltZWxpbmUKICAgICAgICAgaWYgKHRoaXMuX2NhbGN1bGF0
b3IpCiAgICAgICAgICAgICB0aGlzLl9jYWxjdWxhdG9yLnJlc2V0KCk7CiAKLSAgICAgICAgaWYg
KHRoaXMuX3Jlc291cmNlcykgewotICAgICAgICAgICAgdmFyIGl0ZW1zTGVuZ3RoID0gdGhpcy5f
cmVzb3VyY2VzLmxlbmd0aDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXNM
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5fcmVzb3VyY2Vz
W2ldOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KICAgICAgICAgdGhpcy5fcmVzb3VyY2Vz
ID0gW107CiAgICAgICAgIHRoaXMuX3N0YWxlUmVzb3VyY2VzID0gW107CiAgICAgICAgIHRoaXMu
X3Jlc291cmNlR3JpZE5vZGVzID0ge307CkBAIC03NjQsNiArNzcwLDcgQEAgV2ViSW5zcGVjdG9y
Lk5ldHdvcmtQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX21haW5SZXNvdXJjZURP
TUNvbnRlbnRUaW1lID0gLTE7CiAgCiAgICAgICAgIHRoaXMuX3ZpZXdzQ29udGFpbmVyRWxlbWVu
dC5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICB0aGlzLl9yZXNldFN1bW1hcnlCYXIoKTsKICAg
ICB9LAogCiAgICAgYWRkUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQpAQCAtNzg3LDkgKzc5
NCw2IEBAIFdlYkluc3BlY3Rvci5OZXR3b3JrUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICBp
ZiAobmV3Vmlldy5fX3Byb3RvX18gPT09IHJlc291cmNlLl9yZXNvdXJjZXNWaWV3Ll9fcHJvdG9f
XykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAoIXRoaXMuY3VycmVudFF1ZXJ5
ICYmIHRoaXMuX3Jlc291cmNlR3JpZE5vZGUocmVzb3VyY2UpKQotICAgICAgICAgICAgdGhpcy5f
cmVzb3VyY2VHcmlkTm9kZShyZXNvdXJjZSkudXBkYXRlRXJyb3JzQW5kV2FybmluZ3MoKTsKLQog
ICAgICAgICB2YXIgb2xkVmlldyA9IHJlc291cmNlLl9yZXNvdXJjZXNWaWV3OwogICAgICAgICB2
YXIgb2xkVmlld1BhcmVudE5vZGUgPSBvbGRWaWV3LnZpc2libGUgPyBvbGRWaWV3LmVsZW1lbnQu
cGFyZW50Tm9kZSA6IG51bGw7CiAKQEAgLTEwOTcsMTEgKzExMDEsNiBAQCBXZWJJbnNwZWN0b3Iu
TmV0d29ya1BhbmVsLnByb3RvdHlwZSA9IHsKIAogV2ViSW5zcGVjdG9yLk5ldHdvcmtQYW5lbC5w
cm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZTsKIAotV2Vi
SW5zcGVjdG9yLmdldFJlc291cmNlQ29udGVudCA9IGZ1bmN0aW9uKGlkZW50aWZpZXIsIGNhbGxi
YWNrKQotewotICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0UmVzb3VyY2VDb250ZW50KGlkZW50aWZp
ZXIsIGZhbHNlLCBjYWxsYmFjayk7Ci19Ci0KIFdlYkluc3BlY3Rvci5OZXR3b3JrQmFzZUNhbGN1
bGF0b3IgPSBmdW5jdGlvbigpCiB7CiB9CkBAIC0xNjExLDYgKzE2MTAsOCBAQCBXZWJJbnNwZWN0
b3IuTmV0d29ya0RhdGFHcmlkTm9kZS5wcm90b3R5cGUgPSB7CiAKICAgICBfcmVmcmVzaExhYmVs
UG9zaXRpb25zOiBmdW5jdGlvbigpCiAgICAgeworICAgICAgICBpZiAoIXRoaXMuX3BlcmNlbnRh
Z2VzKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB0aGlzLl9sYWJlbExlZnRFbGVtZW50
LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJsZWZ0Iik7CiAgICAgICAgIHRoaXMuX2xhYmVsTGVmdEVs
ZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoInJpZ2h0Iik7CiAgICAgICAgIHRoaXMuX2xhYmVs
TGVmdEVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiYmVmb3JlIik7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2UuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUmVzb3VyY2UuanMKaW5kZXggOWJiZjkwYi4uZGQ0ZTIyMSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlLmpzCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZS5qcwpAQCAtMTY0LDYgKzE2NCwxMCBAQCBXZWJJbnNw
ZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogCiAgICAgZ2V0IHJlc3BvbnNlUmVjZWl2ZWRU
aW1lKCkKICAgICB7CisgICAgICAgIGlmICh0aGlzLnRpbWluZyAmJiB0aGlzLnRpbWluZy5yZXF1
ZXN0VGltZSkgeworICAgICAgICAgICAgLy8gUmVhZCByZXNwb25zZVJlY2VpdmVkVGltZSBmcm9t
IHRpbWluZyBmb3IgYmV0dGVyIGFjY3VyYWN5LgorICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlt
aW5nLnJlcXVlc3RUaW1lICsgdGhpcy50aW1pbmcucmVjZWl2ZUhlYWRlcnNFbmQgLyAxMDAwLjA7
CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlUmVjZWl2ZWRUaW1lIHx8
IC0xOwogICAgIH0sCiAKQEAgLTE4NSw2ICsxODksMTIgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNl
LnByb3RvdHlwZSA9IHsKIAogICAgIHNldCBlbmRUaW1lKHgpCiAgICAgeworICAgICAgICAvLyBJ
biBjYXNlIG9mIGZhc3QgbG9hZCAob3IgaW4gY2FzZSBvZiBjYWNoZWQgcmVzb3VyY2VzKSwgZW5k
VGltZSBvbiBuZXR3b3JrIHN0YWNrCisgICAgICAgIC8vIGNhbiBiZSBsZXNzIHRoZW4gbV9yZXNw
b25zZVJlY2VpdmVkVGltZSBtZWFzdXJlZCBpbiBXZWJDb3JlLiBOb3JtYWxpemUgaXQgaGVyZSwK
KyAgICAgICAgLy8gcHJlZmVyIGFjdHVhbEVuZFRpbWUgdG8gbV9yZXNwb25zZVJlY2VpdmVkVGlt
ZS4KKyAgICAgICAgaWYgKHggPCB0aGlzLnJlc3BvbnNlUmVjZWl2ZWRUaW1lKQorICAgICAgICAg
ICAgdGhpcy5yZXNwb25zZVJlY2VpdmVkVGltZSA9IHg7CisKICAgICAgICAgaWYgKHRoaXMuX2Vu
ZFRpbWUgPT09IHgpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTYwOSw2ICs2MTksMTUgQEAg
V2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBpZiAobXNnKQog
ICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNvbnNvbGUuYWRkTWVzc2FnZShtc2cpOworICAgIH0s
CisKKyAgICBnZXRDb250ZW50czogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgeworICAgICAgICAv
LyBGSVhNRTogZXZlbnR1YWxseSwgY2FjaGVkIHJlc291cmNlcyB3aWxsIGhhdmUgbm8gaWRlbnRp
ZmllcnMuCisgICAgICAgIGlmICh0aGlzLmZyYW1lSUQpCisgICAgICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLnJlc291cmNlQ29udGVudCh0aGlzLmZyYW1lSUQsIHRoaXMudXJsLCBjYWxsYmFjayk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0UmVzb3VyY2VD
b250ZW50KHRoaXMuaWRlbnRpZmllciwgZmFsc2UsIGNhbGxiYWNrKTsKICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZU1hbmFnZXIuanMg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VNYW5hZ2VyLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNDRjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VNYW5hZ2VyLmpzCkBAIC0wLDAgKzEs
Mjk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlJlc291cmNlTWFuYWdlciA9IGZ1bmN0aW9uKCkKK3sK
KyAgICB0aGlzLl9yZWdpc3Rlck5vdGlmeUhhbmRsZXJzKAorICAgICAgICAiaWRlbnRpZmllckZv
ckluaXRpYWxSZXF1ZXN0IiwKKyAgICAgICAgIndpbGxTZW5kUmVxdWVzdCIsCisgICAgICAgICJt
YXJrUmVzb3VyY2VBc0NhY2hlZCIsCisgICAgICAgICJkaWRSZWNlaXZlUmVzcG9uc2UiLAorICAg
ICAgICAiZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgiLAorICAgICAgICAiZGlkRmluaXNoTG9hZGlu
ZyIsCisgICAgICAgICJkaWRGYWlsTG9hZGluZyIsCisgICAgICAgICJkaWRMb2FkUmVzb3VyY2VG
cm9tTWVtb3J5Q2FjaGUiLAorICAgICAgICAic2V0T3ZlcnJpZGVDb250ZW50IiwKKyAgICAgICAg
ImRpZENvbW1pdExvYWQiLAorICAgICAgICAiZnJhbWVEZXRhY2hlZEZyb21QYXJlbnQiLAorICAg
ICAgICAiZGlkQ3JlYXRlV2ViU29ja2V0IiwKKyAgICAgICAgIndpbGxTZW5kV2ViU29ja2V0SGFu
ZHNoYWtlUmVxdWVzdCIsCisgICAgICAgICJkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVz
cG9uc2UiLAorICAgICAgICAiZGlkQ2xvc2VXZWJTb2NrZXQiKTsKKworICAgIHRoaXMuX3Jlc291
cmNlcyA9IHt9OworICAgIHRoaXMuX3Jlc291cmNlc0J5RnJhbWUgPSB7fTsKKyAgICB0aGlzLl9s
YXN0Q2FjaGVkSWQgPSAwOworfQorCitXZWJJbnNwZWN0b3IuUmVzb3VyY2VNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKKyAgICBfcmVnaXN0ZXJOb3RpZnlIYW5kbGVyczogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICBXZWJJbnNwZWN0b3JbYXJndW1lbnRzW2ldXSA9IHRoaXNbYXJndW1lbnRzW2ldXS5i
aW5kKHRoaXMpOworICAgIH0sCisKKyAgICBpZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3Q6IGZ1
bmN0aW9uKGlkZW50aWZpZXIsIHVybCwgZnJhbWVJRCwgaXNNYWluUmVzb3VyY2UpCisgICAgewor
ICAgICAgICB2YXIgcmVzb3VyY2UgPSBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlKGlkZW50aWZp
ZXIsIHVybCk7CisgICAgICAgIGlmIChpc01haW5SZXNvdXJjZSkKKyAgICAgICAgICAgIHJlc291
cmNlLmlzTWFpblJlc291cmNlID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fcmVzb3VyY2VzW2lkZW50
aWZpZXJdID0gcmVzb3VyY2U7CisKKyAgICAgICAgaWYgKGZyYW1lSUQpIHsKKyAgICAgICAgICAg
IHJlc291cmNlLmZyYW1lSUQgPSBmcmFtZUlEOworICAgICAgICAgICAgdmFyIHJlc291cmNlc0Zv
ckZyYW1lID0gdGhpcy5fcmVzb3VyY2VzQnlGcmFtZVtmcmFtZUlEXTsKKyAgICAgICAgICAgIGlm
ICghcmVzb3VyY2VzRm9yRnJhbWUpIHsKKyAgICAgICAgICAgICAgICByZXNvdXJjZXNGb3JGcmFt
ZSA9IFtdOworICAgICAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlc0J5RnJhbWVbZnJhbWVJRF0g
PSByZXNvdXJjZXNGb3JGcmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc291cmNl
c0ZvckZyYW1lLnB1c2gocmVzb3VyY2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFdlYklu
c3BlY3Rvci5wYW5lbHMubmV0d29yaykKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMu
bmV0d29yay5hZGRSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgfSwKKworICAgIHdpbGxTZW5kUmVx
dWVzdDogZnVuY3Rpb24oaWRlbnRpZmllciwgdGltZSwgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25z
ZSkKKyAgICB7CisgICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMuX3Jlc291cmNlc1tpZGVudGlm
aWVyXTsKKyAgICAgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAvLyBSZWRpcmVjdCBtYXkgaGF2ZSBlbXB0eSBVUkwgYW5kIHdlJ2QgbGlrZSB0byBub3Qg
Y3Jhc2ggd2l0aCBpbnZhbGlkIEhhc2hNYXAgZW50cnkuCisgICAgICAgIC8vIFNlZSBodHRwL3Rl
c3RzL21pc2Mvd2lsbC1zZW5kLXJlcXVlc3QtcmV0dXJucy1udWxsLW9uLXJlZGlyZWN0Lmh0bWwK
KyAgICAgICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCAmJiByZXF1ZXN0LnVybC5sZW5n
dGgpIHsKKyAgICAgICAgICAgIHJlc291cmNlLmVuZFRpbWUgPSB0aW1lOworICAgICAgICAgICAg
dGhpcy5kaWRSZWNlaXZlUmVzcG9uc2UoaWRlbnRpZmllciwgdGltZSwgIk90aGVyIiwgcmVkaXJl
Y3RSZXNwb25zZSk7CisgICAgICAgICAgICByZXNvdXJjZSA9IHRoaXMuX2FwcGVuZFJlZGlyZWN0
KHJlc291cmNlLmlkZW50aWZpZXIsIHJlcXVlc3QudXJsKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJlc291cmNlLnJlcXVlc3RNZXRob2QgPSByZXF1ZXN0Lmh0dHBNZXRob2Q7CisgICAgICAgIHJl
c291cmNlLnJlcXVlc3RIZWFkZXJzID0gcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzOworICAgICAg
ICByZXNvdXJjZS5yZXF1ZXN0Rm9ybURhdGEgPSByZXF1ZXN0LnJlcXVlc3RGb3JtRGF0YTsKKyAg
ICAgICAgcmVzb3VyY2Uuc3RhcnRUaW1lID0gdGltZTsKKworICAgICAgICBpZiAoV2ViSW5zcGVj
dG9yLnBhbmVscy5uZXR3b3JrKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5uZXR3
b3JrLnJlZnJlc2hSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgfSwKKworICAgIF9hcHBlbmRSZWRp
cmVjdDogZnVuY3Rpb24oaWRlbnRpZmllciwgcmVkaXJlY3RVUkwpCisgICAgeworICAgICAgICAv
LyBXZSBhbHdheXMgc3RvcmUgbGFzdCByZWRpcmVjdCBieSB0aGUgb3JpZ2luYWwgaWQga2V5LiBS
ZXN0IG9mIHRoZSByZWRpcmVjdHMgYXJlIHJlZmVyZW5jZWQgZnJvbSB3aXRoaW4gdGhlIGxhc3Qg
b25lLgorCisgICAgICAgIHZhciBvcmlnaW5hbFJlc291cmNlID0gdGhpcy5fcmVzb3VyY2VzW2lk
ZW50aWZpZXJdOworICAgICAgICB2YXIgcmVkaXJlY3RJZGVudGlmaWVyID0gb3JpZ2luYWxSZXNv
dXJjZS5pZGVudGlmaWVyICsgIjoiICsgKG9yaWdpbmFsUmVzb3VyY2UucmVkaXJlY3RzID8gb3Jp
Z2luYWxSZXNvdXJjZS5yZWRpcmVjdHMubGVuZ3RoIDogMCk7CisgICAgICAgIG9yaWdpbmFsUmVz
b3VyY2UuaWRlbnRpZmllciA9IHJlZGlyZWN0SWRlbnRpZmllcjsKKyAgICAgICAgdGhpcy5fcmVz
b3VyY2VzW3JlZGlyZWN0SWRlbnRpZmllcl0gPSBvcmlnaW5hbFJlc291cmNlOworCisgICAgICAg
IHRoaXMuaWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0KGlkZW50aWZpZXIsIHJlZGlyZWN0VVJM
LCBvcmlnaW5hbFJlc291cmNlLmZyYW1lSUQpOworCisgICAgICAgIHZhciBuZXdSZXNvdXJjZSA9
IHRoaXMuX3Jlc291cmNlc1tpZGVudGlmaWVyXTsKKyAgICAgICAgbmV3UmVzb3VyY2UucmVkaXJl
Y3RzID0gb3JpZ2luYWxSZXNvdXJjZS5yZWRpcmVjdHMgfHwgW107CisgICAgICAgIGRlbGV0ZSBv
cmlnaW5hbFJlc291cmNlLnJlZGlyZWN0czsKKyAgICAgICAgbmV3UmVzb3VyY2UucmVkaXJlY3Rz
LnB1c2gob3JpZ2luYWxSZXNvdXJjZSk7CisgICAgICAgIHJldHVybiBuZXdSZXNvdXJjZTsKKyAg
ICB9LAorCisgICAgbWFya1Jlc291cmNlQXNDYWNoZWQ6IGZ1bmN0aW9uKGlkZW50aWZpZXIpCisg
ICAgeworICAgICAgICB2YXIgcmVzb3VyY2UgPSB0aGlzLl9yZXNvdXJjZXNbaWRlbnRpZmllcl07
CisgICAgICAgIGlmICghcmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
cmVzb3VyY2UuY2FjaGVkID0gdHJ1ZTsKKworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVs
cy5uZXR3b3JrKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5uZXR3b3JrLnJlZnJl
c2hSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgfSwKKworICAgIGRpZFJlY2VpdmVSZXNwb25zZTog
ZnVuY3Rpb24oaWRlbnRpZmllciwgdGltZSwgcmVzb3VyY2VUeXBlLCByZXNwb25zZSkKKyAgICB7
CisgICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMuX3Jlc291cmNlc1tpZGVudGlmaWVyXTsKKyAg
ICAgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICByZXNv
dXJjZS50eXBlID0gV2ViSW5zcGVjdG9yLlJlc291cmNlLlR5cGVbcmVzb3VyY2VUeXBlXTsKKyAg
ICAgICAgcmVzb3VyY2UubWltZVR5cGUgPSByZXNwb25zZS5taW1lVHlwZTsKKyAgICAgICAgcmVz
b3VyY2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVu
Z3RoOworICAgICAgICByZXNvdXJjZS50ZXh0RW5jb2RpbmdOYW1lID0gcmVzcG9uc2UudGV4dEVu
Y29kaW5nTmFtZTsKKyAgICAgICAgcmVzb3VyY2Uuc3VnZ2VzdGVkRmlsZW5hbWUgPSByZXNwb25z
ZS5zdWdnZXN0ZWRGaWxlbmFtZTsKKyAgICAgICAgcmVzb3VyY2Uuc3RhdHVzQ29kZSA9IHJlc3Bv
bnNlLmh0dHBTdGF0dXNDb2RlOworICAgICAgICByZXNvdXJjZS5zdGF0dXNUZXh0ID0gcmVzcG9u
c2UuaHR0cFN0YXR1c1RleHQ7CisKKyAgICAgICAgcmVzb3VyY2UucmVzcG9uc2VIZWFkZXJzID0g
cmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkczsKKyAgICAgICAgcmVzb3VyY2UuY29ubmVjdGlvblJl
dXNlZCA9IHJlc3BvbnNlLmNvbm5lY3Rpb25SZXVzZWQ7CisgICAgICAgIHJlc291cmNlLmNvbm5l
Y3Rpb25JRCA9IHJlc3BvbnNlLmNvbm5lY3Rpb25JRDsKKyAgICAgICAgcmVzb3VyY2UucmVzcG9u
c2VSZWNlaXZlZFRpbWUgPSB0aW1lOworCisgICAgICAgIGlmIChyZXNwb25zZS53YXNDYWNoZWQp
CisgICAgICAgICAgICByZXNvdXJjZS5jYWNoZWQgPSB0cnVlOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICByZXNvdXJjZS50aW1pbmcgPSByZXNwb25zZS50aW1pbmc7CisKKyAgICAgICAgaWYg
KHJlc3BvbnNlLnJhd0hlYWRlcnMpIHsKKyAgICAgICAgICAgIHJlc291cmNlLnJlcXVlc3RIZWFk
ZXJzID0gcmVzcG9uc2UucmF3SGVhZGVycy5yZXF1ZXN0SGVhZGVyczsKKyAgICAgICAgICAgIHJl
c291cmNlLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlLnJhd0hlYWRlcnMucmVzcG9uc2VIZWFk
ZXJzOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5wYW5lbHMubmV0d29y
aykKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMubmV0d29yay5yZWZyZXNoUmVzb3Vy
Y2UocmVzb3VyY2UpOworICAgIH0sCisKKyAgICBkaWRSZWNlaXZlQ29udGVudExlbmd0aDogZnVu
Y3Rpb24oaWRlbnRpZmllciwgdGltZSwgbGVuZ3RoUmVjZWl2ZWQpCisgICAgeworICAgICAgICB2
YXIgcmVzb3VyY2UgPSB0aGlzLl9yZXNvdXJjZXNbaWRlbnRpZmllcl07CisgICAgICAgIGlmICgh
cmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgcmVzb3VyY2UucmVzb3Vy
Y2VTaXplICs9IGxlbmd0aFJlY2VpdmVkOworICAgICAgICByZXNvdXJjZS5lbmRUaW1lID0gdGlt
ZTsKKworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5uZXR3b3JrKQorICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLnBhbmVscy5uZXR3b3JrLnJlZnJlc2hSZXNvdXJjZShyZXNvdXJjZSk7
CisgICAgfSwKKworICAgIGRpZEZpbmlzaExvYWRpbmc6IGZ1bmN0aW9uKGlkZW50aWZpZXIsIGZp
bmlzaFRpbWUpCisgICAgeworICAgICAgICB2YXIgcmVzb3VyY2UgPSB0aGlzLl9yZXNvdXJjZXNb
aWRlbnRpZmllcl07CisgICAgICAgIGlmICghcmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgcmVzb3VyY2UuZmluaXNoZWQgPSB0cnVlOworICAgICAgICByZXNvdXJjZS5l
bmRUaW1lID0gZmluaXNoVGltZTsKKworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5u
ZXR3b3JrKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5uZXR3b3JrLnJlZnJlc2hS
ZXNvdXJjZShyZXNvdXJjZSk7CisgICAgfSwKKworICAgIGRpZEZhaWxMb2FkaW5nOiBmdW5jdGlv
bihpZGVudGlmaWVyLCB0aW1lLCBsb2NhbGl6ZWREZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAg
IHZhciByZXNvdXJjZSA9IHRoaXMuX3Jlc291cmNlc1tpZGVudGlmaWVyXTsKKyAgICAgICAgaWYg
KCFyZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICByZXNvdXJjZS5mYWls
ZWQgPSB0cnVlOworICAgICAgICByZXNvdXJjZS5lbmRUaW1lID0gdGltZTsKKworICAgICAgICBp
ZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5uZXR3b3JrKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LnBhbmVscy5uZXR3b3JrLnJlZnJlc2hSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgfSwKKworICAg
IGRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZTogZnVuY3Rpb24odGltZSwgZnJhbWVJRCwg
Y2FjaGVkUmVzb3VyY2UpCisgICAgeworICAgICAgICB2YXIgaWRlbnRpZmllciA9ICJjYWNoZWQ6
IiArIHRoaXMuX2xhc3RDYWNoZWRJZCsrOworICAgICAgICB0aGlzLmlkZW50aWZpZXJGb3JJbml0
aWFsUmVxdWVzdChpZGVudGlmaWVyLCBjYWNoZWRSZXNvdXJjZS51cmwsIGZyYW1lSUQpOworCisg
ICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMuX3Jlc291cmNlc1tpZGVudGlmaWVyXTsKKyAgICAg
ICAgcmVzb3VyY2UuY2FjaGVkID0gdHJ1ZTsKKyAgICAgICAgcmVzb3VyY2Uuc3RhcnRUaW1lID0g
cmVzb3VyY2UucmVzcG9uc2VSZWNlaXZlZFRpbWUgPSB0aW1lOworICAgICAgICByZXNvdXJjZS5y
ZXNvdXJjZVNpemUgPSBjYWNoZWRSZXNvdXJjZS5lbmNvZGVkU2l6ZSgpOworCisgICAgICAgIHRo
aXMuZGlkUmVjZWl2ZVJlc3BvbnNlKGlkZW50aWZpZXIsIHRpbWUsIGNhY2hlZFJlc291cmNlLnJl
c3BvbnNlKTsKKyAgICB9LAorCisgICAgc2V0T3ZlcnJpZGVDb250ZW50OiBmdW5jdGlvbihpZGVu
dGlmaWVyLCBzb3VyY2VTdHJpbmcsIHR5cGUpCisgICAgeworICAgICAgICB2YXIgcmVzb3VyY2Ug
PSB0aGlzLl9yZXNvdXJjZXNbaWRlbnRpZmllcl07CisgICAgICAgIGlmICghcmVzb3VyY2UpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgcmVzb3VyY2UudHlwZSA9IFdlYkluc3BlY3Rv
ci5SZXNvdXJjZS5UeXBlW3R5cGVdOworICAgICAgICByZXNvdXJjZS5vdmVycmlkZW5Db250ZW50
ID0gc291cmNlU3RyaW5nOworCisgICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWxzLm5ldHdv
cmspCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLm5ldHdvcmsuYWRkUmVzb3VyY2Uo
cmVzb3VyY2UpOworICAgIH0sCisKKyAgICBkaWRDb21taXRMb2FkOiBmdW5jdGlvbihmcmFtZUlE
KQorICAgIHsKKyAgICB9LAorCisgICAgZnJhbWVEZXRhY2hlZEZyb21QYXJlbnQ6IGZ1bmN0aW9u
KGZyYW1lSUQpCisgICAgeworICAgICAgICB2YXIgcmVzb3VyY2VzRm9yRnJhbWUgPSB0aGlzLl9y
ZXNvdXJjZXNCeUZyYW1lW2ZyYW1lSURdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgcmVzb3Vy
Y2VzRm9yRnJhbWUgJiYgaSA8IHJlc291cmNlc0ZvckZyYW1lLmxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuX3Jlc291cmNlc1tyZXNvdXJjZXNGb3JGcmFtZVtpXS5pZGVudGlm
aWVyXTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX3Jlc291cmNlc0J5RnJhbWVbZnJhbWVJRF07Cisg
ICAgfSwKKworICAgIGRpZENyZWF0ZVdlYlNvY2tldDogZnVuY3Rpb24oaWRlbnRpZmllciwgcmVx
dWVzdFVSTCkKKyAgICB7CisgICAgICAgIHRoaXMuaWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0
KGlkZW50aWZpZXIsIHJlcXVlc3RVUkwpOworICAgICAgICB2YXIgcmVzb3VyY2UgPSB0aGlzLl9y
ZXNvdXJjZXNbaWRlbnRpZmllcl07CisgICAgICAgIHJlc291cmNlLnR5cGUgPSBXZWJJbnNwZWN0
b3IuUmVzb3VyY2UuVHlwZS5XZWJTb2NrZXQ7CisKKyAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5w
YW5lbHMubmV0d29yaykKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMubmV0d29yay5h
ZGRSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgfSwKKworICAgIHdpbGxTZW5kV2ViU29ja2V0SGFu
ZHNoYWtlUmVxdWVzdDogZnVuY3Rpb24oaWRlbnRpZmllciwgdGltZSwgcmVxdWVzdCkKKyAgICB7
CisgICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMuX3Jlc291cmNlc1tpZGVudGlmaWVyXTsKKyAg
ICAgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICByZXNv
dXJjZS5yZXF1ZXN0TWV0aG9kID0gIkdFVCI7CisgICAgICAgIHJlc291cmNlLnJlcXVlc3RIZWFk
ZXJzID0gcmVxdWVzdC53ZWJTb2NrZXRIZWFkZXJGaWVsZHM7CisgICAgICAgIHJlc291cmNlLndl
YlNvY2tldFJlcXVlc3RLZXkzID0gcmVxdWVzdC53ZWJTb2NrZXRSZXF1ZXN0S2V5MzsKKyAgICAg
ICAgcmVzb3VyY2Uuc3RhcnRUaW1lID0gdGltZTsKKworICAgICAgICBpZiAoV2ViSW5zcGVjdG9y
LnBhbmVscy5uZXR3b3JrKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5uZXR3b3Jr
LnJlZnJlc2hSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgfSwKKworICAgIGRpZFJlY2VpdmVXZWJT
b2NrZXRIYW5kc2hha2VSZXNwb25zZTogZnVuY3Rpb24oaWRlbnRpZmllciwgdGltZSwgcmVzcG9u
c2UpCisgICAgeworICAgICAgICB2YXIgcmVzb3VyY2UgPSB0aGlzLl9yZXNvdXJjZXNbaWRlbnRp
Zmllcl07CisgICAgICAgIGlmICghcmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgcmVzb3VyY2Uuc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1c0NvZGU7CisgICAgICAg
IHJlc291cmNlLnN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0dXNUZXh0OworICAgICAgICByZXNv
dXJjZS5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZS53ZWJTb2NrZXRIZWFkZXJGaWVsZHM7Cisg
ICAgICAgIHJlc291cmNlLndlYlNvY2tldENoYWxsZW5nZVJlc3BvbnNlID0gcmVzcG9uc2Uud2Vi
U29ja2V0Q2hhbGxlbmdlUmVzcG9uc2U7CisgICAgICAgIHJlc291cmNlLnJlc3BvbnNlUmVjZWl2
ZWRUaW1lID0gdGltZTsKKworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5uZXR3b3Jr
KQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5uZXR3b3JrLnJlZnJlc2hSZXNvdXJj
ZShyZXNvdXJjZSk7CisgICAgfSwKKworICAgIGRpZENsb3NlV2ViU29ja2V0OiBmdW5jdGlvbihp
ZGVudGlmaWVyLCB0aW1lKQorICAgIHsKKyAgICAgICAgdmFyIHJlc291cmNlID0gdGhpcy5fcmVz
b3VyY2VzW2lkZW50aWZpZXJdOworICAgICAgICBpZiAoIXJlc291cmNlKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICByZXNvdXJjZS5lbmRUaW1lID0gdGltZTsKKworICAgICAgICBpZiAo
V2ViSW5zcGVjdG9yLnBhbmVscy5uZXR3b3JrKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBh
bmVscy5uZXR3b3JrLnJlZnJlc2hSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgfQorfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCmluZGV4IDhmZjgyYzku
LmZkMTY4NDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJj
ZXNQYW5lbC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFu
ZWwuanMKQEAgLTEyOTEsMTEgKzEyOTEsNiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwu
cHJvdG90eXBlID0gewogCiBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLl9f
cHJvdG9fXyA9IFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGU7CiAKLVdlYkluc3BlY3Rvci5n
ZXRSZXNvdXJjZUNvbnRlbnQgPSBmdW5jdGlvbihpZGVudGlmaWVyLCBjYWxsYmFjaykKLXsKLSAg
ICBJbnNwZWN0b3JCYWNrZW5kLmdldFJlc291cmNlQ29udGVudChpZGVudGlmaWVyLCBmYWxzZSwg
Y2FsbGJhY2spOwotfQotCiBXZWJJbnNwZWN0b3IuUmVzb3VyY2VCYXNlQ2FsY3VsYXRvciA9IGZ1
bmN0aW9uKCkKIHsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
b3VyY2VWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMK
aW5kZXggMDk1NDliZi4uODA5MjUwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NvdXJjZVZpZXcuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nv
dXJjZVZpZXcuanMKQEAgLTgzLDcgKzgzLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLmF0dGFjaCgpOwogCiAgICAgICAgIGRlbGV0ZSB0aGlz
Ll9mcmFtZU5lZWRzU2V0dXA7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5nZXRSZXNvdXJjZUNvbnRl
bnQodGhpcy5yZXNvdXJjZS5pZGVudGlmaWVyLCB0aGlzLl9jb250ZW50TG9hZGVkLmJpbmQodGhp
cykpOworICAgICAgICB0aGlzLnJlc291cmNlLmdldENvbnRlbnRzKHRoaXMuX2NvbnRlbnRMb2Fk
ZWQuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIGhhc0NvbnRlbnRUYWI6IGZ1bmN0aW9uKCkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKaW5kZXggMTEzODJjZC4uYTU5MzNh
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKQEAgLTY4LDYgKzY4LDcg
QEAKICAgICA8ZmlsZT5SZW1vdGVPYmplY3QuanM8L2ZpbGU+CiAgICAgPGZpbGU+UmVzb3VyY2Uu
anM8L2ZpbGU+CiAgICAgPGZpbGU+UmVzb3VyY2VDYXRlZ29yeS5qczwvZmlsZT4KKyAgICA8Zmls
ZT5SZXNvdXJjZU1hbmFnZXIuanM8L2ZpbGU+CiAgICAgPGZpbGU+UmVzb3VyY2VzUGFuZWwuanM8
L2ZpbGU+CiAgICAgPGZpbGU+UmVzb3VyY2VWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPlNjb3Bl
Q2hhaW5TaWRlYmFyUGFuZS5qczwvZmlsZT4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuaHRtbAppbmRleCA5NDliMThmLi41OWE1Zjc5IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCkBAIC02MSw2ICs2MSw3IEBAIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUGFuZWwuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRpbWVsaW5lR3JpZC5q
cyI+PC9zY3JpcHQ+ICAgIAogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IlJlc291cmNlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJSZXNvdXJjZU1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IlJlc291cmNlQ2F0ZWdvcnkuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRhdGFiYXNlLmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJET01TdG9yYWdlLmpz
Ij48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNw
ZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4
IGE2YjQ4NDUuLjQxMTY0MTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5qcwpAQCAtNTA3LDYgKzUwNyw3IEBAIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUgPSBmdW5j
dGlvbigpCiAgICAgLy8gdGhpcy5jaGFuZ2VzID0gbmV3IFdlYkluc3BlY3Rvci5DaGFuZ2VzVmll
dyh0aGlzLmRyYXdlcik7CiAgICAgLy8gVE9ETzogUmVtb3ZlIGNsYXNzPSJoaWRkZW4iIGZyb20g
aW5zcGVjdG9yLmh0bWwgb24gYnV0dG9uI2NoYW5nZXMtc3RhdHVzLWJhci1pdGVtCiAgICAgdGhp
cy5kcmF3ZXIudmlzaWJsZVZpZXcgPSB0aGlzLmNvbnNvbGU7CisgICAgdGhpcy5yZXNvdXJjZU1h
bmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlTWFuYWdlcigpOwogICAgIHRoaXMuZG9t
QWdlbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTUFnZW50KCk7CiAKICAgICB0aGlzLnJlc291cmNl
Q2F0ZWdvcmllcyA9IHsKQEAgLTEyMjAsOCArMTIyMSw2IEBAIFdlYkluc3BlY3Rvci51cGRhdGVS
ZXNvdXJjZSA9IGZ1bmN0aW9uKHBheWxvYWQpCiAgICAgICAgIHRoaXMucmVzb3VyY2VVUkxNYXBb
cmVzb3VyY2UudXJsXSA9IHJlc291cmNlOwogICAgICAgICB0aGlzLnBhbmVscy5yZXNvdXJjZXMu
YWRkUmVzb3VyY2UocmVzb3VyY2UpOwogICAgICAgICB0aGlzLnBhbmVscy5hdWRpdHMucmVzb3Vy
Y2VTdGFydGVkKHJlc291cmNlKTsKLSAgICAgICAgaWYgKHRoaXMucGFuZWxzLm5ldHdvcmspCi0g
ICAgICAgICAgICB0aGlzLnBhbmVscy5uZXR3b3JrLmFkZFJlc291cmNlKHJlc291cmNlKTsKICAg
ICB9CiAKICAgICBpZiAocGF5bG9hZC5kaWRSZXF1ZXN0Q2hhbmdlKSB7CkBAIC0xMjgxLDEyICsx
MjgwLDggQEAgV2ViSW5zcGVjdG9yLnVwZGF0ZVJlc291cmNlID0gZnVuY3Rpb24ocGF5bG9hZCkK
ICAgICAgICAgaWYgKHBheWxvYWQuZW5kVGltZSkKICAgICAgICAgICAgIHJlc291cmNlLmVuZFRp
bWUgPSBwYXlsb2FkLmVuZFRpbWU7CiAgICAgfQotCi0gICAgaWYgKHRoaXMucGFuZWxzLm5ldHdv
cmspCi0gICAgICAgIHRoaXMucGFuZWxzLm5ldHdvcmsucmVmcmVzaFJlc291cmNlKHJlc291cmNl
KTsKIH0KIAotCiBXZWJJbnNwZWN0b3IuZG9tQ29udGVudEV2ZW50RmlyZWQgPSBmdW5jdGlvbih0
aW1lKQogewogICAgIHRoaXMucGFuZWxzLnJlc291cmNlcy5tYWluUmVzb3VyY2VET01Db250ZW50
VGltZSA9IHRpbWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvbmV0
d29ya1BhbmVsLmNzcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9uZXR3b3JrUGFuZWwu
Y3NzCmluZGV4IDA5OGNhNTIuLjc3M2ZlOTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9uZXR3b3JrUGFuZWwuY3NzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9uZXR3b3JrUGFuZWwuY3NzCkBAIC02MCw2ICs2MCwxMSBAQAogICAgIGZvbnQtc2l6ZTog
MTFweDsKICAgICBmb250LXdlaWdodDogYm9sZDsKIH0KKworLm5ldHdvcmsucGFuZWwgLmRhdGEt
Z3JpZCB0ci5maWxsZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworfQorCiAubmV0
d29yay5wYW5lbCAuZGF0YS1ncmlkIHRkLm5hbWUtY29sdW1uIHsKICAgICBmb250LXdlaWdodDog
Ym9sZDsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE5vdGlmaWVy
LmNwcCBiL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE5vdGlmaWVyLmNwcAppbmRleCBjNDNh
MWRhLi5iMzJiNzM3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWROb3Rp
Zmllci5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwCkBA
IC0xMzYsNyArMTM2LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWROb3RpZmllcjo6ZGlzcGF0Y2hEaWRS
ZWNlaXZlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW4KIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAg
IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGlkZW50aWZp
ZXIsIHIpOworICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRpZFJlY2VpdmVS
ZXNwb25zZShpZGVudGlmaWVyLCBsb2FkZXIsIHIpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAgYi9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCmluZGV4IGRjMWU2
NjEuLjhkNWQ1YzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVHcm91cC5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUdyb3VwLmNwcApAQCAtNTIzLDcgKzUyMyw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3Qg
UmVzCiAgICAgICAgICAgICBpZiAoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBs
aWNhdGlvbkNhY2hlQWdlbnQgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmFwcGxpY2F0
aW9uQ2FjaGVBZ2VudCgpKQogICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uQ2FjaGVBZ2VudC0+
ZGlkUmVjZWl2ZU1hbmlmZXN0UmVzcG9uc2UobV9jdXJyZW50UmVzb3VyY2VJZGVudGlmaWVyLCBy
ZXNwb25zZSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpLT5kaWRSZWNlaXZlUmVzcG9uc2UobV9jdXJyZW50UmVzb3VyY2VJZGVudGlmaWVy
LCByZXNwb25zZSk7CisgICAgICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRp
ZFJlY2VpdmVSZXNwb25zZShtX2N1cnJlbnRSZXNvdXJjZUlkZW50aWZpZXIsIG1fZnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpLCByZXNwb25zZSk7CiAgICAgfQogI2VuZGlmCiAKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDAyOGJmZWMuLjU2M2UzYmUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDEwLTEwLTE3ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IEludHJvZHVjZSBJbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgvY3BwIGFuZCBSZXNvdXJj
ZU1hbmFnZXIuanMgdG8KKyAgICAgICAgZmlsbCBuZXR3b3JrIHBhbmVsIHdpdGggZGF0YS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3Nzc5CisKKyAg
ICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKwogMjAxMC0xMC0xNyAg
UGFzY2FsIE1hc3NpbWlubyAgPHBhc2NhbC5tYXNzaW1pbm9AZ21haWwuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9v
bHNBZ2VudEltcGwuY3BwCmluZGV4IDMzY2MwOWIuLjliN2IyYmQgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCkBAIC0zMzMsNyArMzMzLDcgQEAgdm9p
ZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkUmVjZWl2ZURhdGEodW5zaWduZWQgbG9uZyByZXNv
dXJjZUlkLCBpbnQgbGVuZ3RoKQogdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VJZCwgY29uc3QgV2ViVVJMUmVzcG9uc2Um
IHJlc3BvbnNlKQogewogICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3Rv
ckNvbnRyb2xsZXIoKSkKLSAgICAgICAgaWMtPmRpZFJlY2VpdmVSZXNwb25zZShyZXNvdXJjZUlk
LCByZXNwb25zZS50b1Jlc291cmNlUmVzcG9uc2UoKSk7CisgICAgICAgIGljLT5kaWRSZWNlaXZl
UmVzcG9uc2UocmVzb3VyY2VJZCwgMCwgcmVzcG9uc2UudG9SZXNvdXJjZVJlc3BvbnNlKCkpOwog
fQogCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVk
IGxvbmcgcmVzb3VyY2VJZCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>