<?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>121796</bug_id>
          
          <creation_ts>2013-09-23 11:19:56 -0700</creation_ts>
          <short_desc>Move breakpoint (and exception break) functionality into JSC::Debugger</short_desc>
          <delta_ts>2013-11-08 12:02:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>121867</dependson>
    
    <dependson>121969</dependson>
    
    <dependson>123945</dependson>
          <blocked>122836</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>timothy</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>932208</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-23 11:19:56 -0700</bug_when>
    <thetext>We should provide a more realistic Debugger interface that hides the JSC debug hook callbacks from clients.  This entails:

1. Extract the JSC debug hook callbacks into a JSC::DebuggerEventHandler interface.  The JSC::Debugger not privately implements this interface.

2. Move non-front end related functionality from WebCore::ScriptDebugServer into JSC::Debugger.

3. Move WebCore::JavaScriptCallFrame functionality into a Debugger::FrameVisitor class.  The JavaScriptCallFrame is still necessary because it is published as a JS object to the Inspector.  In a later task, I&apos;ll consolidate the Debugger::FrameVisitor functionality into DebuggerCallFrame, and remove the need for the Debugger::FrameVisitor (and may require a lot more refactoring work inside JSC).  For now, to keep things simpler for the present task, we&apos;re sticking with the Debugger::FrameVisitor.

4. Create a JSC::Breakpoint based on a subset of WebCore::ScriptBreakPoint.

5. Reimplement WebKit/mac&apos;s WebScriptDebugger in terms based on the new public JSC::Debugger interface (i.e. no use of the JSC debug hooks).

Some additional steps that are not strictly needed by this refactoring effort, but is a clean up that should be done:

6. Source ID is now always an intptr_t below the InspectorDebugAgent layer.  The InspectorDebugAgent takes care of translating between the Inspector JSON protocol&apos;s String sourceId and the intptr_t sourceId when needed.

7. Breakpoint ID is now a long instead of a String.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932214</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-23 11:35:14 -0700</bug_when>
    <thetext>(In reply to comment #0)
Some typos ...

&gt; 1. Extract the JSC debug hook callbacks into a JSC::DebuggerEventHandler interface.  The JSC::Debugger not privately implements this interface.

&quot;not&quot; ==&gt; &quot;now&quot;

&gt; 5. Reimplement WebKit/mac&apos;s WebScriptDebugger in terms based on the new public JSC::Debugger interface (i.e. no use of the JSC debug hooks).

Reimplement WebKit/mac&apos;s WebScriptDebugger based on the new JSC::Debugger interface (i.e. no use of the JSC debug hooks).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932218</commentid>
    <comment_count>2</comment_count>
      <attachid>212373</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-23 11:40:41 -0700</bug_when>
    <thetext>Created attachment 212373
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932220</commentid>
    <comment_count>3</comment_count>
      <attachid>212373</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-23 11:46:56 -0700</bug_when>
    <thetext>Comment on attachment 212373
the patch.

Need to remove JavaScriptCallFrame.cpp from other build systems as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932223</commentid>
    <comment_count>4</comment_count>
      <attachid>212375</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-23 11:54:27 -0700</bug_when>
    <thetext>Created attachment 212375
Removed JavaScriptCallFrame.cpp from other build system files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932224</commentid>
    <comment_count>5</comment_count>
      <attachid>212373</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-23 11:55:31 -0700</bug_when>
    <thetext>Comment on attachment 212373
the patch.

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

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        3. Move WebCore::JavaScriptCallFrame functionality into a
&gt; +           Debugger::FrameVisitor class.  The JavaScriptCallFrame is still
&gt; +           necessary because it is published as a JS object to the Inspector. In

If there&apos;s an object model published by the Web Inspector, that model belongs in WebCore&apos;s Web Inspector code, and not in JavaScriptCore.

&gt; Source/JavaScriptCore/debugger/Breakpoint.h:36
&gt; +namespace WebCore {

The WebCore namespace doesn&apos;t belong in JavaScriptCore.

&gt; Source/JavaScriptCore/debugger/Breakpoint.h:42
&gt; +typedef enum {
&gt; +    ScriptBreakpointActionTypeLog,
&gt; +    ScriptBreakpointActionTypeEvaluate,
&gt; +    ScriptBreakpointActionTypeSound
&gt; +} ScriptBreakpointActionType;

Why is everything prefixed with &quot;Script&quot;?

&gt; Source/JavaScriptCore/debugger/Breakpoint.h:55
&gt; +struct ScriptBreakpoint {

Let&apos;s not double the number of objects used to represent a breakpoint. One should be enough.

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:48
&gt; +    DebuggerEventHandler* m_debugger;

We call client interfaces like this &quot;*Client&quot;. So, &quot;DebuggerClient&quot;.

&gt; Source/JavaScriptCore/debugger/Debugger.h:42
&gt; +class DebuggerEventHandler {

We don&apos;t need (or want) an abstract interface for something that&apos;s implemented by exactly one subclass. Unnecessary abstraction makes the code harder to read.

&gt; Source/JavaScriptCore/debugger/DebuggerFrameVisitor.cpp:28
&gt; +#if ENABLE(JAVASCRIPT_DEBUGGER)

We don&apos;t need an enable flag for this.

&gt; Source/JavaScriptCore/debugger/DebuggerFrameVisitor.cpp:30
&gt; +#include &quot;JavaScriptCallFrame.h&quot;

Files should be named after the classes they contain. So, DebuggerFrameVisitor is not a good name for this file.

&gt; Source/JavaScriptCore/debugger/DebuggerFrameVisitor.cpp:46
&gt; +JavaScriptCallFrame::JavaScriptCallFrame(const DebuggerCallFrame&amp; debuggerCallFrame, PassRefPtr&lt;JavaScriptCallFrame&gt; caller)

Let&apos;s not double the number of objects used to represent the JavaScript stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932227</commentid>
    <comment_count>6</comment_count>
      <attachid>212375</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-23 12:01:33 -0700</bug_when>
    <thetext>Comment on attachment 212375
Removed JavaScriptCallFrame.cpp from other build system files.

Attachment 212375 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1903249</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932229</commentid>
    <comment_count>7</comment_count>
      <attachid>212375</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-23 12:03:54 -0700</bug_when>
    <thetext>Comment on attachment 212375
Removed JavaScriptCallFrame.cpp from other build system files.

Attachment 212375 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/2105068</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932235</commentid>
    <comment_count>8</comment_count>
      <attachid>212375</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-09-23 12:15:55 -0700</bug_when>
    <thetext>Comment on attachment 212375
Removed JavaScriptCallFrame.cpp from other build system files.

Attachment 212375 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/1903250</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932237</commentid>
    <comment_count>9</comment_count>
      <attachid>212373</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-23 12:19:33 -0700</bug_when>
    <thetext>Comment on attachment 212373
the patch.

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:16
&gt;&gt; +           necessary because it is published as a JS object to the Inspector. In
&gt; 
&gt; If there&apos;s an object model published by the Web Inspector, that model belongs in WebCore&apos;s Web Inspector code, and not in JavaScriptCore.

WebCore::JavaScriptCallFrame still resides in WebCore.  The only differences is that it is now implemented based on JSC::Debugger::FrameVisitor.  When I said &quot;move&quot;, I meant that JSC::Debugger::FrameVisitor will now provide the functionality, and WebCore::JavaScriptCallFrame will implement it by inheriting it from JSC::Debugger::FrameVisitor.

&gt;&gt; Source/JavaScriptCore/debugger/Breakpoint.h:36
&gt;&gt; +namespace JSC {
&gt; 
&gt; The WebCore namespace doesn&apos;t belong in JavaScriptCore.

It isn&apos;t in JavaScriptCore.  Breakpoint is implemented based on ScriptBreakpoint.  So, I &quot;svn cp&quot; the file so that we get to keep the change history.  The change above modifies it so that we&apos;re using the JSC name space.  I&apos;ve not added any reference to WebCore in JavaScriptCore.

&gt;&gt; Source/JavaScriptCore/debugger/Breakpoint.h:42
&gt;&gt; +    Breakpoint()
&gt; 
&gt; Why is everything prefixed with &quot;Script&quot;?

It isn&apos;t.  Look again.  I&apos;m removing the prefix, not adding it.

&gt;&gt; Source/JavaScriptCore/debugger/Breakpoint.h:55
&gt;&gt;  
&gt; 
&gt; Let&apos;s not double the number of objects used to represent a breakpoint. One should be enough.

Can you please clarify what you mean by this?  In my implementation, there is only one representation of a breakpoint i.e. JSC::Breakpoint.  On WebCore side, they have a ScriptBreakpoint that is used as a collection of paramteters to pass to the debugger.  I could rename WebCore::ScriptBreakpoint to WebCore::ScriptBreakpointParamaters if you prefer that.

&gt;&gt; Source/JavaScriptCore/debugger/Debugger.h:42
&gt;&gt; +class DebuggerEventHandler {
&gt; 
&gt; We don&apos;t need (or want) an abstract interface for something that&apos;s implemented by exactly one subclass. Unnecessary abstraction makes the code harder to read.

This interface is meant to be obsoleted when we implement the new debugger.  I isolated it into a separate interface like this so that these APIS can be public only to the clients that uses it (i.e. old debug hook code that will eventually get replaced), while keeping it private from that the ScriptDebugServer (and its subclasses) and WebScriptDebugger classes.  This allows me to use the C++ compiler to ensure that no mistakes were made where the old debug hook interfaces get accidentally leaked out and used in clients who aren&apos;t meant to use it.  If you object to this approach to encapsulating the old functionality, I can just make them public in JSC::Debugger again.

&gt;&gt; Source/JavaScriptCore/debugger/DebuggerFrameVisitor.cpp:28
&gt;&gt;  
&gt; 
&gt; We don&apos;t need an enable flag for this.

Yes.  I removed this enable flag, not added it.  Please look again.

&gt;&gt; Source/JavaScriptCore/debugger/DebuggerFrameVisitor.cpp:30
&gt;&gt;  
&gt; 
&gt; Files should be named after the classes they contain. So, DebuggerFrameVisitor is not a good name for this file.

The class they contain is JSC::Debugger::FrameVisitor.  What would you recommend as a name if not DebuggerFrameVisitor.cpp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932246</commentid>
    <comment_count>10</comment_count>
      <attachid>212375</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-09-23 12:35:52 -0700</bug_when>
    <thetext>Comment on attachment 212375
Removed JavaScriptCallFrame.cpp from other build system files.

Attachment 212375 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/2110046</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932248</commentid>
    <comment_count>11</comment_count>
      <attachid>212375</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-23 12:37:12 -0700</bug_when>
    <thetext>Comment on attachment 212375
Removed JavaScriptCallFrame.cpp from other build system files.

Will fix the build problems.  Shouldn&apos;t have svn up&apos;ed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932260</commentid>
    <comment_count>12</comment_count>
      <attachid>212383</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-23 13:11:54 -0700</bug_when>
    <thetext>Created attachment 212383
Fix build issues.

The culprit were inline functions, not the svn up.  This only manifests on release builds (the issue is hidden on debug builds).  It&apos;s now fixe.  Uploading a new patch to let the EWS bots give a go at it.  Geoff&apos;s feedback has not been addressed yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932385</commentid>
    <comment_count>13</comment_count>
      <attachid>212383</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-23 17:34:46 -0700</bug_when>
    <thetext>Comment on attachment 212383
Fix build issues.

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

Based on our talk in-person, here are the refactoring steps we want:

(1) Change ScriptDebugServer in WebCore to use DebuggerCallFrame instead of JavaScriptCallFrame:
    (1a) Add JSLocking to DebuggerCallFrame
    (1b) Rewrite member functions to use DebuggerCallFrame directly
    (1c) Rewrite ScriptDebugServer::dispatchDidPause to create a new JavaScriptCallFrame for each callback. Test to verify that the front-end doesn&apos;t depend on object identity here.

(3) Move some of ScriptDebugServer into JavaScriptCore&apos;s JSC::Debugger. Split out ScriptBreakpointAction from the Breakpoint interface JavaScriptCore will expose.

(4) Rewrite WebScriptDebugger in terms of new JavaScript debugger API.

(5) Make VM debugger callbacks non-virtual.

(6) Change DebuggerCallFrame into a ref-counted object that automatically nullifies itself after a callback.

&gt; Source/JavaScriptCore/debugger/Debugger.h:58
&gt; +class JS_EXPORT_PRIVATE Debugger : private DebuggerEventHandler {

Let&apos;s make this one class -- Debugger. Our legacy VM callbacks can be non-virtual public functions with a comment above them saying &quot;These are the deprecated callbacks we get from the VM. Clients of Debugger should not call these functions.&quot;

Non-virtual is important because it specifies that new clients, with overriding behavior, are not allowed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947968</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-06 16:14:47 -0800</bug_when>
    <thetext>Status update:

(In reply to comment #13)
&gt; (From update of attachment 212383 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=212383&amp;action=review
&gt; 
&gt; Based on our talk in-person, here are the refactoring steps we want:
&gt; 
&gt; (1) Change ScriptDebugServer in WebCore to use DebuggerCallFrame instead of JavaScriptCallFrame:
&gt;     (1a) Add JSLocking to DebuggerCallFrame
&gt;     (1b) Rewrite member functions to use DebuggerCallFrame directly
&gt;     (1c) Rewrite ScriptDebugServer::dispatchDidPause to create a new JavaScriptCallFrame for each callback. Test to verify that the front-end doesn&apos;t depend on object identity here.

This has already been in implemented in r156936: &lt;http://trac.webkit.org/r156936&gt; for https://bugs.webkit.org/show_bug.cgi?id=121969.

&gt; (3) Move some of ScriptDebugServer into JavaScriptCore&apos;s JSC::Debugger. Split out ScriptBreakpointAction from the Breakpoint interface JavaScriptCore will expose.
&gt; (4) Rewrite WebScriptDebugger in terms of new JavaScript debugger API.
&gt; (5) Make VM debugger callbacks non-virtual.

Will do these as part of this bug (https://bugs.webkit.org/show_bug.cgi?id=121796).

&gt; (6) Change DebuggerCallFrame into a ref-counted object that automatically nullifies itself after a callback.

This has already been in implemented in r156936: &lt;http://trac.webkit.org/r156936&gt; for https://bugs.webkit.org/show_bug.cgi?id=121969.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948469</commentid>
    <comment_count>15</comment_count>
      <attachid>216342</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-07 16:25:40 -0800</bug_when>
    <thetext>Created attachment 216342
candidate patch with the latest goodness.

Not sure this is ready for review yet, but I want to upload it so that I can try it on the EWS bots plus have a prettier view of the diff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948470</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-07 16:28:10 -0800</bug_when>
    <thetext>Attachment 216342 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/debugger/Breakpoint.h&apos;, u&apos;Source/JavaScriptCore/debugger/Debugger.cpp&apos;, u&apos;Source/JavaScriptCore/debugger/Debugger.h&apos;, u&apos;Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp&apos;, u&apos;Source/JavaScriptCore/debugger/DebuggerCallFrame.h&apos;, u&apos;Source/JavaScriptCore/debugger/DebuggerPrimitives.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/js/BreakpointID.h&apos;, u&apos;Source/WebCore/bindings/js/ScriptDebugServer.cpp&apos;, u&apos;Source/WebCore/bindings/js/ScriptDebugServer.h&apos;, u&apos;Source/WebCore/bindings/js/SourceID.h&apos;, u&apos;Source/WebCore/bindings/js/WorkerScriptDebugServer.cpp&apos;, u&apos;Source/WebCore/bindings/js/WorkerScriptDebugServer.h&apos;, u&apos;Source/WebCore/inspector/InspectorDebuggerAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorDebuggerAgent.h&apos;, u&apos;Source/WebCore/inspector/ScriptDebugListener.h&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/WebView/WebScriptDebugger.h&apos;, u&apos;Source/WebKit/mac/WebView/WebScriptDebugger.mm&apos;]&quot; exit_code: 1
Source/JavaScriptCore/ChangeLog:23:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 21 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>948477</commentid>
    <comment_count>17</comment_count>
      <attachid>216342</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-07 17:06:42 -0800</bug_when>
    <thetext>Comment on attachment 216342
candidate patch with the latest goodness.

Attachment 216342 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/22718328</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948478</commentid>
    <comment_count>18</comment_count>
      <attachid>216342</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-07 17:09:50 -0800</bug_when>
    <thetext>Comment on attachment 216342
candidate patch with the latest goodness.

I forgot to update all the other build systems with the new files.  Will upload another patch shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948481</commentid>
    <comment_count>19</comment_count>
      <attachid>216344</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-07 17:31:44 -0800</bug_when>
    <thetext>Created attachment 216344
patch 2: updated build files, fixed style issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948529</commentid>
    <comment_count>20</comment_count>
      <attachid>216356</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-07 19:58:49 -0800</bug_when>
    <thetext>Created attachment 216356
patch 3: fixed some issue revealed by a Windows build.

I think it&apos;s ready for a review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948735</commentid>
    <comment_count>21</comment_count>
      <attachid>216356</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-11-08 11:03:55 -0800</bug_when>
    <thetext>Comment on attachment 216356
patch 3: fixed some issue revealed by a Windows build.

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

r=me

This is a reasonable first step. I&apos;m not sure the division of responsibilities is perfect yet. It seems odd for a JSC-level thing to be in charge of defining ReasonForPause, and implementing all the reasons you might pause. That constrains the design of the debugger UI to the set of reasons the VM builds in. A more flexible design would just build into JSC the ability to pause -- and the debugger UI layer could invent as many reasons as it liked.

&gt; Source/JavaScriptCore/debugger/DebuggerPrimitives.h:37
&gt; +typedef intptr_t SourceID;
&gt; +static const SourceID noSourceID = 0;
&gt; +
&gt; +typedef int32_t BreakpointID;
&gt; +static const BreakpointID noBreakpointID = 0;

Why intptr_t for one and int32_t for another? Seems like you actually want size_t for both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948742</commentid>
    <comment_count>22</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-08 11:12:32 -0800</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #21)
&gt; This is a reasonable first step. I&apos;m not sure the division of responsibilities is perfect yet. It seems odd for a JSC-level thing to be in charge of defining ReasonForPause, and implementing all the reasons you might pause. That constrains the design of the debugger UI to the set of reasons the VM builds in. A more flexible design would just build into JSC the ability to pause -- and the debugger UI layer could invent as many reasons as it liked.

Currently, the only real need for this is for the debugger UI layer to be able to tell that the pause is for an exception.  I just added the others as a means of providing more info for now, but they may end up being unnecessary.  We can tighten up or replace this design later once we have gained more experience with what this systems needs.

&gt; &gt; Source/JavaScriptCore/debugger/DebuggerPrimitives.h:37
&gt; &gt; +typedef intptr_t SourceID;
&gt; &gt; +static const SourceID noSourceID = 0;
&gt; &gt; +
&gt; &gt; +typedef int32_t BreakpointID;
&gt; &gt; +static const BreakpointID noBreakpointID = 0;
&gt; 
&gt; Why intptr_t for one and int32_t for another? Seems like you actually want size_t for both.

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948780</commentid>
    <comment_count>23</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-08 12:02:34 -0800</bug_when>
    <thetext>Landed in r158937: &lt;http://trac.webkit.org/r158937&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212373</attachid>
            <date>2013-09-23 11:40:41 -0700</date>
            <delta_ts>2013-09-23 12:31:54 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-121796.patch</filename>
            <type>text/plain</type>
            <size>113720</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2MjgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBA
CisyMDEzLTA5LTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZWZhY3RvciB0byBoaWRlIERlYnVnZ2VyIGNhbGxiYWNrIGludGVyZmFjZSBpbnNpZGUgSlNDLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzk2Lgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDEuIEV4dHJh
Y3QgdGhlIEpTQyBkZWJ1ZyBob29rIGNhbGxiYWNrcyBpbnRvIGEgSlNDOjpEZWJ1Z2dlckV2ZW50
SGFuZGxlcgorICAgICAgICAgICBpbnRlcmZhY2UuIFRoZSBKU0M6OkRlYnVnZ2VyIG5vdyBwcml2
YXRlbHkgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZS4KKworICAgICAgICAyLiBNb3ZlIG5vbi1m
cm9udCBlbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGZyb20gV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXIKKyAgICAgICAgICAgaW50byBKU0M6OkRlYnVnZ2VyLgorCisgICAgICAgIDMuIE1vdmUg
V2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFtZSBmdW5jdGlvbmFsaXR5IGludG8gYQorICAgICAg
ICAgICBEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yIGNsYXNzLiAgVGhlIEphdmFTY3JpcHRDYWxsRnJh
bWUgaXMgc3RpbGwKKyAgICAgICAgICAgbmVjZXNzYXJ5IGJlY2F1c2UgaXQgaXMgcHVibGlzaGVk
IGFzIGEgSlMgb2JqZWN0IHRvIHRoZSBJbnNwZWN0b3IuIEluCisgICAgICAgICAgIGEgbGF0ZXIg
dGFzaywgSSdsbCBjb25zb2xpZGF0ZSB0aGUgRGVidWdnZXI6OkZyYW1lVmlzaXRvciBmdW5jdGlv
bmFsaXR5CisgICAgICAgICAgIGludG8gRGVidWdnZXJDYWxsRnJhbWUsIGFuZCByZW1vdmUgdGhl
IG5lZWQgZm9yIHRoZSBEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yLgorCisgICAgICAgIDQuIENyZWF0
ZSBhIEpTQzo6QnJlYWtwb2ludCBiYXNlZCBvbiBhIHN1YnNldCBvZiBXZWJDb3JlOjpTY3JpcHRC
cmVha1BvaW50LgorCisgICAgICAgIDUuIFJlaW1wbGVtZW50IFdlYktpdC9tYWMncyBXZWJTY3Jp
cHREZWJ1Z2dlciBiYXNlZCBvbiB0aGUgbmV3CisgICAgICAgICAgIEpTQzo6RGVidWdnZXIgaW50
ZXJmYWNlIChpLmUuIG5vIHVzZSBvZiB0aGUgSlNDIGRlYnVnIGhvb2tzKS4KKworICAgICAgICA2
LiBTb3VyY2UgSUQgaXMgbm93IGFsd2F5cyBhbiBpbnRwdHJfdCBiZWxvdyB0aGUgSW5zcGVjdG9y
RGVidWdBZ2VudCBsYXllci4KKyAgICAgICAgICAgVGhlIEluc3BlY3RvckRlYnVnQWdlbnQgdGFr
ZXMgY2FyZSBvZiB0cmFuc2xhdGluZyBiZXR3ZWVuIHRoZSBJbnNwZWN0b3IKKyAgICAgICAgICAg
SlNPTiBwcm90b2NvbCdzIFN0cmluZyBzb3VyY2VJZCBhbmQgdGhlIGludHB0cl90IHNvdXJjZUlk
IHdoZW4gbmVlZGVkLgorCisgICAgICAgIDcuIEJyZWFrcG9pbnQgSUQgaXMgbm93IGEgbG9uZyBp
bnN0ZWFkIG9mIGEgU3RyaW5nLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKToKKyAgICAgICAgKiBkZWJ1
Z2dlci9CcmVha3BvaW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9T
Y3JpcHRCcmVha3BvaW50LmguCisgICAgICAgIChKU0M6OkJyZWFrcG9pbnQ6OkJyZWFrcG9pbnQp
OgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXI6OkRlYnVnZ2VyKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmRldGFjaCk6CisgICAgICAg
IChKU0M6OkRlYnVnZ2VyOjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6
OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6aGFzQnJlYWtwb2lu
dCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpjbGVhckJyZWFrcG9pbnRzKToKKyAgICAgICAg
KEpTQzo6RGVidWdnZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKToKKyAgICAgICAgKEpTQzo6
RGVidWdnZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUpOgorICAgICAgICAoSlNDOjpEZWJ1
Z2dlcjo6c2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6
YnJlYWtQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmNvbnRpbnVlUHJvZ3JhbSk6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzdGVwSW50b1N0YXRlbWVudCk6CisgICAgICAgIChK
U0M6OkRlYnVnZ2VyOjpzdGVwT3ZlclN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
OjpzdGVwT3V0T2ZGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzb3VyY2VQYXJz
ZWQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6Y3JlYXRlQ2FsbEZyYW1lKToKKyAgICAgICAg
KEpTQzo6RGVidWdnZXI6OnVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQpOgorICAgICAg
ICAoSlNDOjpEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
OjpjYWxsRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6YXRTdGF0ZW1lbnQpOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6ZXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OndpbGxFeGVjdXRlUHJvZ3Jh
bSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpkaWRFeGVjdXRlUHJvZ3JhbSk6CisgICAgICAg
IChKU0M6OkRlYnVnZ2VyOjpkaWRSZWFjaEJyZWFrcG9pbnQpOgorICAgICAgICAqIGRlYnVnZ2Vy
L0RlYnVnZ2VyLmg6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyRXZlbnRIYW5kbGVyOjp+RGVidWdn
ZXJFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyRnJhbWVWaXNpdG9y
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENh
bGxGcmFtZS5jcHAuCisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OkZyYW1l
VmlzaXRvcik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OmNhbGxlcik6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OnNjb3BlQ2hhaW4pOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yOjpkeW5hbWljR2xvYmFsT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6RGVidWdnZXI6OkZyYW1lVmlzaXRvcjo6ZnVuY3Rpb25OYW1lKToKKyAg
ICAgICAgKEpTQzo6RGVidWdnZXI6OkZyYW1lVmlzaXRvcjo6dHlwZSk6CisgICAgICAgIChKU0M6
OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OnRoaXNPYmplY3QpOgorICAgICAgICAoSlNDOjpEZWJ1
Z2dlcjo6RnJhbWVWaXNpdG9yOjpleGVjKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OkZyYW1l
VmlzaXRvcjo6ZXZhbHVhdGUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNw
cDoKKyAgICAgICAgKEpTQzo6dW53aW5kQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OnVud2luZCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkZWJ1Zyk6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjcmVhdGVQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OmNyZWF0ZUV2YWxDb2RlQmxvY2spOgorCiAyMDEzLTA5LTIzICBQYXRyaWNrIEdhbnN0
ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIENsZWFudXAgQ01ha2UgZmlsZXMg
aW4gSmF2YVNjcmlwdENvcmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDE1NjI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDYgKzIwMCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgZGVidWdnZXIvRGVidWdnZXIuY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJB
Y3RpdmF0aW9uLmNwcAogICAgIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAorICAgIGRl
YnVnZ2VyL0RlYnVnZ2VyRnJhbWVWaXNpdG9yLmNwcAogCiAgICAgaW50ZXJwcmV0ZXIvQWJzdHJh
Y3RQQy5jcHAKICAgICBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU2MjQ1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAg
LTU0MSwxMCArNTQxLDEyIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllclN1cHBvcnQuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJTdXBwb3J0LmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9jb25maWcuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0JyZWFr
cG9pbnQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZh
dGlvbi5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2
YXRpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZy
YW1lLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZy
YW1lLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckZyYW1lVmlz
aXRvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvRm9yd2FyZGluZ0hlYWRlcnMvSmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5o
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxNTYyNDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYg
KzExMiw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGhlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAg
XAogICAgIGRlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgXAogICAgIGRlYnVnZ2VyL0Rl
YnVnZ2VyQ2FsbEZyYW1lLmNwcCBcCisgICAgZGVidWdnZXIvRGVidWdnZXJGcmFtZVZpc2l0b3Iu
Y3BwIFwKICAgICBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgXAogICAgIGRmZy9ERkdBYnN0cmFjdEhl
YXAuY3BwIFwKICAgICBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTYyNDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUsNiArMzI1LDcgQEAKICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckFjdGl2YXRpb24uY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCIgLz4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckZyYW1lVmlzaXRvci5jcHAi
IC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0NvbXBpbGF0aW9uS2V5LmNw
cCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRHJpdmVyLmNwcCIg
Lz4NCkBAIC02NzYsNiArNjc3LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b21waWxlclxMYWJlbFNjb3BlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0
ZWNvbXBpbGVyXFJlZ2lzdGVySUQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxj
b25maWcuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxCcmVha3Bv
aW50LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXIu
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckFjdGl2
YXRpb24uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dl
ckNhbGxGcmFtZS5oIiAvPg0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE1NjI0NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmls
dGVycwkod29ya2luZyBjb3B5KQpAQCAtMTkyLDYgKzE5Miw5IEBACiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckNhbGxGcmFtZS5jcHAiPg0KICAgICAgIDxGaWx0
ZXI+ZGVidWdnZXI8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJGcmFtZVZpc2l0b3IuY3BwIj4NCisgICAgICA8
RmlsdGVyPmRlYnVnZ2VyPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRpc2Fzc2VtYmxlclxEaXNhc3NlbWJsZXIuY3BwIj4NCiAgICAgICA8
RmlsdGVyPmRpc2Fzc2VtYmxlcjwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCkBAIC0xMTQ5
LDYgKzExNTIsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvbXBpbGVyXFJl
Z2lzdGVySUQuaCI+DQogICAgICAgPEZpbHRlcj5ieXRlY29kZWNvbXBpbGVyPC9GaWx0ZXI+DQog
ICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXEJy
ZWFrcG9pbnQuaCI+DQorICAgICAgPEZpbHRlcj5kZWJ1Z2dlcjwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlci5o
Ij4NCiAgICAgICA8RmlsdGVyPmRlYnVnZ2VyPC9GaWx0ZXI+DQogICAgIDwvQ2xJbmNsdWRlPg0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTYyNDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE1Miw2ICsxMTUyLDggQEAKIAkJRTQ5REMxNkQxMkVG
Mjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYg
LyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRD
TG9vcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi87IH07CiAJCUZFMjBD
RTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJ
bnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUZFMjY0MTI3MTdFN0E4OUEwMEU1Q0M4RSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI2NDEyNDE3RTdBODlBMDBFNUND
OEUgLyogQnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZFMzhDOTczMTdFN0NFQTgwMEU0RDBBRiAvKiBEZWJ1Z2dlckZyYW1lVmlz
aXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTM4Qzk3MjE3RTdDRUE4MDBFNEQwQUYgLyogRGVidWdnZXJGcmFtZVZpc2l0b3IuY3BwICovOyB9
OwogCQlGRTRBMzMxRjE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QTMzMUQxNUJEMkUwNzAw
NkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLzsgfTsKIAkJRkU0QTMzMjAxNUJEMkUwNzAwNkY1
NEYzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTY2MTcyODE3
NzRFMDM1MDA0OTVCMDAgLyogVk1TdGFja0JvdW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2NjE3MjcxNzc0RTAzNTAwNDk1QjAwIC8qIFZNU3Rh
Y2tCb3VuZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMjM4Nyw2ICsyMzg5LDggQEAKIAkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpT
Q0pTVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDSlNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgfTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRDTG9vcC5jcHA7IHBh
dGggPSBsbGludC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTI2NDEyNDE3RTdBODlBMDBFNUNDOEUg
LyogQnJlYWtwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCcmVha3Bv
aW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMzhDOTcyMTdFN0NFQTgwMEU0
RDBBRiAvKiBEZWJ1Z2dlckZyYW1lVmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZWJ1Z2dlckZyYW1lVmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFNEEzMzFEMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWTUluc3BlY3Rvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEEzMzFFMTVCRDJFMDcwMDZGNTRGMyAvKiBW
TUluc3BlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUluc3BlY3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTY2MTcyNzE3NzRFMDM1MDA0OTVC
MDAgLyogVk1TdGFja0JvdW5kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
TVN0YWNrQm91bmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTU5LDYgKzI5
NjMsOCBAQAogCQkxNDgwREI5QTBEREMyMjMxMDAzQ0ZERjIgLyogZGVidWdnZXIgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUZFMzhDOTcyMTdFN0NFQTgw
MEU0RDBBRiAvKiBEZWJ1Z2dlckZyYW1lVmlzaXRvci5jcHAgKi8sCisJCQkJRkUyNjQxMjQxN0U3
QTg5QTAwRTVDQzhFIC8qIEJyZWFrcG9pbnQuaCAqLywKIAkJCQlGNjkyQTg1ODAyNTU1OTdEMDFG
RjYwRjcgLyogRGVidWdnZXIuY3BwICovLAogCQkJCUY2OTJBODU5MDI1NTU5N0QwMUZGNjBGNyAv
KiBEZWJ1Z2dlci5oICovLAogCQkJCUJDMzEzNTYzMEYzMDJGQTMwMDNERkQzQSAvKiBEZWJ1Z2dl
ckFjdGl2YXRpb24uY3BwICovLApAQCAtMzg2Nyw2ICszODczLDcgQEAKIAkJCQkwRjgzMzVCODE2
MzlDMUVBMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdBOEFGMzUxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlGRTI2NDEyNzE3RTdBODlBMDBFNUNDOEUgLyogQnJlYWtwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdC
MiAvKiBBcnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQ1NTE1RDA3
MDU3MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTQ4OTEsNiAr
NDg5OCw3IEBACiAJCQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM1MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5z
dGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8q
IERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkUzOEM5NzMxN0U3Q0VBODAw
RTREMEFGIC8qIERlYnVnZ2VyRnJhbWVWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzMxMzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxG
cmFtZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU2MjQ1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSw3IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiBVbmxpbmtlZEZ1bmMKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IGNvZGVDYWNoZS0+Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoZXhl
Yy0+dm0oKSwgbmFtZSwgc291cmNlLCBlcnJvcik7CiAKICAgICBpZiAoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5oYXNEZWJ1Z2dlcigpKQotICAgICAgICBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmRlYnVnZ2VyKCktPnNvdXJjZVBhcnNlZChleGVjLCBzb3VyY2UucHJvdmlkZXIo
KSwgZXJyb3IubV9saW5lLCBlcnJvci5tX21lc3NhZ2UpOworICAgICAgICBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCktPmV2ZW50SGFuZGxlcigpLT5zb3VyY2VQYXJzZWQo
ZXhlYywgc291cmNlLnByb3ZpZGVyKCksIGVycm9yLm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsK
IAogICAgIGlmIChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSkgewogICAg
ICAgICAqZXhjZXB0aW9uID0gZXJyb3IudG9FcnJvck9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIHNvdXJjZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
QnJlYWtwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9CcmVha3BvaW50LmgJKHJldmlzaW9uIDE1NjAyMSkJKGZyb20gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaDoxNTYwMjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTY3JpcHRCcmVha3BvaW50X2gKKyNkZWZpbmUgU2NyaXB0QnJlYWtwb2ludF9oCisK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBTY3JpcHRCcmVh
a3BvaW50QWN0aW9uVHlwZUxvZywKKyAgICBTY3JpcHRCcmVha3BvaW50QWN0aW9uVHlwZUV2YWx1
YXRlLAorICAgIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlU291bmQKK30gU2NyaXB0QnJlYWtw
b2ludEFjdGlvblR5cGU7CisKK3N0cnVjdCBTY3JpcHRCcmVha3BvaW50QWN0aW9uIHsKKyAgICBT
Y3JpcHRCcmVha3BvaW50QWN0aW9uKFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgZGF0YSkKKyAgICAgICAgOiB0eXBlKHR5cGUpCisgICAgICAgICwgZGF0YShk
YXRhKQorICAgIHsKKyAgICB9CisKKyAgICBTY3JpcHRCcmVha3BvaW50QWN0aW9uVHlwZSB0eXBl
OworICAgIFN0cmluZyBkYXRhOworfTsKKworc3RydWN0IFNjcmlwdEJyZWFrcG9pbnQgeworICAg
IFNjcmlwdEJyZWFrcG9pbnQoKQorICAgIHsKKyAgICB9CisKKyAgICBTY3JpcHRCcmVha3BvaW50
KGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlv
biwgYm9vbCBhdXRvQ29udGludWUpCisgICAgICAgIDogbGluZU51bWJlcihsaW5lTnVtYmVyKQor
ICAgICAgICAsIGNvbHVtbk51bWJlcihjb2x1bW5OdW1iZXIpCisgICAgICAgICwgY29uZGl0aW9u
KGNvbmRpdGlvbikKKyAgICAgICAgLCBhdXRvQ29udGludWUoYXV0b0NvbnRpbnVlKQorICAgIHsK
KyAgICB9CisKKyAgICBTY3JpcHRCcmVha3BvaW50KGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1u
TnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgVmVjdG9yPFNjcmlwdEJyZWFrcG9pbnRB
Y3Rpb24+JiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51ZSkKKyAgICAgICAgOiBsaW5lTnVtYmVy
KGxpbmVOdW1iZXIpCisgICAgICAgICwgY29sdW1uTnVtYmVyKGNvbHVtbk51bWJlcikKKyAgICAg
ICAgLCBjb25kaXRpb24oY29uZGl0aW9uKQorICAgICAgICAsIGFjdGlvbnMoYWN0aW9ucykKKyAg
ICAgICAgLCBhdXRvQ29udGludWUoYXV0b0NvbnRpbnVlKQorICAgIHsKKyAgICB9CisKKyAgICBp
bnQgbGluZU51bWJlcjsKKyAgICBpbnQgY29sdW1uTnVtYmVyOworICAgIFN0cmluZyBjb25kaXRp
b247CisgICAgVmVjdG9yPFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24+IGFjdGlvbnM7CisgICAgYm9v
bCBhdXRvQ29udGludWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyAhZGVmaW5lZChTY3JpcHRCcmVha3BvaW50X2gpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9CcmVha3BvaW50LmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9CcmVha3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsNjAgKzI3LDUwIEBACiAgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgU2NyaXB0QnJlYWtwb2ludF9oCi0jZGVmaW5lIFNjcmlwdEJy
ZWFrcG9pbnRfaAorI2lmbmRlZiBCcmVha3BvaW50X2gKKyNkZWZpbmUgQnJlYWtwb2ludF9oCiAK
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBKU0MgewogCi10eXBlZGVmIGVudW0g
ewotICAgIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlTG9nLAotICAgIFNjcmlwdEJyZWFrcG9p
bnRBY3Rpb25UeXBlRXZhbHVhdGUsCi0gICAgU2NyaXB0QnJlYWtwb2ludEFjdGlvblR5cGVTb3Vu
ZAotfSBTY3JpcHRCcmVha3BvaW50QWN0aW9uVHlwZTsKLQotc3RydWN0IFNjcmlwdEJyZWFrcG9p
bnRBY3Rpb24gewotICAgIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24oU2NyaXB0QnJlYWtwb2ludEFj
dGlvblR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQotICAgICAgICA6IHR5cGUodHlwZSkK
LSAgICAgICAgLCBkYXRhKGRhdGEpCi0gICAgewotICAgIH0KLQotICAgIFNjcmlwdEJyZWFrcG9p
bnRBY3Rpb25UeXBlIHR5cGU7Ci0gICAgU3RyaW5nIGRhdGE7Ci19OwordHlwZWRlZiBsb25nIEJy
ZWFrcG9pbnRJZDsKK2NvbnN0IGxvbmcgbnVsbEJyZWFrcG9pbnRJZCA9IDA7CiAKLXN0cnVjdCBT
Y3JpcHRCcmVha3BvaW50IHsKLSAgICBTY3JpcHRCcmVha3BvaW50KCkKK3N0cnVjdCBCcmVha3Bv
aW50IHsKKyAgICBCcmVha3BvaW50KCkKICAgICB7CiAgICAgfQogCi0gICAgU2NyaXB0QnJlYWtw
b2ludChpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25k
aXRpb24sIGJvb2wgYXV0b0NvbnRpbnVlKQotICAgICAgICA6IGxpbmVOdW1iZXIobGluZU51bWJl
cikKKyAgICBCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlkLCBpbnQgbGluZU51bWJlciwgaW50
IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIGJvb2wgYXV0b0NvbnRpbnVl
KQorICAgICAgICA6IGlkKG51bGxCcmVha3BvaW50SWQpCisgICAgICAgICwgc291cmNlSWQoc291
cmNlSWQpCisgICAgICAgICwgbGluZU51bWJlcihsaW5lTnVtYmVyKQogICAgICAgICAsIGNvbHVt
bk51bWJlcihjb2x1bW5OdW1iZXIpCiAgICAgICAgICwgY29uZGl0aW9uKGNvbmRpdGlvbikKICAg
ICAgICAgLCBhdXRvQ29udGludWUoYXV0b0NvbnRpbnVlKQogICAgIHsKICAgICB9CiAKLSAgICBT
Y3JpcHRCcmVha3BvaW50KGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBT
dHJpbmcmIGNvbmRpdGlvbiwgVmVjdG9yPFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24+JiBhY3Rpb25z
LCBib29sIGF1dG9Db250aW51ZSkKLSAgICAgICAgOiBsaW5lTnVtYmVyKGxpbmVOdW1iZXIpCi0g
ICAgICAgICwgY29sdW1uTnVtYmVyKGNvbHVtbk51bWJlcikKLSAgICAgICAgLCBjb25kaXRpb24o
Y29uZGl0aW9uKQotICAgICAgICAsIGFjdGlvbnMoYWN0aW9ucykKLSAgICAgICAgLCBhdXRvQ29u
dGludWUoYXV0b0NvbnRpbnVlKQorICAgIEJyZWFrcG9pbnQoQnJlYWtwb2ludElkIGJyZWFrcG9p
bnRJZCwgY29uc3QgQnJlYWtwb2ludCYgb3RoZXIpCisgICAgICAgIDogaWQoYnJlYWtwb2ludElk
KQorICAgICAgICAsIHNvdXJjZUlkKG90aGVyLnNvdXJjZUlkKQorICAgICAgICAsIGxpbmVOdW1i
ZXIob3RoZXIubGluZU51bWJlcikKKyAgICAgICAgLCBjb2x1bW5OdW1iZXIob3RoZXIuY29sdW1u
TnVtYmVyKQorICAgICAgICAsIGNvbmRpdGlvbihvdGhlci5jb25kaXRpb24pCisgICAgICAgICwg
YXV0b0NvbnRpbnVlKG90aGVyLmF1dG9Db250aW51ZSkKICAgICB7CiAgICAgfQogCisgICAgQnJl
YWtwb2ludElkIGlkOworICAgIGludHB0cl90IHNvdXJjZUlkOwogICAgIGludCBsaW5lTnVtYmVy
OwogICAgIGludCBjb2x1bW5OdW1iZXI7CiAgICAgU3RyaW5nIGNvbmRpdGlvbjsKLSAgICBWZWN0
b3I8U2NyaXB0QnJlYWtwb2ludEFjdGlvbj4gYWN0aW9uczsKICAgICBib29sIGF1dG9Db250aW51
ZTsKIH07CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIEpTQwogCi0j
ZW5kaWYgLy8gIWRlZmluZWQoU2NyaXB0QnJlYWtwb2ludF9oKQorI2VuZGlmIC8vIEJyZWFrcG9p
bnRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3Bw
CShyZXZpc2lvbiAxNTYyNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwOC0yMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENv
cHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICoKQEAgLTM3LDcg
KzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogY2xhc3MgUmVjb21waWxlciA6IHB1Ymxp
YyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewogcHVibGljOgotICAgIFJlY29tcGlsZXIoRGVi
dWdnZXIqKTsKKyAgICBSZWNvbXBpbGVyKERlYnVnZ2VyRXZlbnRIYW5kbGVyKik7CiAgICAgflJl
Y29tcGlsZXIoKTsKICAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKik7CiAKQEAgLTQ1LDEyICs0
NSwxMiBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaFNldDxGdW5jdGlvbkV4ZWN1dGFibGUq
PiBGdW5jdGlvbkV4ZWN1dGFibGVTZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFNvdXJjZVByb3Zp
ZGVyKiwgRXhlY1N0YXRlKj4gU291cmNlUHJvdmlkZXJNYXA7CiAgICAgCi0gICAgRGVidWdnZXIq
IG1fZGVidWdnZXI7CisgICAgRGVidWdnZXJFdmVudEhhbmRsZXIqIG1fZGVidWdnZXI7CiAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlU2V0IG1fZnVuY3Rpb25FeGVjdXRhYmxlczsKICAgICBTb3VyY2VQ
cm92aWRlck1hcCBtX3NvdXJjZVByb3ZpZGVyczsKIH07CiAKLWlubGluZSBSZWNvbXBpbGVyOjpS
ZWNvbXBpbGVyKERlYnVnZ2VyKiBkZWJ1Z2dlcikKK2lubGluZSBSZWNvbXBpbGVyOjpSZWNvbXBp
bGVyKERlYnVnZ2VyRXZlbnRIYW5kbGVyKiBkZWJ1Z2dlcikKICAgICA6IG1fZGVidWdnZXIoZGVi
dWdnZXIpCiB7CiB9CkBAIC04Myw3ICs4Myw3IEBAIGlubGluZSB2b2lkIFJlY29tcGlsZXI6Om9w
ZXJhdG9yKCkoSlNDZWwKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmdW5jdGlvbi0+c2NvcGUoKS0+
Z2xvYmFsT2JqZWN0KCktPkpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7CiAgICAgZXhlY3V0
YWJsZS0+Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKICAgICBleGVjdXRhYmxlLT5jbGVhclVu
bGlua2VkQ29kZUZvclJlY29tcGlsYXRpb25JZk5vdENvbXBpbGluZygpOwotICAgIGlmIChtX2Rl
YnVnZ2VyID09IGZ1bmN0aW9uLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkK
KyAgICBpZiAobV9kZWJ1Z2dlciA9PSBmdW5jdGlvbi0+c2NvcGUoKS0+Z2xvYmFsT2JqZWN0KCkt
PmRlYnVnZ2VyKCktPmV2ZW50SGFuZGxlcigpKQogICAgICAgICBtX3NvdXJjZVByb3ZpZGVycy5h
ZGQoZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlYyk7CiB9CiAKQEAgLTkxLDYg
KzkxLDIwIEBAIGlubGluZSB2b2lkIFJlY29tcGlsZXI6Om9wZXJhdG9yKCkoSlNDZWwKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK0RlYnVnZ2VyOjpEZWJ1Z2dlcihib29sIGlzV29ya2VyVGhyZWFkKQor
ICAgIDogbV9pc1dvcmtlclRocmVhZChpc1dvcmtlclRocmVhZCkKKyAgICAsIG1fcGF1c2VPbkV4
Y2VwdGlvbnNTdGF0ZShEb250UGF1c2VPbkV4Y2VwdGlvbnMpCisgICAgLCBtX3BhdXNlT25OZXh0
U3RhdGVtZW50KGZhbHNlKQorICAgICwgbV9wYXVzZWQoZmFsc2UpCisgICAgLCBtX2JyZWFrcG9p
bnRzQWN0aXZhdGVkKHRydWUpCisgICAgLCBtX2hhc0hhbmRsZXJGb3JFeGNlcHRpb25DYWxsYmFj
ayhmYWxzZSkKKyAgICAsIG1fcGF1c2VPbkNhbGxGcmFtZSgwKQorICAgICwgbV9sYXN0RXhlY3V0
ZWRMaW5lKC0xKQorICAgICwgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJZCgtMSkKKyAgICAsIG1fdG9w
QnJlYWtwb2ludElkKG51bGxCcmVha3BvaW50SWQpCit7Cit9CisKIERlYnVnZ2VyOjp+RGVidWdn
ZXIoKQogewogICAgIEhhc2hTZXQ8SlNHbG9iYWxPYmplY3QqPjo6aXRlcmF0b3IgZW5kID0gbV9n
bG9iYWxPYmplY3RzLmVuZCgpOwpAQCAtMTA3LDYgKzEyMSwxNSBAQCB2b2lkIERlYnVnZ2VyOjph
dHRhY2goSlNHbG9iYWxPYmplY3QqIGdsCiAKIHZvaWQgRGVidWdnZXI6OmRldGFjaChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQogeworICAgIC8vIElmIHdlJ3JlIGRldGFjaGluZyBmcm9t
IHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGdsb2JhbCBvYmplY3QsIG1hbnVhbGx5IHRlYXIgZG93
biBvdXIKKyAgICAvLyBzdGFjaywgc2luY2Ugd2Ugd29uJ3QgZ2V0IGZ1cnRoZXIgZGVidWdnZXIg
Y2FsbGJhY2tzIHRvIGRvIHNvLiBBbHNvLCByZXN1bWUgZXhlY3V0aW9uLAorICAgIC8vIHNpbmNl
IHRoZXJlJ3Mgbm8gcG9pbnQgaW4gc3RheWluZyBwYXVzZWQgb25jZSBhIHdpbmRvdyBjbG9zZXMu
CisgICAgaWYgKG1fY3VycmVudENhbGxGcmFtZSAmJiBtX2N1cnJlbnRDYWxsRnJhbWUtPmR5bmFt
aWNHbG9iYWxPYmplY3QoKSA9PSBnbG9iYWxPYmplY3QpIHsKKyAgICAgICAgbV9jdXJyZW50Q2Fs
bEZyYW1lID0gMDsKKyAgICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gMDsKKyAgICAgICAgY29u
dGludWVQcm9ncmFtKCk7CisgICAgfQorCiAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0cy5jb250
YWlucyhnbG9iYWxPYmplY3QpKTsKICAgICBtX2dsb2JhbE9iamVjdHMucmVtb3ZlKGdsb2JhbE9i
amVjdCk7CiAgICAgZ2xvYmFsT2JqZWN0LT5zZXREZWJ1Z2dlcigwKTsKQEAgLTE0OCw0ICsxNzEs
MzIzIEBAIEpTVmFsdWUgZXZhbHVhdGVJbkdsb2JhbENhbGxGcmFtZShjb25zdCAKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCitCcmVha3BvaW50SWQgRGVidWdnZXI6OnNldEJyZWFrcG9pbnQoaW50
cHRyX3Qgc291cmNlSWQsIGNvbnN0IEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQsIGludCogYWN0dWFs
TGluZU51bWJlciwgaW50KiBhY3R1YWxDb2x1bW5OdW1iZXIpCit7CisgICAgaWYgKCFzb3VyY2VJ
ZCkKKyAgICAgICAgcmV0dXJuIG51bGxCcmVha3BvaW50SWQ7ICAgIAorICAgIFNvdXJjZUlkVG9C
cmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5maW5k
KHNvdXJjZUlkKTsKKyAgICBpZiAoaXQgPT0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZW5kKCkp
CisgICAgICAgIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuc2V0KHNvdXJjZUlkLCBMaW5l
VG9CcmVha3BvaW50c01hcCgpKS5pdGVyYXRvcjsKKyAgICBMaW5lVG9CcmVha3BvaW50c01hcDo6
aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChicmVha3BvaW50LmxpbmVOdW1iZXIg
KyAxKTsKKyAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnZhbHVlLmVuZCgpKQorICAgICAgICBicmVh
a3NJdCA9IGl0LT52YWx1ZS5zZXQoYnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSwgQnJlYWtwb2lu
dHNJbkxpbmUoKSkuaXRlcmF0b3I7CisKKyAgICBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVj
dG9yID0gYnJlYWtzSXQtPnZhbHVlOworICAgIHVuc2lnbmVkIGJyZWFrc0NvdW50ID0gYnJlYWtz
VmVjdG9yLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJlYWtzQ291bnQ7
IGkrKykgeworICAgICAgICBpZiAoYnJlYWtzVmVjdG9yLmF0KGkpLmNvbHVtbk51bWJlciA9PSBi
cmVha3BvaW50LmNvbHVtbk51bWJlcikKKyAgICAgICAgICAgIHJldHVybiBudWxsQnJlYWtwb2lu
dElkOworICAgIH0KKworICAgIEJyZWFrcG9pbnRJZCBpZCA9ICsrbV90b3BCcmVha3BvaW50SWQ7
CisgICAgUkVMRUFTRV9BU1NFUlQoaWQgIT0gbnVsbEJyZWFrcG9pbnRJZCk7CisgICAgYnJlYWtz
VmVjdG9yLmFwcGVuZChCcmVha3BvaW50KGlkLCBicmVha3BvaW50KSk7CisKKyAgICBtX2JyZWFr
cG9pbnRJZFRvQnJlYWtwb2ludC5zZXQoaWQsICZicmVha3NWZWN0b3IubGFzdCgpKTsKKworICAg
ICphY3R1YWxMaW5lTnVtYmVyID0gYnJlYWtwb2ludC5saW5lTnVtYmVyOworICAgICphY3R1YWxD
b2x1bW5OdW1iZXIgPSBicmVha3BvaW50LmNvbHVtbk51bWJlcjsKKyAgICByZXR1cm4gaWQ7Cit9
CisKK3ZvaWQgRGVidWdnZXI6OnJlbW92ZUJyZWFrcG9pbnQoQnJlYWtwb2ludElkIGlkKQorewor
ICAgIGlmIChpZCA9PSBudWxsQnJlYWtwb2ludElkKQorICAgICAgICByZXR1cm47CisKKyAgICBC
cmVha3BvaW50SWRUb0JyZWFrcG9pbnRNYXA6Oml0ZXJhdG9yIGlkSXQgPSBtX2JyZWFrcG9pbnRJ
ZFRvQnJlYWtwb2ludC5maW5kKGlkKTsKKyAgICBBU1NFUlQoaWRJdCAhPSBtX2JyZWFrcG9pbnRJ
ZFRvQnJlYWtwb2ludC5lbmQoKSk7CisgICAgQnJlYWtwb2ludCYgYnAgPSAqaWRJdC0+dmFsdWU7
CisKKyAgICBpbnRwdHJfdCBzb3VyY2VJZCA9IGJwLnNvdXJjZUlkOworICAgIEFTU0VSVChzb3Vy
Y2VJZCk7CisgICAgU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9IG1fc291
cmNlSWRUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSWQpOworICAgIEFTU0VSVChpdCAhPSBtX3Nv
dXJjZUlkVG9CcmVha3BvaW50cy5lbmQoKSk7CisgICAgTGluZVRvQnJlYWtwb2ludHNNYXA6Oml0
ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnZhbHVlLmZpbmQoYnAubGluZU51bWJlciArIDEpOworICAg
IEFTU0VSVChicmVha3NJdCAhPSBpdC0+dmFsdWUuZW5kKCkpOworCisgICAgQnJlYWtwb2ludHNJ
bkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT52YWx1ZTsKKyAgICB1bnNpZ25lZCBicmVh
a3NDb3VudCA9IGJyZWFrc1ZlY3Rvci5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGJyZWFrc0NvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKGJyZWFrc1ZlY3Rvci5hdChpKS5p
ZCA9PSBzdGF0aWNfY2FzdDxpbnQ+KGJwLmlkKSkgeworICAgICAgICAgICAgYnJlYWtzVmVjdG9y
LnJlbW92ZShpKTsKKyAgICAgICAgICAgIG1fYnJlYWtwb2ludElkVG9CcmVha3BvaW50LnJlbW92
ZShpZEl0KTsKKworICAgICAgICAgICAgaWYgKGJyZWFrc1ZlY3Rvci5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgICAgICBpdC0+dmFsdWUucmVtb3ZlKGJyZWFrc0l0KTsKKyAgICAgICAgICAgICAg
ICBpZiAoaXQtPnZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zb3VyY2VJ
ZFRvQnJlYWtwb2ludHMucmVtb3ZlKGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorfQorCitib29sIERlYnVnZ2VyOjpoYXNCcmVha3BvaW50
KGludHB0cl90IHNvdXJjZUlkLCBjb25zdCBUZXh0UG9zaXRpb24mIHBvc2l0aW9uLCBCcmVha3Bv
aW50ICpoaXRCcmVha3BvaW50KSBjb25zdAoreworICAgIGlmICghbV9icmVha3BvaW50c0FjdGl2
YXRlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU291cmNlSWRUb0JyZWFrcG9pbnRz
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmZpbmQoc291
cmNlSWQpOworICAgIGlmIChpdCA9PSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IGxpbmVOdW1iZXIgPSBwb3NpdGlvbi5tX2xp
bmUuemVyb0Jhc2VkSW50KCk7CisgICAgaW50IGNvbHVtbk51bWJlciA9IHBvc2l0aW9uLm1fY29s
dW1uLnplcm9CYXNlZEludCgpOworICAgIGlmIChsaW5lTnVtYmVyIDwgMCB8fCBjb2x1bW5OdW1i
ZXIgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMaW5lVG9CcmVha3BvaW50c01h
cDo6Y29uc3RfaXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChsaW5lTnVtYmVyICsg
MSk7CisgICAgaWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYm9vbCBoaXQgPSBmYWxzZTsKKyAgICBjb25zdCBCcmVha3BvaW50c0lu
TGluZSYgYnJlYWtzVmVjdG9yID0gYnJlYWtzSXQtPnZhbHVlOworICAgIHVuc2lnbmVkIGJyZWFr
c0NvdW50ID0gYnJlYWtzVmVjdG9yLnNpemUoKTsKKyAgICB1bnNpZ25lZCBpOworICAgIGZvciAo
aSA9IDA7IGkgPCBicmVha3NDb3VudDsgaSsrKSB7CisgICAgICAgIGludCBicmVha0xpbmUgPSBi
cmVha3NWZWN0b3IuYXQoaSkubGluZU51bWJlcjsKKyAgICAgICAgaW50IGJyZWFrQ29sdW1uID0g
YnJlYWtzVmVjdG9yLmF0KGkpLmNvbHVtbk51bWJlcjsKKyAgICAgICAgLy8gU2luY2UgZnJvbnRl
bmQgdHJ1bmNhdGVzIHRoZSBpbmRlbnQsIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gYSBsaW5lIG11
c3QgbWF0Y2ggdGhlIGJyZWFrcG9pbnQgKGxpbmUsMCkuCisgICAgICAgIGlmICgobGluZU51bWJl
ciAhPSBtX2xhc3RFeGVjdXRlZExpbmUgJiYgbGluZU51bWJlciA9PSBicmVha0xpbmUgJiYgIWJy
ZWFrQ29sdW1uKQorICAgICAgICAgICAgfHwgKGxpbmVOdW1iZXIgPT0gYnJlYWtMaW5lICYmIGNv
bHVtbk51bWJlciA9PSBicmVha0NvbHVtbikpIHsKKyAgICAgICAgICAgIGhpdCA9IHRydWU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWhpdCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGhpdEJyZWFrcG9pbnQpCisgICAgICAgICpoaXRC
cmVha3BvaW50ID0gYnJlYWtzVmVjdG9yLmF0KGkpOworCisgICAgLy8gQW4gZW1wdHkgY29uZGl0
aW9uIGNvdW50cyBhcyBubyBjb25kaXRpb24gd2hpY2ggaXMgZXF1aXZhbGVudCB0byAidHJ1ZSIu
CisgICAgaWYgKGJyZWFrc1ZlY3Rvci5hdChpKS5jb25kaXRpb24uaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5ldmFsdWF0ZShicmVha3NWZWN0b3IuYXQoaSkuY29u
ZGl0aW9uLCBleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgLy8gQW4g
ZXJyb25lb3VzIGNvbmRpdGlvbiBjb3VudHMgYXMgImZhbHNlIi4KKyAgICAgICAgaGFuZGxlRXhj
ZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKG1fY3VycmVudENhbGxGcmFtZS0+ZXhlYygpLCBl
eGNlcHRpb24pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQudG9Cb29sZWFuKG1fY3VycmVudENhbGxGcmFtZS0+ZXhlYygpKTsKK30KKwordm9pZCBEZWJ1
Z2dlcjo6Y2xlYXJCcmVha3BvaW50cygpCit7CisgICAgbV90b3BCcmVha3BvaW50SWQgPSBudWxs
QnJlYWtwb2ludElkOworICAgIG1fYnJlYWtwb2ludElkVG9CcmVha3BvaW50LmNsZWFyKCk7Cisg
ICAgbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuY2xlYXIoKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6
c2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoYm9vbCBhY3RpdmF0ZWQpCit7CisgICAgbV9icmVha3Bv
aW50c0FjdGl2YXRlZCA9IGFjdGl2YXRlZDsKK30KKwordm9pZCBEZWJ1Z2dlcjo6c2V0UGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlKQoreworICAgIG1f
cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9IHBhdXNlOworfQorCit2b2lkIERlYnVnZ2VyOjpzZXRQ
YXVzZU9uTmV4dFN0YXRlbWVudChib29sIHBhdXNlKQoreworICAgIG1fcGF1c2VPbk5leHRTdGF0
ZW1lbnQgPSBwYXVzZTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6YnJlYWtQcm9ncmFtKCkKK3sKKyAg
ICBpZiAobV9wYXVzZWQgfHwgIW1fY3VycmVudENhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7CisgICAgcGF1c2VJZk5lZWRlZCht
X2N1cnJlbnRDYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7Cit9CisKK3ZvaWQgRGVi
dWdnZXI6OmNvbnRpbnVlUHJvZ3JhbSgpCit7CisgICAgaWYgKCFtX3BhdXNlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IGZhbHNlOworICAgIG5vdGlm
eURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6c3Rl
cEludG9TdGF0ZW1lbnQoKQoreworICAgIGlmICghbV9wYXVzZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOworICAgIG5vdGlmeURvbmVQcm9j
ZXNzaW5nRGVidWdnZXJFdmVudHMoKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6c3RlcE92ZXJTdGF0
ZW1lbnQoKQoreworICAgIGlmICghbV9wYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS5nZXQoKTsKKyAgICBub3RpZnlE
b25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnN0ZXBP
dXRPZkZ1bmN0aW9uKCkKK3sKKyAgICBpZiAoIW1fcGF1c2VkKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRD
YWxsRnJhbWUtPmNhbGxlcigpIDogMDsKKyAgICBub3RpZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2Vy
RXZlbnRzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnNvdXJjZVBhcnNlZChFeGVjU3RhdGUqIGV4
ZWMsIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciwgaW50IGVycm9yTGluZSwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgaGFuZGxlU291cmNlUGFyc2VkKGV4ZWMsIHNv
dXJjZVByb3ZpZGVyLCBlcnJvckxpbmUsIGVycm9yTWVzc2FnZSk7Cit9CisKK3ZvaWQgRGVidWdn
ZXI6OmNyZWF0ZUNhbGxGcmFtZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxs
RnJhbWUpCit7CisgICAgaW50cHRyX3Qgc291cmNlSWQgPSBkZWJ1Z2dlckNhbGxGcmFtZS5zb3Vy
Y2VJZCgpOworICAgIG1fY3VycmVudENhbGxGcmFtZSA9IEZyYW1lVmlzaXRvcjo6Y3JlYXRlKGRl
YnVnZ2VyQ2FsbEZyYW1lLCBtX2N1cnJlbnRDYWxsRnJhbWUpOworICAgIGlmIChtX2xhc3RFeGVj
dXRlZFNvdXJjZUlkICE9IHNvdXJjZUlkKSB7CisgICAgICAgIG1fbGFzdEV4ZWN1dGVkTGluZSA9
IC0xOworICAgICAgICBtX2xhc3RFeGVjdXRlZFNvdXJjZUlkID0gc291cmNlSWQ7CisgICAgfQor
fQorCit2b2lkIERlYnVnZ2VyOjp1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNvbnN0
IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKK3sKKyAgICBpZiAoIW1fY3Vy
cmVudENhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50Q2FsbEZyYW1l
LT51cGRhdGUoZGVidWdnZXJDYWxsRnJhbWUpOworICAgIHBhdXNlSWZOZWVkZWQoZGVidWdnZXJD
YWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6cGF1
c2VJZk5lZWRlZChKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCkKK3sKKyAgICBp
ZiAobV9wYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbmVlZFBhdXNlSGFuZGxp
bmcoZHluYW1pY0dsb2JhbE9iamVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIEJyZWFrcG9p
bnQgYnJlYWtwb2ludDsKKyAgICBib29sIGRpZEhpdEJyZWFrcG9pbnQgPSBmYWxzZTsKKyAgICBi
b29sIHBhdXNlTm93ID0gbV9wYXVzZU9uTmV4dFN0YXRlbWVudDsKKyAgICBwYXVzZU5vdyB8PSAo
bV9wYXVzZU9uQ2FsbEZyYW1lID09IG1fY3VycmVudENhbGxGcmFtZSk7CisgICAgcGF1c2VOb3cg
fD0gZGlkSGl0QnJlYWtwb2ludCA9IGhhc0JyZWFrcG9pbnQobV9jdXJyZW50Q2FsbEZyYW1lLT5z
b3VyY2VJZCgpLCBtX2N1cnJlbnRDYWxsRnJhbWUtPnBvc2l0aW9uKCksICZicmVha3BvaW50KTsK
KyAgICBtX2xhc3RFeGVjdXRlZExpbmUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPnBvc2l0aW9uKCku
bV9saW5lLnplcm9CYXNlZEludCgpOworICAgIGlmICghcGF1c2VOb3cpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChkaWRIaXRCcmVha3BvaW50KSB7CisgICAgICAgIGV2YWx1YXRlQnJlYWtw
b2ludEFjdGlvbnMoYnJlYWtwb2ludCk7CisgICAgICAgIGlmIChicmVha3BvaW50LmF1dG9Db250
aW51ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3BhdXNlT25DYWxsRnJh
bWUgPSAwOworICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSBmYWxzZTsKKyAgICBtX3BhdXNl
ZCA9IHRydWU7CisKKyAgICBoYW5kbGVQYXVzZShkeW5hbWljR2xvYmFsT2JqZWN0KTsKKworICAg
IG1fcGF1c2VkID0gZmFsc2U7Cit9CisKK3ZvaWQgRGVidWdnZXI6OmNhbGxFdmVudChjb25zdCBE
ZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCit7CisgICAgaWYgKCFtX3BhdXNl
ZCkgeworICAgICAgICBjcmVhdGVDYWxsRnJhbWUoZGVidWdnZXJDYWxsRnJhbWUpOworICAgICAg
ICBwYXVzZUlmTmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7
CisgICAgfQorfQorCit2b2lkIERlYnVnZ2VyOjphdFN0YXRlbWVudChjb25zdCBEZWJ1Z2dlckNh
bGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCit7CisgICAgaWYgKCFtX3BhdXNlZCkKKyAgICAg
ICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFtZSk7Cit9
CisKK3ZvaWQgRGVidWdnZXI6OnJldHVybkV2ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBk
ZWJ1Z2dlckNhbGxGcmFtZSkKK3sKKyAgICBpZiAobV9wYXVzZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUp
OworCisgICAgLy8gZGV0YWNoIG1heSBoYXZlIGJlZW4gY2FsbGVkIGR1cmluZyBwYXVzZUlmTmVl
ZGVkCisgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIFRyZWF0IHN0ZXBwaW5nIG92ZXIgYSByZXR1cm4gc3RhdGVtZW50IGxpa2Ugc3RlcHBpbmcg
b3V0LgorICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgPT0gbV9wYXVzZU9uQ2FsbEZyYW1lKQor
ICAgICAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlcigp
OworICAgIG1fY3VycmVudENhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyKCk7
Cit9CisKK3ZvaWQgRGVidWdnZXI6OmV4Y2VwdGlvbihjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYg
ZGVidWdnZXJDYWxsRnJhbWUsIGJvb2wgaGFzSGFuZGxlcikKK3sKKyAgICBpZiAobV9wYXVzZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0g
UGF1c2VPbkFsbEV4Y2VwdGlvbnMgfHwgKG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9PSBQYXVz
ZU9uVW5jYXVnaHRFeGNlcHRpb25zICYmICFoYXNIYW5kbGVyKSkKKyAgICAgICAgbV9wYXVzZU9u
TmV4dFN0YXRlbWVudCA9IHRydWU7CisKKyAgICBtX2hhc0hhbmRsZXJGb3JFeGNlcHRpb25DYWxs
YmFjayA9IGhhc0hhbmRsZXI7CisgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChk
ZWJ1Z2dlckNhbGxGcmFtZSk7CisgICAgbV9oYXNIYW5kbGVyRm9yRXhjZXB0aW9uQ2FsbGJhY2sg
PSBmYWxzZTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERl
YnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKK3sKKyAgICBpZiAoIW1fcGF1c2Vk
KSB7CisgICAgICAgIGNyZWF0ZUNhbGxGcmFtZShkZWJ1Z2dlckNhbGxGcmFtZSk7CisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMjYzNy4KKyAgICAgICAgLy8gUmVtb3ZlIGl0IHdoZW4gd2Ug
cmV3b3JrIHRoZSBkZWJ1Z2dlciBpbXBsZW1lbnRhdGlvbiB0byBub3QgcmVxdWlyZSBjYWxsYmFj
a3MuCisgICAgICAgIGlmICghbV9pc1dvcmtlclRocmVhZCkKKyAgICAgICAgICAgIHBhdXNlSWZO
ZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKKyAgICB9Cit9
CisKK3ZvaWQgRGVidWdnZXI6OmRpZEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZy
YW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKK3sKKyAgICBpZiAobV9wYXVzZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxs
RnJhbWUpOworCisgICAgLy8gVHJlYXQgc3RlcHBpbmcgb3ZlciB0aGUgZW5kIG9mIGEgcHJvZ3Jh
bSBsaWtlIHN0ZXBwaW5nIG91dC4KKyAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgPT0gbV9wYXVzZU9uQ2FsbEZy
YW1lKSB7CisgICAgICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+
Y2FsbGVyKCk7CisgICAgICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJh
bWUtPmNhbGxlcigpOworfQorCit2b2lkIERlYnVnZ2VyOjpkaWRSZWFjaEJyZWFrcG9pbnQoY29u
c3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lKQoreworICAgIGlmIChtX3Bh
dXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRy
dWU7CisgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFt
ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHJldmlzaW9uIDE1NjI0NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29t
KQotICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjMgKzIyLDI2IEBACiAjaWZu
ZGVmIERlYnVnZ2VyX2gKICNkZWZpbmUgRGVidWdnZXJfaAogCisjaW5jbHVkZSAiQnJlYWtwb2lu
dC5oIgorI2luY2x1ZGUgIkRlYnVnZ2VyQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
UG9zaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lOwogY2xhc3MgRXhlY1N0YXRlOwotY2xh
c3MgVk07CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTVmFsdWU7CiBjbGFzcyBTb3Vy
Y2VQcm92aWRlcjsKK2NsYXNzIFZNOwogCi1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBEZWJ1Z2dl
ciB7CitjbGFzcyBEZWJ1Z2dlckV2ZW50SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+
RGVidWdnZXIoKTsKLQotICAgIHZvaWQgYXR0YWNoKEpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdmly
dHVhbCB2b2lkIGRldGFjaChKU0dsb2JhbE9iamVjdCopOworICAgIHZpcnR1YWwgfkRlYnVnZ2Vy
RXZlbnRIYW5kbGVyKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFyc2VkKEV4ZWNT
dGF0ZSosIFNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZU51bWJlciwgY29uc3QgV1RGOjpT
dHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwogCkBAIC01MCwxMCArNTMsMTYxIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZy
YW1lJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShjb25zdCBEZWJ1
Z2dlckNhbGxGcmFtZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhY2hCcmVha3BvaW50
KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJikgPSAwOworfTsKKworY2xhc3MgSlNfRVhQT1JUX1BS
SVZBVEUgRGVidWdnZXIgOiBwcml2YXRlIERlYnVnZ2VyRXZlbnRIYW5kbGVyIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShEZWJ1Z2dlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorCisgICAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgRnJhbWVWaXNpdG9yIDogcHVibGlj
IFJlZkNvdW50ZWQ8RnJhbWVWaXNpdG9yPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxGcmFtZVZpc2l0b3I+IGNyZWF0ZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYg
ZGVidWdnZXJDYWxsRnJhbWUsIFBhc3NSZWZQdHI8RnJhbWVWaXNpdG9yPiBjYWxsZXIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRnJhbWVWaXNpdG9yKGRlYnVn
Z2VyQ2FsbEZyYW1lLCBjYWxsZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgaW52YWxp
ZGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAg
ICAgICAgbV9kZWJ1Z2dlckNhbGxGcmFtZS5jbGVhcigpOworICAgICAgICB9CisgICAgICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQorCisgICAgICAgIEZyYW1l
VmlzaXRvciogY2FsbGVyKCk7CisgICAgICAgIGludHB0cl90IHNvdXJjZUlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS5zb3VyY2VJZCgpOyB9CisgICAgICAgIGNvbnN0IFRl
eHRQb3NpdGlvbiBwb3NpdGlvbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIE9yZGlu
YWxOdW1iZXIgbGluZSA9IFdURjo6T3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KG1fZGVi
dWdnZXJDYWxsRnJhbWUubGluZSgpKTsKKyAgICAgICAgICAgIE9yZGluYWxOdW1iZXIgY29sdW1u
ID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobV9kZWJ1Z2dlckNhbGxGcmFt
ZS5jb2x1bW4oKSk7CisgICAgICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uKGxpbmUsIGNvbHVt
bik7CisgICAgICAgIH0KKyAgICAgICAgaW50IGxpbmUoKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobV9kZWJ1
Z2dlckNhbGxGcmFtZS5saW5lKCkpLnplcm9CYXNlZEludCgpOworICAgICAgICB9CisgICAgICAg
IGludCBjb2x1bW4oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpP
cmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobV9kZWJ1Z2dlckNhbGxGcmFtZS5jb2x1bW4o
KSkuemVyb0Jhc2VkSW50KCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHVwZGF0ZShjb25z
dCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fZGVidWdnZXJDYWxsRnJhbWUgPSBkZWJ1Z2dlckNhbGxGcmFtZTsKKyAgICAgICAg
ICAgIG1faXNWYWxpZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBEZWJ1Z2dl
ckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2Vy
Q2FsbEZyYW1lOyB9CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0
KCkgY29uc3Q7CisKKyAgICAgICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSgpIGNvbnN0OworICAgICAg
ICBEZWJ1Z2dlckNhbGxGcmFtZTo6VHlwZSB0eXBlKCkgY29uc3Q7CisgICAgICAgIEpTU2NvcGUq
IHNjb3BlQ2hhaW4oKSBjb25zdDsKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjKCkgY29uc3Q7CisK
KyAgICAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QoKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZSBl
dmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNWYWx1ZSYgZXhjZXB0aW9uKSBjb25zdDsK
KworICAgIHByaXZhdGU6CisgICAgICAgIEZyYW1lVmlzaXRvcihjb25zdCBEZWJ1Z2dlckNhbGxG
cmFtZSYsIFBhc3NSZWZQdHI8RnJhbWVWaXNpdG9yPiBjYWxsZXIpOworCisgICAgICAgIERlYnVn
Z2VyQ2FsbEZyYW1lIG1fZGVidWdnZXJDYWxsRnJhbWU7CisgICAgICAgIFJlZlB0cjxGcmFtZVZp
c2l0b3I+IG1fY2FsbGVyOworICAgICAgICBib29sIG1faXNWYWxpZDsKKyAgICB9OworCisgICAg
RGVidWdnZXJFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGxlcigpIHsgcmV0dXJuIHRoaXM7IH0KKwor
ICAgIHZvaWQgYXR0YWNoKEpTR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBkZXRhY2goSlNHbG9i
YWxPYmplY3QqKTsKKworICAgIEZyYW1lVmlzaXRvciogY3VycmVudEZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJyZW50Q2FsbEZyYW1lLmdldCgpOyB9CisKKyAgICBib29sIGhhc0JyZWFrcG9p
bnQoaW50cHRyX3Qgc291cmNlSWQsIGNvbnN0IFRleHRQb3NpdGlvbiYsIEJyZWFrcG9pbnQqIGhp
dEJyZWFrcG9pbnQpIGNvbnN0OworICAgIEJyZWFrcG9pbnRJZCBzZXRCcmVha3BvaW50KGludHB0
cl90IHNvdXJjZUlkLCBjb25zdCBCcmVha3BvaW50JiwgaW50KiBhY3R1YWxMaW5lTnVtYmVyLCBp
bnQqIGFjdHVhbENvbHVtbk51bWJlcik7CisgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KEJyZWFr
cG9pbnRJZCk7CisgICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7CisgICAgdm9pZCBzZXRCcmVh
a3BvaW50c0FjdGl2YXRlZChib29sKTsKKyAgICB2b2lkIGFjdGl2YXRlQnJlYWtwb2ludHMoKSB7
IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKHRydWUpOyB9CisgICAgdm9pZCBkZWFjdGl2YXRlQnJl
YWtwb2ludHMoKSB7IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGZhbHNlKTsgfQorCisgICAgZW51
bSBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHsKKyAgICAgICAgRG9udFBhdXNlT25FeGNlcHRpb25z
LAorICAgICAgICBQYXVzZU9uQWxsRXhjZXB0aW9ucywKKyAgICAgICAgUGF1c2VPblVuY2F1Z2h0
RXhjZXB0aW9ucworICAgIH07CisgICAgUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOyB9
CisgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNlcHRpb25zU3Rh
dGUpOworCisgICAgdm9pZCBzZXRQYXVzZU9uTmV4dFN0YXRlbWVudChib29sKTsKKyAgICB2b2lk
IGJyZWFrUHJvZ3JhbSgpOworICAgIHZvaWQgY29udGludWVQcm9ncmFtKCk7CisgICAgdm9pZCBz
dGVwSW50b1N0YXRlbWVudCgpOworICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1lbnQoKTsKKyAgICB2
b2lkIHN0ZXBPdXRPZkZ1bmN0aW9uKCk7CisKKyAgICBib29sIGlzUGF1c2VkKCkgeyByZXR1cm4g
bV9wYXVzZWQ7IH0KIAogICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVk0qKTsKIAor
cHJvdGVjdGVkOgorICAgIERlYnVnZ2VyKGJvb2wgaXNXb3JrZXJUaHJlYWQgPSBmYWxzZSk7Cisg
ICAgdmlydHVhbCB+RGVidWdnZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBldmFsdWF0ZUJyZWFr
cG9pbnRBY3Rpb25zKGNvbnN0IEJyZWFrcG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlU291cmNlUGFyc2VkKEV4ZWNTdGF0ZSosIFNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGlu
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1zZykKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShl
cnJvckxpbmUpOworICAgICAgICBVTlVTRURfUEFSQU0oZXJyb3JNc2cpOworICAgIH0KKyAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlUGF1c2UoSlNHbG9iYWxPYmplY3QqKSB7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgbmVlZFBhdXNlSGFuZGxpbmcoSlNHbG9iYWxPYmplY3QqKSB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24o
RXhlY1N0YXRlKiwgSlNWYWx1ZSBleGNlcHRpb24pIGNvbnN0CisgICAgeworICAgICAgICBVTlVT
RURfUEFSQU0oZXhjZXB0aW9uKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeURvbmVQ
cm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKSB7IH0KKworICAgIGJvb2wgaGFzSGFuZGxlckZvckV4
Y2VwdGlvbkNhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9oYXNIYW5kbGVyRm9yRXhjZXB0aW9u
Q2FsbGJhY2s7IH0KKwogcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZUNhbGxGcmFtZShjb25zdCBE
ZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZvaWQgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5l
ZWRlZChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZvaWQgcGF1c2VJZk5lZWRlZChK
U0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCk7CisKKyAgICAvLyBEZWJ1Z2dlckV2
ZW50SGFuZGxlciBpbnRlcmZhY2U6CisgICAgdmlydHVhbCB2b2lkIHNvdXJjZVBhcnNlZChFeGVj
U3RhdGUqLCBTb3VyY2VQcm92aWRlciosIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNc2cpOworCisgICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihjb25zdCBEZWJ1Z2dlckNhbGxG
cmFtZSYsIGJvb2wgaGFzSGFuZGxlcik7CisgICAgdmlydHVhbCB2b2lkIGF0U3RhdGVtZW50KGNv
bnN0IERlYnVnZ2VyQ2FsbEZyYW1lJik7CisgICAgdmlydHVhbCB2b2lkIGNhbGxFdmVudChjb25z
dCBEZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZpcnR1YWwgdm9pZCByZXR1cm5FdmVudChjb25z
dCBEZWJ1Z2dlckNhbGxGcmFtZSYpOworCisgICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJv
Z3JhbShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVj
dXRlUHJvZ3JhbShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmKTsKKworICAgIHR5cGVk
ZWYgSGFzaE1hcDxCcmVha3BvaW50SWQsIEJyZWFrcG9pbnQqPiBCcmVha3BvaW50SWRUb0JyZWFr
cG9pbnRNYXA7CisKKyAgICB0eXBlZGVmIFZlY3RvcjxCcmVha3BvaW50PiBCcmVha3BvaW50c0lu
TGluZTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8bG9uZywgQnJlYWtwb2ludHNJbkxpbmU+IExpbmVU
b0JyZWFrcG9pbnRzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgTGluZVRvQnJl
YWtwb2ludHNNYXA+IFNvdXJjZUlkVG9CcmVha3BvaW50c01hcDsKKworICAgIGJvb2wgbV9pc1dv
cmtlclRocmVhZDsKKyAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIG1fcGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZTsKKyAgICBib29sIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQ7CisgICAgYm9vbCBtX3Bh
dXNlZDsKKyAgICBib29sIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQ7CisgICAgYm9vbCBtX2hhc0hh
bmRsZXJGb3JFeGNlcHRpb25DYWxsYmFjazsKKworICAgIEZyYW1lVmlzaXRvciogbV9wYXVzZU9u
Q2FsbEZyYW1lOworICAgIFJlZlB0cjxGcmFtZVZpc2l0b3I+IG1fY3VycmVudENhbGxGcmFtZTsK
KyAgICBpbnQgbV9sYXN0RXhlY3V0ZWRMaW5lOworICAgIGludHB0cl90IG1fbGFzdEV4ZWN1dGVk
U291cmNlSWQ7CisKKyAgICBCcmVha3BvaW50SWQgbV90b3BCcmVha3BvaW50SWQ7CisgICAgQnJl
YWtwb2ludElkVG9CcmVha3BvaW50TWFwIG1fYnJlYWtwb2ludElkVG9CcmVha3BvaW50OworICAg
IFNvdXJjZUlkVG9CcmVha3BvaW50c01hcCBtX3NvdXJjZUlkVG9CcmVha3BvaW50czsKKwogICAg
IEhhc2hTZXQ8SlNHbG9iYWxPYmplY3QqPiBtX2dsb2JhbE9iamVjdHM7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJGcmFtZVZpc2l0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckZyYW1l
VmlzaXRvci5jcHAJKHJldmlzaW9uIDE1NjAyMSkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHA6MTU2MDIxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyRnJhbWVWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQorCisjaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgorCisjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCisjaW5jbHVkZSA8ZGVi
dWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0NvbXBsZXRpb24u
aD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0pTT2JqZWN0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK0phdmFTY3Jp
cHRDYWxsRnJhbWU6OkphdmFTY3JpcHRDYWxsRnJhbWUoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUm
IGRlYnVnZ2VyQ2FsbEZyYW1lLCBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IGNhbGxl
cikKKyAgICA6IG1fZGVidWdnZXJDYWxsRnJhbWUoZGVidWdnZXJDYWxsRnJhbWUpCisgICAgLCBt
X2NhbGxlcihjYWxsZXIpCisgICAgLCBtX2lzVmFsaWQodHJ1ZSkKK3sKK30KKworSmF2YVNjcmlw
dENhbGxGcmFtZSogSmF2YVNjcmlwdENhbGxGcmFtZTo6Y2FsbGVyKCkKK3sKKyAgICByZXR1cm4g
bV9jYWxsZXIuZ2V0KCk7Cit9CisKK0pTQzo6SlNTY29wZSogSmF2YVNjcmlwdENhbGxGcmFtZTo6
c2NvcGVDaGFpbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faXNWYWxpZCk7CisgICAgaWYgKCFt
X2lzVmFsaWQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZy
YW1lLnNjb3BlKCk7Cit9CisKK0pTQzo6SlNHbG9iYWxPYmplY3QqIEphdmFTY3JpcHRDYWxsRnJh
bWU6OmR5bmFtaWNHbG9iYWxPYmplY3QoKSBjb25zdAoreworICAgIEFTU0VSVChtX2lzVmFsaWQp
OworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9k
ZWJ1Z2dlckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCk7Cit9CisKK1N0cmluZyBKYXZh
U2NyaXB0Q2FsbEZyYW1lOjpmdW5jdGlvbk5hbWUoKSBjb25zdAoreworICAgIEFTU0VSVChtX2lz
VmFsaWQpOworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7Cisg
ICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSA9IG1fZGVidWdnZXJDYWxsRnJhbWUuY2FsY3VsYXRlZEZ1
bmN0aW9uTmFtZSgpOworICAgIGlmIChmdW5jdGlvbk5hbWUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTsKK30KKworRGVidWdnZXJD
YWxsRnJhbWU6OlR5cGUgSmF2YVNjcmlwdENhbGxGcmFtZTo6dHlwZSgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKG1faXNWYWxpZCk7CisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybiBE
ZWJ1Z2dlckNhbGxGcmFtZTo6UHJvZ3JhbVR5cGU7CisgICAgcmV0dXJuIG1fZGVidWdnZXJDYWxs
RnJhbWUudHlwZSgpOworfQorCitKU09iamVjdCogSmF2YVNjcmlwdENhbGxGcmFtZTo6dGhpc09i
amVjdCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faXNWYWxpZCk7CisgICAgaWYgKCFtX2lzVmFs
aWQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLnRo
aXNPYmplY3QoKTsKK30KKworRXhlY1N0YXRlKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpleGVjKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICBpZiAoIW1faXNWYWxpZCkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUuY2FsbEZyYW1l
KCk7Cit9CisKKy8vIEV2YWx1YXRlIHNvbWUgSmF2YVNjcmlwdCBjb2RlIGluIHRoZSBzY29wZSBv
ZiB0aGlzIGZyYW1lLgorSlNWYWx1ZSBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShjb25z
dCBTdHJpbmcmIHNjcmlwdCwgSlNWYWx1ZSYgZXhjZXB0aW9uKSBjb25zdAoreworICAgIEFTU0VS
VChtX2lzVmFsaWQpOworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4ganNOdWxs
KCk7CisKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RlYnVnZ2VyQ2FsbEZyYW1lLmNhbGxGcmFt
ZSgpKTsKKyAgICByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS5ldmFsdWF0ZShzY3JpcHQsIGV4
Y2VwdGlvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyRnJhbWVWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJGcmFtZVZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJGcmFtZVZpc2l0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxMyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDM4ICsyNCwyMyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJEZWJ1Z2dlci5oIgogCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCituYW1lc3BhY2UgSlNDIHsKIAotI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUu
aCIKLQotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93QmFz
ZS5oIgotI2luY2x1ZGUgPGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9Db21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNM
b2NrLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0gICAgCi1KYXZhU2NyaXB0Q2FsbEZyYW1lOjpKYXZhU2NyaXB0Q2FsbEZyYW1lKGNvbnN0
IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgUGFzc1JlZlB0cjxKYXZhU2Ny
aXB0Q2FsbEZyYW1lPiBjYWxsZXIpCitEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yOjpGcmFtZVZpc2l0
b3IoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBQYXNzUmVmUHRy
PERlYnVnZ2VyOjpGcmFtZVZpc2l0b3I+IGNhbGxlcikKICAgICA6IG1fZGVidWdnZXJDYWxsRnJh
bWUoZGVidWdnZXJDYWxsRnJhbWUpCiAgICAgLCBtX2NhbGxlcihjYWxsZXIpCiAgICAgLCBtX2lz
VmFsaWQodHJ1ZSkKIHsKIH0KIAotSmF2YVNjcmlwdENhbGxGcmFtZSogSmF2YVNjcmlwdENhbGxG
cmFtZTo6Y2FsbGVyKCkKK0RlYnVnZ2VyOjpGcmFtZVZpc2l0b3IqIERlYnVnZ2VyOjpGcmFtZVZp
c2l0b3I6OmNhbGxlcigpCiB7CiAgICAgcmV0dXJuIG1fY2FsbGVyLmdldCgpOwogfQogCi1KU0M6
OkpTU2NvcGUqIEphdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlQ2hhaW4oKSBjb25zdAorSlNTY29w
ZSogRGVidWdnZXI6OkZyYW1lVmlzaXRvcjo6c2NvcGVDaGFpbigpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKG1faXNWYWxpZCk7CiAgICAgaWYgKCFtX2lzVmFsaWQpCkBAIC02Myw3ICs0OCw3IEBAIEpT
Qzo6SlNTY29wZSogSmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGUKICAgICByZXR1cm4gbV9kZWJ1
Z2dlckNhbGxGcmFtZS5zY29wZSgpOwogfQogCi1KU0M6OkpTR2xvYmFsT2JqZWN0KiBKYXZhU2Ny
aXB0Q2FsbEZyYW1lOjpkeW5hbWljR2xvYmFsT2JqZWN0KCkgY29uc3QKK0pTR2xvYmFsT2JqZWN0
KiBEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yOjpkeW5hbWljR2xvYmFsT2JqZWN0KCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9pc1ZhbGlkKTsKICAgICBpZiAoIW1faXNWYWxpZCkKQEAgLTcxLDcgKzU2
LDcgQEAgSlNDOjpKU0dsb2JhbE9iamVjdCogSmF2YVNjcmlwdENhbGxGcmFtZQogICAgIHJldHVy
biBtX2RlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxPYmplY3QoKTsKIH0KIAotU3RyaW5n
IEphdmFTY3JpcHRDYWxsRnJhbWU6OmZ1bmN0aW9uTmFtZSgpIGNvbnN0CitTdHJpbmcgRGVidWdn
ZXI6OkZyYW1lVmlzaXRvcjo6ZnVuY3Rpb25OYW1lKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9p
c1ZhbGlkKTsKICAgICBpZiAoIW1faXNWYWxpZCkKQEAgLTgyLDcgKzY3LDcgQEAgU3RyaW5nIEph
dmFTY3JpcHRDYWxsRnJhbWU6OmZ1bmN0aW9uTmFtZQogICAgIHJldHVybiBmdW5jdGlvbk5hbWU7
CiB9CiAKLURlYnVnZ2VyQ2FsbEZyYW1lOjpUeXBlIEphdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUo
KSBjb25zdAorRGVidWdnZXJDYWxsRnJhbWU6OlR5cGUgRGVidWdnZXI6OkZyYW1lVmlzaXRvcjo6
dHlwZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAgaWYgKCFtX2lzVmFs
aWQpCkBAIC05MCw3ICs3NSw3IEBAIERlYnVnZ2VyQ2FsbEZyYW1lOjpUeXBlIEphdmFTY3JpcHRD
YWxsRnIKICAgICByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS50eXBlKCk7CiB9CiAKLUpTT2Jq
ZWN0KiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0aGlzT2JqZWN0KCkgY29uc3QKK0pTT2JqZWN0KiBE
ZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yOjp0aGlzT2JqZWN0KCkgY29uc3QKIHsKICAgICBBU1NFUlQo
bV9pc1ZhbGlkKTsKICAgICBpZiAoIW1faXNWYWxpZCkKQEAgLTk4LDcgKzgzLDcgQEAgSlNPYmpl
Y3QqIEphdmFTY3JpcHRDYWxsRnJhbWU6OnRoaXNPYmplYwogICAgIHJldHVybiBtX2RlYnVnZ2Vy
Q2FsbEZyYW1lLnRoaXNPYmplY3QoKTsKIH0KIAotRXhlY1N0YXRlKiBKYXZhU2NyaXB0Q2FsbEZy
YW1lOjpleGVjKCkgY29uc3QKK0V4ZWNTdGF0ZSogRGVidWdnZXI6OkZyYW1lVmlzaXRvcjo6ZXhl
YygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAgaWYgKCFtX2lzVmFsaWQp
CkBAIC0xMDcsNyArOTIsNyBAQCBFeGVjU3RhdGUqIEphdmFTY3JpcHRDYWxsRnJhbWU6OmV4ZWMo
KSBjCiB9CiAKIC8vIEV2YWx1YXRlIHNvbWUgSmF2YVNjcmlwdCBjb2RlIGluIHRoZSBzY29wZSBv
ZiB0aGlzIGZyYW1lLgotSlNWYWx1ZSBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShjb25z
dCBTdHJpbmcmIHNjcmlwdCwgSlNWYWx1ZSYgZXhjZXB0aW9uKSBjb25zdAorSlNWYWx1ZSBEZWJ1
Z2dlcjo6RnJhbWVWaXNpdG9yOjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNWYWx1
ZSYgZXhjZXB0aW9uKSBjb25zdAogewogICAgIEFTU0VSVChtX2lzVmFsaWQpOwogICAgIGlmICgh
bV9pc1ZhbGlkKQpAQCAtMTE3LDYgKzEwMiw0IEBAIEpTVmFsdWUgSmF2YVNjcmlwdENhbGxGcmFt
ZTo6ZXZhbHVhdGUoY28KICAgICByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS5ldmFsdWF0ZShz
Y3JpcHQsIGV4Y2VwdGlvbik7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAJKHJldmlzaW9uIDE1NjI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw3ICszOTYsNyBAQCBzdGF0
aWMgYm9vbCB1bndpbmRDYWxsRnJhbWUoU3RhY2tWaXNpdG9yCiAgICAgQ29kZUJsb2NrKiBvbGRD
b2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNj
b3BlKCk7CiAKLSAgICBpZiAoRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT5keW5hbWlj
R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsKKyAgICBpZiAoRGVidWdnZXJFdmVudEhhbmRs
ZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2Vy
KCktPmV2ZW50SGFuZGxlcigpKSB7CiAgICAgICAgIGludCBsaW5lID0gY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKS0+bGFzdExpbmUoKTsKICAgICAgICAgRGVidWdnZXJDYWxsRnJhbWUgZGVi
dWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1lLCBsaW5lLCAwLCBleGNlcHRpb25WYWx1ZSk7CiAgICAg
ICAgIGlmIChjYWxsRnJhbWUtPmNhbGxlZSgpKQpAQCAtNjU4LDcgKzY1OCw3IEBAIE5FVkVSX0lO
TElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnUKICAgICBBU1NFUlQoY2FsbEZyYW1lLT52
bSgpLmV4Y2VwdGlvblN0YWNrKCkuc2l6ZSgpKTsKICAgICBBU1NFUlQoIWV4Y2VwdGlvblZhbHVl
LmlzT2JqZWN0KCkgfHwgYXNPYmplY3QoZXhjZXB0aW9uVmFsdWUpLT5oYXNQcm9wZXJ0eShjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5zdGFjaykpOwogCi0gICAgaWYg
KERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5k
ZWJ1Z2dlcigpKSB7CisgICAgaWYgKERlYnVnZ2VyRXZlbnRIYW5kbGVyKiBkZWJ1Z2dlciA9IGNh
bGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpLT5ldmVudEhhbmRsZXIo
KSkgewogICAgICAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIHRoZSBleGNlcHRpb24gYW5kIHRoZSBl
eGNlcHRpb24gc3RhY2sgaGVyZSBpbiBvcmRlciB0byBzZWUgaWYgYSBuZXcgZXhjZXB0aW9uIGhh
cHBlbnMuCiAgICAgICAgIC8vIEFmdGVyd2FyZHMsIHRoZSB2YWx1ZXMgYXJlIHB1dCBiYWNrIHRv
IGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhpcyBlcnJvci4KICAgICAgICAgQ2xlYXJFeGNlcHRpb25T
Y29wZSBzY29wZSgmY2FsbEZyYW1lLT52bSgpKTsKQEAgLTEyNjIsNyArMTI2Miw3IEBAIEpTVmFs
dWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKIAogTkVWRVJfSU5MSU5FIHZvaWQg
SW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFtZSogY2FsbEZyYW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1
Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCBpbnQgY29sdW1uKQogewotICAg
IERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5k
ZWJ1Z2dlcigpOworICAgIERlYnVnZ2VyRXZlbnRIYW5kbGVyKiBkZWJ1Z2dlciA9IGNhbGxGcmFt
ZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpLT5ldmVudEhhbmRsZXIoKTsKICAg
ICBpZiAoIWRlYnVnZ2VyKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE1NjI0
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzIzLDcgKzcyMyw3IEBAIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ayogSlNHbG9iYWxPYmplY3QKICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2Vk
Q29kZSA9IHZtKCkuY29kZUNhY2hlKCktPmdldFByb2dyYW1Db2RlQmxvY2sodm0oKSwgZXhlY3V0
YWJsZSwgZXhlY3V0YWJsZS0+c291cmNlKCksIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9kZSwgcHJv
ZmlsZXJNb2RlLCBlcnJvcik7CiAKICAgICBpZiAoaGFzRGVidWdnZXIoKSkKLSAgICAgICAgZGVi
dWdnZXIoKS0+c291cmNlUGFyc2VkKGNhbGxGcmFtZSwgZXhlY3V0YWJsZS0+c291cmNlKCkucHJv
dmlkZXIoKSwgZXJyb3IubV9saW5lLCBlcnJvci5tX21lc3NhZ2UpOworICAgICAgICBkZWJ1Z2dl
cigpLT5ldmVudEhhbmRsZXIoKS0+c291cmNlUGFyc2VkKGNhbGxGcmFtZSwgZXhlY3V0YWJsZS0+
c291cmNlKCkucHJvdmlkZXIoKSwgZXJyb3IubV9saW5lLCBlcnJvci5tX21lc3NhZ2UpOwogCiAg
ICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKSB7CiAgICAgICAg
ICpleGNlcHRpb24gPSBlcnJvci50b0Vycm9yT2JqZWN0KHRoaXMsIGV4ZWN1dGFibGUtPnNvdXJj
ZSgpKTsKQEAgLTc0Miw3ICs3NDIsNyBAQCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIEpTR2xvYmFs
T2JqZWN0OjpjCiAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENvZGUgPSB2bSgp
LmNvZGVDYWNoZSgpLT5nZXRFdmFsQ29kZUJsb2NrKHZtKCksIGV4ZWN1dGFibGUsIGV4ZWN1dGFi
bGUtPnNvdXJjZSgpLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJy
b3IpOwogCiAgICAgaWYgKGhhc0RlYnVnZ2VyKCkpCi0gICAgICAgIGRlYnVnZ2VyKCktPnNvdXJj
ZVBhcnNlZChjYWxsRnJhbWUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGVycm9y
Lm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsKKyAgICAgICAgZGVidWdnZXIoKS0+ZXZlbnRIYW5k
bGVyKCktPnNvdXJjZVBhcnNlZChjYWxsRnJhbWUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3Zp
ZGVyKCksIGVycm9yLm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsKIAogICAgIGlmIChlcnJvci5t
X3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSkgewogICAgICAgICB0aHJvd1ZNRXJyb3Io
Y2FsbEZyYW1lLCBlcnJvci50b0Vycm9yT2JqZWN0KHRoaXMsIGV4ZWN1dGFibGUtPnNvdXJjZSgp
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTYyODEpCisrKyBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MCBAQAorMjAxMy0wOS0yMyAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgdG8gaGlkZSBE
ZWJ1Z2dlciBjYWxsYmFjayBpbnRlcmZhY2UgaW5zaWRlIEpTQy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTc5Ni4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAg
MS4gRXh0cmFjdCB0aGUgSlNDIGRlYnVnIGhvb2sgY2FsbGJhY2tzIGludG8gYSBKU0M6OkRlYnVn
Z2VyRXZlbnRIYW5kbGVyCisgICAgICAgICAgIGludGVyZmFjZS4gVGhlIEpTQzo6RGVidWdnZXIg
bm93IHByaXZhdGVseSBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlLgorCisgICAgICAgIDIuIE1v
dmUgbm9uLWZyb250IGVuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgZnJvbSBXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcgorICAgICAgICAgICBpbnRvIEpTQzo6RGVidWdnZXIuCisKKyAgICAgICAg
My4gTW92ZSBXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lIGZ1bmN0aW9uYWxpdHkgaW50byBh
CisgICAgICAgICAgIERlYnVnZ2VyOjpGcmFtZVZpc2l0b3IgY2xhc3MuICBUaGUgSmF2YVNjcmlw
dENhbGxGcmFtZSBpcyBzdGlsbAorICAgICAgICAgICBuZWNlc3NhcnkgYmVjYXVzZSBpdCBpcyBw
dWJsaXNoZWQgYXMgYSBKUyBvYmplY3QgdG8gdGhlIEluc3BlY3Rvci4gSW4KKyAgICAgICAgICAg
YSBsYXRlciB0YXNrLCBJJ2xsIGNvbnNvbGlkYXRlIHRoZSBEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9y
IGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgaW50byBEZWJ1Z2dlckNhbGxGcmFtZSwgYW5kIHJl
bW92ZSB0aGUgbmVlZCBmb3IgdGhlIERlYnVnZ2VyOjpGcmFtZVZpc2l0b3IuCisKKyAgICAgICAg
NC4gQ3JlYXRlIGEgSlNDOjpCcmVha3BvaW50IGJhc2VkIG9uIGEgc3Vic2V0IG9mIFdlYkNvcmU6
OlNjcmlwdEJyZWFrUG9pbnQuCisKKyAgICAgICAgNS4gUmVpbXBsZW1lbnQgV2ViS2l0L21hYydz
IFdlYlNjcmlwdERlYnVnZ2VyIGJhc2VkIG9uIHRoZSBuZXcKKyAgICAgICAgICAgSlNDOjpEZWJ1
Z2dlciBpbnRlcmZhY2UgKGkuZS4gbm8gdXNlIG9mIHRoZSBKU0MgZGVidWcgaG9va3MpLgorCisg
ICAgICAgIDYuIFNvdXJjZSBJRCBpcyBub3cgYWx3YXlzIGFuIGludHB0cl90IGJlbG93IHRoZSBJ
bnNwZWN0b3JEZWJ1Z0FnZW50IGxheWVyLgorICAgICAgICAgICBUaGUgSW5zcGVjdG9yRGVidWdB
Z2VudCB0YWtlcyBjYXJlIG9mIHRyYW5zbGF0aW5nIGJldHdlZW4gdGhlIEluc3BlY3RvcgorICAg
ICAgICAgICBKU09OIHByb3RvY29sJ3MgU3RyaW5nIHNvdXJjZUlkIGFuZCB0aGUgaW50cHRyX3Qg
c291cmNlSWQgd2hlbiBuZWVkZWQuCisKKyAgICAgICAgNy4gQnJlYWtwb2ludCBJRCBpcyBub3cg
YSBsb25nIGluc3RlYWQgb2YgYSBTdHJpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxG
cmFtZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxG
cmFtZS5oOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFtZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6OnNvdXJjZUlEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6OmNhbGxlcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2NyaXB0
QnJlYWtwb2ludFRvSlNDQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6U2NyaXB0RGVidWdTZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6OmNsZWFyQnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6OmV2YWx1YXRlQnJlYWtwb2ludEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3BvaW50QWN0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0U2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhdXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhcnNlU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVTb3VyY2VQYXJzZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6Om5lZWRQYXVzZUhhbmRsaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVQYXVzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlRXhjZXB0aW9uSW5CcmVha3BvaW50Q29u
ZGl0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpub3RpZnlEb25l
UHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVn
U2VydmVyOjpjb21waWxlU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2Vy
dmVyOjpydW5TY3JpcHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVy
Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6OldvcmtlclNjcmlwdERl
YnVnU2VydmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZl
ci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMb2NhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWtwb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U2NyaXB0
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNj
cmlwdFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpj
b21waWxlU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnJ1blNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
aWRQYXJzZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpkaWRQYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpj
bGVhcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oOgorCiAyMDEzLTA5LTIzICBB
bnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUmVuZGVy
T2JqZWN0Q2hpbGRMaXN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTYyNDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc5
Nyw3ICs3OTcsNiBAQAogCQkxQzgxQjk1QTBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQzgxQjk1QjBFOTcz
MzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzgxQjk1NzBFOTczMzA4MDAyNjZFMDcgLyog
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi87IH07CiAJCTFDODFCOTVDMEU5NzMzMDgwMDI2NkUw
NyAvKiBJbnNwZWN0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDODFCOTU4MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxQzgx
QkEwOTBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzgxQkEwMzBFOTczNDgzMDAy
NjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgKi87IH07CiAJCTFDODFCQTBBMEU5NzM0
ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzgxQkEwNDBFOTczNDgzMDAyNjZFMDcgLyogSmF2
YVNjcmlwdENhbGxGcmFtZS5oICovOyB9OwogCQkxQ0ExOUUwNTBEQzI1NTk1MDA2NUE5OTQgLyog
RXZlbnRMb29wTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUNBMTlFMDMwREMyNTU5NTAwNjVBOTk0IC8qIEV2ZW50TG9vcE1hYy5tbSAqLzsgfTsK
IAkJMUNBMTlFMTYwREMyNTVDQTAwNjVBOTk0IC8qIEV2ZW50TG9vcC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNBMTlFMTUwREMyNTVDQTAwNjVBOTk0
IC8qIEV2ZW50TG9vcC5oICovOyB9OwpAQCAtNzI2Miw3ICs3MjYxLDYgQEAKIAkJMUM4MUI5NTYw
RTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQzgxQjk1NzBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JD
b250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTgwRTk3
MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnNwZWN0b3JDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMUM4MUJBMDMwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSmF2YVNjcmlwdENhbGxGcmFtZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCQTA0MEU5NzM0ODMwMDI2NkUw
NyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEphdmFTY3JpcHRDYWxsRnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUM4MUJBMDUwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IEphdmFTY3JpcHRDYWxsRnJhbWUuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQzkwNERGOTBCQTlEMkM4MDA4MUU5RDAgLyogVmVyc2lvbi54Y2Nv
bmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBWZXJzaW9uLnhjY29uZmlnOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkyMzIsNyArMTkyMzAsNiBAQAogCQkJCTE0
MzJFODQ2MEM1MTQ5MzgwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuaCAqLywKIAkJCQlDNTg1QTY2
MDExRDRGQUM1MDA0QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5jcHAgKi8sCiAJCQkJQzU4
NUE2NjExMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRpZXMuaCAqLywKLQkJCQkx
QzgxQkEwMzBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgKi8sCiAJ
CQkJMUM4MUJBMDQwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCAqLywK
IAkJCQlCQ0U0MzhBMTE0MEMwREJGMDA1RTQzN0UgLyogSlNEaWN0aW9uYXJ5LmNwcCAqLywKIAkJ
CQlCQ0U0Mzg5QjE0MEIxQkE3MDA1RTQzN0UgLyogSlNEaWN0aW9uYXJ5LmggKi8sCkBAIC0yNjA0
MSw3ICsyNjAzOCw2IEBACiAJCQkJQjI3NTM1N0QwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3RN
YWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMjc1MzU2MjBCMDUzODE0MDAyQ0U2NEYgLyogSW50
U2l6ZUNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTdFMEIwNTM4MTQwMDJDRTY0RiAv
KiBJbnRTaXplTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUM4MUJBMDkwRTk3MzQ4MzAwMjY2
RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE4Rjg4
MDQwRkY5NTdBRTAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMDczQkUzNEYxN0QxODE4MzAwMkJENDMxIC8qIFJUQ0ljZUNhbmRpZGF0ZURlc2NyaXB0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFQzkxMkIwM0Y1MDAwM0E1ODNBIC8qIEpT
QW5hbHlzZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE1NjI0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0KLSNpbmNsdWRlICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgi
Ci0KLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2Uu
aCIKLSNpbmNsdWRlIDxkZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvQ29tcGxldGlvbi5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTTG9j
ay5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotICAgIAotSmF2YVNjcmlwdENhbGxGcmFtZTo6SmF2YVNjcmlwdENhbGxGcmFtZShjb25zdCBE
ZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIFBhc3NSZWZQdHI8SmF2YVNjcmlw
dENhbGxGcmFtZT4gY2FsbGVyKQotICAgIDogbV9kZWJ1Z2dlckNhbGxGcmFtZShkZWJ1Z2dlckNh
bGxGcmFtZSkKLSAgICAsIG1fY2FsbGVyKGNhbGxlcikKLSAgICAsIG1faXNWYWxpZCh0cnVlKQot
ewotfQotCi1KYXZhU2NyaXB0Q2FsbEZyYW1lKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjYWxsZXIo
KQotewotICAgIHJldHVybiBtX2NhbGxlci5nZXQoKTsKLX0KLQotSlNDOjpKU1Njb3BlKiBKYXZh
U2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWluKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9pc1Zh
bGlkKTsKLSAgICBpZiAoIW1faXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IG1fZGVidWdnZXJDYWxsRnJhbWUuc2NvcGUoKTsKLX0KLQotSlNDOjpKU0dsb2JhbE9iamVjdCog
SmF2YVNjcmlwdENhbGxGcmFtZTo6ZHluYW1pY0dsb2JhbE9iamVjdCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1faXNWYWxpZCk7Ci0gICAgaWYgKCFtX2lzVmFsaWQpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxPYmplY3QoKTsK
LX0KLQotU3RyaW5nIEphdmFTY3JpcHRDYWxsRnJhbWU6OmZ1bmN0aW9uTmFtZSgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKG1faXNWYWxpZCk7Ci0gICAgaWYgKCFtX2lzVmFsaWQpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLSAgICBTdHJpbmcgZnVuY3Rpb25OYW1lID0gbV9kZWJ1Z2dlckNhbGxG
cmFtZS5jYWxjdWxhdGVkRnVuY3Rpb25OYW1lKCk7Ci0gICAgaWYgKGZ1bmN0aW9uTmFtZS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gZnVuY3Rpb25OYW1l
OwotfQotCi1EZWJ1Z2dlckNhbGxGcmFtZTo6VHlwZSBKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0eXBl
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9pc1ZhbGlkKTsKLSAgICBpZiAoIW1faXNWYWxpZCkK
LSAgICAgICAgcmV0dXJuIERlYnVnZ2VyQ2FsbEZyYW1lOjpQcm9ncmFtVHlwZTsKLSAgICByZXR1
cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS50eXBlKCk7Ci19Ci0KLUpTT2JqZWN0KiBKYXZhU2NyaXB0
Q2FsbEZyYW1lOjp0aGlzT2JqZWN0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9pc1ZhbGlkKTsK
LSAgICBpZiAoIW1faXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fZGVi
dWdnZXJDYWxsRnJhbWUudGhpc09iamVjdCgpOwotfQotCi1FeGVjU3RhdGUqIEphdmFTY3JpcHRD
YWxsRnJhbWU6OmV4ZWMoKSBjb25zdAotewotICAgIEFTU0VSVChtX2lzVmFsaWQpOwotICAgIGlm
ICghbV9pc1ZhbGlkKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9kZWJ1Z2dlckNh
bGxGcmFtZS5jYWxsRnJhbWUoKTsKLX0KLQotLy8gRXZhbHVhdGUgc29tZSBKYXZhU2NyaXB0IGNv
ZGUgaW4gdGhlIHNjb3BlIG9mIHRoaXMgZnJhbWUuCi1KU1ZhbHVlIEphdmFTY3JpcHRDYWxsRnJh
bWU6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBKU1ZhbHVlJiBleGNlcHRpb24pIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1faXNWYWxpZCk7Ci0gICAgaWYgKCFtX2lzVmFsaWQpCi0gICAg
ICAgIHJldHVybiBqc051bGwoKTsKLQotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGVidWdnZXJD
YWxsRnJhbWUuY2FsbEZyYW1lKCkpOwotICAgIHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLmV2
YWx1YXRlKHNjcmlwdCwgZXhjZXB0aW9uKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5oCShyZXZpc2lvbiAx
NTYyNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQogCi0jaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaD4K
KyNpbmNsdWRlIDxkZWJ1Z2dlci9EZWJ1Z2dlci5oPgogI2luY2x1ZGUgPGludGVycHJldGVyL0Nh
bGxGcmFtZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KQEAgLTM3LDYwICszNywxOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEphdmFTY3JpcHRDYWxsRnJhbWUgOiBwdWJsaWMgUmVmQ291bnRlZDxKYXZhU2NyaXB0Q2Fs
bEZyYW1lPiB7CitjbGFzcyBKYXZhU2NyaXB0Q2FsbEZyYW1lIDogcHVibGljIEpTQzo6RGVidWdn
ZXI6OkZyYW1lVmlzaXRvciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SmF2YVNj
cmlwdENhbGxGcmFtZT4gY3JlYXRlKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmIGRlYnVn
Z2VyQ2FsbEZyYW1lLCBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IGNhbGxlcikKKyAg
ICBzdGF0aWMgSmF2YVNjcmlwdENhbGxGcmFtZSogY3JlYXRlKEpTQzo6RGVidWdnZXI6OkZyYW1l
VmlzaXRvciogZnJhbWUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEphdmFT
Y3JpcHRDYWxsRnJhbWUoZGVidWdnZXJDYWxsRnJhbWUsIGNhbGxlcikpOworICAgICAgICBBU1NF
UlQoc2l6ZW9mKEphdmFTY3JpcHRDYWxsRnJhbWUpID09IHNpemVvZihKU0M6OkRlYnVnZ2VyOjpG
cmFtZVZpc2l0b3IpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlw
dENhbGxGcmFtZSo+KGZyYW1lKTsKICAgICB9CiAKLSAgICB2b2lkIGludmFsaWRhdGUoKQotICAg
IHsKLSAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIG1fZGVidWdnZXJDYWxsRnJh
bWUuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBt
X2lzVmFsaWQ7IH0KLQotICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGNhbGxlcigpOworICAgIGlu
dHB0cl90IHNvdXJjZUlEKCkgY29uc3QgeyByZXR1cm4gc291cmNlSWQoKTsgfQorICAgIEphdmFT
Y3JpcHRDYWxsRnJhbWUqIGNhbGxlcigpIHsgcmV0dXJuIGNyZWF0ZShKU0M6OkRlYnVnZ2VyOjpG
cmFtZVZpc2l0b3I6OmNhbGxlcigpKTsgfQogCi0gICAgaW50cHRyX3Qgc291cmNlSUQoKSBjb25z
dCB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLnNvdXJjZUlkKCk7IH0KLSAgICBjb25zdCBU
ZXh0UG9zaXRpb24gcG9zaXRpb24oKSBjb25zdAotICAgIHsKLSAgICAgICAgT3JkaW5hbE51bWJl
ciBsaW5lID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobV9kZWJ1Z2dlckNh
bGxGcmFtZS5saW5lKCkpOwotICAgICAgICBPcmRpbmFsTnVtYmVyIGNvbHVtbiA9IFdURjo6T3Jk
aW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KG1fZGVidWdnZXJDYWxsRnJhbWUuY29sdW1uKCkp
OwotICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uKGxpbmUsIGNvbHVtbik7Ci0gICAgfQotICAg
IGludCBsaW5lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6Ok9yZGluYWxOdW1i
ZXI6OmZyb21PbmVCYXNlZEludChtX2RlYnVnZ2VyQ2FsbEZyYW1lLmxpbmUoKSkuemVyb0Jhc2Vk
SW50KCk7Ci0gICAgfQotICAgIGludCBjb2x1bW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIFdURjo6T3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KG1fZGVidWdnZXJDYWxsRnJh
bWUuY29sdW1uKCkpLnplcm9CYXNlZEludCgpOwotICAgIH0KLQotICAgIHZvaWQgdXBkYXRlKGNv
bnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lKQotICAgIHsKLSAg
ICAgICAgbV9kZWJ1Z2dlckNhbGxGcmFtZSA9IGRlYnVnZ2VyQ2FsbEZyYW1lOwotICAgICAgICBt
X2lzVmFsaWQgPSB0cnVlOwotICAgIH0KLQotICAgIFN0cmluZyBmdW5jdGlvbk5hbWUoKSBjb25z
dDsKLSAgICBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpUeXBlIHR5cGUoKSBjb25zdDsKLSAgICBK
U0M6OkpTU2NvcGUqIHNjb3BlQ2hhaW4oKSBjb25zdDsKLSAgICBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBkeW5hbWljR2xvYmFsT2JqZWN0KCkgY29uc3Q7Ci0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMo
KSBjb25zdDsKLQotICAgIEpTQzo6SlNPYmplY3QqIHRoaXNPYmplY3QoKSBjb25zdDsKLSAgICBK
U0M6OkpTVmFsdWUgZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIEpTQzo6SlNWYWx1ZSYg
ZXhjZXB0aW9uKSBjb25zdDsKLSAgICAKIHByaXZhdGU6Ci0gICAgSmF2YVNjcmlwdENhbGxGcmFt
ZShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgUGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2Fs
bEZyYW1lPiBjYWxsZXIpOwotCi0gICAgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSBtX2RlYnVnZ2Vy
Q2FsbEZyYW1lOwotICAgIFJlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBtX2NhbGxlcjsKLSAg
ICBib29sIG1faXNWYWxpZDsKKyAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKCk7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxNTYyNDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01MywxOCAr
NTMsMTcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1T
Y3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0RGVidWdTZXJ2ZXIoKQotICAgIDogbV9jYWxsaW5nTGlz
dGVuZXJzKGZhbHNlKQotICAgICwgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKERvbnRQYXVzZU9u
RXhjZXB0aW9ucykKLSAgICAsIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQoZmFsc2UpCi0gICAgLCBt
X3BhdXNlZChmYWxzZSkKK2lubGluZSBzdGF0aWMgSlNDOjpCcmVha3BvaW50IHNjcmlwdEJyZWFr
cG9pbnRUb0pTQ0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSWQsIGNvbnN0IFNjcmlwdEJyZWFr
cG9pbnQmIHNiKQoreworICAgIHJldHVybiBKU0M6OkJyZWFrcG9pbnQoc291cmNlSWQsIHNiLmxp
bmVOdW1iZXIsIHNiLmNvbHVtbk51bWJlciwgc2IuY29uZGl0aW9uLCBzYi5hdXRvQ29udGludWUp
OworfQorCitTY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0RGVidWdTZXJ2ZXIoYm9vbCBpc1dvcmtl
clRocmVhZCkKKyAgICA6IERlYnVnZ2VyKGlzV29ya2VyVGhyZWFkKQorICAgICwgbV9jYWxsaW5n
TGlzdGVuZXJzKGZhbHNlKQogICAgICwgbV9ydW5uaW5nTmVzdGVkTWVzc2FnZUxvb3AoZmFsc2Up
CiAgICAgLCBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHModHJ1ZSkKLSAgICAsIG1fYnJl
YWtwb2ludHNBY3RpdmF0ZWQodHJ1ZSkKLSAgICAsIG1fcGF1c2VPbkNhbGxGcmFtZSgwKQogICAg
ICwgbV9yZWNvbXBpbGVUaW1lcih0aGlzLCAmU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFs
bEpTRnVuY3Rpb25zKQotICAgICwgbV9sYXN0RXhlY3V0ZWRMaW5lKC0xKQotICAgICwgbV9sYXN0
RXhlY3V0ZWRTb3VyY2VJZCgtMSkKIHsKIH0KIApAQCAtNzIsMTMxICs3MSw1NCBAQCBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6flNjcmlwdERlYnVnU2VydmVyKCkKIHsKIH0KIAotU3RyaW5nIFNjcmlwdERl
YnVnU2VydmVyOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFNj
cmlwdEJyZWFrcG9pbnQmIHNjcmlwdEJyZWFrcG9pbnQsIGludCogYWN0dWFsTGluZU51bWJlciwg
aW50KiBhY3R1YWxDb2x1bW5OdW1iZXIpCitCcmVha3BvaW50SWQgU2NyaXB0RGVidWdTZXJ2ZXI6
OnNldEJyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSWQsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQm
IHNjcmlwdEJyZWFrcG9pbnQsIGludCogYWN0dWFsTGluZU51bWJlciwgaW50KiBhY3R1YWxDb2x1
bW5OdW1iZXIpCiB7Ci0gICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRvSW50
UHRyKCk7Ci0gICAgaWYgKCFzb3VyY2VJRFZhbHVlKQotICAgICAgICByZXR1cm4gIiI7Ci0gICAg
U291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9IG1fc291cmNlSWRUb0JyZWFr
cG9pbnRzLmZpbmQoc291cmNlSURWYWx1ZSk7Ci0gICAgaWYgKGl0ID09IG1fc291cmNlSWRUb0Jy
ZWFrcG9pbnRzLmVuZCgpKQotICAgICAgICBpdCA9IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLnNl
dChzb3VyY2VJRFZhbHVlLCBMaW5lVG9CcmVha3BvaW50TWFwKCkpLml0ZXJhdG9yOwotICAgIExp
bmVUb0JyZWFrcG9pbnRNYXA6Oml0ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnZhbHVlLmZpbmQoc2Ny
aXB0QnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSk7Ci0gICAgaWYgKGJyZWFrc0l0ID09IGl0LT52
YWx1ZS5lbmQoKSkKLSAgICAgICAgYnJlYWtzSXQgPSBpdC0+dmFsdWUuc2V0KHNjcmlwdEJyZWFr
cG9pbnQubGluZU51bWJlciArIDEsIEJyZWFrcG9pbnRzSW5MaW5lKCkpLml0ZXJhdG9yOwotCi0g
ICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT52YWx1ZTsKLSAg
ICB1bnNpZ25lZCBicmVha3NDb3VudCA9IGJyZWFrc1ZlY3Rvci5zaXplKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJyZWFrc0NvdW50OyBpKyspIHsKLSAgICAgICAgaWYgKGJyZWFr
c1ZlY3Rvci5hdChpKS5jb2x1bW5OdW1iZXIgPT0gc2NyaXB0QnJlYWtwb2ludC5jb2x1bW5OdW1i
ZXIpCi0gICAgICAgICAgICByZXR1cm4gIiI7CisgICAgSlNDOjpCcmVha3BvaW50IGJyZWFrcG9p
bnQgPSBzY3JpcHRCcmVha3BvaW50VG9KU0NCcmVha3BvaW50KHNvdXJjZUlkLCBzY3JpcHRCcmVh
a3BvaW50KTsKKyAgICBCcmVha3BvaW50SWQgaWQgPSBEZWJ1Z2dlcjo6c2V0QnJlYWtwb2ludChz
b3VyY2VJZCwgYnJlYWtwb2ludCwgYWN0dWFsTGluZU51bWJlciwgYWN0dWFsQ29sdW1uTnVtYmVy
KTsKKyAgICBpZiAoaWQgIT0gbnVsbEJyZWFrcG9pbnRJZCkgeworI2lmbmRlZiBOREVCVUcKKyAg
ICAgICAgQnJlYWtwb2ludElkVG9BY3Rpb25zTWFwOjppdGVyYXRvciBpdCA9IG1fYnJlYWtwb2lu
dElkVG9BY3Rpb25zLmZpbmQoaWQpOworICAgICAgICBBU1NFUlQoaXQgPT0gbV9icmVha3BvaW50
SWRUb0FjdGlvbnMuZW5kKCkpOworI2VuZGlmCisgICAgICAgIGNvbnN0IFZlY3RvcjxTY3JpcHRC
cmVha3BvaW50QWN0aW9uPiAmYWN0aW9ucyA9IHNjcmlwdEJyZWFrcG9pbnQuYWN0aW9uczsKKyAg
ICAgICAgbV9icmVha3BvaW50SWRUb0FjdGlvbnMuc2V0KGlkLCBhY3Rpb25zKTsKICAgICB9Ci0g
ICAgYnJlYWtzVmVjdG9yLmFwcGVuZChzY3JpcHRCcmVha3BvaW50KTsKLQotICAgICphY3R1YWxM
aW5lTnVtYmVyID0gc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyOwotICAgICphY3R1YWxDb2x1
bW5OdW1iZXIgPSBzY3JpcHRCcmVha3BvaW50LmNvbHVtbk51bWJlcjsKLSAgICByZXR1cm4gc291
cmNlSUQgKyAiOiIgKyBTdHJpbmc6Om51bWJlcihzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIp
ICsgIjoiICsgU3RyaW5nOjpudW1iZXIoc2NyaXB0QnJlYWtwb2ludC5jb2x1bW5OdW1iZXIpOwor
ICAgIHJldHVybiBpZDsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtw
b2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6
OnJlbW92ZUJyZWFrcG9pbnQoQnJlYWtwb2ludElkIGlkKQogewotICAgIFZlY3RvcjxTdHJpbmc+
IHRva2VuczsKLSAgICBicmVha3BvaW50SWQuc3BsaXQoIjoiLCB0b2tlbnMpOwotICAgIGlmICh0
b2tlbnMuc2l6ZSgpICE9IDMpCi0gICAgICAgIHJldHVybjsKLSAgICBib29sIHN1Y2Nlc3M7Ci0g
ICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHRva2Vuc1swXS50b0ludFB0cigmc3VjY2Vzcyk7
Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQgbGluZU51
bWJlciA9IHRva2Vuc1sxXS50b1VJbnQoJnN1Y2Nlc3MpOwotICAgIGlmICghc3VjY2VzcykKLSAg
ICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGNvbHVtbk51bWJlciA9IHRva2Vuc1syXS50b1VJ
bnQoJnN1Y2Nlc3MpOwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
U291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9IG1fc291cmNlSWRUb0JyZWFr
cG9pbnRzLmZpbmQoc291cmNlSURWYWx1ZSk7Ci0gICAgaWYgKGl0ID09IG1fc291cmNlSWRUb0Jy
ZWFrcG9pbnRzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgTGluZVRvQnJlYWtwb2ludE1h
cDo6aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChsaW5lTnVtYmVyICsgMSk7Ci0g
ICAgaWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKKyAgICBpZiAoaWQgPT0gbnVsbEJy
ZWFrcG9pbnRJZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQnJlYWtwb2ludHNJbkxpbmUmIGJy
ZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT52YWx1ZTsKLSAgICB1bnNpZ25lZCBicmVha3NDb3VudCA9
IGJyZWFrc1ZlY3Rvci5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyZWFr
c0NvdW50OyBpKyspIHsKLSAgICAgICAgaWYgKGJyZWFrc1ZlY3Rvci5hdChpKS5jb2x1bW5OdW1i
ZXIgPT0gc3RhdGljX2Nhc3Q8aW50Pihjb2x1bW5OdW1iZXIpKSB7Ci0gICAgICAgICAgICBicmVh
a3NWZWN0b3IucmVtb3ZlKGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
CisgICAgQnJlYWtwb2ludElkVG9BY3Rpb25zTWFwOjppdGVyYXRvciBpdCA9IG1fYnJlYWtwb2lu
dElkVG9BY3Rpb25zLmZpbmQoaWQpOworICAgIEFTU0VSVChpdCAhPSBtX2JyZWFrcG9pbnRJZFRv
QWN0aW9ucy5lbmQoKSk7CisgICAgbV9icmVha3BvaW50SWRUb0FjdGlvbnMucmVtb3ZlKGl0KTsK
KyAgICBEZWJ1Z2dlcjo6cmVtb3ZlQnJlYWtwb2ludChpZCk7CiB9CiAKLWJvb2wgU2NyaXB0RGVi
dWdTZXJ2ZXI6Omhhc0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3Np
dGlvbiYgcG9zaXRpb24sIFNjcmlwdEJyZWFrcG9pbnQgKmhpdEJyZWFrcG9pbnQpIGNvbnN0Cit2
b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjbGVhckJyZWFrcG9pbnRzKCkKIHsKLSAgICBpZiAoIW1f
YnJlYWtwb2ludHNBY3RpdmF0ZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNvdXJj
ZUlkVG9CcmVha3BvaW50c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVh
a3BvaW50cy5maW5kKHNvdXJjZUlEKTsKLSAgICBpZiAoaXQgPT0gbV9zb3VyY2VJZFRvQnJlYWtw
b2ludHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBsaW5lTnVtYmVy
ID0gcG9zaXRpb24ubV9saW5lLnplcm9CYXNlZEludCgpOwotICAgIGludCBjb2x1bW5OdW1iZXIg
PSBwb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKTsKLSAgICBpZiAobGluZU51bWJlciA8
IDAgfHwgY29sdW1uTnVtYmVyIDwgMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTGlu
ZVRvQnJlYWtwb2ludE1hcDo6Y29uc3RfaXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmlu
ZChsaW5lTnVtYmVyICsgMSk7Ci0gICAgaWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBoaXQgPSBmYWxzZTsKLSAgICBjb25z
dCBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVjdG9yID0gYnJlYWtzSXQtPnZhbHVlOwotICAg
IHVuc2lnbmVkIGJyZWFrc0NvdW50ID0gYnJlYWtzVmVjdG9yLnNpemUoKTsKLSAgICB1bnNpZ25l
ZCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBicmVha3NDb3VudDsgaSsrKSB7Ci0gICAgICAgIGlu
dCBicmVha0xpbmUgPSBicmVha3NWZWN0b3IuYXQoaSkubGluZU51bWJlcjsKLSAgICAgICAgaW50
IGJyZWFrQ29sdW1uID0gYnJlYWtzVmVjdG9yLmF0KGkpLmNvbHVtbk51bWJlcjsKLSAgICAgICAg
Ly8gU2luY2UgZnJvbnRlbmQgdHJ1bmNhdGVzIHRoZSBpbmRlbnQsIHRoZSBmaXJzdCBzdGF0ZW1l
bnQgaW4gYSBsaW5lIG11c3QgbWF0Y2ggdGhlIGJyZWFrcG9pbnQgKGxpbmUsMCkuCi0gICAgICAg
IGlmICgobGluZU51bWJlciAhPSBtX2xhc3RFeGVjdXRlZExpbmUgJiYgbGluZU51bWJlciA9PSBi
cmVha0xpbmUgJiYgIWJyZWFrQ29sdW1uKQotICAgICAgICAgICAgfHwgKGxpbmVOdW1iZXIgPT0g
YnJlYWtMaW5lICYmIGNvbHVtbk51bWJlciA9PSBicmVha0NvbHVtbikpIHsKLSAgICAgICAgICAg
IGhpdCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBp
ZiAoIWhpdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGhpdEJyZWFrcG9pbnQp
Ci0gICAgICAgICpoaXRCcmVha3BvaW50ID0gYnJlYWtzVmVjdG9yLmF0KGkpOwotCi0gICAgLy8g
QW4gZW1wdHkgY29uZGl0aW9uIGNvdW50cyBhcyBubyBjb25kaXRpb24gd2hpY2ggaXMgZXF1aXZh
bGVudCB0byAidHJ1ZSIuCi0gICAgaWYgKGJyZWFrc1ZlY3Rvci5hdChpKS5jb25kaXRpb24uaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEpTVmFsdWUgZXhjZXB0aW9uOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5ldmFsdWF0ZShicmVha3NW
ZWN0b3IuYXQoaSkuY29uZGl0aW9uLCBleGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24pIHsK
LSAgICAgICAgLy8gQW4gZXJyb25lb3VzIGNvbmRpdGlvbiBjb3VudHMgYXMgImZhbHNlIi4KLSAg
ICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fY3VycmVudENhbGxGcmFtZS0+ZXhlYygpLCBleGNlcHRp
b24pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQudG9C
b29sZWFuKG1fY3VycmVudENhbGxGcmFtZS0+ZXhlYygpKTsKKyAgICBEZWJ1Z2dlcjo6Y2xlYXJC
cmVha3BvaW50cygpOworICAgIG1fYnJlYWtwb2ludElkVG9BY3Rpb25zLmNsZWFyKCk7CiB9CiAK
IGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OmV2YWx1YXRlQnJlYWtwb2ludEFjdGlvbihjb25zdCBT
Y3JpcHRCcmVha3BvaW50QWN0aW9uJiBicmVha3BvaW50QWN0aW9uKSBjb25zdAogewogICAgIHN3
aXRjaCAoYnJlYWtwb2ludEFjdGlvbi50eXBlKSB7CiAgICAgY2FzZSBTY3JpcHRCcmVha3BvaW50
QWN0aW9uVHlwZUxvZzogewotICAgICAgICBET01XaW5kb3cqIHdpbmRvdyA9IGFzSlNET01XaW5k
b3cobV9jdXJyZW50Q2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCk7Cisg
ICAgICAgIEpTQzo6RGVidWdnZXI6OkZyYW1lVmlzaXRvciogZnJhbWUgPSBjdXJyZW50RnJhbWUo
KTsKKyAgICAgICAgRE9NV2luZG93KiB3aW5kb3cgPSBhc0pTRE9NV2luZG93KGZyYW1lLT5keW5h
bWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCk7CiAgICAgICAgIGlmIChQYWdlQ29uc29sZSogY29u
c29sZSA9IHdpbmRvdy0+cGFnZUNvbnNvbGUoKSkKICAgICAgICAgICAgIGNvbnNvbGUtPmFkZE1l
c3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlTGV2ZWwsIGJyZWFrcG9pbnRBY3Rpb24u
ZGF0YSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFNjcmlwdEJyZWFrcG9pbnRB
Y3Rpb25UeXBlRXZhbHVhdGU6IHsKICAgICAgICAgSlNWYWx1ZSBleGNlcHRpb247Ci0gICAgICAg
IG1fY3VycmVudENhbGxGcmFtZS0+ZXZhbHVhdGUoYnJlYWtwb2ludEFjdGlvbi5kYXRhLCBleGNl
cHRpb24pOworICAgICAgICBKU0M6OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3IqIGZyYW1lID0gY3Vy
cmVudEZyYW1lKCk7CisgICAgICAgIGZyYW1lLT5ldmFsdWF0ZShicmVha3BvaW50QWN0aW9uLmRh
dGEsIGV4Y2VwdGlvbik7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICByZXBv
cnRFeGNlcHRpb24obV9jdXJyZW50Q2FsbEZyYW1lLT5leGVjKCksIGV4Y2VwdGlvbik7CisgICAg
ICAgICAgICByZXBvcnRFeGNlcHRpb24oZnJhbWUtPmV4ZWMoKSwgZXhjZXB0aW9uKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgU2NyaXB0QnJlYWtwb2ludEFjdGlvblR5cGVTb3Vu
ZDoKQEAgLTIwNyw3OSArMTI5LDE1IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OmV2YWx1YXRl
QnJlYWtwb2kKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6
ZXZhbHVhdGVCcmVha3BvaW50QWN0aW9ucyhjb25zdCBTY3JpcHRCcmVha3BvaW50JiBicmVha3Bv
aW50KSBjb25zdAordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3BvaW50QWN0
aW9ucyhjb25zdCBKU0M6OkJyZWFrcG9pbnQmIGJyZWFrcG9pbnQpCiB7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBicmVha3BvaW50LmFjdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
aWYgKCFldmFsdWF0ZUJyZWFrcG9pbnRBY3Rpb24oYnJlYWtwb2ludC5hY3Rpb25zW2ldKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBCcmVha3BvaW50SWRUb0FjdGlvbnNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9icmVha3BvaW50SWRUb0FjdGlvbnMuZmluZChicmVha3BvaW50LmlkKTsK
KyAgICBBU1NFUlQoaXQgIT0gbV9icmVha3BvaW50SWRUb0FjdGlvbnMuZW5kKCkpOworICAgIEJy
ZWFrcG9pbnRBY3Rpb25zJiBhY3Rpb25zID0gaXQtPnZhbHVlOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYWN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWV2YWx1YXRlQnJl
YWtwb2ludEFjdGlvbihhY3Rpb25zW2ldKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVh
a3BvaW50cygpCi17Ci0gICAgbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuY2xlYXIoKTsKLX0KLQot
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoYm9vbCBhY3Rp
dmF0ZWQpCi17Ci0gICAgbV9icmVha3BvaW50c0FjdGl2YXRlZCA9IGFjdGl2YXRlZDsKLX0KLQot
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShQYXVzZU9u
RXhjZXB0aW9uc1N0YXRlIHBhdXNlKQotewotICAgIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9
IHBhdXNlOwotfQotCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVzZU9uTmV4dFN0YXRl
bWVudChib29sIHBhdXNlKQotewotICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSBwYXVzZTsK
LX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6YnJlYWtQcm9ncmFtKCkKLXsKLSAgICBpZiAo
bV9wYXVzZWQgfHwgIW1fY3VycmVudENhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7Ci0gICAgcGF1c2VJZk5lZWRlZChtX2N1cnJl
bnRDYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7Ci19Ci0KLXZvaWQgU2NyaXB0RGVi
dWdTZXJ2ZXI6OmNvbnRpbnVlUHJvZ3JhbSgpCi17Ci0gICAgaWYgKCFtX3BhdXNlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IGZhbHNlOwotICAgIG1f
ZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cyA9IHRydWU7Ci19Ci0KLXZvaWQgU2NyaXB0RGVi
dWdTZXJ2ZXI6OnN0ZXBJbnRvU3RhdGVtZW50KCkKLXsKLSAgICBpZiAoIW1fcGF1c2VkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICBt
X2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0cnVlOwotfQotCi12b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpzdGVwT3ZlclN0YXRlbWVudCgpCi17Ci0gICAgaWYgKCFtX3BhdXNlZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZy
YW1lLmdldCgpOwotICAgIG1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cyA9IHRydWU7Ci19
Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBPdXRPZkZ1bmN0aW9uKCkKLXsKLSAgICBp
ZiAoIW1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdXNlT25DYWxsRnJhbWUg
PSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlcigpIDogMDsK
LSAgICBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0cnVlOwogfQogCiBib29sIFNj
cmlwdERlYnVnU2VydmVyOjpjYW5TZXRTY3JpcHRTb3VyY2UoKQpAQCAtMjg3LDcgKzE0NSw3IEBA
IGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OmNhblNldFNjcmlwdFNvdXIKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldFNjcmlwdFNvdXJjZShjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29sLCBTdHJpbmcqLCBTY3JpcHRWYWx1ZSosIFNjcmlw
dE9iamVjdCopCitib29sIFNjcmlwdERlYnVnU2VydmVyOjpzZXRTY3JpcHRTb3VyY2UoaW50cHRy
X3QsIGNvbnN0IFN0cmluZyYsIGJvb2wsIFN0cmluZyosIFNjcmlwdFZhbHVlKiwgU2NyaXB0T2Jq
ZWN0KikKIHsKICAgICAvLyBGSVhNRSg0MDMwMCk6IGltcGxlbWVudCB0aGlzLgogICAgIHJldHVy
biBmYWxzZTsKQEAgLTMwMiwxNSArMTYwLDE1IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnVw
ZGF0ZUNhbGxTdGFjaygKIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXVz
ZShTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lcikKIHsKLSAgICBBU1NFUlQobV9wYXVzZWQp
OwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2N1cnJlbnRDYWxsRnJhbWUt
PnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNDOjpEZWJ1Z2dlcjo6RnJhbWVW
aXNpdG9yKiBmcmFtZSA9IGN1cnJlbnRGcmFtZSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBmcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QoKTsKICAgICBKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICBKU1Zh
bHVlIGpzQ2FsbEZyYW1lOwogICAgIHsKLSAgICAgICAgaWYgKG1fY3VycmVudENhbGxGcmFtZS0+
aXNWYWxpZCgpICYmIGdsb2JhbE9iamVjdC0+aW5oZXJpdHMoSlNET01HbG9iYWxPYmplY3Q6Omlu
Zm8oKSkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5pc1ZhbGlkKCkgJiYgZ2xvYmFsT2JqZWN0LT5p
bmhlcml0cyhKU0RPTUdsb2JhbE9iamVjdDo6aW5mbygpKSkgewogICAgICAgICAgICAgSlNET01H
bG9iYWxPYmplY3QqIGRvbUdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhzdGF0ZSk7Ci0g
ICAgICAgICAgICBqc0NhbGxGcmFtZSA9IHRvSlMoc3RhdGUsIGRvbUdsb2JhbE9iamVjdCwgbV9j
dXJyZW50Q2FsbEZyYW1lLmdldCgpKTsKKyAgICAgICAgICAgIGpzQ2FsbEZyYW1lID0gdG9KUyhz
dGF0ZSwgZG9tR2xvYmFsT2JqZWN0LCBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjcmVhdGUoZnJhbWUp
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBqc0NhbGxGcmFtZSA9IGpzVW5kZWZpbmVk
KCk7CiAgICAgfQpAQCAtMzI0LDcgKzE4Miw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRp
c3BhdGNoRGlkQ29udGkKIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXJz
ZVNvdXJjZShjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBTb3VyY2VQcm92aWRlciogc291
cmNlUHJvdmlkZXIsIGJvb2wgaXNDb250ZW50U2NyaXB0KQogewotICAgIFN0cmluZyBzb3VyY2VJ
RCA9IFN0cmluZzo6bnVtYmVyKHNvdXJjZVByb3ZpZGVyLT5hc0lEKCkpOworICAgIGludHB0cl90
IHNvdXJjZUlkID0gc291cmNlUHJvdmlkZXItPmFzSUQoKTsKIAogICAgIFNjcmlwdERlYnVnTGlz
dGVuZXI6OlNjcmlwdCBzY3JpcHQ7CiAgICAgc2NyaXB0LnVybCA9IHNvdXJjZVByb3ZpZGVyLT51
cmwoKTsKQEAgLTM1Miw3ICsyMTAsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRj
aERpZFBhcnNlCiAgICAgVmVjdG9yPFNjcmlwdERlYnVnTGlzdGVuZXIqPiBjb3B5OwogICAgIGNv
cHlUb1ZlY3RvcihsaXN0ZW5lcnMsIGNvcHkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y29weS5zaXplKCk7ICsraSkKLSAgICAgICAgY29weVtpXS0+ZGlkUGFyc2VTb3VyY2Uoc291cmNl
SUQsIHNjcmlwdCk7CisgICAgICAgIGNvcHlbaV0tPmRpZFBhcnNlU291cmNlKHNvdXJjZUlkLCBz
Y3JpcHQpOwogfQogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaEZhaWxlZFRvUGFy
c2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgU291cmNlUHJvdmlkZXIqIHNv
dXJjZVByb3ZpZGVyLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkK
QEAgLTM3MiwyMCArMjMwLDcgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6aXNDb250ZW50U2Ny
aXB0KAogICAgIHJldHVybiBjdXJyZW50V29ybGQoZXhlYykgIT0gbWFpblRocmVhZE5vcm1hbFdv
cmxkKCk7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRldGFjaChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQotewotICAgIC8vIElmIHdlJ3JlIGRldGFjaGluZyBmcm9tIHRoZSBj
dXJyZW50bHkgZXhlY3V0aW5nIGdsb2JhbCBvYmplY3QsIG1hbnVhbGx5IHRlYXIgZG93biBvdXIK
LSAgICAvLyBzdGFjaywgc2luY2Ugd2Ugd29uJ3QgZ2V0IGZ1cnRoZXIgZGVidWdnZXIgY2FsbGJh
Y2tzIHRvIGRvIHNvLiBBbHNvLCByZXN1bWUgZXhlY3V0aW9uLAotICAgIC8vIHNpbmNlIHRoZXJl
J3Mgbm8gcG9pbnQgaW4gc3RheWluZyBwYXVzZWQgb25jZSBhIHdpbmRvdyBjbG9zZXMuCi0gICAg
aWYgKG1fY3VycmVudENhbGxGcmFtZSAmJiBtX2N1cnJlbnRDYWxsRnJhbWUtPmR5bmFtaWNHbG9i
YWxPYmplY3QoKSA9PSBnbG9iYWxPYmplY3QpIHsKLSAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1l
ID0gMDsKLSAgICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gMDsKLSAgICAgICAgY29udGludWVQ
cm9ncmFtKCk7Ci0gICAgfQotICAgIERlYnVnZ2VyOjpkZXRhY2goZ2xvYmFsT2JqZWN0KTsKLX0K
LQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c291cmNlUGFyc2VkKEV4ZWNTdGF0ZSogZXhlYywg
U291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZVNvdXJjZVBh
cnNlZChFeGVjU3RhdGUqIGV4ZWMsIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciwgaW50
IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgaWYgKG1fY2Fs
bGluZ0xpc3RlbmVycykKICAgICAgICAgcmV0dXJuOwpAQCAtNDA2LDYgKzI1MSwxMSBAQCB2b2lk
IFNjcmlwdERlYnVnU2VydmVyOjpzb3VyY2VQYXJzZWQoRXhlCiAgICAgbV9jYWxsaW5nTGlzdGVu
ZXJzID0gZmFsc2U7CiB9CiAKK2Jvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6Om5lZWRQYXVzZUhhbmRs
aW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuICEhZ2V0TGlz
dGVuZXJzRm9yR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCk7Cit9CisKIHZvaWQgU2NyaXB0RGVi
dWdTZXJ2ZXI6OmRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycyhjb25zdCBMaXN0ZW5lclNldCYg
bGlzdGVuZXJzLCBKYXZhU2NyaXB0RXhlY3V0aW9uQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAg
VmVjdG9yPFNjcmlwdERlYnVnTGlzdGVuZXIqPiBjb3B5OwpAQCAtNDI5LDUzICsyNzksOCBAQCB2
b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaEZ1bmN0aW9uCiAgICAgbV9jYWxsaW5nTGlz
dGVuZXJzID0gZmFsc2U7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNyZWF0ZUNhbGxG
cmFtZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCi17Ci0gICAg
aW50cHRyX3Qgc291cmNlSWQgPSBkZWJ1Z2dlckNhbGxGcmFtZS5zb3VyY2VJZCgpOwotICAgIG1f
Y3VycmVudENhbGxGcmFtZSA9IEphdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZShkZWJ1Z2dlckNh
bGxGcmFtZSwgbV9jdXJyZW50Q2FsbEZyYW1lKTsKLSAgICBpZiAobV9sYXN0RXhlY3V0ZWRTb3Vy
Y2VJZCAhPSBzb3VyY2VJZCkgewotICAgICAgICBtX2xhc3RFeGVjdXRlZExpbmUgPSAtMTsKLSAg
ICAgICAgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJZCA9IHNvdXJjZUlkOwotICAgIH0KLX0KLQotdm9p
ZCBTY3JpcHREZWJ1Z1NlcnZlcjo6dXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjb25z
dCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCit2b2lkIFNjcmlwdERlYnVn
U2VydmVyOjpoYW5kbGVQYXVzZShKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCkK
IHsKLSAgICAvLyBBU1NFUlQobV9jdXJyZW50Q2FsbEZyYW1lKTsKLSAgICBpZiAoIW1fY3VycmVu
dENhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jdXJyZW50Q2FsbEZyYW1lLT51
cGRhdGUoZGVidWdnZXJDYWxsRnJhbWUpOwotICAgIHBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxs
RnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6cGF1c2VJZk5lZWRlZChKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCkKLXsK
LSAgICBpZiAobV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLSAKLSAgICBpZiAoIWdldExpc3Rl
bmVyc0Zvckdsb2JhbE9iamVjdChkeW5hbWljR2xvYmFsT2JqZWN0KSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50OwotICAgIGJvb2wgZGlkSGl0QnJl
YWtwb2ludCA9IGZhbHNlOwotICAgIGJvb2wgcGF1c2VOb3cgPSBtX3BhdXNlT25OZXh0U3RhdGVt
ZW50OwotICAgIHBhdXNlTm93IHw9IChtX3BhdXNlT25DYWxsRnJhbWUgPT0gbV9jdXJyZW50Q2Fs
bEZyYW1lKTsKLSAgICBwYXVzZU5vdyB8PSBkaWRIaXRCcmVha3BvaW50ID0gaGFzQnJlYWtwb2lu
dChtX2N1cnJlbnRDYWxsRnJhbWUtPnNvdXJjZUlEKCksIG1fY3VycmVudENhbGxGcmFtZS0+cG9z
aXRpb24oKSwgJmJyZWFrcG9pbnQpOwotICAgIG1fbGFzdEV4ZWN1dGVkTGluZSA9IG1fY3VycmVu
dENhbGxGcmFtZS0+cG9zaXRpb24oKS5tX2xpbmUuemVyb0Jhc2VkSW50KCk7Ci0gICAgaWYgKCFw
YXVzZU5vdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRpZEhpdEJyZWFrcG9pbnQpIHsK
LSAgICAgICAgZXZhbHVhdGVCcmVha3BvaW50QWN0aW9ucyhicmVha3BvaW50KTsKLSAgICAgICAg
aWYgKGJyZWFrcG9pbnQuYXV0b0NvbnRpbnVlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IDA7Ci0gICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVu
dCA9IGZhbHNlOwotICAgIG1fcGF1c2VkID0gdHJ1ZTsKLQogICAgIGRpc3BhdGNoRnVuY3Rpb25U
b0xpc3RlbmVycygmU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2UsIGR5bmFtaWNH
bG9iYWxPYmplY3QpOwogICAgIGRpZFBhdXNlKGR5bmFtaWNHbG9iYWxPYmplY3QpOwogCkBAIC00
ODgsODUgKzI5MywxNiBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpwYXVzZUlmTmVlZGVkKEpT
CiAKICAgICBkaWRDb250aW51ZShkeW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICBkaXNwYXRjaEZ1
bmN0aW9uVG9MaXN0ZW5lcnMoJlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZENvbnRpbnVl
LCBkeW5hbWljR2xvYmFsT2JqZWN0KTsKLQotICAgIG1fcGF1c2VkID0gZmFsc2U7Ci19Ci0KLXZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNhbGxFdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYg
ZGVidWdnZXJDYWxsRnJhbWUpCi17Ci0gICAgaWYgKCFtX3BhdXNlZCkgewotICAgICAgICBjcmVh
dGVDYWxsRnJhbWUoZGVidWdnZXJDYWxsRnJhbWUpOwotICAgICAgICBwYXVzZUlmTmVlZGVkKGRl
YnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7Ci0gICAgfQotfQotCi12b2lk
IFNjcmlwdERlYnVnU2VydmVyOjphdFN0YXRlbWVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYg
ZGVidWdnZXJDYWxsRnJhbWUpCi17Ci0gICAgaWYgKCFtX3BhdXNlZCkKLSAgICAgICAgdXBkYXRl
Q2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFtZSk7Ci19Ci0KLXZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnJldHVybkV2ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBk
ZWJ1Z2dlckNhbGxGcmFtZSkKLXsKLSAgICBpZiAobV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUp
OwotCi0gICAgLy8gZGV0YWNoIG1heSBoYXZlIGJlZW4gY2FsbGVkIGR1cmluZyBwYXVzZUlmTmVl
ZGVkCi0gICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIFRyZWF0IHN0ZXBwaW5nIG92ZXIgYSByZXR1cm4gc3RhdGVtZW50IGxpa2Ugc3RlcHBpbmcg
b3V0LgotICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgPT0gbV9wYXVzZU9uQ2FsbEZyYW1lKQot
ICAgICAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlcigp
OwotICAgIG1fY3VycmVudENhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyKCk7
CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmV4Y2VwdGlvbihjb25zdCBEZWJ1Z2dlckNh
bGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGJvb2wgaGFzSGFuZGxlcikKK3ZvaWQgU2NyaXB0
RGVidWdTZXJ2ZXI6OmhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlvbihKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbikgY29uc3QKIHsKLSAgICBpZiAo
bV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3BhdXNlT25FeGNlcHRpb25z
U3RhdGUgPT0gUGF1c2VPbkFsbEV4Y2VwdGlvbnMgfHwgKG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSA9PSBQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zICYmICFoYXNIYW5kbGVyKSkKLSAgICAgICAg
bV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7Ci0KLSAgICB1cGRhdGVDYWxsRnJhbWVBbmRQ
YXVzZUlmTmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lKTsKKyAgICByZXBvcnRFeGNlcHRpb24oZXhl
YywgZXhjZXB0aW9uKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6d2lsbEV4ZWN1dGVQ
cm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKK3ZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6Om5vdGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKQog
ewotICAgIGlmICghbV9wYXVzZWQpIHsKLSAgICAgICAgY3JlYXRlQ2FsbEZyYW1lKGRlYnVnZ2Vy
Q2FsbEZyYW1lKTsKLSAgICAgICAgcGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFtZS5keW5h
bWljR2xvYmFsT2JqZWN0KCkpOwotICAgIH0KLX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6
ZGlkRXhlY3V0ZVByb2dyYW0oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZy
YW1lKQotewotICAgIGlmIChtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdXBkYXRl
Q2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFtZSk7Ci0KLSAgICAvLyBU
cmVhdCBzdGVwcGluZyBvdmVyIHRoZSBlbmQgb2YgYSBwcm9ncmFtIGxpa2Ugc3RlcHBpbmcgb3V0
LgotICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KG1fY3VycmVudENhbGxGcmFtZSA9PSBtX3BhdXNlT25DYWxsRnJhbWUpIHsKLSAgICAgICAgbV9w
YXVzZU9uQ2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXIoKTsKLSAgICAgICAg
aWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IG1fY3VycmVudENhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyKCk7Ci19Ci0K
LXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlYWNoQnJlYWtwb2ludChjb25zdCBEZWJ1Z2dl
ckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCi17Ci0gICAgaWYgKG1fcGF1c2VkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICB1
cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lKTsKKyAgICBt
X2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0cnVlOwogfQogCiB2b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKQpAQCAtNTc0LDcgKzMxMCw3
IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnUKICAgICBtX3JlY29t
cGlsZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6
Y29tcGlsZVNjcmlwdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYsIFN0cmluZyosIFN0cmluZyopCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjb21waWxlU2Ny
aXB0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgaW50cHRy
X3QqLCBTdHJpbmcqKQogewogICAgIC8vIEZJWE1FKDg5NjUyKTogaW1wbGVtZW50IHRoaXMuCiB9
CkBAIC01ODQsNyArMzIwLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJDb21waWxl
ZFNjcgogICAgIC8vIEZJWE1FKDg5NjUyKTogaW1wbGVtZW50IHRoaXMuCiB9CiAKLXZvaWQgU2Ny
aXB0RGVidWdTZXJ2ZXI6OnJ1blNjcmlwdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYs
IFNjcmlwdFZhbHVlKiwgYm9vbCosIFN0cmluZyopCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpy
dW5TY3JpcHQoSlNDOjpFeGVjU3RhdGUqLCBpbnRwdHJfdCwgU2NyaXB0VmFsdWUqLCBib29sKiwg
U3RyaW5nKikKIHsKICAgICAvLyBGSVhNRSg4OTY1Mik6IGltcGxlbWVudCB0aGlzLgogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCShy
ZXZpc2lvbiAxNTYyNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1
Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTAtMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtNTUsMzMgKzU1LDE4IEBAIGNsYXNzIFNjcmlwdERlYnVnTGlzdGVuZXI7
CiBjbGFzcyBTY3JpcHRPYmplY3Q7CiBjbGFzcyBTY3JpcHRWYWx1ZTsKIAotY2xhc3MgU2NyaXB0
RGVidWdTZXJ2ZXIgOiBwcm90ZWN0ZWQgSlNDOjpEZWJ1Z2dlciB7Cit0eXBlZGVmIEpTQzo6QnJl
YWtwb2ludElkIEJyZWFrcG9pbnRJZDsKK2NvbnN0IEJyZWFrcG9pbnRJZCBudWxsQnJlYWtwb2lu
dElkID0gSlNDOjpudWxsQnJlYWtwb2ludElkOworCitjbGFzcyBTY3JpcHREZWJ1Z1NlcnZlciA6
IHB1YmxpYyBKU0M6OkRlYnVnZ2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY3JpcHRE
ZWJ1Z1NlcnZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFN0cmlu
ZyBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWFr
cG9pbnQmLCBpbnQqIGFjdHVhbExpbmVOdW1iZXIsIGludCogYWN0dWFsQ29sdW1uTnVtYmVyKTsK
LSAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpOwor
ICAgIEJyZWFrcG9pbnRJZCBzZXRCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlkLCBjb25zdCBT
Y3JpcHRCcmVha3BvaW50JiwgaW50KiBhY3R1YWxMaW5lTnVtYmVyLCBpbnQqIGFjdHVhbENvbHVt
bk51bWJlcik7CisgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KEJyZWFrcG9pbnRJZCk7CiAgICAg
dm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7Ci0gICAgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2YXRl
ZChib29sIGFjdGl2YXRlZCk7Ci0gICAgdm9pZCBhY3RpdmF0ZUJyZWFrcG9pbnRzKCkgeyBzZXRC
cmVha3BvaW50c0FjdGl2YXRlZCh0cnVlKTsgfQotICAgIHZvaWQgZGVhY3RpdmF0ZUJyZWFrcG9p
bnRzKCkgeyBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChmYWxzZSk7IH0KLQotICAgIGVudW0gUGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZSB7Ci0gICAgICAgIERvbnRQYXVzZU9uRXhjZXB0aW9ucywKLSAg
ICAgICAgUGF1c2VPbkFsbEV4Y2VwdGlvbnMsCi0gICAgICAgIFBhdXNlT25VbmNhdWdodEV4Y2Vw
dGlvbnMKLSAgICB9OwotICAgIFBhdXNlT25FeGNlcHRpb25zU3RhdGUgcGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZTsgfQotICAg
IHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKTsK
LQotICAgIHZvaWQgc2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQoYm9vbCBwYXVzZSk7Ci0gICAgdm9p
ZCBicmVha1Byb2dyYW0oKTsKLSAgICB2b2lkIGNvbnRpbnVlUHJvZ3JhbSgpOwotICAgIHZvaWQg
c3RlcEludG9TdGF0ZW1lbnQoKTsKLSAgICB2b2lkIHN0ZXBPdmVyU3RhdGVtZW50KCk7Ci0gICAg
dm9pZCBzdGVwT3V0T2ZGdW5jdGlvbigpOwogCiAgICAgYm9vbCBjYW5TZXRTY3JpcHRTb3VyY2Uo
KTsKLSAgICBib29sIHNldFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25z
dCBTdHJpbmcmIG5ld0NvbnRlbnQsIGJvb2wgcHJldmlldywgU3RyaW5nKiBlcnJvciwgU2NyaXB0
VmFsdWUqIG5ld0NhbGxGcmFtZXMsIFNjcmlwdE9iamVjdCogcmVzdWx0KTsKKyAgICBib29sIHNl
dFNjcmlwdFNvdXJjZShpbnRwdHJfdCBzb3VyY2VJZCwgY29uc3QgU3RyaW5nJiBuZXdDb250ZW50
LCBib29sIHByZXZpZXcsIFN0cmluZyogZXJyb3IsIFNjcmlwdFZhbHVlKiBuZXdDYWxsRnJhbWVz
LCBTY3JpcHRPYmplY3QqIHJlc3VsdCk7CiAgICAgdm9pZCB1cGRhdGVDYWxsU3RhY2soU2NyaXB0
VmFsdWUqIGNhbGxGcmFtZSk7CiAKICAgICBib29sIGNhdXNlc1JlY29tcGlsYXRpb24oKSB7IHJl
dHVybiB0cnVlOyB9CkBAIC05NSwxMiArODAsMTEgQEAgcHVibGljOgogICAgICAgICAvLyBGSVhN
RSh3ZWJraXQub3JnL2IvODIyMDMpOiBJbXBsZW1lbnQgcHJlcHJvY2Vzc29yLgogICAgIH0KIAot
ICAgIGJvb2wgaXNQYXVzZWQoKSB7IHJldHVybiBtX3BhdXNlZDsgfQogICAgIGJvb2wgcnVubmlu
Z05lc3RlZE1lc3NhZ2VMb29wKCkgeyByZXR1cm4gbV9ydW5uaW5nTmVzdGVkTWVzc2FnZUxvb3A7
IH0KIAotICAgIHZvaWQgY29tcGlsZVNjcmlwdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmlu
ZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIFN0cmluZyogc2NyaXB0SWQs
IFN0cmluZyogZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgdm9pZCBjb21waWxlU2NyaXB0KEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCwgaW50cHRyX3QqIHNjcmlwdElkLCBTdHJpbmcqIGV4Y2VwdGlvbk1lc3NhZ2UpOwogICAg
IHZvaWQgY2xlYXJDb21waWxlZFNjcmlwdHMoKTsKLSAgICB2b2lkIHJ1blNjcmlwdChKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIFNjcmlwdFZhbHVlKiByZXN1bHQsIGJv
b2wqIHdhc1Rocm93biwgU3RyaW5nKiBleGNlcHRpb25NZXNzYWdlKTsKKyAgICB2b2lkIHJ1blNj
cmlwdChKU0M6OkV4ZWNTdGF0ZSosIGludHB0cl90IHNjcmlwdElkLCBTY3JpcHRWYWx1ZSogcmVz
dWx0LCBib29sKiB3YXNUaHJvd24sIFN0cmluZyogZXhjZXB0aW9uTWVzc2FnZSk7CiAKICAgICBj
bGFzcyBUYXNrIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0xMTMsNyAr
OTcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdHlwZWRlZiBIYXNoU2V0PFNjcmlwdERlYnVnTGlzdGVu
ZXIqPiBMaXN0ZW5lclNldDsKICAgICB0eXBlZGVmIHZvaWQgKFNjcmlwdERlYnVnU2VydmVyOjoq
SmF2YVNjcmlwdEV4ZWN1dGlvbkNhbGxiYWNrKShTY3JpcHREZWJ1Z0xpc3RlbmVyKik7CiAKLSAg
ICBTY3JpcHREZWJ1Z1NlcnZlcigpOworICAgIFNjcmlwdERlYnVnU2VydmVyKGJvb2wgaXNXb3Jr
ZXJUaHJlYWQgPSBmYWxzZSk7CiAgICAgflNjcmlwdERlYnVnU2VydmVyKCk7CiAKICAgICB2aXJ0
dWFsIExpc3RlbmVyU2V0KiBnZXRMaXN0ZW5lcnNGb3JHbG9iYWxPYmplY3QoSlNDOjpKU0dsb2Jh
bE9iamVjdCopID0gMDsKQEAgLTEyNCw5ICsxMDgsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNDb250ZW50U2NyaXB0KEpTQzo6RXhlY1N0YXRlKik7CiAKLSAgICBib29sIGhh
c0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYsIFNjcmlw
dEJyZWFrcG9pbnQqIGhpdEJyZWFrcG9pbnQpIGNvbnN0OwogICAgIGJvb2wgZXZhbHVhdGVCcmVh
a3BvaW50QWN0aW9uKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mKSBjb25zdDsKLSAgICBi
b29sIGV2YWx1YXRlQnJlYWtwb2ludEFjdGlvbnMoY29uc3QgU2NyaXB0QnJlYWtwb2ludCYpIGNv
bnN0OworICAgIHZvaWQgZXZhbHVhdGVCcmVha3BvaW50QWN0aW9ucyhjb25zdCBKU0M6OkJyZWFr
cG9pbnQmKTsKIAogICAgIHZvaWQgZGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVuZXJzKEphdmFTY3Jp
cHRFeGVjdXRpb25DYWxsYmFjaywgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHZvaWQgZGlz
cGF0Y2hGdW5jdGlvblRvTGlzdGVuZXJzKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIEph
dmFTY3JpcHRFeGVjdXRpb25DYWxsYmFjayBjYWxsYmFjayk7CkBAIC0xMzUsMzkgKzExOCwyMCBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkaXNwYXRjaERpZFBhcnNlU291cmNlKGNvbnN0IExpc3Rl
bmVyU2V0JiBsaXN0ZW5lcnMsIEpTQzo6U291cmNlUHJvdmlkZXIqLCBib29sIGlzQ29udGVudFNj
cmlwdCk7CiAgICAgdm9pZCBkaXNwYXRjaEZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVu
ZXJTZXQmIGxpc3RlbmVycywgSlNDOjpTb3VyY2VQcm92aWRlciosIGludCBlcnJvckxpbmUsIGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIAotICAgIHZvaWQgY3JlYXRlQ2FsbEZyYW1lKGNv
bnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsKLSAgICB2b2lkIHVwZGF0ZUNhbGxGcmFtZUFu
ZFBhdXNlSWZOZWVkZWQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpOwotICAgIHZvaWQg
cGF1c2VJZk5lZWRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0KTsK
LQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goSlNDOjpKU0dsb2JhbE9iamVjdCopOwotCi0gICAg
dmlydHVhbCB2b2lkIHNvdXJjZVBhcnNlZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6U291cmNlUHJv
dmlkZXIqLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTXNnKTsKLSAgICB2aXJ0
dWFsIHZvaWQgY2FsbEV2ZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgYXRTdGF0ZW1lbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpOwot
ICAgIHZpcnR1YWwgdm9pZCByZXR1cm5FdmVudChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1l
Jik7Ci0gICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZy
YW1lJiwgYm9vbCBoYXNIYW5kbGVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9n
cmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
RXhlY3V0ZVByb2dyYW0oY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpOwotICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYp
OwotCi0gICAgdHlwZWRlZiBWZWN0b3I8U2NyaXB0QnJlYWtwb2ludD4gQnJlYWtwb2ludHNJbkxp
bmU7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGxvbmcsIEJyZWFrcG9pbnRzSW5MaW5lPiBMaW5lVG9C
cmVha3BvaW50TWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgTGluZVRvQnJlYWtw
b2ludE1hcD4gU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOworICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVTb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlNvdXJjZVByb3ZpZGVyKiwgaW50
IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1zZyk7CisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZVBhdXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB2aXJ0dWFsIGJvb2wgbmVlZFBh
dXNlSGFuZGxpbmcoSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUgZXhjZXB0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RG9uZVByb2Nl
c3NpbmdEZWJ1Z2dlckV2ZW50cygpOworCisgICAgdHlwZWRlZiBWZWN0b3I8U2NyaXB0QnJlYWtw
b2ludEFjdGlvbj4gQnJlYWtwb2ludEFjdGlvbnM7CisgICAgdHlwZWRlZiBIYXNoTWFwPEJyZWFr
cG9pbnRJZCwgQnJlYWtwb2ludEFjdGlvbnM+IEJyZWFrcG9pbnRJZFRvQWN0aW9uc01hcDsKIAog
ICAgIGJvb2wgbV9jYWxsaW5nTGlzdGVuZXJzOwotICAgIFBhdXNlT25FeGNlcHRpb25zU3RhdGUg
bV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOwotICAgIGJvb2wgbV9wYXVzZU9uTmV4dFN0YXRlbWVu
dDsKLSAgICBib29sIG1fcGF1c2VkOwogICAgIGJvb2wgbV9ydW5uaW5nTmVzdGVkTWVzc2FnZUxv
b3A7CiAgICAgYm9vbCBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHM7Ci0gICAgYm9vbCBt
X2JyZWFrcG9pbnRzQWN0aXZhdGVkOwotICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIG1fcGF1c2VP
bkNhbGxGcmFtZTsKLSAgICBSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gbV9jdXJyZW50Q2Fs
bEZyYW1lOwotICAgIFNvdXJjZUlkVG9CcmVha3BvaW50c01hcCBtX3NvdXJjZUlkVG9CcmVha3Bv
aW50czsKKyAgICBCcmVha3BvaW50SWRUb0FjdGlvbnNNYXAgbV9icmVha3BvaW50SWRUb0FjdGlv
bnM7CiAgICAgVGltZXI8U2NyaXB0RGVidWdTZXJ2ZXI+IG1fcmVjb21waWxlVGltZXI7Ci0KLSAg
ICBpbnQgbV9sYXN0RXhlY3V0ZWRMaW5lOwotICAgIGludHB0cl90IG1fbGFzdEV4ZWN1dGVkU291
cmNlSWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShy
ZXZpc2lvbiAxNTYyNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3Jp
cHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6OldvcmtlclNjcmlwdERl
YnVnU2VydmVyKFdvcmtlckdsb2JhbFNjb3BlKiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG1vZGUp
Ci0gICAgOiBTY3JpcHREZWJ1Z1NlcnZlcigpCisgICAgOiBTY3JpcHREZWJ1Z1NlcnZlcih0cnVl
KQogICAgICwgbV93b3JrZXJHbG9iYWxTY29wZShjb250ZXh0KQogICAgICwgbV9kZWJ1Z2dlclRh
c2tNb2RlKG1vZGUpCiB7CkBAIC02MCwxMiArNjAsNiBAQCB2b2lkIFdvcmtlclNjcmlwdERlYnVn
U2VydmVyOjphZGRMaXN0ZW5lCiAgICAgcmVjb21waWxlQWxsSlNGdW5jdGlvbnMoMCk7CiB9CiAK
LXZvaWQgV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6OndpbGxFeGVjdXRlUHJvZ3JhbShjb25zdCBK
U0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKLXsKLSAgICBpZiAoIW1f
cGF1c2VkKQotICAgICAgICBjcmVhdGVDYWxsRnJhbWUoZGVidWdnZXJDYWxsRnJhbWUpOwotfQot
CiB2b2lkIFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhU
aW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4qKQogewogICAgIEpTQzo6Vk0qIHZtID0gbV93b3JrZXJH
bG9iYWxTY29wZS0+c2NyaXB0KCktPnZtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmgJKHJldmlzaW9uIDE1NjI0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1
YWwgYm9vbCBpc0NvbnRlbnRTY3JpcHQoSlNDOjpFeGVjU3RhdGUqKSB7IHJldHVybiBmYWxzZTsg
fQogCi0gICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJvZ3JhbShjb25zdCBKU0M6OkRlYnVn
Z2VyQ2FsbEZyYW1lJik7Ci0KICAgICB2aXJ0dWFsIHZvaWQgcnVuRXZlbnRMb29wV2hpbGVQYXVz
ZWQoKTsKIAogICAgIFdvcmtlckdsb2JhbFNjb3BlKiBtX3dvcmtlckdsb2JhbFNjb3BlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcAkocmV2aXNpb24gMTU2MjQ1KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNvbnRlbnRTZWFyY2hV
dGlscy5oIgorI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1ZGUgIkluamVjdGVk
U2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yRnJvbnRlbmQuaCIKQEAgLTY2LDYgKzY3LDcgQEAgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6SW5zcGVjdG9yRGVidWdnZQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9wYXVzZWRT
Y3JpcHRTdGF0ZSgwKQorICAgICwgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SWQobnVs
bEJyZWFrcG9pbnRJZCkKICAgICAsIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKGZhbHNlKQog
ICAgICwgbV9saXN0ZW5lcigwKQogewpAQCAtMzI5LDEzICszMzEsMTYgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaQogICAgICpvdXRCcmVha3BvaW50SWQgPSBicmVh
a3BvaW50SWQ7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlTG9jYXRpb24oRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbiwgU3RyaW5nKiBzY3Jp
cHRJZCwgaW50KiBsaW5lTnVtYmVyLCBpbnQqIGNvbHVtbk51bWJlcikKK3N0YXRpYyBib29sIHBh
cnNlTG9jYXRpb24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbG9jYXRpb24sIGludHB0cl90KiBzY3JpcHRJZCwgaW50KiBsaW5lTnVtYmVyLCBp
bnQqIGNvbHVtbk51bWJlcikKIHsKLSAgICBpZiAoIWxvY2F0aW9uLT5nZXRTdHJpbmcoInNjcmlw
dElkIiwgc2NyaXB0SWQpIHx8ICFsb2NhdGlvbi0+Z2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgbGlu
ZU51bWJlcikpIHsKKyAgICBTdHJpbmcgc2NyaXB0SWRTdHI7CisgICAgaWYgKCFsb2NhdGlvbi0+
Z2V0U3RyaW5nKCJzY3JpcHRJZCIsICZzY3JpcHRJZFN0cikgfHwgIWxvY2F0aW9uLT5nZXROdW1i
ZXIoImxpbmVOdW1iZXIiLCBsaW5lTnVtYmVyKSkgewogICAgICAgICAvLyBGSVhNRTogcmVwbGFj
ZSB3aXRoIGlucHV0IHZhbGlkYXRpb24uCisgICAgICAgICpzY3JpcHRJZCA9IDA7CiAgICAgICAg
ICplcnJvclN0cmluZyA9ICJzY3JpcHRJZCBhbmQgbGluZU51bWJlciBhcmUgcmVxdWlyZWQuIjsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICAqc2NyaXB0SWQgPSBzY3JpcHRJZFN0
ci50b0ludFB0cigpOwogICAgICpjb2x1bW5OdW1iZXIgPSAwOwogICAgIGxvY2F0aW9uLT5nZXRO
dW1iZXIoImNvbHVtbk51bWJlciIsIGNvbHVtbk51bWJlcik7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC0zNDMsNyArMzQ4LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VMb2NhdGlvbihFcnJvclN0cmluZyog
ZQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24s
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvcHRpb25zLCBUeXBlQnVpbGRlcjo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6
OkRlYnVnZ2VyOjpMb2NhdGlvbj4mIGFjdHVhbExvY2F0aW9uKQogewotICAgIFN0cmluZyBzY3Jp
cHRJZDsKKyAgICBpbnRwdHJfdCBzY3JpcHRJZDsKICAgICBpbnQgbGluZU51bWJlcjsKICAgICBp
bnQgY29sdW1uTnVtYmVyOwogCkBAIC0zNjMsMTEgKzM2OCwxMiBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pCiAgICAgaWYgKCFicmVha3BvaW50QWN0aW9uc0Zyb21Q
cm90b2NvbChlcnJvclN0cmluZywgYWN0aW9ucywgJmJyZWFrcG9pbnRBY3Rpb25zKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGJyZWFrcG9pbnRJZCA9IHNjcmlwdElkICsgJzonICsg
U3RyaW5nOjpudW1iZXIobGluZU51bWJlcikgKyAnOicgKyBTdHJpbmc6Om51bWJlcihjb2x1bW5O
dW1iZXIpOworICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBTdHJpbmc6Om51bWJlcihzY3JpcHRJ
ZCkgKyAnOicgKyBTdHJpbmc6Om51bWJlcihsaW5lTnVtYmVyKSArICc6JyArIFN0cmluZzo6bnVt
YmVyKGNvbHVtbk51bWJlcik7CiAgICAgaWYgKG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJy
ZWFrcG9pbnRJZHMuZmluZChicmVha3BvaW50SWQpICE9IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0gIkJyZWFr
cG9pbnQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzLiI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisKICAgICBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQobGluZU51bWJl
ciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIGJyZWFrcG9pbnRBY3Rpb25zLCBhdXRvQ29udGlu
dWUpOwogICAgIGFjdHVhbExvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElk
LCBzY3JpcHRJZCwgYnJlYWtwb2ludCk7CiAgICAgaWYgKGFjdHVhbExvY2F0aW9uKQpAQCAtMzky
LDEyICszOTgsMTIgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVhawog
CiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0
cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlv
bikKIHsKLSAgICBpZiAoIW1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElkLmlzRW1wdHko
KSkgeworICAgIGlmIChtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJZCkgewogICAgICAg
ICBzY3JpcHREZWJ1Z1NlcnZlcigpLnJlbW92ZUJyZWFrcG9pbnQobV9jb250aW51ZVRvTG9jYXRp
b25CcmVha3BvaW50SWQpOwotICAgICAgICBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJ
ZCA9ICIiOworICAgICAgICBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJZCA9IG51bGxC
cmVha3BvaW50SWQ7CiAgICAgfQogCi0gICAgU3RyaW5nIHNjcmlwdElkOworICAgIGludHB0cl90
IHNjcmlwdElkOwogICAgIGludCBsaW5lTnVtYmVyOwogICAgIGludCBjb2x1bW5OdW1iZXI7CiAK
QEAgLTQwOSw3ICs0MTUsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVl
VG9MCiAgICAgcmVzdW1lKGVycm9yU3RyaW5nKTsKIH0KIAotUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJl
YWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHRJ
ZCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYgYnJlYWtwb2ludCkKK1Bhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2
ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQsIGludHB0cl90IHNjcmlwdElk
LCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBicmVha3BvaW50KQogewogICAgIFNjcmlwdHNNYXA6
Oml0ZXJhdG9yIHNjcmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQpOwogICAg
IGlmIChzY3JpcHRJdGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpCkBAIC00MjAsMTcgKzQyNiwx
NyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpCiAKICAgICBpbnQg
YWN0dWFsTGluZU51bWJlcjsKICAgICBpbnQgYWN0dWFsQ29sdW1uTnVtYmVyOwotICAgIFN0cmlu
ZyBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZCA9IHNjcmlwdERlYnVnU2VydmVyKCkuc2V0QnJlYWtw
b2ludChzY3JpcHRJZCwgYnJlYWtwb2ludCwgJmFjdHVhbExpbmVOdW1iZXIsICZhY3R1YWxDb2x1
bW5OdW1iZXIpOwotICAgIGlmIChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZC5pc0VtcHR5KCkpCisg
ICAgQnJlYWtwb2ludElkIGRlYnVnU2VydmVyQnJlYWtwb2ludElkID0gc2NyaXB0RGVidWdTZXJ2
ZXIoKS5zZXRCcmVha3BvaW50KHNjcmlwdElkLCBicmVha3BvaW50LCAmYWN0dWFsTGluZU51bWJl
ciwgJmFjdHVhbENvbHVtbk51bWJlcik7CisgICAgaWYgKCFkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJ
ZCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBCcmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJl
YWtwb2ludElkc01hcDo6aXRlcmF0b3IgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3Ig
PSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmZpbmQoYnJlYWtwb2lu
dElkKTsKICAgICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPT0gbV9icmVh
a3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5lbmQoKSkKLSAgICAgICAgZGVidWdT
ZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJC
cmVha3BvaW50SWRzLnNldChicmVha3BvaW50SWQsIFZlY3RvcjxTdHJpbmc+KCkpLml0ZXJhdG9y
OworICAgICAgICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9IG1fYnJlYWtwb2lu
dElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuc2V0KGJyZWFrcG9pbnRJZCwgVmVjdG9yPEJy
ZWFrcG9pbnRJZD4oKSkuaXRlcmF0b3I7CiAgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRl
cmF0b3ItPnZhbHVlLmFwcGVuZChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZCk7CiAKICAgICBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRpb24gPSBUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OkxvY2F0aW9uOjpjcmVhdGUoKQotICAgICAgICAuc2V0U2NyaXB0SWQoc2Ny
aXB0SWQpCisgICAgICAgIC5zZXRTY3JpcHRJZChTdHJpbmc6Om51bWJlcihzY3JpcHRJZCkpCiAg
ICAgICAgIC5zZXRMaW5lTnVtYmVyKGFjdHVhbExpbmVOdW1iZXIpOwogICAgIGxvY2F0aW9uLT5z
ZXRDb2x1bW5OdW1iZXIoYWN0dWFsQ29sdW1uTnVtYmVyKTsKICAgICByZXR1cm4gbG9jYXRpb247
CkBAIC00NDYsMjIgKzQ1MiwyNCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHNjcmlwCiAgICAgcmV0dXJuIHZhbHVlLT5hc09iamVjdCgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0
IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIGNvbnN0
IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4
LCBSZWZQdHI8QXJyYXk8V2ViQ29yZTo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPiA+
JiByZXN1bHRzKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQo
RXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkU3RyLCBjb25zdCBTdHJp
bmcmIHF1ZXJ5LCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0
IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEFycmF5PFdlYkNvcmU6OlR5cGVC
dWlsZGVyOjpQYWdlOjpTZWFyY2hNYXRjaD4gPiYgcmVzdWx0cykKIHsKICAgICBib29sIGlzUmVn
ZXggPSBvcHRpb25hbElzUmVnZXggPyAqb3B0aW9uYWxJc1JlZ2V4IDogZmFsc2U7CiAgICAgYm9v
bCBjYXNlU2Vuc2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vuc2l0aXZlID8gKm9wdGlvbmFsQ2FzZVNl
bnNpdGl2ZSA6IGZhbHNlOwogCisgICAgaW50cHRyX3Qgc2NyaXB0SWQgPSBzY3JpcHRJZFN0ci50
b0ludFB0cigpOwogICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmZpbmQo
c2NyaXB0SWQpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdHMuZW5kKCkpCiAgICAgICAgIHJlc3Vs
dHMgPSBDb250ZW50U2VhcmNoVXRpbHM6OnNlYXJjaEluVGV4dEJ5TGluZXMoaXQtPnZhbHVlLnNv
dXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOwogICAgIGVsc2UKLSAgICAgICAg
KmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJZDsKKyAgICAgICAgKmVycm9y
ID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJZFN0cjsKIH0KIAotdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25z
dCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG5ld0NvbnRlbnQsIGNvbnN0IGJvb2wq
IGNvbnN0IHByZXZpZXcsIFJlZlB0cjxBcnJheTxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxG
cmFtZT4gPiYgbmV3Q2FsbEZyYW1lcywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJlc3VsdCkK
K3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5n
KiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZFN0ciwgY29uc3QgU3RyaW5nJiBuZXdDb250
ZW50LCBjb25zdCBib29sKiBjb25zdCBwcmV2aWV3LCBSZWZQdHI8QXJyYXk8VHlwZUJ1aWxkZXI6
OkRlYnVnZ2VyOjpDYWxsRnJhbWU+ID4mIG5ld0NhbGxGcmFtZXMsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiByZXN1bHQpCiB7CiAgICAgYm9vbCBwcmV2aWV3T25seSA9IHByZXZpZXcgJiYgKnBy
ZXZpZXc7CiAgICAgU2NyaXB0T2JqZWN0IHJlc3VsdE9iamVjdDsKKyAgICBpbnRwdHJfdCBzY3Jp
cHRJZCA9IHNjcmlwdElkU3RyLnRvSW50UHRyKCk7CiAgICAgaWYgKCFzY3JpcHREZWJ1Z1NlcnZl
cigpLnNldFNjcmlwdFNvdXJjZShzY3JpcHRJZCwgbmV3Q29udGVudCwgcHJldmlld09ubHksIGVy
cm9yLCAmbV9jdXJyZW50Q2FsbFN0YWNrLCAmcmVzdWx0T2JqZWN0KSkKICAgICAgICAgcmV0dXJu
OwogICAgIG5ld0NhbGxGcmFtZXMgPSBjdXJyZW50Q2FsbEZyYW1lcygpOwpAQCAtNDcwLDEzICs0
NzgsMTQgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTY3JpcHRTbwogICAgICAg
ICByZXN1bHQgPSBvYmplY3Q7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0
U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwg
U3RyaW5nKiBzY3JpcHRTb3VyY2UpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNj
cmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWRTdHIs
IFN0cmluZyogc2NyaXB0U291cmNlKQogeworICAgIGludHB0cl90IHNjcmlwdElkID0gc2NyaXB0
SWRTdHIudG9JbnRQdHIoKTsKICAgICBTY3JpcHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0
cy5maW5kKHNjcmlwdElkKTsKICAgICBpZiAoaXQgIT0gbV9zY3JpcHRzLmVuZCgpKQogICAgICAg
ICAqc2NyaXB0U291cmNlID0gaXQtPnZhbHVlLnNvdXJjZTsKICAgICBlbHNlCi0gICAgICAgICpl
cnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWQ7CisgICAgICAgICplcnJvciA9
ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWRTdHI7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nKiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2Vy
OjpGdW5jdGlvbkRldGFpbHM+JiBkZXRhaWxzKQpAQCAtNjA1LDcgKzYxNCw3IEBAIHZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6Y29tcGlsZVNjcmkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIFN0cmluZyBzY3JpcHRJZFZhbHVlOworICAgIGludHB0cl90IHNjcmlwdElkVmFsdWU7
CiAgICAgU3RyaW5nIGV4Y2VwdGlvbk1lc3NhZ2U7CiAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5j
b21waWxlU2NyaXB0KGluamVjdGVkU2NyaXB0LnNjcmlwdFN0YXRlKCksIGV4cHJlc3Npb24sIHNv
dXJjZVVSTCwgJnNjcmlwdElkVmFsdWUsICZleGNlcHRpb25NZXNzYWdlKTsKICAgICBpZiAoIXNj
cmlwdElkVmFsdWUgJiYgIWV4Y2VwdGlvbk1lc3NhZ2UpIHsKQEAgLTYxMywxMCArNjIyLDEwIEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29tcGlsZVNjcmkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAqc3ludGF4RXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uTWVzc2FnZTsKLSAg
ICAqc2NyaXB0SWQgPSBzY3JpcHRJZFZhbHVlOworICAgICpzY3JpcHRJZCA9IFN0cmluZzo6bnVt
YmVyKHNjcmlwdElkVmFsdWUpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJ1
blNjcmlwdChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFNjcmlwdElkJiBzY3JpcHRJ
ZCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IFN0cmluZyogY29uc3Qgb2Jq
ZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZSwgUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bikKK3ZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6cnVuU2NyaXB0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29u
c3QgU2NyaXB0SWQmIHNjcmlwdElkU3RyLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwg
Y29uc3QgU3RyaW5nKiBjb25zdCBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogY29uc3QgZG9Ob3RQ
YXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxib29sPiog
d2FzVGhyb3duKQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBleGVjdXRpb25Db250ZXh0SWQpOwogICAgIGlm
IChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKQEAgLTYzNCw2ICs2NDMsNyBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJ1blNjcmlwdChFCiAgICAgU2NyaXB0VmFsdWUgdmFs
dWU7CiAgICAgYm9vbCB3YXNUaHJvd25WYWx1ZTsKICAgICBTdHJpbmcgZXhjZXB0aW9uTWVzc2Fn
ZTsKKyAgICBpbnRwdHJfdCBzY3JpcHRJZCA9IHNjcmlwdElkU3RyLnRvSW50UHRyKCk7CiAgICAg
c2NyaXB0RGVidWdTZXJ2ZXIoKS5ydW5TY3JpcHQoaW5qZWN0ZWRTY3JpcHQuc2NyaXB0U3RhdGUo
KSwgc2NyaXB0SWQsICZ2YWx1ZSwgJndhc1Rocm93blZhbHVlLCAmZXhjZXB0aW9uTWVzc2FnZSk7
CiAgICAgKndhc1Rocm93biA9IHdhc1Rocm93blZhbHVlOwogICAgIGlmICh2YWx1ZS5oYXNOb1Zh
bHVlKCkpIHsKQEAgLTcwMSw3ICs3MTEsNyBAQCBTdHJpbmcgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c291cmNlTWFwCiAKIC8vIEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyIGZ1bmN0aW9ucwogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYg
c2NyaXB0SWQsIGNvbnN0IFNjcmlwdCYgc2NyaXB0KQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpkaWRQYXJzZVNvdXJjZShpbnRwdHJfdCBzY3JpcHRJZCwgY29uc3QgU2NyaXB0JiBzY3Jp
cHQpCiB7CiAgICAgLy8gRG9uJ3Qgc2VuZCBzY3JpcHQgY29udGVudCB0byB0aGUgZnJvbnQgZW5k
IHVudGlsIGl0J3MgcmVhbGx5IG5lZWRlZC4KICAgICBjb25zdCBib29sKiBpc0NvbnRlbnRTY3Jp
cHQgPSBzY3JpcHQuaXNDb250ZW50U2NyaXB0ID8gJnNjcmlwdC5pc0NvbnRlbnRTY3JpcHQgOiAw
OwpAQCAtNzEzLDcgKzcyMyw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFy
c2VTb3UKICAgICBib29sIGhhc1NvdXJjZVVSTCA9ICFzb3VyY2VVUkwuaXNFbXB0eSgpOwogICAg
IFN0cmluZyBzY3JpcHRVUkwgPSBoYXNTb3VyY2VVUkwgPyBzb3VyY2VVUkwgOiBzY3JpcHQudXJs
OwogICAgIGJvb2wqIGhhc1NvdXJjZVVSTFBhcmFtID0gaGFzU291cmNlVVJMID8gJmhhc1NvdXJj
ZVVSTCA6IDA7Ci0gICAgbV9mcm9udGVuZC0+c2NyaXB0UGFyc2VkKHNjcmlwdElkLCBzY3JpcHRV
UkwsIHNjcmlwdC5zdGFydExpbmUsIHNjcmlwdC5zdGFydENvbHVtbiwgc2NyaXB0LmVuZExpbmUs
IHNjcmlwdC5lbmRDb2x1bW4sIGlzQ29udGVudFNjcmlwdCwgc291cmNlTWFwVVJMUGFyYW0sIGhh
c1NvdXJjZVVSTFBhcmFtKTsKKyAgICBTdHJpbmcgc2NyaXB0SWRTdHIgPSBTdHJpbmc6Om51bWJl
cihzY3JpcHRJZCk7CisgICAgbV9mcm9udGVuZC0+c2NyaXB0UGFyc2VkKHNjcmlwdElkU3RyLCBz
Y3JpcHRVUkwsIHNjcmlwdC5zdGFydExpbmUsIHNjcmlwdC5zdGFydENvbHVtbiwgc2NyaXB0LmVu
ZExpbmUsIHNjcmlwdC5lbmRDb2x1bW4sIGlzQ29udGVudFNjcmlwdCwgc291cmNlTWFwVVJMUGFy
YW0sIGhhc1NvdXJjZVVSTFBhcmFtKTsKIAogICAgIG1fc2NyaXB0cy5zZXQoc2NyaXB0SWQsIHNj
cmlwdCk7CiAKQEAgLTc3MCw5ICs3ODEsOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmRpZFBhdXNlKEpTCiAgICAgbV9mcm9udGVuZC0+cGF1c2VkKGN1cnJlbnRDYWxsRnJhbWVzKCks
IG1fYnJlYWtSZWFzb24sIG1fYnJlYWtBdXhEYXRhKTsKICAgICBtX2phdmFTY3JpcHRQYXVzZVNj
aGVkdWxlZCA9IGZhbHNlOwogCi0gICAgaWYgKCFtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9p
bnRJZC5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50
SWQpIHsKICAgICAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVha3BvaW50KG1fY29u
dGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElkKTsKLSAgICAgICAgbV9jb250aW51ZVRvTG9jYXRp
b25CcmVha3BvaW50SWQgPSAiIjsKKyAgICAgICAgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3Bv
aW50SWQgPSBudWxsQnJlYWtwb2ludElkOwogICAgIH0KICAgICBpZiAobV9saXN0ZW5lcikKICAg
ICAgICAgbV9saXN0ZW5lci0+ZGlkUGF1c2UoKTsKQEAgLTc5OSw3ICs4MTAsNyBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNsZWFyKCkKICAgICBtX2N1cnJlbnRDYWxsU3RhY2sgPSBT
Y3JpcHRWYWx1ZSgpOwogICAgIG1fc2NyaXB0cy5jbGVhcigpOwogICAgIG1fYnJlYWtwb2ludElk
VG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuY2xlYXIoKTsKLSAgICBtX2NvbnRpbnVlVG9Mb2Nh
dGlvbkJyZWFrcG9pbnRJZCA9IFN0cmluZygpOworICAgIG1fY29udGludWVUb0xvY2F0aW9uQnJl
YWtwb2ludElkID0gbnVsbEJyZWFrcG9pbnRJZDsKICAgICBjbGVhckJyZWFrRGV0YWlscygpOwog
ICAgIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gZmFsc2U7CiAgICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmgJKHJldmlzaW9uIDE1NjI0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIlNjcmlwdEJy
ZWFrcG9pbnQuaCIKICNpbmNsdWRlICJTY3JpcHREZWJ1Z0xpc3RlbmVyLmgiCisjaW5jbHVkZSAi
U2NyaXB0RGVidWdTZXJ2ZXIuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTE1MSwyMCArMTUy
LDIwIEBAIHByaXZhdGU6CiAKICAgICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBl
QnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZT4gPiBjdXJyZW50Q2FsbEZyYW1lcygpOwogCi0g
ICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNv
bnN0IFNjcmlwdCYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJjZShpbnRwdHJfdCBz
Y3JpcHRJZCwgY29uc3QgU2NyaXB0Jik7CiAgICAgdmlydHVhbCB2b2lkIGZhaWxlZFRvUGFyc2VT
b3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGlu
ZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCiAgICAgdm9p
ZCBzZXRQYXVzZU9uRXhjZXB0aW9uc0ltcGwoRXJyb3JTdHJpbmcqLCBpbnQpOwogCi0gICAgUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiByZXNvbHZlQnJlYWtwb2lu
dChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29u
c3QgU2NyaXB0QnJlYWtwb2ludCYpOworICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVn
Z2VyOjpMb2NhdGlvbj4gcmVzb2x2ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50
SWQsIGludHB0cl90IHNjcmlwdElkLCBjb25zdCBTY3JpcHRCcmVha3BvaW50Jik7CiAgICAgdm9p
ZCBjbGVhcigpOwogICAgIGJvb2wgYXNzZXJ0UGF1c2VkKEVycm9yU3RyaW5nKik7CiAgICAgdm9p
ZCBjbGVhckJyZWFrRGV0YWlscygpOwogCiAgICAgU3RyaW5nIHNvdXJjZU1hcFVSTEZvclNjcmlw
dChjb25zdCBTY3JpcHQmKTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFNjcmlwdD4g
U2NyaXB0c01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiA+
IEJyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzTWFwOworICAgIHR5cGVkZWYg
SGFzaE1hcDxpbnRwdHJfdCwgU2NyaXB0PiBTY3JpcHRzTWFwOworICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIFZlY3RvcjxCcmVha3BvaW50SWQ+ID4gQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZl
ckJyZWFrcG9pbnRJZHNNYXA7CiAKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyOwogICAgIEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlciogbV9mcm9u
dGVuZDsKQEAgLTE3Miw3ICsxNzMsNyBAQCBwcml2YXRlOgogICAgIFNjcmlwdFZhbHVlIG1fY3Vy
cmVudENhbGxTdGFjazsKICAgICBTY3JpcHRzTWFwIG1fc2NyaXB0czsKICAgICBCcmVha3BvaW50
SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkc01hcCBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2
ZXJCcmVha3BvaW50SWRzOwotICAgIFN0cmluZyBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9p
bnRJZDsKKyAgICBCcmVha3BvaW50SWQgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SWQ7
CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpSZWFzb246OkVudW0gbV9icmVha1Jl
YXNvbjsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2JyZWFrQXV4RGF0YTsKICAgICBi
b29sIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oCShyZXZpc2lvbiAxNTYyNDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgflNjcmlwdERlYnVn
TGlzdGVuZXIoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJjZShjb25zdCBT
dHJpbmcmIHNjcmlwdElkLCBjb25zdCBTY3JpcHQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFBhcnNlU291cmNlKGludHB0cl90IHNjcmlwdElkLCBjb25zdCBTY3JpcHQmKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2UoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYgY2FsbEZyYW1lcywgY29uc3QgU2NyaXB0VmFsdWUm
IGV4Y2VwdGlvbikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZSgpID0gMDsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjI4MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEzLTA5LTIzICBN
YXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciB0byBoaWRl
IERlYnVnZ2VyIGNhbGxiYWNrIGludGVyZmFjZSBpbnNpZGUgSlNDLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzk2LgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gUmVpbXBsZW1lbnQgV2ViS2l0L21h
YydzIFdlYlNjcmlwdERlYnVnZ2VyIGJhc2VkIG9uIHRoZSBuZXcKKyAgICAgICAgICBKU0M6OkRl
YnVnZ2VyIGludGVyZmFjZSAoaS5lLiBubyB1c2Ugb2YgdGhlIEpTQyBkZWJ1ZyBob29rcykuCisK
KyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmg6CisgICAgICAgIChXZWJTY3Jp
cHREZWJ1Z2dlcjo6bmVlZFBhdXNlSGFuZGxpbmcpOgorICAgICAgICAqIFdlYlZpZXcvV2ViU2Ny
aXB0RGVidWdnZXIubW06CisgICAgICAgIChXZWJTY3JpcHREZWJ1Z2dlcjo6V2ViU2NyaXB0RGVi
dWdnZXIpOgorICAgICAgICAoV2ViU2NyaXB0RGVidWdnZXI6OmhhbmRsZVNvdXJjZVBhcnNlZCk6
CisgICAgICAgIChXZWJTY3JpcHREZWJ1Z2dlcjo6aGFuZGxlUGF1c2UpOgorCiAyMDEzLTA5LTIx
ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdW51c2Vk
IGNvZGUgaW4gV2ViS2l0L21hYydzIFdlYlNjcmlwdERlYnVnRGVsZWdhdGUuCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5oCShyZXZpc2lvbiAx
NTYyNDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDE0ICs1NSw5IEBAIHB1YmxpYzoKICAgICBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5n
ZXQoKTsgfQogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VQYXJzZWQoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZSwgY29uc3QgV1RG
OjpTdHJpbmcmIGVycm9yTXNnKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsbEV2ZW50KGNvbnN0IEpT
Qzo6RGVidWdnZXJDYWxsRnJhbWUmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYXRTdGF0ZW1lbnQo
Y29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZXR1
cm5FdmVudChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJikgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIGV4Y2VwdGlvbihjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgYm9vbCBoYXNIYW5k
bGVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVi
dWdnZXJDYWxsRnJhbWUmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhlY3V0ZVByb2dyYW0o
Y29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWFjaEJyZWFrcG9pbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVTb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlNvdXJj
ZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZSwgY29uc3QgV1RGOjpTdHJpbmcmIGVycm9yTXNnKTsK
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGF1c2UoSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAg
IHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhKU0M6OkpTR2xvYmFsT2JqZWN0KikgeyBy
ZXR1cm4gdHJ1ZTsgfQogCiAgICAgYm9vbCBtX2NhbGxpbmdEZWxlZ2F0ZTsKIApJbmRleDogU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCShyZXZpc2lv
biAxNTYyNDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2Vy
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMSArNzUsMTMgQEAgV2ViU2NyaXB0RGVidWdnZXI6
OldlYlNjcmlwdERlYnVnZ2VyKEpTRwogICAgIDogbV9jYWxsaW5nRGVsZWdhdGUoZmFsc2UpCiAg
ICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCkKIHsK
KyAgICBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25BbGxFeGNlcHRpb25zKTsKKyAg
ICBkZWFjdGl2YXRlQnJlYWtwb2ludHMoKTsKICAgICBhdHRhY2goZ2xvYmFsT2JqZWN0KTsKIH0K
IAogLy8gY2FsbGJhY2tzIC0gcmVsYXkgdG8gZGVsZWdhdGUKLXZvaWQgV2ViU2NyaXB0RGVidWdn
ZXI6OnNvdXJjZVBhcnNlZChFeGVjU3RhdGUqIGV4ZWMsIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQ
cm92aWRlciwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1zZykKK3ZvaWQgV2Vi
U2NyaXB0RGVidWdnZXI6OmhhbmRsZVNvdXJjZVBhcnNlZChFeGVjU3RhdGUqIGV4ZWMsIFNvdXJj
ZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBl
cnJvck1zZykKIHsKICAgICBpZiAobV9jYWxsaW5nRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsK
QEAgLTExNiwyMiArMTE4LDI0IEBAIHZvaWQgV2ViU2NyaXB0RGVidWdnZXI6OnNvdXJjZVBhcnNl
ZChFeGUKICAgICBtX2NhbGxpbmdEZWxlZ2F0ZSA9IGZhbHNlOwogfQogCi12b2lkIFdlYlNjcmlw
dERlYnVnZ2VyOjpleGNlcHRpb24oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2Fs
bEZyYW1lLCBib29sIGhhc0hhbmRsZXIpCit2b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjpoYW5kbGVQ
YXVzZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIGlmIChtX2NhbGxpbmdE
ZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jYWxsaW5nRGVsZWdhdGUgPSB0cnVl
OwogCi0gICAgV2ViRnJhbWUgKndlYkZyYW1lID0gdG9XZWJGcmFtZShkZWJ1Z2dlckNhbGxGcmFt
ZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpOworICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IHRvV2Vi
RnJhbWUoZ2xvYmFsT2JqZWN0KTsKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3dlYkZyYW1lIHdl
YlZpZXddOworICAgIGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSA9
IGN1cnJlbnRGcmFtZSgpLT5kZWJ1Z2dlckNhbGxGcmFtZSgpOwogICAgIFJldGFpblB0cjxXZWJT
Y3JpcHRDYWxsRnJhbWU+IGNhbGxGcmFtZSA9IGFkb3B0TlMoW1tXZWJTY3JpcHRDYWxsRnJhbWUg
YWxsb2NdIF9pbml0V2l0aEdsb2JhbE9iamVjdDpjb3JlKHdlYkZyYW1lKS0+c2NyaXB0KCkud2lu
ZG93U2NyaXB0T2JqZWN0KCkgZGVidWdnZXJDYWxsRnJhbWU6ZGVidWdnZXJDYWxsRnJhbWVdKTsK
IAogICAgIFdlYlNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBjYWNoZSA9
IFdlYlZpZXdHZXRTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50YXRpb25zKHdlYlZpZXcpOwog
ICAgIGlmIChjYWNoZS0+ZXhjZXB0aW9uV2FzUmFpc2VkRnVuYykgewotICAgICAgICBpZiAoY2Fj
aGUtPmV4Y2VwdGlvbldhc1JhaXNlZEV4cGVjdHNIYXNIYW5kbGVyRmxhZykKKyAgICAgICAgaWYg
KGNhY2hlLT5leGNlcHRpb25XYXNSYWlzZWRFeHBlY3RzSGFzSGFuZGxlckZsYWcpIHsKKyAgICAg
ICAgICAgIGJvb2wgaGFzSGFuZGxlciA9IGhhc0hhbmRsZXJGb3JFeGNlcHRpb25DYWxsYmFjaygp
OwogICAgICAgICAgICAgQ2FsbFNjcmlwdERlYnVnRGVsZWdhdGUoY2FjaGUtPmV4Y2VwdGlvbldh
c1JhaXNlZEZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmV4Y2VwdGlvbldhc1JhaXNl
ZDpoYXNIYW5kbGVyOnNvdXJjZUlkOmxpbmU6Zm9yV2ViRnJhbWU6KSwgY2FsbEZyYW1lLmdldCgp
LCBoYXNIYW5kbGVyLCBkZWJ1Z2dlckNhbGxGcmFtZS5zb3VyY2VJZCgpLCBkZWJ1Z2dlckNhbGxG
cmFtZS5saW5lKCksIHdlYkZyYW1lKTsKLSAgICAgICAgZWxzZQorICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIENhbGxTY3JpcHREZWJ1Z0RlbGVnYXRlKGNhY2hlLT5leGNlcHRpb25XYXNSYWlz
ZWRGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpleGNlcHRpb25XYXNSYWlzZWQ6c291
cmNlSWQ6bGluZTpmb3JXZWJGcmFtZTopLCBjYWxsRnJhbWUuZ2V0KCksIGRlYnVnZ2VyQ2FsbEZy
YW1lLnNvdXJjZUlkKCksIGRlYnVnZ2VyQ2FsbEZyYW1lLmxpbmUoKSwgd2ViRnJhbWUpOwogICAg
IH0KIAo=
</data>
<flag name="review"
          id="234581"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212375</attachid>
            <date>2013-09-23 11:54:27 -0700</date>
            <delta_ts>2013-09-23 12:37:11 -0700</delta_ts>
            <desc>Removed JavaScriptCallFrame.cpp from other build system files.</desc>
            <filename>bug-121796.patch</filename>
            <type>text/plain</type>
            <size>118221</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2MjgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBA
CisyMDEzLTA5LTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZWZhY3RvciB0byBoaWRlIERlYnVnZ2VyIGNhbGxiYWNrIGludGVyZmFjZSBpbnNpZGUgSlNDLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzk2Lgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDEuIEV4dHJh
Y3QgdGhlIEpTQyBkZWJ1ZyBob29rIGNhbGxiYWNrcyBpbnRvIGEgSlNDOjpEZWJ1Z2dlckV2ZW50
SGFuZGxlcgorICAgICAgICAgICBpbnRlcmZhY2UuIFRoZSBKU0M6OkRlYnVnZ2VyIG5vdyBwcml2
YXRlbHkgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZS4KKworICAgICAgICAyLiBNb3ZlIG5vbi1m
cm9udCBlbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGZyb20gV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXIKKyAgICAgICAgICAgaW50byBKU0M6OkRlYnVnZ2VyLgorCisgICAgICAgIDMuIE1vdmUg
V2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFtZSBmdW5jdGlvbmFsaXR5IGludG8gYQorICAgICAg
ICAgICBEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yIGNsYXNzLiAgVGhlIEphdmFTY3JpcHRDYWxsRnJh
bWUgaXMgc3RpbGwKKyAgICAgICAgICAgbmVjZXNzYXJ5IGJlY2F1c2UgaXQgaXMgcHVibGlzaGVk
IGFzIGEgSlMgb2JqZWN0IHRvIHRoZSBJbnNwZWN0b3IuIEluCisgICAgICAgICAgIGEgbGF0ZXIg
dGFzaywgSSdsbCBjb25zb2xpZGF0ZSB0aGUgRGVidWdnZXI6OkZyYW1lVmlzaXRvciBmdW5jdGlv
bmFsaXR5CisgICAgICAgICAgIGludG8gRGVidWdnZXJDYWxsRnJhbWUsIGFuZCByZW1vdmUgdGhl
IG5lZWQgZm9yIHRoZSBEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yLgorCisgICAgICAgIDQuIENyZWF0
ZSBhIEpTQzo6QnJlYWtwb2ludCBiYXNlZCBvbiBhIHN1YnNldCBvZiBXZWJDb3JlOjpTY3JpcHRC
cmVha1BvaW50LgorCisgICAgICAgIDUuIFJlaW1wbGVtZW50IFdlYktpdC9tYWMncyBXZWJTY3Jp
cHREZWJ1Z2dlciBiYXNlZCBvbiB0aGUgbmV3CisgICAgICAgICAgIEpTQzo6RGVidWdnZXIgaW50
ZXJmYWNlIChpLmUuIG5vIHVzZSBvZiB0aGUgSlNDIGRlYnVnIGhvb2tzKS4KKworICAgICAgICA2
LiBTb3VyY2UgSUQgaXMgbm93IGFsd2F5cyBhbiBpbnRwdHJfdCBiZWxvdyB0aGUgSW5zcGVjdG9y
RGVidWdBZ2VudCBsYXllci4KKyAgICAgICAgICAgVGhlIEluc3BlY3RvckRlYnVnQWdlbnQgdGFr
ZXMgY2FyZSBvZiB0cmFuc2xhdGluZyBiZXR3ZWVuIHRoZSBJbnNwZWN0b3IKKyAgICAgICAgICAg
SlNPTiBwcm90b2NvbCdzIFN0cmluZyBzb3VyY2VJZCBhbmQgdGhlIGludHB0cl90IHNvdXJjZUlk
IHdoZW4gbmVlZGVkLgorCisgICAgICAgIDcuIEJyZWFrcG9pbnQgSUQgaXMgbm93IGEgbG9uZyBp
bnN0ZWFkIG9mIGEgU3RyaW5nLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKToKKyAgICAgICAgKiBkZWJ1
Z2dlci9CcmVha3BvaW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9T
Y3JpcHRCcmVha3BvaW50LmguCisgICAgICAgIChKU0M6OkJyZWFrcG9pbnQ6OkJyZWFrcG9pbnQp
OgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXI6OkRlYnVnZ2VyKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmRldGFjaCk6CisgICAgICAg
IChKU0M6OkRlYnVnZ2VyOjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6
OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6aGFzQnJlYWtwb2lu
dCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpjbGVhckJyZWFrcG9pbnRzKToKKyAgICAgICAg
KEpTQzo6RGVidWdnZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKToKKyAgICAgICAgKEpTQzo6
RGVidWdnZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUpOgorICAgICAgICAoSlNDOjpEZWJ1
Z2dlcjo6c2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6
YnJlYWtQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmNvbnRpbnVlUHJvZ3JhbSk6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzdGVwSW50b1N0YXRlbWVudCk6CisgICAgICAgIChK
U0M6OkRlYnVnZ2VyOjpzdGVwT3ZlclN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
OjpzdGVwT3V0T2ZGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzb3VyY2VQYXJz
ZWQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6Y3JlYXRlQ2FsbEZyYW1lKToKKyAgICAgICAg
KEpTQzo6RGVidWdnZXI6OnVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQpOgorICAgICAg
ICAoSlNDOjpEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
OjpjYWxsRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6YXRTdGF0ZW1lbnQpOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6ZXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OndpbGxFeGVjdXRlUHJvZ3Jh
bSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpkaWRFeGVjdXRlUHJvZ3JhbSk6CisgICAgICAg
IChKU0M6OkRlYnVnZ2VyOjpkaWRSZWFjaEJyZWFrcG9pbnQpOgorICAgICAgICAqIGRlYnVnZ2Vy
L0RlYnVnZ2VyLmg6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyRXZlbnRIYW5kbGVyOjp+RGVidWdn
ZXJFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyRnJhbWVWaXNpdG9y
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENh
bGxGcmFtZS5jcHAuCisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OkZyYW1l
VmlzaXRvcik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OmNhbGxlcik6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OnNjb3BlQ2hhaW4pOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yOjpkeW5hbWljR2xvYmFsT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6RGVidWdnZXI6OkZyYW1lVmlzaXRvcjo6ZnVuY3Rpb25OYW1lKToKKyAg
ICAgICAgKEpTQzo6RGVidWdnZXI6OkZyYW1lVmlzaXRvcjo6dHlwZSk6CisgICAgICAgIChKU0M6
OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OnRoaXNPYmplY3QpOgorICAgICAgICAoSlNDOjpEZWJ1
Z2dlcjo6RnJhbWVWaXNpdG9yOjpleGVjKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OkZyYW1l
VmlzaXRvcjo6ZXZhbHVhdGUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNw
cDoKKyAgICAgICAgKEpTQzo6dW53aW5kQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OnVud2luZCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkZWJ1Zyk6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjcmVhdGVQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OmNyZWF0ZUV2YWxDb2RlQmxvY2spOgorCiAyMDEzLTA5LTIzICBQYXRyaWNrIEdhbnN0
ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIENsZWFudXAgQ01ha2UgZmlsZXMg
aW4gSmF2YVNjcmlwdENvcmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDE1NjI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDYgKzIwMCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgZGVidWdnZXIvRGVidWdnZXIuY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJB
Y3RpdmF0aW9uLmNwcAogICAgIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAorICAgIGRl
YnVnZ2VyL0RlYnVnZ2VyRnJhbWVWaXNpdG9yLmNwcAogCiAgICAgaW50ZXJwcmV0ZXIvQWJzdHJh
Y3RQQy5jcHAKICAgICBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU2MjQ1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAg
LTU0MSwxMCArNTQxLDEyIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllclN1cHBvcnQuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJTdXBwb3J0LmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9jb25maWcuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0JyZWFr
cG9pbnQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZh
dGlvbi5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2
YXRpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZy
YW1lLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZy
YW1lLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckZyYW1lVmlz
aXRvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvRm9yd2FyZGluZ0hlYWRlcnMvSmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5o
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxNTYyNDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYg
KzExMiw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGhlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAg
XAogICAgIGRlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgXAogICAgIGRlYnVnZ2VyL0Rl
YnVnZ2VyQ2FsbEZyYW1lLmNwcCBcCisgICAgZGVidWdnZXIvRGVidWdnZXJGcmFtZVZpc2l0b3Iu
Y3BwIFwKICAgICBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgXAogICAgIGRmZy9ERkdBYnN0cmFjdEhl
YXAuY3BwIFwKICAgICBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTYyNDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUsNiArMzI1LDcgQEAKICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckFjdGl2YXRpb24uY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCIgLz4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckZyYW1lVmlzaXRvci5jcHAi
IC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0NvbXBpbGF0aW9uS2V5LmNw
cCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRHJpdmVyLmNwcCIg
Lz4NCkBAIC02NzYsNiArNjc3LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b21waWxlclxMYWJlbFNjb3BlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0
ZWNvbXBpbGVyXFJlZ2lzdGVySUQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxj
b25maWcuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxCcmVha3Bv
aW50LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXIu
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckFjdGl2
YXRpb24uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dl
ckNhbGxGcmFtZS5oIiAvPg0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE1NjI0NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmls
dGVycwkod29ya2luZyBjb3B5KQpAQCAtMTkyLDYgKzE5Miw5IEBACiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckNhbGxGcmFtZS5jcHAiPg0KICAgICAgIDxGaWx0
ZXI+ZGVidWdnZXI8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJGcmFtZVZpc2l0b3IuY3BwIj4NCisgICAgICA8
RmlsdGVyPmRlYnVnZ2VyPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRpc2Fzc2VtYmxlclxEaXNhc3NlbWJsZXIuY3BwIj4NCiAgICAgICA8
RmlsdGVyPmRpc2Fzc2VtYmxlcjwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCkBAIC0xMTQ5
LDYgKzExNTIsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvbXBpbGVyXFJl
Z2lzdGVySUQuaCI+DQogICAgICAgPEZpbHRlcj5ieXRlY29kZWNvbXBpbGVyPC9GaWx0ZXI+DQog
ICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXEJy
ZWFrcG9pbnQuaCI+DQorICAgICAgPEZpbHRlcj5kZWJ1Z2dlcjwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlci5o
Ij4NCiAgICAgICA8RmlsdGVyPmRlYnVnZ2VyPC9GaWx0ZXI+DQogICAgIDwvQ2xJbmNsdWRlPg0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTYyNDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE1Miw2ICsxMTUyLDggQEAKIAkJRTQ5REMxNkQxMkVG
Mjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYg
LyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRD
TG9vcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi87IH07CiAJCUZFMjBD
RTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJ
bnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUZFMjY0MTI3MTdFN0E4OUEwMEU1Q0M4RSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI2NDEyNDE3RTdBODlBMDBFNUND
OEUgLyogQnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZFMzhDOTczMTdFN0NFQTgwMEU0RDBBRiAvKiBEZWJ1Z2dlckZyYW1lVmlz
aXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTM4Qzk3MjE3RTdDRUE4MDBFNEQwQUYgLyogRGVidWdnZXJGcmFtZVZpc2l0b3IuY3BwICovOyB9
OwogCQlGRTRBMzMxRjE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QTMzMUQxNUJEMkUwNzAw
NkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLzsgfTsKIAkJRkU0QTMzMjAxNUJEMkUwNzAwNkY1
NEYzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTY2MTcyODE3
NzRFMDM1MDA0OTVCMDAgLyogVk1TdGFja0JvdW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2NjE3MjcxNzc0RTAzNTAwNDk1QjAwIC8qIFZNU3Rh
Y2tCb3VuZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMjM4Nyw2ICsyMzg5LDggQEAKIAkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpT
Q0pTVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDSlNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgfTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRDTG9vcC5jcHA7IHBh
dGggPSBsbGludC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTI2NDEyNDE3RTdBODlBMDBFNUNDOEUg
LyogQnJlYWtwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCcmVha3Bv
aW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMzhDOTcyMTdFN0NFQTgwMEU0
RDBBRiAvKiBEZWJ1Z2dlckZyYW1lVmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZWJ1Z2dlckZyYW1lVmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFNEEzMzFEMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWTUluc3BlY3Rvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEEzMzFFMTVCRDJFMDcwMDZGNTRGMyAvKiBW
TUluc3BlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUluc3BlY3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTY2MTcyNzE3NzRFMDM1MDA0OTVC
MDAgLyogVk1TdGFja0JvdW5kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
TVN0YWNrQm91bmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTU5LDYgKzI5
NjMsOCBAQAogCQkxNDgwREI5QTBEREMyMjMxMDAzQ0ZERjIgLyogZGVidWdnZXIgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUZFMzhDOTcyMTdFN0NFQTgw
MEU0RDBBRiAvKiBEZWJ1Z2dlckZyYW1lVmlzaXRvci5jcHAgKi8sCisJCQkJRkUyNjQxMjQxN0U3
QTg5QTAwRTVDQzhFIC8qIEJyZWFrcG9pbnQuaCAqLywKIAkJCQlGNjkyQTg1ODAyNTU1OTdEMDFG
RjYwRjcgLyogRGVidWdnZXIuY3BwICovLAogCQkJCUY2OTJBODU5MDI1NTU5N0QwMUZGNjBGNyAv
KiBEZWJ1Z2dlci5oICovLAogCQkJCUJDMzEzNTYzMEYzMDJGQTMwMDNERkQzQSAvKiBEZWJ1Z2dl
ckFjdGl2YXRpb24uY3BwICovLApAQCAtMzg2Nyw2ICszODczLDcgQEAKIAkJCQkwRjgzMzVCODE2
MzlDMUVBMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdBOEFGMzUxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlGRTI2NDEyNzE3RTdBODlBMDBFNUNDOEUgLyogQnJlYWtwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdC
MiAvKiBBcnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQ1NTE1RDA3
MDU3MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTQ4OTEsNiAr
NDg5OCw3IEBACiAJCQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM1MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5z
dGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8q
IERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkUzOEM5NzMxN0U3Q0VBODAw
RTREMEFGIC8qIERlYnVnZ2VyRnJhbWVWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzMxMzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxG
cmFtZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU2MjQ1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSw3IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiBVbmxpbmtlZEZ1bmMKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IGNvZGVDYWNoZS0+Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoZXhl
Yy0+dm0oKSwgbmFtZSwgc291cmNlLCBlcnJvcik7CiAKICAgICBpZiAoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5oYXNEZWJ1Z2dlcigpKQotICAgICAgICBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmRlYnVnZ2VyKCktPnNvdXJjZVBhcnNlZChleGVjLCBzb3VyY2UucHJvdmlkZXIo
KSwgZXJyb3IubV9saW5lLCBlcnJvci5tX21lc3NhZ2UpOworICAgICAgICBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCktPmV2ZW50SGFuZGxlcigpLT5zb3VyY2VQYXJzZWQo
ZXhlYywgc291cmNlLnByb3ZpZGVyKCksIGVycm9yLm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsK
IAogICAgIGlmIChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSkgewogICAg
ICAgICAqZXhjZXB0aW9uID0gZXJyb3IudG9FcnJvck9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIHNvdXJjZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
QnJlYWtwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9CcmVha3BvaW50LmgJKHJldmlzaW9uIDE1NjAyMSkJKGZyb20gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaDoxNTYwMjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTY3JpcHRCcmVha3BvaW50X2gKKyNkZWZpbmUgU2NyaXB0QnJlYWtwb2ludF9oCisK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBTY3JpcHRCcmVh
a3BvaW50QWN0aW9uVHlwZUxvZywKKyAgICBTY3JpcHRCcmVha3BvaW50QWN0aW9uVHlwZUV2YWx1
YXRlLAorICAgIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlU291bmQKK30gU2NyaXB0QnJlYWtw
b2ludEFjdGlvblR5cGU7CisKK3N0cnVjdCBTY3JpcHRCcmVha3BvaW50QWN0aW9uIHsKKyAgICBT
Y3JpcHRCcmVha3BvaW50QWN0aW9uKFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgZGF0YSkKKyAgICAgICAgOiB0eXBlKHR5cGUpCisgICAgICAgICwgZGF0YShk
YXRhKQorICAgIHsKKyAgICB9CisKKyAgICBTY3JpcHRCcmVha3BvaW50QWN0aW9uVHlwZSB0eXBl
OworICAgIFN0cmluZyBkYXRhOworfTsKKworc3RydWN0IFNjcmlwdEJyZWFrcG9pbnQgeworICAg
IFNjcmlwdEJyZWFrcG9pbnQoKQorICAgIHsKKyAgICB9CisKKyAgICBTY3JpcHRCcmVha3BvaW50
KGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlv
biwgYm9vbCBhdXRvQ29udGludWUpCisgICAgICAgIDogbGluZU51bWJlcihsaW5lTnVtYmVyKQor
ICAgICAgICAsIGNvbHVtbk51bWJlcihjb2x1bW5OdW1iZXIpCisgICAgICAgICwgY29uZGl0aW9u
KGNvbmRpdGlvbikKKyAgICAgICAgLCBhdXRvQ29udGludWUoYXV0b0NvbnRpbnVlKQorICAgIHsK
KyAgICB9CisKKyAgICBTY3JpcHRCcmVha3BvaW50KGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1u
TnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgVmVjdG9yPFNjcmlwdEJyZWFrcG9pbnRB
Y3Rpb24+JiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51ZSkKKyAgICAgICAgOiBsaW5lTnVtYmVy
KGxpbmVOdW1iZXIpCisgICAgICAgICwgY29sdW1uTnVtYmVyKGNvbHVtbk51bWJlcikKKyAgICAg
ICAgLCBjb25kaXRpb24oY29uZGl0aW9uKQorICAgICAgICAsIGFjdGlvbnMoYWN0aW9ucykKKyAg
ICAgICAgLCBhdXRvQ29udGludWUoYXV0b0NvbnRpbnVlKQorICAgIHsKKyAgICB9CisKKyAgICBp
bnQgbGluZU51bWJlcjsKKyAgICBpbnQgY29sdW1uTnVtYmVyOworICAgIFN0cmluZyBjb25kaXRp
b247CisgICAgVmVjdG9yPFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24+IGFjdGlvbnM7CisgICAgYm9v
bCBhdXRvQ29udGludWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyAhZGVmaW5lZChTY3JpcHRCcmVha3BvaW50X2gpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9CcmVha3BvaW50LmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9CcmVha3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsNjAgKzI3LDUwIEBACiAgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgU2NyaXB0QnJlYWtwb2ludF9oCi0jZGVmaW5lIFNjcmlwdEJy
ZWFrcG9pbnRfaAorI2lmbmRlZiBCcmVha3BvaW50X2gKKyNkZWZpbmUgQnJlYWtwb2ludF9oCiAK
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBKU0MgewogCi10eXBlZGVmIGVudW0g
ewotICAgIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlTG9nLAotICAgIFNjcmlwdEJyZWFrcG9p
bnRBY3Rpb25UeXBlRXZhbHVhdGUsCi0gICAgU2NyaXB0QnJlYWtwb2ludEFjdGlvblR5cGVTb3Vu
ZAotfSBTY3JpcHRCcmVha3BvaW50QWN0aW9uVHlwZTsKLQotc3RydWN0IFNjcmlwdEJyZWFrcG9p
bnRBY3Rpb24gewotICAgIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24oU2NyaXB0QnJlYWtwb2ludEFj
dGlvblR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQotICAgICAgICA6IHR5cGUodHlwZSkK
LSAgICAgICAgLCBkYXRhKGRhdGEpCi0gICAgewotICAgIH0KLQotICAgIFNjcmlwdEJyZWFrcG9p
bnRBY3Rpb25UeXBlIHR5cGU7Ci0gICAgU3RyaW5nIGRhdGE7Ci19OwordHlwZWRlZiBsb25nIEJy
ZWFrcG9pbnRJZDsKK2NvbnN0IGxvbmcgbnVsbEJyZWFrcG9pbnRJZCA9IDA7CiAKLXN0cnVjdCBT
Y3JpcHRCcmVha3BvaW50IHsKLSAgICBTY3JpcHRCcmVha3BvaW50KCkKK3N0cnVjdCBCcmVha3Bv
aW50IHsKKyAgICBCcmVha3BvaW50KCkKICAgICB7CiAgICAgfQogCi0gICAgU2NyaXB0QnJlYWtw
b2ludChpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25k
aXRpb24sIGJvb2wgYXV0b0NvbnRpbnVlKQotICAgICAgICA6IGxpbmVOdW1iZXIobGluZU51bWJl
cikKKyAgICBCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlkLCBpbnQgbGluZU51bWJlciwgaW50
IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIGJvb2wgYXV0b0NvbnRpbnVl
KQorICAgICAgICA6IGlkKG51bGxCcmVha3BvaW50SWQpCisgICAgICAgICwgc291cmNlSWQoc291
cmNlSWQpCisgICAgICAgICwgbGluZU51bWJlcihsaW5lTnVtYmVyKQogICAgICAgICAsIGNvbHVt
bk51bWJlcihjb2x1bW5OdW1iZXIpCiAgICAgICAgICwgY29uZGl0aW9uKGNvbmRpdGlvbikKICAg
ICAgICAgLCBhdXRvQ29udGludWUoYXV0b0NvbnRpbnVlKQogICAgIHsKICAgICB9CiAKLSAgICBT
Y3JpcHRCcmVha3BvaW50KGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBT
dHJpbmcmIGNvbmRpdGlvbiwgVmVjdG9yPFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24+JiBhY3Rpb25z
LCBib29sIGF1dG9Db250aW51ZSkKLSAgICAgICAgOiBsaW5lTnVtYmVyKGxpbmVOdW1iZXIpCi0g
ICAgICAgICwgY29sdW1uTnVtYmVyKGNvbHVtbk51bWJlcikKLSAgICAgICAgLCBjb25kaXRpb24o
Y29uZGl0aW9uKQotICAgICAgICAsIGFjdGlvbnMoYWN0aW9ucykKLSAgICAgICAgLCBhdXRvQ29u
dGludWUoYXV0b0NvbnRpbnVlKQorICAgIEJyZWFrcG9pbnQoQnJlYWtwb2ludElkIGJyZWFrcG9p
bnRJZCwgY29uc3QgQnJlYWtwb2ludCYgb3RoZXIpCisgICAgICAgIDogaWQoYnJlYWtwb2ludElk
KQorICAgICAgICAsIHNvdXJjZUlkKG90aGVyLnNvdXJjZUlkKQorICAgICAgICAsIGxpbmVOdW1i
ZXIob3RoZXIubGluZU51bWJlcikKKyAgICAgICAgLCBjb2x1bW5OdW1iZXIob3RoZXIuY29sdW1u
TnVtYmVyKQorICAgICAgICAsIGNvbmRpdGlvbihvdGhlci5jb25kaXRpb24pCisgICAgICAgICwg
YXV0b0NvbnRpbnVlKG90aGVyLmF1dG9Db250aW51ZSkKICAgICB7CiAgICAgfQogCisgICAgQnJl
YWtwb2ludElkIGlkOworICAgIGludHB0cl90IHNvdXJjZUlkOwogICAgIGludCBsaW5lTnVtYmVy
OwogICAgIGludCBjb2x1bW5OdW1iZXI7CiAgICAgU3RyaW5nIGNvbmRpdGlvbjsKLSAgICBWZWN0
b3I8U2NyaXB0QnJlYWtwb2ludEFjdGlvbj4gYWN0aW9uczsKICAgICBib29sIGF1dG9Db250aW51
ZTsKIH07CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIEpTQwogCi0j
ZW5kaWYgLy8gIWRlZmluZWQoU2NyaXB0QnJlYWtwb2ludF9oKQorI2VuZGlmIC8vIEJyZWFrcG9p
bnRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3Bw
CShyZXZpc2lvbiAxNTYyNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwOC0yMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENv
cHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICoKQEAgLTM3LDcg
KzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogY2xhc3MgUmVjb21waWxlciA6IHB1Ymxp
YyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewogcHVibGljOgotICAgIFJlY29tcGlsZXIoRGVi
dWdnZXIqKTsKKyAgICBSZWNvbXBpbGVyKERlYnVnZ2VyRXZlbnRIYW5kbGVyKik7CiAgICAgflJl
Y29tcGlsZXIoKTsKICAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKik7CiAKQEAgLTQ1LDEyICs0
NSwxMiBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaFNldDxGdW5jdGlvbkV4ZWN1dGFibGUq
PiBGdW5jdGlvbkV4ZWN1dGFibGVTZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFNvdXJjZVByb3Zp
ZGVyKiwgRXhlY1N0YXRlKj4gU291cmNlUHJvdmlkZXJNYXA7CiAgICAgCi0gICAgRGVidWdnZXIq
IG1fZGVidWdnZXI7CisgICAgRGVidWdnZXJFdmVudEhhbmRsZXIqIG1fZGVidWdnZXI7CiAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlU2V0IG1fZnVuY3Rpb25FeGVjdXRhYmxlczsKICAgICBTb3VyY2VQ
cm92aWRlck1hcCBtX3NvdXJjZVByb3ZpZGVyczsKIH07CiAKLWlubGluZSBSZWNvbXBpbGVyOjpS
ZWNvbXBpbGVyKERlYnVnZ2VyKiBkZWJ1Z2dlcikKK2lubGluZSBSZWNvbXBpbGVyOjpSZWNvbXBp
bGVyKERlYnVnZ2VyRXZlbnRIYW5kbGVyKiBkZWJ1Z2dlcikKICAgICA6IG1fZGVidWdnZXIoZGVi
dWdnZXIpCiB7CiB9CkBAIC04Myw3ICs4Myw3IEBAIGlubGluZSB2b2lkIFJlY29tcGlsZXI6Om9w
ZXJhdG9yKCkoSlNDZWwKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmdW5jdGlvbi0+c2NvcGUoKS0+
Z2xvYmFsT2JqZWN0KCktPkpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7CiAgICAgZXhlY3V0
YWJsZS0+Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKICAgICBleGVjdXRhYmxlLT5jbGVhclVu
bGlua2VkQ29kZUZvclJlY29tcGlsYXRpb25JZk5vdENvbXBpbGluZygpOwotICAgIGlmIChtX2Rl
YnVnZ2VyID09IGZ1bmN0aW9uLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkK
KyAgICBpZiAobV9kZWJ1Z2dlciA9PSBmdW5jdGlvbi0+c2NvcGUoKS0+Z2xvYmFsT2JqZWN0KCkt
PmRlYnVnZ2VyKCktPmV2ZW50SGFuZGxlcigpKQogICAgICAgICBtX3NvdXJjZVByb3ZpZGVycy5h
ZGQoZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlYyk7CiB9CiAKQEAgLTkxLDYg
KzkxLDIwIEBAIGlubGluZSB2b2lkIFJlY29tcGlsZXI6Om9wZXJhdG9yKCkoSlNDZWwKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK0RlYnVnZ2VyOjpEZWJ1Z2dlcihib29sIGlzV29ya2VyVGhyZWFkKQor
ICAgIDogbV9pc1dvcmtlclRocmVhZChpc1dvcmtlclRocmVhZCkKKyAgICAsIG1fcGF1c2VPbkV4
Y2VwdGlvbnNTdGF0ZShEb250UGF1c2VPbkV4Y2VwdGlvbnMpCisgICAgLCBtX3BhdXNlT25OZXh0
U3RhdGVtZW50KGZhbHNlKQorICAgICwgbV9wYXVzZWQoZmFsc2UpCisgICAgLCBtX2JyZWFrcG9p
bnRzQWN0aXZhdGVkKHRydWUpCisgICAgLCBtX2hhc0hhbmRsZXJGb3JFeGNlcHRpb25DYWxsYmFj
ayhmYWxzZSkKKyAgICAsIG1fcGF1c2VPbkNhbGxGcmFtZSgwKQorICAgICwgbV9sYXN0RXhlY3V0
ZWRMaW5lKC0xKQorICAgICwgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJZCgtMSkKKyAgICAsIG1fdG9w
QnJlYWtwb2ludElkKG51bGxCcmVha3BvaW50SWQpCit7Cit9CisKIERlYnVnZ2VyOjp+RGVidWdn
ZXIoKQogewogICAgIEhhc2hTZXQ8SlNHbG9iYWxPYmplY3QqPjo6aXRlcmF0b3IgZW5kID0gbV9n
bG9iYWxPYmplY3RzLmVuZCgpOwpAQCAtMTA3LDYgKzEyMSwxNSBAQCB2b2lkIERlYnVnZ2VyOjph
dHRhY2goSlNHbG9iYWxPYmplY3QqIGdsCiAKIHZvaWQgRGVidWdnZXI6OmRldGFjaChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQogeworICAgIC8vIElmIHdlJ3JlIGRldGFjaGluZyBmcm9t
IHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGdsb2JhbCBvYmplY3QsIG1hbnVhbGx5IHRlYXIgZG93
biBvdXIKKyAgICAvLyBzdGFjaywgc2luY2Ugd2Ugd29uJ3QgZ2V0IGZ1cnRoZXIgZGVidWdnZXIg
Y2FsbGJhY2tzIHRvIGRvIHNvLiBBbHNvLCByZXN1bWUgZXhlY3V0aW9uLAorICAgIC8vIHNpbmNl
IHRoZXJlJ3Mgbm8gcG9pbnQgaW4gc3RheWluZyBwYXVzZWQgb25jZSBhIHdpbmRvdyBjbG9zZXMu
CisgICAgaWYgKG1fY3VycmVudENhbGxGcmFtZSAmJiBtX2N1cnJlbnRDYWxsRnJhbWUtPmR5bmFt
aWNHbG9iYWxPYmplY3QoKSA9PSBnbG9iYWxPYmplY3QpIHsKKyAgICAgICAgbV9jdXJyZW50Q2Fs
bEZyYW1lID0gMDsKKyAgICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gMDsKKyAgICAgICAgY29u
dGludWVQcm9ncmFtKCk7CisgICAgfQorCiAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0cy5jb250
YWlucyhnbG9iYWxPYmplY3QpKTsKICAgICBtX2dsb2JhbE9iamVjdHMucmVtb3ZlKGdsb2JhbE9i
amVjdCk7CiAgICAgZ2xvYmFsT2JqZWN0LT5zZXREZWJ1Z2dlcigwKTsKQEAgLTE0OCw0ICsxNzEs
MzIzIEBAIEpTVmFsdWUgZXZhbHVhdGVJbkdsb2JhbENhbGxGcmFtZShjb25zdCAKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCitCcmVha3BvaW50SWQgRGVidWdnZXI6OnNldEJyZWFrcG9pbnQoaW50
cHRyX3Qgc291cmNlSWQsIGNvbnN0IEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQsIGludCogYWN0dWFs
TGluZU51bWJlciwgaW50KiBhY3R1YWxDb2x1bW5OdW1iZXIpCit7CisgICAgaWYgKCFzb3VyY2VJ
ZCkKKyAgICAgICAgcmV0dXJuIG51bGxCcmVha3BvaW50SWQ7ICAgIAorICAgIFNvdXJjZUlkVG9C
cmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5maW5k
KHNvdXJjZUlkKTsKKyAgICBpZiAoaXQgPT0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZW5kKCkp
CisgICAgICAgIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuc2V0KHNvdXJjZUlkLCBMaW5l
VG9CcmVha3BvaW50c01hcCgpKS5pdGVyYXRvcjsKKyAgICBMaW5lVG9CcmVha3BvaW50c01hcDo6
aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChicmVha3BvaW50LmxpbmVOdW1iZXIg
KyAxKTsKKyAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnZhbHVlLmVuZCgpKQorICAgICAgICBicmVh
a3NJdCA9IGl0LT52YWx1ZS5zZXQoYnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSwgQnJlYWtwb2lu
dHNJbkxpbmUoKSkuaXRlcmF0b3I7CisKKyAgICBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVj
dG9yID0gYnJlYWtzSXQtPnZhbHVlOworICAgIHVuc2lnbmVkIGJyZWFrc0NvdW50ID0gYnJlYWtz
VmVjdG9yLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJlYWtzQ291bnQ7
IGkrKykgeworICAgICAgICBpZiAoYnJlYWtzVmVjdG9yLmF0KGkpLmNvbHVtbk51bWJlciA9PSBi
cmVha3BvaW50LmNvbHVtbk51bWJlcikKKyAgICAgICAgICAgIHJldHVybiBudWxsQnJlYWtwb2lu
dElkOworICAgIH0KKworICAgIEJyZWFrcG9pbnRJZCBpZCA9ICsrbV90b3BCcmVha3BvaW50SWQ7
CisgICAgUkVMRUFTRV9BU1NFUlQoaWQgIT0gbnVsbEJyZWFrcG9pbnRJZCk7CisgICAgYnJlYWtz
VmVjdG9yLmFwcGVuZChCcmVha3BvaW50KGlkLCBicmVha3BvaW50KSk7CisKKyAgICBtX2JyZWFr
cG9pbnRJZFRvQnJlYWtwb2ludC5zZXQoaWQsICZicmVha3NWZWN0b3IubGFzdCgpKTsKKworICAg
ICphY3R1YWxMaW5lTnVtYmVyID0gYnJlYWtwb2ludC5saW5lTnVtYmVyOworICAgICphY3R1YWxD
b2x1bW5OdW1iZXIgPSBicmVha3BvaW50LmNvbHVtbk51bWJlcjsKKyAgICByZXR1cm4gaWQ7Cit9
CisKK3ZvaWQgRGVidWdnZXI6OnJlbW92ZUJyZWFrcG9pbnQoQnJlYWtwb2ludElkIGlkKQorewor
ICAgIGlmIChpZCA9PSBudWxsQnJlYWtwb2ludElkKQorICAgICAgICByZXR1cm47CisKKyAgICBC
cmVha3BvaW50SWRUb0JyZWFrcG9pbnRNYXA6Oml0ZXJhdG9yIGlkSXQgPSBtX2JyZWFrcG9pbnRJ
ZFRvQnJlYWtwb2ludC5maW5kKGlkKTsKKyAgICBBU1NFUlQoaWRJdCAhPSBtX2JyZWFrcG9pbnRJ
ZFRvQnJlYWtwb2ludC5lbmQoKSk7CisgICAgQnJlYWtwb2ludCYgYnAgPSAqaWRJdC0+dmFsdWU7
CisKKyAgICBpbnRwdHJfdCBzb3VyY2VJZCA9IGJwLnNvdXJjZUlkOworICAgIEFTU0VSVChzb3Vy
Y2VJZCk7CisgICAgU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9IG1fc291
cmNlSWRUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSWQpOworICAgIEFTU0VSVChpdCAhPSBtX3Nv
dXJjZUlkVG9CcmVha3BvaW50cy5lbmQoKSk7CisgICAgTGluZVRvQnJlYWtwb2ludHNNYXA6Oml0
ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnZhbHVlLmZpbmQoYnAubGluZU51bWJlciArIDEpOworICAg
IEFTU0VSVChicmVha3NJdCAhPSBpdC0+dmFsdWUuZW5kKCkpOworCisgICAgQnJlYWtwb2ludHNJ
bkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT52YWx1ZTsKKyAgICB1bnNpZ25lZCBicmVh
a3NDb3VudCA9IGJyZWFrc1ZlY3Rvci5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGJyZWFrc0NvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKGJyZWFrc1ZlY3Rvci5hdChpKS5p
ZCA9PSBzdGF0aWNfY2FzdDxpbnQ+KGJwLmlkKSkgeworICAgICAgICAgICAgYnJlYWtzVmVjdG9y
LnJlbW92ZShpKTsKKyAgICAgICAgICAgIG1fYnJlYWtwb2ludElkVG9CcmVha3BvaW50LnJlbW92
ZShpZEl0KTsKKworICAgICAgICAgICAgaWYgKGJyZWFrc1ZlY3Rvci5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgICAgICBpdC0+dmFsdWUucmVtb3ZlKGJyZWFrc0l0KTsKKyAgICAgICAgICAgICAg
ICBpZiAoaXQtPnZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zb3VyY2VJ
ZFRvQnJlYWtwb2ludHMucmVtb3ZlKGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorfQorCitib29sIERlYnVnZ2VyOjpoYXNCcmVha3BvaW50
KGludHB0cl90IHNvdXJjZUlkLCBjb25zdCBUZXh0UG9zaXRpb24mIHBvc2l0aW9uLCBCcmVha3Bv
aW50ICpoaXRCcmVha3BvaW50KSBjb25zdAoreworICAgIGlmICghbV9icmVha3BvaW50c0FjdGl2
YXRlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU291cmNlSWRUb0JyZWFrcG9pbnRz
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmZpbmQoc291
cmNlSWQpOworICAgIGlmIChpdCA9PSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IGxpbmVOdW1iZXIgPSBwb3NpdGlvbi5tX2xp
bmUuemVyb0Jhc2VkSW50KCk7CisgICAgaW50IGNvbHVtbk51bWJlciA9IHBvc2l0aW9uLm1fY29s
dW1uLnplcm9CYXNlZEludCgpOworICAgIGlmIChsaW5lTnVtYmVyIDwgMCB8fCBjb2x1bW5OdW1i
ZXIgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMaW5lVG9CcmVha3BvaW50c01h
cDo6Y29uc3RfaXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChsaW5lTnVtYmVyICsg
MSk7CisgICAgaWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYm9vbCBoaXQgPSBmYWxzZTsKKyAgICBjb25zdCBCcmVha3BvaW50c0lu
TGluZSYgYnJlYWtzVmVjdG9yID0gYnJlYWtzSXQtPnZhbHVlOworICAgIHVuc2lnbmVkIGJyZWFr
c0NvdW50ID0gYnJlYWtzVmVjdG9yLnNpemUoKTsKKyAgICB1bnNpZ25lZCBpOworICAgIGZvciAo
aSA9IDA7IGkgPCBicmVha3NDb3VudDsgaSsrKSB7CisgICAgICAgIGludCBicmVha0xpbmUgPSBi
cmVha3NWZWN0b3IuYXQoaSkubGluZU51bWJlcjsKKyAgICAgICAgaW50IGJyZWFrQ29sdW1uID0g
YnJlYWtzVmVjdG9yLmF0KGkpLmNvbHVtbk51bWJlcjsKKyAgICAgICAgLy8gU2luY2UgZnJvbnRl
bmQgdHJ1bmNhdGVzIHRoZSBpbmRlbnQsIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gYSBsaW5lIG11
c3QgbWF0Y2ggdGhlIGJyZWFrcG9pbnQgKGxpbmUsMCkuCisgICAgICAgIGlmICgobGluZU51bWJl
ciAhPSBtX2xhc3RFeGVjdXRlZExpbmUgJiYgbGluZU51bWJlciA9PSBicmVha0xpbmUgJiYgIWJy
ZWFrQ29sdW1uKQorICAgICAgICAgICAgfHwgKGxpbmVOdW1iZXIgPT0gYnJlYWtMaW5lICYmIGNv
bHVtbk51bWJlciA9PSBicmVha0NvbHVtbikpIHsKKyAgICAgICAgICAgIGhpdCA9IHRydWU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWhpdCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGhpdEJyZWFrcG9pbnQpCisgICAgICAgICpoaXRC
cmVha3BvaW50ID0gYnJlYWtzVmVjdG9yLmF0KGkpOworCisgICAgLy8gQW4gZW1wdHkgY29uZGl0
aW9uIGNvdW50cyBhcyBubyBjb25kaXRpb24gd2hpY2ggaXMgZXF1aXZhbGVudCB0byAidHJ1ZSIu
CisgICAgaWYgKGJyZWFrc1ZlY3Rvci5hdChpKS5jb25kaXRpb24uaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5ldmFsdWF0ZShicmVha3NWZWN0b3IuYXQoaSkuY29u
ZGl0aW9uLCBleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgLy8gQW4g
ZXJyb25lb3VzIGNvbmRpdGlvbiBjb3VudHMgYXMgImZhbHNlIi4KKyAgICAgICAgaGFuZGxlRXhj
ZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKG1fY3VycmVudENhbGxGcmFtZS0+ZXhlYygpLCBl
eGNlcHRpb24pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQudG9Cb29sZWFuKG1fY3VycmVudENhbGxGcmFtZS0+ZXhlYygpKTsKK30KKwordm9pZCBEZWJ1
Z2dlcjo6Y2xlYXJCcmVha3BvaW50cygpCit7CisgICAgbV90b3BCcmVha3BvaW50SWQgPSBudWxs
QnJlYWtwb2ludElkOworICAgIG1fYnJlYWtwb2ludElkVG9CcmVha3BvaW50LmNsZWFyKCk7Cisg
ICAgbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuY2xlYXIoKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6
c2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoYm9vbCBhY3RpdmF0ZWQpCit7CisgICAgbV9icmVha3Bv
aW50c0FjdGl2YXRlZCA9IGFjdGl2YXRlZDsKK30KKwordm9pZCBEZWJ1Z2dlcjo6c2V0UGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlKQoreworICAgIG1f
cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9IHBhdXNlOworfQorCit2b2lkIERlYnVnZ2VyOjpzZXRQ
YXVzZU9uTmV4dFN0YXRlbWVudChib29sIHBhdXNlKQoreworICAgIG1fcGF1c2VPbk5leHRTdGF0
ZW1lbnQgPSBwYXVzZTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6YnJlYWtQcm9ncmFtKCkKK3sKKyAg
ICBpZiAobV9wYXVzZWQgfHwgIW1fY3VycmVudENhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7CisgICAgcGF1c2VJZk5lZWRlZCht
X2N1cnJlbnRDYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7Cit9CisKK3ZvaWQgRGVi
dWdnZXI6OmNvbnRpbnVlUHJvZ3JhbSgpCit7CisgICAgaWYgKCFtX3BhdXNlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IGZhbHNlOworICAgIG5vdGlm
eURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6c3Rl
cEludG9TdGF0ZW1lbnQoKQoreworICAgIGlmICghbV9wYXVzZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOworICAgIG5vdGlmeURvbmVQcm9j
ZXNzaW5nRGVidWdnZXJFdmVudHMoKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6c3RlcE92ZXJTdGF0
ZW1lbnQoKQoreworICAgIGlmICghbV9wYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS5nZXQoKTsKKyAgICBub3RpZnlE
b25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnN0ZXBP
dXRPZkZ1bmN0aW9uKCkKK3sKKyAgICBpZiAoIW1fcGF1c2VkKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRD
YWxsRnJhbWUtPmNhbGxlcigpIDogMDsKKyAgICBub3RpZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2Vy
RXZlbnRzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnNvdXJjZVBhcnNlZChFeGVjU3RhdGUqIGV4
ZWMsIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciwgaW50IGVycm9yTGluZSwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgaGFuZGxlU291cmNlUGFyc2VkKGV4ZWMsIHNv
dXJjZVByb3ZpZGVyLCBlcnJvckxpbmUsIGVycm9yTWVzc2FnZSk7Cit9CisKK3ZvaWQgRGVidWdn
ZXI6OmNyZWF0ZUNhbGxGcmFtZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxs
RnJhbWUpCit7CisgICAgaW50cHRyX3Qgc291cmNlSWQgPSBkZWJ1Z2dlckNhbGxGcmFtZS5zb3Vy
Y2VJZCgpOworICAgIG1fY3VycmVudENhbGxGcmFtZSA9IEZyYW1lVmlzaXRvcjo6Y3JlYXRlKGRl
YnVnZ2VyQ2FsbEZyYW1lLCBtX2N1cnJlbnRDYWxsRnJhbWUpOworICAgIGlmIChtX2xhc3RFeGVj
dXRlZFNvdXJjZUlkICE9IHNvdXJjZUlkKSB7CisgICAgICAgIG1fbGFzdEV4ZWN1dGVkTGluZSA9
IC0xOworICAgICAgICBtX2xhc3RFeGVjdXRlZFNvdXJjZUlkID0gc291cmNlSWQ7CisgICAgfQor
fQorCit2b2lkIERlYnVnZ2VyOjp1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNvbnN0
IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKK3sKKyAgICBpZiAoIW1fY3Vy
cmVudENhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50Q2FsbEZyYW1l
LT51cGRhdGUoZGVidWdnZXJDYWxsRnJhbWUpOworICAgIHBhdXNlSWZOZWVkZWQoZGVidWdnZXJD
YWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6cGF1
c2VJZk5lZWRlZChKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCkKK3sKKyAgICBp
ZiAobV9wYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbmVlZFBhdXNlSGFuZGxp
bmcoZHluYW1pY0dsb2JhbE9iamVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIEJyZWFrcG9p
bnQgYnJlYWtwb2ludDsKKyAgICBib29sIGRpZEhpdEJyZWFrcG9pbnQgPSBmYWxzZTsKKyAgICBi
b29sIHBhdXNlTm93ID0gbV9wYXVzZU9uTmV4dFN0YXRlbWVudDsKKyAgICBwYXVzZU5vdyB8PSAo
bV9wYXVzZU9uQ2FsbEZyYW1lID09IG1fY3VycmVudENhbGxGcmFtZSk7CisgICAgcGF1c2VOb3cg
fD0gZGlkSGl0QnJlYWtwb2ludCA9IGhhc0JyZWFrcG9pbnQobV9jdXJyZW50Q2FsbEZyYW1lLT5z
b3VyY2VJZCgpLCBtX2N1cnJlbnRDYWxsRnJhbWUtPnBvc2l0aW9uKCksICZicmVha3BvaW50KTsK
KyAgICBtX2xhc3RFeGVjdXRlZExpbmUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPnBvc2l0aW9uKCku
bV9saW5lLnplcm9CYXNlZEludCgpOworICAgIGlmICghcGF1c2VOb3cpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChkaWRIaXRCcmVha3BvaW50KSB7CisgICAgICAgIGV2YWx1YXRlQnJlYWtw
b2ludEFjdGlvbnMoYnJlYWtwb2ludCk7CisgICAgICAgIGlmIChicmVha3BvaW50LmF1dG9Db250
aW51ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3BhdXNlT25DYWxsRnJh
bWUgPSAwOworICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSBmYWxzZTsKKyAgICBtX3BhdXNl
ZCA9IHRydWU7CisKKyAgICBoYW5kbGVQYXVzZShkeW5hbWljR2xvYmFsT2JqZWN0KTsKKworICAg
IG1fcGF1c2VkID0gZmFsc2U7Cit9CisKK3ZvaWQgRGVidWdnZXI6OmNhbGxFdmVudChjb25zdCBE
ZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCit7CisgICAgaWYgKCFtX3BhdXNl
ZCkgeworICAgICAgICBjcmVhdGVDYWxsRnJhbWUoZGVidWdnZXJDYWxsRnJhbWUpOworICAgICAg
ICBwYXVzZUlmTmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7
CisgICAgfQorfQorCit2b2lkIERlYnVnZ2VyOjphdFN0YXRlbWVudChjb25zdCBEZWJ1Z2dlckNh
bGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCit7CisgICAgaWYgKCFtX3BhdXNlZCkKKyAgICAg
ICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFtZSk7Cit9
CisKK3ZvaWQgRGVidWdnZXI6OnJldHVybkV2ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBk
ZWJ1Z2dlckNhbGxGcmFtZSkKK3sKKyAgICBpZiAobV9wYXVzZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUp
OworCisgICAgLy8gZGV0YWNoIG1heSBoYXZlIGJlZW4gY2FsbGVkIGR1cmluZyBwYXVzZUlmTmVl
ZGVkCisgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIFRyZWF0IHN0ZXBwaW5nIG92ZXIgYSByZXR1cm4gc3RhdGVtZW50IGxpa2Ugc3RlcHBpbmcg
b3V0LgorICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgPT0gbV9wYXVzZU9uQ2FsbEZyYW1lKQor
ICAgICAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlcigp
OworICAgIG1fY3VycmVudENhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyKCk7
Cit9CisKK3ZvaWQgRGVidWdnZXI6OmV4Y2VwdGlvbihjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYg
ZGVidWdnZXJDYWxsRnJhbWUsIGJvb2wgaGFzSGFuZGxlcikKK3sKKyAgICBpZiAobV9wYXVzZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0g
UGF1c2VPbkFsbEV4Y2VwdGlvbnMgfHwgKG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9PSBQYXVz
ZU9uVW5jYXVnaHRFeGNlcHRpb25zICYmICFoYXNIYW5kbGVyKSkKKyAgICAgICAgbV9wYXVzZU9u
TmV4dFN0YXRlbWVudCA9IHRydWU7CisKKyAgICBtX2hhc0hhbmRsZXJGb3JFeGNlcHRpb25DYWxs
YmFjayA9IGhhc0hhbmRsZXI7CisgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChk
ZWJ1Z2dlckNhbGxGcmFtZSk7CisgICAgbV9oYXNIYW5kbGVyRm9yRXhjZXB0aW9uQ2FsbGJhY2sg
PSBmYWxzZTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERl
YnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKK3sKKyAgICBpZiAoIW1fcGF1c2Vk
KSB7CisgICAgICAgIGNyZWF0ZUNhbGxGcmFtZShkZWJ1Z2dlckNhbGxGcmFtZSk7CisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMjYzNy4KKyAgICAgICAgLy8gUmVtb3ZlIGl0IHdoZW4gd2Ug
cmV3b3JrIHRoZSBkZWJ1Z2dlciBpbXBsZW1lbnRhdGlvbiB0byBub3QgcmVxdWlyZSBjYWxsYmFj
a3MuCisgICAgICAgIGlmICghbV9pc1dvcmtlclRocmVhZCkKKyAgICAgICAgICAgIHBhdXNlSWZO
ZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKKyAgICB9Cit9
CisKK3ZvaWQgRGVidWdnZXI6OmRpZEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZy
YW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKK3sKKyAgICBpZiAobV9wYXVzZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxs
RnJhbWUpOworCisgICAgLy8gVHJlYXQgc3RlcHBpbmcgb3ZlciB0aGUgZW5kIG9mIGEgcHJvZ3Jh
bSBsaWtlIHN0ZXBwaW5nIG91dC4KKyAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgPT0gbV9wYXVzZU9uQ2FsbEZy
YW1lKSB7CisgICAgICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+
Y2FsbGVyKCk7CisgICAgICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJh
bWUtPmNhbGxlcigpOworfQorCit2b2lkIERlYnVnZ2VyOjpkaWRSZWFjaEJyZWFrcG9pbnQoY29u
c3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lKQoreworICAgIGlmIChtX3Bh
dXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRy
dWU7CisgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFt
ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHJldmlzaW9uIDE1NjI0NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29t
KQotICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjMgKzIyLDI2IEBACiAjaWZu
ZGVmIERlYnVnZ2VyX2gKICNkZWZpbmUgRGVidWdnZXJfaAogCisjaW5jbHVkZSAiQnJlYWtwb2lu
dC5oIgorI2luY2x1ZGUgIkRlYnVnZ2VyQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
UG9zaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lOwogY2xhc3MgRXhlY1N0YXRlOwotY2xh
c3MgVk07CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTVmFsdWU7CiBjbGFzcyBTb3Vy
Y2VQcm92aWRlcjsKK2NsYXNzIFZNOwogCi1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBEZWJ1Z2dl
ciB7CitjbGFzcyBEZWJ1Z2dlckV2ZW50SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+
RGVidWdnZXIoKTsKLQotICAgIHZvaWQgYXR0YWNoKEpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdmly
dHVhbCB2b2lkIGRldGFjaChKU0dsb2JhbE9iamVjdCopOworICAgIHZpcnR1YWwgfkRlYnVnZ2Vy
RXZlbnRIYW5kbGVyKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFyc2VkKEV4ZWNT
dGF0ZSosIFNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZU51bWJlciwgY29uc3QgV1RGOjpT
dHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwogCkBAIC01MCwxMCArNTMsMTYxIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZy
YW1lJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShjb25zdCBEZWJ1
Z2dlckNhbGxGcmFtZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhY2hCcmVha3BvaW50
KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJikgPSAwOworfTsKKworY2xhc3MgSlNfRVhQT1JUX1BS
SVZBVEUgRGVidWdnZXIgOiBwcml2YXRlIERlYnVnZ2VyRXZlbnRIYW5kbGVyIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShEZWJ1Z2dlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorCisgICAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgRnJhbWVWaXNpdG9yIDogcHVibGlj
IFJlZkNvdW50ZWQ8RnJhbWVWaXNpdG9yPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxGcmFtZVZpc2l0b3I+IGNyZWF0ZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYg
ZGVidWdnZXJDYWxsRnJhbWUsIFBhc3NSZWZQdHI8RnJhbWVWaXNpdG9yPiBjYWxsZXIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRnJhbWVWaXNpdG9yKGRlYnVn
Z2VyQ2FsbEZyYW1lLCBjYWxsZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgaW52YWxp
ZGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAg
ICAgICAgbV9kZWJ1Z2dlckNhbGxGcmFtZS5jbGVhcigpOworICAgICAgICB9CisgICAgICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQorCisgICAgICAgIEZyYW1l
VmlzaXRvciogY2FsbGVyKCk7CisgICAgICAgIGludHB0cl90IHNvdXJjZUlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS5zb3VyY2VJZCgpOyB9CisgICAgICAgIGNvbnN0IFRl
eHRQb3NpdGlvbiBwb3NpdGlvbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIE9yZGlu
YWxOdW1iZXIgbGluZSA9IFdURjo6T3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KG1fZGVi
dWdnZXJDYWxsRnJhbWUubGluZSgpKTsKKyAgICAgICAgICAgIE9yZGluYWxOdW1iZXIgY29sdW1u
ID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobV9kZWJ1Z2dlckNhbGxGcmFt
ZS5jb2x1bW4oKSk7CisgICAgICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uKGxpbmUsIGNvbHVt
bik7CisgICAgICAgIH0KKyAgICAgICAgaW50IGxpbmUoKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobV9kZWJ1
Z2dlckNhbGxGcmFtZS5saW5lKCkpLnplcm9CYXNlZEludCgpOworICAgICAgICB9CisgICAgICAg
IGludCBjb2x1bW4oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpP
cmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobV9kZWJ1Z2dlckNhbGxGcmFtZS5jb2x1bW4o
KSkuemVyb0Jhc2VkSW50KCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHVwZGF0ZShjb25z
dCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fZGVidWdnZXJDYWxsRnJhbWUgPSBkZWJ1Z2dlckNhbGxGcmFtZTsKKyAgICAgICAg
ICAgIG1faXNWYWxpZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBEZWJ1Z2dl
ckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2Vy
Q2FsbEZyYW1lOyB9CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0
KCkgY29uc3Q7CisKKyAgICAgICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSgpIGNvbnN0OworICAgICAg
ICBEZWJ1Z2dlckNhbGxGcmFtZTo6VHlwZSB0eXBlKCkgY29uc3Q7CisgICAgICAgIEpTU2NvcGUq
IHNjb3BlQ2hhaW4oKSBjb25zdDsKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjKCkgY29uc3Q7CisK
KyAgICAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QoKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZSBl
dmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNWYWx1ZSYgZXhjZXB0aW9uKSBjb25zdDsK
KworICAgIHByaXZhdGU6CisgICAgICAgIEZyYW1lVmlzaXRvcihjb25zdCBEZWJ1Z2dlckNhbGxG
cmFtZSYsIFBhc3NSZWZQdHI8RnJhbWVWaXNpdG9yPiBjYWxsZXIpOworCisgICAgICAgIERlYnVn
Z2VyQ2FsbEZyYW1lIG1fZGVidWdnZXJDYWxsRnJhbWU7CisgICAgICAgIFJlZlB0cjxGcmFtZVZp
c2l0b3I+IG1fY2FsbGVyOworICAgICAgICBib29sIG1faXNWYWxpZDsKKyAgICB9OworCisgICAg
RGVidWdnZXJFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGxlcigpIHsgcmV0dXJuIHRoaXM7IH0KKwor
ICAgIHZvaWQgYXR0YWNoKEpTR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBkZXRhY2goSlNHbG9i
YWxPYmplY3QqKTsKKworICAgIEZyYW1lVmlzaXRvciogY3VycmVudEZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJyZW50Q2FsbEZyYW1lLmdldCgpOyB9CisKKyAgICBib29sIGhhc0JyZWFrcG9p
bnQoaW50cHRyX3Qgc291cmNlSWQsIGNvbnN0IFRleHRQb3NpdGlvbiYsIEJyZWFrcG9pbnQqIGhp
dEJyZWFrcG9pbnQpIGNvbnN0OworICAgIEJyZWFrcG9pbnRJZCBzZXRCcmVha3BvaW50KGludHB0
cl90IHNvdXJjZUlkLCBjb25zdCBCcmVha3BvaW50JiwgaW50KiBhY3R1YWxMaW5lTnVtYmVyLCBp
bnQqIGFjdHVhbENvbHVtbk51bWJlcik7CisgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KEJyZWFr
cG9pbnRJZCk7CisgICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7CisgICAgdm9pZCBzZXRCcmVh
a3BvaW50c0FjdGl2YXRlZChib29sKTsKKyAgICB2b2lkIGFjdGl2YXRlQnJlYWtwb2ludHMoKSB7
IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKHRydWUpOyB9CisgICAgdm9pZCBkZWFjdGl2YXRlQnJl
YWtwb2ludHMoKSB7IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGZhbHNlKTsgfQorCisgICAgZW51
bSBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHsKKyAgICAgICAgRG9udFBhdXNlT25FeGNlcHRpb25z
LAorICAgICAgICBQYXVzZU9uQWxsRXhjZXB0aW9ucywKKyAgICAgICAgUGF1c2VPblVuY2F1Z2h0
RXhjZXB0aW9ucworICAgIH07CisgICAgUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOyB9
CisgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNlcHRpb25zU3Rh
dGUpOworCisgICAgdm9pZCBzZXRQYXVzZU9uTmV4dFN0YXRlbWVudChib29sKTsKKyAgICB2b2lk
IGJyZWFrUHJvZ3JhbSgpOworICAgIHZvaWQgY29udGludWVQcm9ncmFtKCk7CisgICAgdm9pZCBz
dGVwSW50b1N0YXRlbWVudCgpOworICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1lbnQoKTsKKyAgICB2
b2lkIHN0ZXBPdXRPZkZ1bmN0aW9uKCk7CisKKyAgICBib29sIGlzUGF1c2VkKCkgeyByZXR1cm4g
bV9wYXVzZWQ7IH0KIAogICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVk0qKTsKIAor
cHJvdGVjdGVkOgorICAgIERlYnVnZ2VyKGJvb2wgaXNXb3JrZXJUaHJlYWQgPSBmYWxzZSk7Cisg
ICAgdmlydHVhbCB+RGVidWdnZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBldmFsdWF0ZUJyZWFr
cG9pbnRBY3Rpb25zKGNvbnN0IEJyZWFrcG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlU291cmNlUGFyc2VkKEV4ZWNTdGF0ZSosIFNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGlu
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1zZykKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShl
cnJvckxpbmUpOworICAgICAgICBVTlVTRURfUEFSQU0oZXJyb3JNc2cpOworICAgIH0KKyAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlUGF1c2UoSlNHbG9iYWxPYmplY3QqKSB7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgbmVlZFBhdXNlSGFuZGxpbmcoSlNHbG9iYWxPYmplY3QqKSB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24o
RXhlY1N0YXRlKiwgSlNWYWx1ZSBleGNlcHRpb24pIGNvbnN0CisgICAgeworICAgICAgICBVTlVT
RURfUEFSQU0oZXhjZXB0aW9uKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeURvbmVQ
cm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKSB7IH0KKworICAgIGJvb2wgaGFzSGFuZGxlckZvckV4
Y2VwdGlvbkNhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9oYXNIYW5kbGVyRm9yRXhjZXB0aW9u
Q2FsbGJhY2s7IH0KKwogcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZUNhbGxGcmFtZShjb25zdCBE
ZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZvaWQgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5l
ZWRlZChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZvaWQgcGF1c2VJZk5lZWRlZChK
U0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCk7CisKKyAgICAvLyBEZWJ1Z2dlckV2
ZW50SGFuZGxlciBpbnRlcmZhY2U6CisgICAgdmlydHVhbCB2b2lkIHNvdXJjZVBhcnNlZChFeGVj
U3RhdGUqLCBTb3VyY2VQcm92aWRlciosIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNc2cpOworCisgICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihjb25zdCBEZWJ1Z2dlckNhbGxG
cmFtZSYsIGJvb2wgaGFzSGFuZGxlcik7CisgICAgdmlydHVhbCB2b2lkIGF0U3RhdGVtZW50KGNv
bnN0IERlYnVnZ2VyQ2FsbEZyYW1lJik7CisgICAgdmlydHVhbCB2b2lkIGNhbGxFdmVudChjb25z
dCBEZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZpcnR1YWwgdm9pZCByZXR1cm5FdmVudChjb25z
dCBEZWJ1Z2dlckNhbGxGcmFtZSYpOworCisgICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJv
Z3JhbShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVj
dXRlUHJvZ3JhbShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmKTsKKworICAgIHR5cGVk
ZWYgSGFzaE1hcDxCcmVha3BvaW50SWQsIEJyZWFrcG9pbnQqPiBCcmVha3BvaW50SWRUb0JyZWFr
cG9pbnRNYXA7CisKKyAgICB0eXBlZGVmIFZlY3RvcjxCcmVha3BvaW50PiBCcmVha3BvaW50c0lu
TGluZTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8bG9uZywgQnJlYWtwb2ludHNJbkxpbmU+IExpbmVU
b0JyZWFrcG9pbnRzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgTGluZVRvQnJl
YWtwb2ludHNNYXA+IFNvdXJjZUlkVG9CcmVha3BvaW50c01hcDsKKworICAgIGJvb2wgbV9pc1dv
cmtlclRocmVhZDsKKyAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIG1fcGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZTsKKyAgICBib29sIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQ7CisgICAgYm9vbCBtX3Bh
dXNlZDsKKyAgICBib29sIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQ7CisgICAgYm9vbCBtX2hhc0hh
bmRsZXJGb3JFeGNlcHRpb25DYWxsYmFjazsKKworICAgIEZyYW1lVmlzaXRvciogbV9wYXVzZU9u
Q2FsbEZyYW1lOworICAgIFJlZlB0cjxGcmFtZVZpc2l0b3I+IG1fY3VycmVudENhbGxGcmFtZTsK
KyAgICBpbnQgbV9sYXN0RXhlY3V0ZWRMaW5lOworICAgIGludHB0cl90IG1fbGFzdEV4ZWN1dGVk
U291cmNlSWQ7CisKKyAgICBCcmVha3BvaW50SWQgbV90b3BCcmVha3BvaW50SWQ7CisgICAgQnJl
YWtwb2ludElkVG9CcmVha3BvaW50TWFwIG1fYnJlYWtwb2ludElkVG9CcmVha3BvaW50OworICAg
IFNvdXJjZUlkVG9CcmVha3BvaW50c01hcCBtX3NvdXJjZUlkVG9CcmVha3BvaW50czsKKwogICAg
IEhhc2hTZXQ8SlNHbG9iYWxPYmplY3QqPiBtX2dsb2JhbE9iamVjdHM7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJGcmFtZVZpc2l0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckZyYW1l
VmlzaXRvci5jcHAJKHJldmlzaW9uIDE1NjAyMSkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHA6MTU2MDIxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyRnJhbWVWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQorCisjaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgorCisjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCisjaW5jbHVkZSA8ZGVi
dWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0NvbXBsZXRpb24u
aD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0pTT2JqZWN0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK0phdmFTY3Jp
cHRDYWxsRnJhbWU6OkphdmFTY3JpcHRDYWxsRnJhbWUoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUm
IGRlYnVnZ2VyQ2FsbEZyYW1lLCBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IGNhbGxl
cikKKyAgICA6IG1fZGVidWdnZXJDYWxsRnJhbWUoZGVidWdnZXJDYWxsRnJhbWUpCisgICAgLCBt
X2NhbGxlcihjYWxsZXIpCisgICAgLCBtX2lzVmFsaWQodHJ1ZSkKK3sKK30KKworSmF2YVNjcmlw
dENhbGxGcmFtZSogSmF2YVNjcmlwdENhbGxGcmFtZTo6Y2FsbGVyKCkKK3sKKyAgICByZXR1cm4g
bV9jYWxsZXIuZ2V0KCk7Cit9CisKK0pTQzo6SlNTY29wZSogSmF2YVNjcmlwdENhbGxGcmFtZTo6
c2NvcGVDaGFpbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faXNWYWxpZCk7CisgICAgaWYgKCFt
X2lzVmFsaWQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZy
YW1lLnNjb3BlKCk7Cit9CisKK0pTQzo6SlNHbG9iYWxPYmplY3QqIEphdmFTY3JpcHRDYWxsRnJh
bWU6OmR5bmFtaWNHbG9iYWxPYmplY3QoKSBjb25zdAoreworICAgIEFTU0VSVChtX2lzVmFsaWQp
OworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9k
ZWJ1Z2dlckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCk7Cit9CisKK1N0cmluZyBKYXZh
U2NyaXB0Q2FsbEZyYW1lOjpmdW5jdGlvbk5hbWUoKSBjb25zdAoreworICAgIEFTU0VSVChtX2lz
VmFsaWQpOworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7Cisg
ICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSA9IG1fZGVidWdnZXJDYWxsRnJhbWUuY2FsY3VsYXRlZEZ1
bmN0aW9uTmFtZSgpOworICAgIGlmIChmdW5jdGlvbk5hbWUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTsKK30KKworRGVidWdnZXJD
YWxsRnJhbWU6OlR5cGUgSmF2YVNjcmlwdENhbGxGcmFtZTo6dHlwZSgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKG1faXNWYWxpZCk7CisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybiBE
ZWJ1Z2dlckNhbGxGcmFtZTo6UHJvZ3JhbVR5cGU7CisgICAgcmV0dXJuIG1fZGVidWdnZXJDYWxs
RnJhbWUudHlwZSgpOworfQorCitKU09iamVjdCogSmF2YVNjcmlwdENhbGxGcmFtZTo6dGhpc09i
amVjdCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faXNWYWxpZCk7CisgICAgaWYgKCFtX2lzVmFs
aWQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLnRo
aXNPYmplY3QoKTsKK30KKworRXhlY1N0YXRlKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpleGVjKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICBpZiAoIW1faXNWYWxpZCkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUuY2FsbEZyYW1l
KCk7Cit9CisKKy8vIEV2YWx1YXRlIHNvbWUgSmF2YVNjcmlwdCBjb2RlIGluIHRoZSBzY29wZSBv
ZiB0aGlzIGZyYW1lLgorSlNWYWx1ZSBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShjb25z
dCBTdHJpbmcmIHNjcmlwdCwgSlNWYWx1ZSYgZXhjZXB0aW9uKSBjb25zdAoreworICAgIEFTU0VS
VChtX2lzVmFsaWQpOworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4ganNOdWxs
KCk7CisKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RlYnVnZ2VyQ2FsbEZyYW1lLmNhbGxGcmFt
ZSgpKTsKKyAgICByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS5ldmFsdWF0ZShzY3JpcHQsIGV4
Y2VwdGlvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyRnJhbWVWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJGcmFtZVZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJGcmFtZVZpc2l0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxMyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDM4ICsyNCwyMyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJEZWJ1Z2dlci5oIgogCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCituYW1lc3BhY2UgSlNDIHsKIAotI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUu
aCIKLQotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93QmFz
ZS5oIgotI2luY2x1ZGUgPGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9Db21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNM
b2NrLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0gICAgCi1KYXZhU2NyaXB0Q2FsbEZyYW1lOjpKYXZhU2NyaXB0Q2FsbEZyYW1lKGNvbnN0
IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgUGFzc1JlZlB0cjxKYXZhU2Ny
aXB0Q2FsbEZyYW1lPiBjYWxsZXIpCitEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yOjpGcmFtZVZpc2l0
b3IoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBQYXNzUmVmUHRy
PERlYnVnZ2VyOjpGcmFtZVZpc2l0b3I+IGNhbGxlcikKICAgICA6IG1fZGVidWdnZXJDYWxsRnJh
bWUoZGVidWdnZXJDYWxsRnJhbWUpCiAgICAgLCBtX2NhbGxlcihjYWxsZXIpCiAgICAgLCBtX2lz
VmFsaWQodHJ1ZSkKIHsKIH0KIAotSmF2YVNjcmlwdENhbGxGcmFtZSogSmF2YVNjcmlwdENhbGxG
cmFtZTo6Y2FsbGVyKCkKK0RlYnVnZ2VyOjpGcmFtZVZpc2l0b3IqIERlYnVnZ2VyOjpGcmFtZVZp
c2l0b3I6OmNhbGxlcigpCiB7CiAgICAgcmV0dXJuIG1fY2FsbGVyLmdldCgpOwogfQogCi1KU0M6
OkpTU2NvcGUqIEphdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlQ2hhaW4oKSBjb25zdAorSlNTY29w
ZSogRGVidWdnZXI6OkZyYW1lVmlzaXRvcjo6c2NvcGVDaGFpbigpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKG1faXNWYWxpZCk7CiAgICAgaWYgKCFtX2lzVmFsaWQpCkBAIC02Myw3ICs0OCw3IEBAIEpT
Qzo6SlNTY29wZSogSmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGUKICAgICByZXR1cm4gbV9kZWJ1
Z2dlckNhbGxGcmFtZS5zY29wZSgpOwogfQogCi1KU0M6OkpTR2xvYmFsT2JqZWN0KiBKYXZhU2Ny
aXB0Q2FsbEZyYW1lOjpkeW5hbWljR2xvYmFsT2JqZWN0KCkgY29uc3QKK0pTR2xvYmFsT2JqZWN0
KiBEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yOjpkeW5hbWljR2xvYmFsT2JqZWN0KCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9pc1ZhbGlkKTsKICAgICBpZiAoIW1faXNWYWxpZCkKQEAgLTcxLDcgKzU2
LDcgQEAgSlNDOjpKU0dsb2JhbE9iamVjdCogSmF2YVNjcmlwdENhbGxGcmFtZQogICAgIHJldHVy
biBtX2RlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxPYmplY3QoKTsKIH0KIAotU3RyaW5n
IEphdmFTY3JpcHRDYWxsRnJhbWU6OmZ1bmN0aW9uTmFtZSgpIGNvbnN0CitTdHJpbmcgRGVidWdn
ZXI6OkZyYW1lVmlzaXRvcjo6ZnVuY3Rpb25OYW1lKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9p
c1ZhbGlkKTsKICAgICBpZiAoIW1faXNWYWxpZCkKQEAgLTgyLDcgKzY3LDcgQEAgU3RyaW5nIEph
dmFTY3JpcHRDYWxsRnJhbWU6OmZ1bmN0aW9uTmFtZQogICAgIHJldHVybiBmdW5jdGlvbk5hbWU7
CiB9CiAKLURlYnVnZ2VyQ2FsbEZyYW1lOjpUeXBlIEphdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUo
KSBjb25zdAorRGVidWdnZXJDYWxsRnJhbWU6OlR5cGUgRGVidWdnZXI6OkZyYW1lVmlzaXRvcjo6
dHlwZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAgaWYgKCFtX2lzVmFs
aWQpCkBAIC05MCw3ICs3NSw3IEBAIERlYnVnZ2VyQ2FsbEZyYW1lOjpUeXBlIEphdmFTY3JpcHRD
YWxsRnIKICAgICByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS50eXBlKCk7CiB9CiAKLUpTT2Jq
ZWN0KiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0aGlzT2JqZWN0KCkgY29uc3QKK0pTT2JqZWN0KiBE
ZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yOjp0aGlzT2JqZWN0KCkgY29uc3QKIHsKICAgICBBU1NFUlQo
bV9pc1ZhbGlkKTsKICAgICBpZiAoIW1faXNWYWxpZCkKQEAgLTk4LDcgKzgzLDcgQEAgSlNPYmpl
Y3QqIEphdmFTY3JpcHRDYWxsRnJhbWU6OnRoaXNPYmplYwogICAgIHJldHVybiBtX2RlYnVnZ2Vy
Q2FsbEZyYW1lLnRoaXNPYmplY3QoKTsKIH0KIAotRXhlY1N0YXRlKiBKYXZhU2NyaXB0Q2FsbEZy
YW1lOjpleGVjKCkgY29uc3QKK0V4ZWNTdGF0ZSogRGVidWdnZXI6OkZyYW1lVmlzaXRvcjo6ZXhl
YygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAgaWYgKCFtX2lzVmFsaWQp
CkBAIC0xMDcsNyArOTIsNyBAQCBFeGVjU3RhdGUqIEphdmFTY3JpcHRDYWxsRnJhbWU6OmV4ZWMo
KSBjCiB9CiAKIC8vIEV2YWx1YXRlIHNvbWUgSmF2YVNjcmlwdCBjb2RlIGluIHRoZSBzY29wZSBv
ZiB0aGlzIGZyYW1lLgotSlNWYWx1ZSBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShjb25z
dCBTdHJpbmcmIHNjcmlwdCwgSlNWYWx1ZSYgZXhjZXB0aW9uKSBjb25zdAorSlNWYWx1ZSBEZWJ1
Z2dlcjo6RnJhbWVWaXNpdG9yOjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNWYWx1
ZSYgZXhjZXB0aW9uKSBjb25zdAogewogICAgIEFTU0VSVChtX2lzVmFsaWQpOwogICAgIGlmICgh
bV9pc1ZhbGlkKQpAQCAtMTE3LDYgKzEwMiw0IEBAIEpTVmFsdWUgSmF2YVNjcmlwdENhbGxGcmFt
ZTo6ZXZhbHVhdGUoY28KICAgICByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS5ldmFsdWF0ZShz
Y3JpcHQsIGV4Y2VwdGlvbik7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAJKHJldmlzaW9uIDE1NjI0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw3ICszOTYsNyBAQCBzdGF0
aWMgYm9vbCB1bndpbmRDYWxsRnJhbWUoU3RhY2tWaXNpdG9yCiAgICAgQ29kZUJsb2NrKiBvbGRD
b2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNj
b3BlKCk7CiAKLSAgICBpZiAoRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT5keW5hbWlj
R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsKKyAgICBpZiAoRGVidWdnZXJFdmVudEhhbmRs
ZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2Vy
KCktPmV2ZW50SGFuZGxlcigpKSB7CiAgICAgICAgIGludCBsaW5lID0gY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKS0+bGFzdExpbmUoKTsKICAgICAgICAgRGVidWdnZXJDYWxsRnJhbWUgZGVi
dWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1lLCBsaW5lLCAwLCBleGNlcHRpb25WYWx1ZSk7CiAgICAg
ICAgIGlmIChjYWxsRnJhbWUtPmNhbGxlZSgpKQpAQCAtNjU4LDcgKzY1OCw3IEBAIE5FVkVSX0lO
TElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnUKICAgICBBU1NFUlQoY2FsbEZyYW1lLT52
bSgpLmV4Y2VwdGlvblN0YWNrKCkuc2l6ZSgpKTsKICAgICBBU1NFUlQoIWV4Y2VwdGlvblZhbHVl
LmlzT2JqZWN0KCkgfHwgYXNPYmplY3QoZXhjZXB0aW9uVmFsdWUpLT5oYXNQcm9wZXJ0eShjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5zdGFjaykpOwogCi0gICAgaWYg
KERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5k
ZWJ1Z2dlcigpKSB7CisgICAgaWYgKERlYnVnZ2VyRXZlbnRIYW5kbGVyKiBkZWJ1Z2dlciA9IGNh
bGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpLT5ldmVudEhhbmRsZXIo
KSkgewogICAgICAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIHRoZSBleGNlcHRpb24gYW5kIHRoZSBl
eGNlcHRpb24gc3RhY2sgaGVyZSBpbiBvcmRlciB0byBzZWUgaWYgYSBuZXcgZXhjZXB0aW9uIGhh
cHBlbnMuCiAgICAgICAgIC8vIEFmdGVyd2FyZHMsIHRoZSB2YWx1ZXMgYXJlIHB1dCBiYWNrIHRv
IGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhpcyBlcnJvci4KICAgICAgICAgQ2xlYXJFeGNlcHRpb25T
Y29wZSBzY29wZSgmY2FsbEZyYW1lLT52bSgpKTsKQEAgLTEyNjIsNyArMTI2Miw3IEBAIEpTVmFs
dWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKIAogTkVWRVJfSU5MSU5FIHZvaWQg
SW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFtZSogY2FsbEZyYW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1
Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCBpbnQgY29sdW1uKQogewotICAg
IERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5k
ZWJ1Z2dlcigpOworICAgIERlYnVnZ2VyRXZlbnRIYW5kbGVyKiBkZWJ1Z2dlciA9IGNhbGxGcmFt
ZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpLT5ldmVudEhhbmRsZXIoKTsKICAg
ICBpZiAoIWRlYnVnZ2VyKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE1NjI0
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzIzLDcgKzcyMyw3IEBAIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
ayogSlNHbG9iYWxPYmplY3QKICAgICBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2Vk
Q29kZSA9IHZtKCkuY29kZUNhY2hlKCktPmdldFByb2dyYW1Db2RlQmxvY2sodm0oKSwgZXhlY3V0
YWJsZSwgZXhlY3V0YWJsZS0+c291cmNlKCksIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9kZSwgcHJv
ZmlsZXJNb2RlLCBlcnJvcik7CiAKICAgICBpZiAoaGFzRGVidWdnZXIoKSkKLSAgICAgICAgZGVi
dWdnZXIoKS0+c291cmNlUGFyc2VkKGNhbGxGcmFtZSwgZXhlY3V0YWJsZS0+c291cmNlKCkucHJv
dmlkZXIoKSwgZXJyb3IubV9saW5lLCBlcnJvci5tX21lc3NhZ2UpOworICAgICAgICBkZWJ1Z2dl
cigpLT5ldmVudEhhbmRsZXIoKS0+c291cmNlUGFyc2VkKGNhbGxGcmFtZSwgZXhlY3V0YWJsZS0+
c291cmNlKCkucHJvdmlkZXIoKSwgZXJyb3IubV9saW5lLCBlcnJvci5tX21lc3NhZ2UpOwogCiAg
ICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKSB7CiAgICAgICAg
ICpleGNlcHRpb24gPSBlcnJvci50b0Vycm9yT2JqZWN0KHRoaXMsIGV4ZWN1dGFibGUtPnNvdXJj
ZSgpKTsKQEAgLTc0Miw3ICs3NDIsNyBAQCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIEpTR2xvYmFs
T2JqZWN0OjpjCiAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENvZGUgPSB2bSgp
LmNvZGVDYWNoZSgpLT5nZXRFdmFsQ29kZUJsb2NrKHZtKCksIGV4ZWN1dGFibGUsIGV4ZWN1dGFi
bGUtPnNvdXJjZSgpLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJy
b3IpOwogCiAgICAgaWYgKGhhc0RlYnVnZ2VyKCkpCi0gICAgICAgIGRlYnVnZ2VyKCktPnNvdXJj
ZVBhcnNlZChjYWxsRnJhbWUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGVycm9y
Lm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsKKyAgICAgICAgZGVidWdnZXIoKS0+ZXZlbnRIYW5k
bGVyKCktPnNvdXJjZVBhcnNlZChjYWxsRnJhbWUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3Zp
ZGVyKCksIGVycm9yLm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsKIAogICAgIGlmIChlcnJvci5t
X3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSkgewogICAgICAgICB0aHJvd1ZNRXJyb3Io
Y2FsbEZyYW1lLCBlcnJvci50b0Vycm9yT2JqZWN0KHRoaXMsIGV4ZWN1dGFibGUtPnNvdXJjZSgp
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTYyODEpCisrKyBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MCBAQAorMjAxMy0wOS0yMyAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgdG8gaGlkZSBE
ZWJ1Z2dlciBjYWxsYmFjayBpbnRlcmZhY2UgaW5zaWRlIEpTQy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTc5Ni4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAg
MS4gRXh0cmFjdCB0aGUgSlNDIGRlYnVnIGhvb2sgY2FsbGJhY2tzIGludG8gYSBKU0M6OkRlYnVn
Z2VyRXZlbnRIYW5kbGVyCisgICAgICAgICAgIGludGVyZmFjZS4gVGhlIEpTQzo6RGVidWdnZXIg
bm93IHByaXZhdGVseSBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlLgorCisgICAgICAgIDIuIE1v
dmUgbm9uLWZyb250IGVuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgZnJvbSBXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcgorICAgICAgICAgICBpbnRvIEpTQzo6RGVidWdnZXIuCisKKyAgICAgICAg
My4gTW92ZSBXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lIGZ1bmN0aW9uYWxpdHkgaW50byBh
CisgICAgICAgICAgIERlYnVnZ2VyOjpGcmFtZVZpc2l0b3IgY2xhc3MuICBUaGUgSmF2YVNjcmlw
dENhbGxGcmFtZSBpcyBzdGlsbAorICAgICAgICAgICBuZWNlc3NhcnkgYmVjYXVzZSBpdCBpcyBw
dWJsaXNoZWQgYXMgYSBKUyBvYmplY3QgdG8gdGhlIEluc3BlY3Rvci4gSW4KKyAgICAgICAgICAg
YSBsYXRlciB0YXNrLCBJJ2xsIGNvbnNvbGlkYXRlIHRoZSBEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9y
IGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgaW50byBEZWJ1Z2dlckNhbGxGcmFtZSwgYW5kIHJl
bW92ZSB0aGUgbmVlZCBmb3IgdGhlIERlYnVnZ2VyOjpGcmFtZVZpc2l0b3IuCisKKyAgICAgICAg
NC4gQ3JlYXRlIGEgSlNDOjpCcmVha3BvaW50IGJhc2VkIG9uIGEgc3Vic2V0IG9mIFdlYkNvcmU6
OlNjcmlwdEJyZWFrUG9pbnQuCisKKyAgICAgICAgNS4gUmVpbXBsZW1lbnQgV2ViS2l0L21hYydz
IFdlYlNjcmlwdERlYnVnZ2VyIGJhc2VkIG9uIHRoZSBuZXcKKyAgICAgICAgICAgSlNDOjpEZWJ1
Z2dlciBpbnRlcmZhY2UgKGkuZS4gbm8gdXNlIG9mIHRoZSBKU0MgZGVidWcgaG9va3MpLgorCisg
ICAgICAgIDYuIFNvdXJjZSBJRCBpcyBub3cgYWx3YXlzIGFuIGludHB0cl90IGJlbG93IHRoZSBJ
bnNwZWN0b3JEZWJ1Z0FnZW50IGxheWVyLgorICAgICAgICAgICBUaGUgSW5zcGVjdG9yRGVidWdB
Z2VudCB0YWtlcyBjYXJlIG9mIHRyYW5zbGF0aW5nIGJldHdlZW4gdGhlIEluc3BlY3RvcgorICAg
ICAgICAgICBKU09OIHByb3RvY29sJ3MgU3RyaW5nIHNvdXJjZUlkIGFuZCB0aGUgaW50cHRyX3Qg
c291cmNlSWQgd2hlbiBuZWVkZWQuCisKKyAgICAgICAgNy4gQnJlYWtwb2ludCBJRCBpcyBub3cg
YSBsb25nIGluc3RlYWQgb2YgYSBTdHJpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxG
cmFtZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxG
cmFtZS5oOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFtZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6OnNvdXJjZUlEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6OmNhbGxlcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2NyaXB0
QnJlYWtwb2ludFRvSlNDQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6U2NyaXB0RGVidWdTZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6OmNsZWFyQnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6OmV2YWx1YXRlQnJlYWtwb2ludEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3BvaW50QWN0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0U2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhdXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhcnNlU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVTb3VyY2VQYXJzZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6Om5lZWRQYXVzZUhhbmRsaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVQYXVzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlRXhjZXB0aW9uSW5CcmVha3BvaW50Q29u
ZGl0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpub3RpZnlEb25l
UHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVn
U2VydmVyOjpjb21waWxlU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2Vy
dmVyOjpydW5TY3JpcHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVy
Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6OldvcmtlclNjcmlwdERl
YnVnU2VydmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZl
ci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMb2NhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWtwb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U2NyaXB0
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNj
cmlwdFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpj
b21waWxlU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnJ1blNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
aWRQYXJzZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpkaWRQYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpj
bGVhcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oOgorCiAyMDEzLTA5LTIzICBB
bnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUmVuZGVy
T2JqZWN0Q2hpbGRMaXN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlz
aW9uIDE1NjI0NSkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtp
bmcgY29weSkKQEAgLTI0OTksNyArMjQ5OSw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9EaWN0aW9uYXJ5LmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvRGljdGlvbmFyeS5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTU2
MjQ1KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMzg5
Nyw3ICszODk3LDYgQEAgZW5hYmxlPyhKQVZBU0NSSVBUX0RFQlVHR0VSKSB7CiAgICAgU09VUkNF
UyArPSBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5j
cHAgXAogICAgICAgICBiaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5jcHAgXAotICAgICAgICBi
aW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAogfQogCiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1VzZUpTQy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Vc2VKU0Mu
Y21ha2UJKHJldmlzaW9uIDE1NjI0NSkKKysrIFNvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQko
d29ya2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RVcGxvYWRDdXN0b20uY3BwCiAg
ICAgYmluZGluZ3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9K
U1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwCi0gICAgYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxG
cmFtZS5jcHAKICAgICBiaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCiAgICAg
YmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdENh
Y2hlZEZyYW1lRGF0YS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24gMTU2MjQ1KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU3NTAs
MjAgKzE1NzUwLDYgQEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVk
ZWRGcm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxiaW5kaW5nc1xqc1xKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCI+Ci0gICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xX
aW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxk
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fp
cm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVp
bGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZp
eHxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZm
aXh8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVp
bGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdp
bjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCci
PnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3xX
aW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxk
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5D
YWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rp
b258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rp
b258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xKU0F0dHJDdXN0b20uY3BwIj4KICAg
ICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8
RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRl
cnMJKHJldmlzaW9uIDE1NjI0NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtNDM4Myw5ICs0MzgzLDYg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXElEQkJpbmRpbmdVdGls
aXRpZXMuY3BwIj4KICAgICAgIDxGaWx0ZXI+YmluZGluZ3NcanM8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXEphdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+YmluZGluZ3NcanM8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXEpT
QXR0ckN1c3RvbS5jcHAiPgogICAgICAgPEZpbHRlcj5iaW5kaW5nc1xqczwvRmlsdGVyPgogICAg
IDwvQ2xDb21waWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU2MjQ1KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03OTcs
NyArNzk3LDYgQEAKIAkJMUM4MUI5NUEwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRy
b2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFD
ODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUM4MUI5NUIwRTk3MzMw
ODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM4MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIElu
c3BlY3RvckNvbnRyb2xsZXIuY3BwICovOyB9OwogCQkxQzgxQjk1QzBFOTczMzA4MDAyNjZFMDcg
LyogSW5zcGVjdG9yQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzgxQjk1ODBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ2xpZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUM4MUJB
MDkwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM4MUJBMDMwRTk3MzQ4MzAwMjY2
RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwICovOyB9OwogCQkxQzgxQkEwQTBFOTczNDgz
MDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM4MUJBMDQwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFT
Y3JpcHRDYWxsRnJhbWUuaCAqLzsgfTsKIAkJMUNBMTlFMDUwREMyNTU5NTAwNjVBOTk0IC8qIEV2
ZW50TG9vcE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFDQTE5RTAzMERDMjU1OTUwMDY1QTk5NCAvKiBFdmVudExvb3BNYWMubW0gKi87IH07CiAJ
CTFDQTE5RTE2MERDMjU1Q0EwMDY1QTk5NCAvKiBFdmVudExvb3AuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQTE5RTE1MERDMjU1Q0EwMDY1QTk5NCAv
KiBFdmVudExvb3AuaCAqLzsgfTsKQEAgLTcyNjIsNyArNzI2MSw2IEBACiAJCTFDODFCOTU2MEU5
NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUM4MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCOTU4MEU5NzMz
MDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5zcGVjdG9yQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTFDODFCQTAzMEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEphdmFTY3JpcHRDYWxsRnJhbWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQkEwNDBFOTczNDgzMDAyNjZFMDcg
LyogSmF2YVNjcmlwdENhbGxGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKYXZhU2NyaXB0Q2FsbEZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFD
ODFCQTA1MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBKYXZhU2NyaXB0Q2FsbEZyYW1lLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUM5MDRERjkwQkE5RDJDODAwODFFOUQwIC8qIFZlcnNpb24ueGNjb25m
aWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gVmVyc2lvbi54Y2NvbmZpZzsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MjMyLDcgKzE5MjMwLDYgQEAKIAkJCQkxNDMy
RTg0NjBDNTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmggKi8sCiAJCQkJQzU4NUE2NjAx
MUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRpZXMuY3BwICovLAogCQkJCUM1ODVB
NjYxMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0aWVzLmggKi8sCi0JCQkJMUM4
MUJBMDMwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwICovLAogCQkJ
CTFDODFCQTA0MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggKi8sCiAJ
CQkJQkNFNDM4QTExNDBDMERCRjAwNUU0MzdFIC8qIEpTRGljdGlvbmFyeS5jcHAgKi8sCiAJCQkJ
QkNFNDM4OUIxNDBCMUJBNzAwNUU0MzdFIC8qIEpTRGljdGlvbmFyeS5oICovLApAQCAtMjYwNDEs
NyArMjYwMzgsNiBAQAogCQkJCUIyNzUzNTdEMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0TWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NjIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNp
emVDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjc1MzU3RTBCMDUzODE0MDAyQ0U2NEYgLyog
SW50U2l6ZU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTFDODFCQTA5MEU5NzM0ODMwMDI2NkUw
NyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxOEY4ODA0
MEZGOTU3QUUwMDgwRjA0NSAvKiBKU0Fic3RyYWN0V29ya2VyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTA3M0JFMzRGMTdEMTgxODMwMDJCRDQzMSAvKiBSVENJY2VDYW5kaWRhdGVEZXNjcmlwdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RUM5MTJCMDNGNTAwMDNBNTgzQSAvKiBKU0Fu
YWx5c2VyTm9kZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAxNTYyNDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQotCi0jaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgot
Ci0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgi
Ci0jaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaD4KLSNpbmNsdWRlIDxydW50
aW1lL0NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KLSNpbmNs
dWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0xvY2su
aD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LSAgICAKLUphdmFTY3JpcHRDYWxsRnJhbWU6OkphdmFTY3JpcHRDYWxsRnJhbWUoY29uc3QgRGVi
dWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBQYXNzUmVmUHRyPEphdmFTY3JpcHRD
YWxsRnJhbWU+IGNhbGxlcikKLSAgICA6IG1fZGVidWdnZXJDYWxsRnJhbWUoZGVidWdnZXJDYWxs
RnJhbWUpCi0gICAgLCBtX2NhbGxlcihjYWxsZXIpCi0gICAgLCBtX2lzVmFsaWQodHJ1ZSkKLXsK
LX0KLQotSmF2YVNjcmlwdENhbGxGcmFtZSogSmF2YVNjcmlwdENhbGxGcmFtZTo6Y2FsbGVyKCkK
LXsKLSAgICByZXR1cm4gbV9jYWxsZXIuZ2V0KCk7Ci19Ci0KLUpTQzo6SlNTY29wZSogSmF2YVNj
cmlwdENhbGxGcmFtZTo6c2NvcGVDaGFpbigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faXNWYWxp
ZCk7Ci0gICAgaWYgKCFtX2lzVmFsaWQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBt
X2RlYnVnZ2VyQ2FsbEZyYW1lLnNjb3BlKCk7Ci19Ci0KLUpTQzo6SlNHbG9iYWxPYmplY3QqIEph
dmFTY3JpcHRDYWxsRnJhbWU6OmR5bmFtaWNHbG9iYWxPYmplY3QoKSBjb25zdAotewotICAgIEFT
U0VSVChtX2lzVmFsaWQpOwotICAgIGlmICghbV9pc1ZhbGlkKQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCk7Ci19
Ci0KLVN0cmluZyBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpmdW5jdGlvbk5hbWUoKSBjb25zdAotewot
ICAgIEFTU0VSVChtX2lzVmFsaWQpOwotICAgIGlmICghbV9pc1ZhbGlkKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0gICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSA9IG1fZGVidWdnZXJDYWxsRnJh
bWUuY2FsY3VsYXRlZEZ1bmN0aW9uTmFtZSgpOwotICAgIGlmIChmdW5jdGlvbk5hbWUuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTsK
LX0KLQotRGVidWdnZXJDYWxsRnJhbWU6OlR5cGUgSmF2YVNjcmlwdENhbGxGcmFtZTo6dHlwZSgp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faXNWYWxpZCk7Ci0gICAgaWYgKCFtX2lzVmFsaWQpCi0g
ICAgICAgIHJldHVybiBEZWJ1Z2dlckNhbGxGcmFtZTo6UHJvZ3JhbVR5cGU7Ci0gICAgcmV0dXJu
IG1fZGVidWdnZXJDYWxsRnJhbWUudHlwZSgpOwotfQotCi1KU09iamVjdCogSmF2YVNjcmlwdENh
bGxGcmFtZTo6dGhpc09iamVjdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faXNWYWxpZCk7Ci0g
ICAgaWYgKCFtX2lzVmFsaWQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2RlYnVn
Z2VyQ2FsbEZyYW1lLnRoaXNPYmplY3QoKTsKLX0KLQotRXhlY1N0YXRlKiBKYXZhU2NyaXB0Q2Fs
bEZyYW1lOjpleGVjKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9pc1ZhbGlkKTsKLSAgICBpZiAo
IW1faXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fZGVidWdnZXJDYWxs
RnJhbWUuY2FsbEZyYW1lKCk7Ci19Ci0KLS8vIEV2YWx1YXRlIHNvbWUgSmF2YVNjcmlwdCBjb2Rl
IGluIHRoZSBzY29wZSBvZiB0aGlzIGZyYW1lLgotSlNWYWx1ZSBKYXZhU2NyaXB0Q2FsbEZyYW1l
OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNWYWx1ZSYgZXhjZXB0aW9uKSBjb25z
dAotewotICAgIEFTU0VSVChtX2lzVmFsaWQpOwotICAgIGlmICghbV9pc1ZhbGlkKQotICAgICAg
ICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RlYnVnZ2VyQ2Fs
bEZyYW1lLmNhbGxGcmFtZSgpKTsKLSAgICByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS5ldmFs
dWF0ZShzY3JpcHQsIGV4Y2VwdGlvbik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuaAkocmV2aXNpb24gMTU2
MjQ1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKIAotI2luY2x1ZGUgPGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmg+Cisj
aW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXIuaD4KICNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxs
RnJhbWUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CkBAIC0zNyw2MCArMzcsMTkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBKYXZhU2NyaXB0Q2FsbEZyYW1lIDogcHVibGljIFJlZkNvdW50ZWQ8SmF2YVNjcmlwdENhbGxG
cmFtZT4geworY2xhc3MgSmF2YVNjcmlwdENhbGxGcmFtZSA6IHB1YmxpYyBKU0M6OkRlYnVnZ2Vy
OjpGcmFtZVZpc2l0b3IgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEphdmFTY3Jp
cHRDYWxsRnJhbWU+IGNyZWF0ZShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dl
ckNhbGxGcmFtZSwgUGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBjYWxsZXIpCisgICAg
c3RhdGljIEphdmFTY3JpcHRDYWxsRnJhbWUqIGNyZWF0ZShKU0M6OkRlYnVnZ2VyOjpGcmFtZVZp
c2l0b3IqIGZyYW1lKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKYXZhU2Ny
aXB0Q2FsbEZyYW1lKGRlYnVnZ2VyQ2FsbEZyYW1lLCBjYWxsZXIpKTsKKyAgICAgICAgQVNTRVJU
KHNpemVvZihKYXZhU2NyaXB0Q2FsbEZyYW1lKSA9PSBzaXplb2YoSlNDOjpEZWJ1Z2dlcjo6RnJh
bWVWaXNpdG9yKSk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRD
YWxsRnJhbWUqPihmcmFtZSk7CiAgICAgfQogCi0gICAgdm9pZCBpbnZhbGlkYXRlKCkKLSAgICB7
Ci0gICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBtX2RlYnVnZ2VyQ2FsbEZyYW1l
LmNsZWFyKCk7Ci0gICAgfQotCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9p
c1ZhbGlkOyB9Ci0KLSAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKiBjYWxsZXIoKTsKKyAgICBpbnRw
dHJfdCBzb3VyY2VJRCgpIGNvbnN0IHsgcmV0dXJuIHNvdXJjZUlkKCk7IH0KKyAgICBKYXZhU2Ny
aXB0Q2FsbEZyYW1lKiBjYWxsZXIoKSB7IHJldHVybiBjcmVhdGUoSlNDOjpEZWJ1Z2dlcjo6RnJh
bWVWaXNpdG9yOjpjYWxsZXIoKSk7IH0KIAotICAgIGludHB0cl90IHNvdXJjZUlEKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS5zb3VyY2VJZCgpOyB9Ci0gICAgY29uc3QgVGV4
dFBvc2l0aW9uIHBvc2l0aW9uKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIE9yZGluYWxOdW1iZXIg
bGluZSA9IFdURjo6T3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KG1fZGVidWdnZXJDYWxs
RnJhbWUubGluZSgpKTsKLSAgICAgICAgT3JkaW5hbE51bWJlciBjb2x1bW4gPSBXVEY6Ok9yZGlu
YWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChtX2RlYnVnZ2VyQ2FsbEZyYW1lLmNvbHVtbigpKTsK
LSAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbihsaW5lLCBjb2x1bW4pOwotICAgIH0KLSAgICBp
bnQgbGluZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gV1RGOjpPcmRpbmFsTnVtYmVy
Ojpmcm9tT25lQmFzZWRJbnQobV9kZWJ1Z2dlckNhbGxGcmFtZS5saW5lKCkpLnplcm9CYXNlZElu
dCgpOwotICAgIH0KLSAgICBpbnQgY29sdW1uKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBXVEY6Ok9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChtX2RlYnVnZ2VyQ2FsbEZyYW1l
LmNvbHVtbigpKS56ZXJvQmFzZWRJbnQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHVwZGF0ZShjb25z
dCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKLSAgICB7Ci0gICAg
ICAgIG1fZGVidWdnZXJDYWxsRnJhbWUgPSBkZWJ1Z2dlckNhbGxGcmFtZTsKLSAgICAgICAgbV9p
c1ZhbGlkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgZnVuY3Rpb25OYW1lKCkgY29uc3Q7
Ci0gICAgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6VHlwZSB0eXBlKCkgY29uc3Q7Ci0gICAgSlND
OjpKU1Njb3BlKiBzY29wZUNoYWluKCkgY29uc3Q7Ci0gICAgSlNDOjpKU0dsb2JhbE9iamVjdCog
ZHluYW1pY0dsb2JhbE9iamVjdCgpIGNvbnN0OwotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjKCkg
Y29uc3Q7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiB0aGlzT2JqZWN0KCkgY29uc3Q7Ci0gICAgSlND
OjpKU1ZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBKU0M6OkpTVmFsdWUmIGV4
Y2VwdGlvbikgY29uc3Q7Ci0gICAgCiBwcml2YXRlOgotICAgIEphdmFTY3JpcHRDYWxsRnJhbWUo
Y29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxG
cmFtZT4gY2FsbGVyKTsKLQotICAgIEpTQzo6RGVidWdnZXJDYWxsRnJhbWUgbV9kZWJ1Z2dlckNh
bGxGcmFtZTsKLSAgICBSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gbV9jYWxsZXI7Ci0gICAg
Ym9vbCBtX2lzVmFsaWQ7CisgICAgSmF2YVNjcmlwdENhbGxGcmFtZSgpOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTU2MjQ1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTMsMTggKzUz
LDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2Ny
aXB0RGVidWdTZXJ2ZXI6OlNjcmlwdERlYnVnU2VydmVyKCkKLSAgICA6IG1fY2FsbGluZ0xpc3Rl
bmVycyhmYWxzZSkKLSAgICAsIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShEb250UGF1c2VPbkV4
Y2VwdGlvbnMpCi0gICAgLCBtX3BhdXNlT25OZXh0U3RhdGVtZW50KGZhbHNlKQotICAgICwgbV9w
YXVzZWQoZmFsc2UpCitpbmxpbmUgc3RhdGljIEpTQzo6QnJlYWtwb2ludCBzY3JpcHRCcmVha3Bv
aW50VG9KU0NCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlkLCBjb25zdCBTY3JpcHRCcmVha3Bv
aW50JiBzYikKK3sKKyAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50KHNvdXJjZUlkLCBzYi5saW5l
TnVtYmVyLCBzYi5jb2x1bW5OdW1iZXIsIHNiLmNvbmRpdGlvbiwgc2IuYXV0b0NvbnRpbnVlKTsK
K30KKworU2NyaXB0RGVidWdTZXJ2ZXI6OlNjcmlwdERlYnVnU2VydmVyKGJvb2wgaXNXb3JrZXJU
aHJlYWQpCisgICAgOiBEZWJ1Z2dlcihpc1dvcmtlclRocmVhZCkKKyAgICAsIG1fY2FsbGluZ0xp
c3RlbmVycyhmYWxzZSkKICAgICAsIG1fcnVubmluZ05lc3RlZE1lc3NhZ2VMb29wKGZhbHNlKQog
ICAgICwgbV9kb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKHRydWUpCi0gICAgLCBtX2JyZWFr
cG9pbnRzQWN0aXZhdGVkKHRydWUpCi0gICAgLCBtX3BhdXNlT25DYWxsRnJhbWUoMCkKICAgICAs
IG1fcmVjb21waWxlVGltZXIodGhpcywgJlNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxK
U0Z1bmN0aW9ucykKLSAgICAsIG1fbGFzdEV4ZWN1dGVkTGluZSgtMSkKLSAgICAsIG1fbGFzdEV4
ZWN1dGVkU291cmNlSWQoLTEpCiB7CiB9CiAKQEAgLTcyLDEzMSArNzEsNTQgQEAgU2NyaXB0RGVi
dWdTZXJ2ZXI6On5TY3JpcHREZWJ1Z1NlcnZlcigpCiB7CiB9CiAKLVN0cmluZyBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTY3Jp
cHRCcmVha3BvaW50JiBzY3JpcHRCcmVha3BvaW50LCBpbnQqIGFjdHVhbExpbmVOdW1iZXIsIGlu
dCogYWN0dWFsQ29sdW1uTnVtYmVyKQorQnJlYWtwb2ludElkIFNjcmlwdERlYnVnU2VydmVyOjpz
ZXRCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlkLCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBz
Y3JpcHRCcmVha3BvaW50LCBpbnQqIGFjdHVhbExpbmVOdW1iZXIsIGludCogYWN0dWFsQ29sdW1u
TnVtYmVyKQogewotICAgIGludHB0cl90IHNvdXJjZUlEVmFsdWUgPSBzb3VyY2VJRC50b0ludFB0
cigpOwotICAgIGlmICghc291cmNlSURWYWx1ZSkKLSAgICAgICAgcmV0dXJuICIiOwotICAgIFNv
dXJjZUlkVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3Bv
aW50cy5maW5kKHNvdXJjZUlEVmFsdWUpOwotICAgIGlmIChpdCA9PSBtX3NvdXJjZUlkVG9CcmVh
a3BvaW50cy5lbmQoKSkKLSAgICAgICAgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5zZXQo
c291cmNlSURWYWx1ZSwgTGluZVRvQnJlYWtwb2ludE1hcCgpKS5pdGVyYXRvcjsKLSAgICBMaW5l
VG9CcmVha3BvaW50TWFwOjppdGVyYXRvciBicmVha3NJdCA9IGl0LT52YWx1ZS5maW5kKHNjcmlw
dEJyZWFrcG9pbnQubGluZU51bWJlciArIDEpOwotICAgIGlmIChicmVha3NJdCA9PSBpdC0+dmFs
dWUuZW5kKCkpCi0gICAgICAgIGJyZWFrc0l0ID0gaXQtPnZhbHVlLnNldChzY3JpcHRCcmVha3Bv
aW50LmxpbmVOdW1iZXIgKyAxLCBCcmVha3BvaW50c0luTGluZSgpKS5pdGVyYXRvcjsKLQotICAg
IEJyZWFrcG9pbnRzSW5MaW5lJiBicmVha3NWZWN0b3IgPSBicmVha3NJdC0+dmFsdWU7Ci0gICAg
dW5zaWduZWQgYnJlYWtzQ291bnQgPSBicmVha3NWZWN0b3Iuc2l6ZSgpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBicmVha3NDb3VudDsgaSsrKSB7Ci0gICAgICAgIGlmIChicmVha3NW
ZWN0b3IuYXQoaSkuY29sdW1uTnVtYmVyID09IHNjcmlwdEJyZWFrcG9pbnQuY29sdW1uTnVtYmVy
KQotICAgICAgICAgICAgcmV0dXJuICIiOworICAgIEpTQzo6QnJlYWtwb2ludCBicmVha3BvaW50
ID0gc2NyaXB0QnJlYWtwb2ludFRvSlNDQnJlYWtwb2ludChzb3VyY2VJZCwgc2NyaXB0QnJlYWtw
b2ludCk7CisgICAgQnJlYWtwb2ludElkIGlkID0gRGVidWdnZXI6OnNldEJyZWFrcG9pbnQoc291
cmNlSWQsIGJyZWFrcG9pbnQsIGFjdHVhbExpbmVOdW1iZXIsIGFjdHVhbENvbHVtbk51bWJlcik7
CisgICAgaWYgKGlkICE9IG51bGxCcmVha3BvaW50SWQpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAg
ICAgIEJyZWFrcG9pbnRJZFRvQWN0aW9uc01hcDo6aXRlcmF0b3IgaXQgPSBtX2JyZWFrcG9pbnRJ
ZFRvQWN0aW9ucy5maW5kKGlkKTsKKyAgICAgICAgQVNTRVJUKGl0ID09IG1fYnJlYWtwb2ludElk
VG9BY3Rpb25zLmVuZCgpKTsKKyNlbmRpZgorICAgICAgICBjb25zdCBWZWN0b3I8U2NyaXB0QnJl
YWtwb2ludEFjdGlvbj4gJmFjdGlvbnMgPSBzY3JpcHRCcmVha3BvaW50LmFjdGlvbnM7CisgICAg
ICAgIG1fYnJlYWtwb2ludElkVG9BY3Rpb25zLnNldChpZCwgYWN0aW9ucyk7CiAgICAgfQotICAg
IGJyZWFrc1ZlY3Rvci5hcHBlbmQoc2NyaXB0QnJlYWtwb2ludCk7Ci0KLSAgICAqYWN0dWFsTGlu
ZU51bWJlciA9IHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlcjsKLSAgICAqYWN0dWFsQ29sdW1u
TnVtYmVyID0gc2NyaXB0QnJlYWtwb2ludC5jb2x1bW5OdW1iZXI7Ci0gICAgcmV0dXJuIHNvdXJj
ZUlEICsgIjoiICsgU3RyaW5nOjpudW1iZXIoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyKSAr
ICI6IiArIFN0cmluZzo6bnVtYmVyKHNjcmlwdEJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKTsKKyAg
ICByZXR1cm4gaWQ7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9p
bnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpy
ZW1vdmVCcmVha3BvaW50KEJyZWFrcG9pbnRJZCBpZCkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiB0
b2tlbnM7Ci0gICAgYnJlYWtwb2ludElkLnNwbGl0KCI6IiwgdG9rZW5zKTsKLSAgICBpZiAodG9r
ZW5zLnNpemUoKSAhPSAzKQotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBzdWNjZXNzOwotICAg
IGludHB0cl90IHNvdXJjZUlEVmFsdWUgPSB0b2tlbnNbMF0udG9JbnRQdHIoJnN1Y2Nlc3MpOwot
ICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGxpbmVOdW1i
ZXIgPSB0b2tlbnNbMV0udG9VSW50KCZzdWNjZXNzKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAg
ICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBjb2x1bW5OdW1iZXIgPSB0b2tlbnNbMl0udG9VSW50
KCZzdWNjZXNzKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNv
dXJjZUlkVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3Bv
aW50cy5maW5kKHNvdXJjZUlEVmFsdWUpOwotICAgIGlmIChpdCA9PSBtX3NvdXJjZUlkVG9CcmVh
a3BvaW50cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIExpbmVUb0JyZWFrcG9pbnRNYXA6
Oml0ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnZhbHVlLmZpbmQobGluZU51bWJlciArIDEpOwotICAg
IGlmIChicmVha3NJdCA9PSBpdC0+dmFsdWUuZW5kKCkpCisgICAgaWYgKGlkID09IG51bGxCcmVh
a3BvaW50SWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEJyZWFrcG9pbnRzSW5MaW5lJiBicmVh
a3NWZWN0b3IgPSBicmVha3NJdC0+dmFsdWU7Ci0gICAgdW5zaWduZWQgYnJlYWtzQ291bnQgPSBi
cmVha3NWZWN0b3Iuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBicmVha3ND
b3VudDsgaSsrKSB7Ci0gICAgICAgIGlmIChicmVha3NWZWN0b3IuYXQoaSkuY29sdW1uTnVtYmVy
ID09IHN0YXRpY19jYXN0PGludD4oY29sdW1uTnVtYmVyKSkgewotICAgICAgICAgICAgYnJlYWtz
VmVjdG9yLnJlbW92ZShpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQor
ICAgIEJyZWFrcG9pbnRJZFRvQWN0aW9uc01hcDo6aXRlcmF0b3IgaXQgPSBtX2JyZWFrcG9pbnRJ
ZFRvQWN0aW9ucy5maW5kKGlkKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9icmVha3BvaW50SWRUb0Fj
dGlvbnMuZW5kKCkpOworICAgIG1fYnJlYWtwb2ludElkVG9BY3Rpb25zLnJlbW92ZShpdCk7Cisg
ICAgRGVidWdnZXI6OnJlbW92ZUJyZWFrcG9pbnQoaWQpOwogfQogCi1ib29sIFNjcmlwdERlYnVn
U2VydmVyOjpoYXNCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRp
b24mIHBvc2l0aW9uLCBTY3JpcHRCcmVha3BvaW50ICpoaXRCcmVha3BvaW50KSBjb25zdAordm9p
ZCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50cygpCiB7Ci0gICAgaWYgKCFtX2Jy
ZWFrcG9pbnRzQWN0aXZhdGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTb3VyY2VJ
ZFRvQnJlYWtwb2ludHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtw
b2ludHMuZmluZChzb3VyY2VJRCk7Ci0gICAgaWYgKGl0ID09IG1fc291cmNlSWRUb0JyZWFrcG9p
bnRzLmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgbGluZU51bWJlciA9
IHBvc2l0aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKTsKLSAgICBpbnQgY29sdW1uTnVtYmVyID0g
cG9zaXRpb24ubV9jb2x1bW4uemVyb0Jhc2VkSW50KCk7Ci0gICAgaWYgKGxpbmVOdW1iZXIgPCAw
IHx8IGNvbHVtbk51bWJlciA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIExpbmVU
b0JyZWFrcG9pbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnZhbHVlLmZpbmQo
bGluZU51bWJlciArIDEpOwotICAgIGlmIChicmVha3NJdCA9PSBpdC0+dmFsdWUuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaGl0ID0gZmFsc2U7Ci0gICAgY29uc3Qg
QnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT52YWx1ZTsKLSAgICB1
bnNpZ25lZCBicmVha3NDb3VudCA9IGJyZWFrc1ZlY3Rvci5zaXplKCk7Ci0gICAgdW5zaWduZWQg
aTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgYnJlYWtzQ291bnQ7IGkrKykgewotICAgICAgICBpbnQg
YnJlYWtMaW5lID0gYnJlYWtzVmVjdG9yLmF0KGkpLmxpbmVOdW1iZXI7Ci0gICAgICAgIGludCBi
cmVha0NvbHVtbiA9IGJyZWFrc1ZlY3Rvci5hdChpKS5jb2x1bW5OdW1iZXI7Ci0gICAgICAgIC8v
IFNpbmNlIGZyb250ZW5kIHRydW5jYXRlcyB0aGUgaW5kZW50LCB0aGUgZmlyc3Qgc3RhdGVtZW50
IGluIGEgbGluZSBtdXN0IG1hdGNoIHRoZSBicmVha3BvaW50IChsaW5lLDApLgotICAgICAgICBp
ZiAoKGxpbmVOdW1iZXIgIT0gbV9sYXN0RXhlY3V0ZWRMaW5lICYmIGxpbmVOdW1iZXIgPT0gYnJl
YWtMaW5lICYmICFicmVha0NvbHVtbikKLSAgICAgICAgICAgIHx8IChsaW5lTnVtYmVyID09IGJy
ZWFrTGluZSAmJiBjb2x1bW5OdW1iZXIgPT0gYnJlYWtDb2x1bW4pKSB7Ci0gICAgICAgICAgICBo
aXQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYg
KCFoaXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChoaXRCcmVha3BvaW50KQot
ICAgICAgICAqaGl0QnJlYWtwb2ludCA9IGJyZWFrc1ZlY3Rvci5hdChpKTsKLQotICAgIC8vIEFu
IGVtcHR5IGNvbmRpdGlvbiBjb3VudHMgYXMgbm8gY29uZGl0aW9uIHdoaWNoIGlzIGVxdWl2YWxl
bnQgdG8gInRydWUiLgotICAgIGlmIChicmVha3NWZWN0b3IuYXQoaSkuY29uZGl0aW9uLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IG1fY3VycmVudENhbGxGcmFtZS0+ZXZhbHVhdGUoYnJlYWtzVmVj
dG9yLmF0KGkpLmNvbmRpdGlvbiwgZXhjZXB0aW9uKTsKLSAgICBpZiAoZXhjZXB0aW9uKSB7Ci0g
ICAgICAgIC8vIEFuIGVycm9uZW91cyBjb25kaXRpb24gY291bnRzIGFzICJmYWxzZSIuCi0gICAg
ICAgIHJlcG9ydEV4Y2VwdGlvbihtX2N1cnJlbnRDYWxsRnJhbWUtPmV4ZWMoKSwgZXhjZXB0aW9u
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LnRvQm9v
bGVhbihtX2N1cnJlbnRDYWxsRnJhbWUtPmV4ZWMoKSk7CisgICAgRGVidWdnZXI6OmNsZWFyQnJl
YWtwb2ludHMoKTsKKyAgICBtX2JyZWFrcG9pbnRJZFRvQWN0aW9ucy5jbGVhcigpOwogfQogCiBi
b29sIFNjcmlwdERlYnVnU2VydmVyOjpldmFsdWF0ZUJyZWFrcG9pbnRBY3Rpb24oY29uc3QgU2Ny
aXB0QnJlYWtwb2ludEFjdGlvbiYgYnJlYWtwb2ludEFjdGlvbikgY29uc3QKIHsKICAgICBzd2l0
Y2ggKGJyZWFrcG9pbnRBY3Rpb24udHlwZSkgewogICAgIGNhc2UgU2NyaXB0QnJlYWtwb2ludEFj
dGlvblR5cGVMb2c6IHsKLSAgICAgICAgRE9NV2luZG93KiB3aW5kb3cgPSBhc0pTRE9NV2luZG93
KG1fY3VycmVudENhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+aW1wbCgpOworICAg
ICAgICBKU0M6OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3IqIGZyYW1lID0gY3VycmVudEZyYW1lKCk7
CisgICAgICAgIERPTVdpbmRvdyogd2luZG93ID0gYXNKU0RPTVdpbmRvdyhmcmFtZS0+ZHluYW1p
Y0dsb2JhbE9iamVjdCgpKS0+aW1wbCgpOwogICAgICAgICBpZiAoUGFnZUNvbnNvbGUqIGNvbnNv
bGUgPSB3aW5kb3ctPnBhZ2VDb25zb2xlKCkpCiAgICAgICAgICAgICBjb25zb2xlLT5hZGRNZXNz
YWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZUxldmVsLCBicmVha3BvaW50QWN0aW9uLmRh
dGEpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBTY3JpcHRCcmVha3BvaW50QWN0
aW9uVHlwZUV2YWx1YXRlOiB7CiAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgICAgICBt
X2N1cnJlbnRDYWxsRnJhbWUtPmV2YWx1YXRlKGJyZWFrcG9pbnRBY3Rpb24uZGF0YSwgZXhjZXB0
aW9uKTsKKyAgICAgICAgSlNDOjpEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yKiBmcmFtZSA9IGN1cnJl
bnRGcmFtZSgpOworICAgICAgICBmcmFtZS0+ZXZhbHVhdGUoYnJlYWtwb2ludEFjdGlvbi5kYXRh
LCBleGNlcHRpb24pOwogICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgcmVwb3J0
RXhjZXB0aW9uKG1fY3VycmVudENhbGxGcmFtZS0+ZXhlYygpLCBleGNlcHRpb24pOworICAgICAg
ICAgICAgcmVwb3J0RXhjZXB0aW9uKGZyYW1lLT5leGVjKCksIGV4Y2VwdGlvbik7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlU291bmQ6
CkBAIC0yMDcsNzkgKzEyOSwxNSBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpldmFsdWF0ZUJy
ZWFrcG9pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OmV2
YWx1YXRlQnJlYWtwb2ludEFjdGlvbnMoY29uc3QgU2NyaXB0QnJlYWtwb2ludCYgYnJlYWtwb2lu
dCkgY29uc3QKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmV2YWx1YXRlQnJlYWtwb2ludEFjdGlv
bnMoY29uc3QgSlNDOjpCcmVha3BvaW50JiBicmVha3BvaW50KQogewotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYnJlYWtwb2ludC5hY3Rpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
ICghZXZhbHVhdGVCcmVha3BvaW50QWN0aW9uKGJyZWFrcG9pbnQuYWN0aW9uc1tpXSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQnJlYWtwb2ludElkVG9BY3Rpb25zTWFwOjppdGVy
YXRvciBpdCA9IG1fYnJlYWtwb2ludElkVG9BY3Rpb25zLmZpbmQoYnJlYWtwb2ludC5pZCk7Cisg
ICAgQVNTRVJUKGl0ICE9IG1fYnJlYWtwb2ludElkVG9BY3Rpb25zLmVuZCgpKTsKKyAgICBCcmVh
a3BvaW50QWN0aW9ucyYgYWN0aW9ucyA9IGl0LT52YWx1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGFjdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFldmFsdWF0ZUJyZWFr
cG9pbnRBY3Rpb24oYWN0aW9uc1tpXSkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNsZWFyQnJlYWtw
b2ludHMoKQotewotICAgIG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmNsZWFyKCk7Ci19Ci0KLXZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZh
dGVkKQotewotICAgIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQgPSBhY3RpdmF0ZWQ7Ci19Ci0KLXZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4
Y2VwdGlvbnNTdGF0ZSBwYXVzZSkKLXsKLSAgICBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPSBw
YXVzZTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbk5leHRTdGF0ZW1l
bnQoYm9vbCBwYXVzZSkKLXsKLSAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gcGF1c2U7Ci19
Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmJyZWFrUHJvZ3JhbSgpCi17Ci0gICAgaWYgKG1f
cGF1c2VkIHx8ICFtX2N1cnJlbnRDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
cGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOwotICAgIHBhdXNlSWZOZWVkZWQobV9jdXJyZW50
Q2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwotfQotCi12b2lkIFNjcmlwdERlYnVn
U2VydmVyOjpjb250aW51ZVByb2dyYW0oKQotewotICAgIGlmICghbV9wYXVzZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSBmYWxzZTsKLSAgICBtX2Rv
bmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0cnVlOwotfQotCi12b2lkIFNjcmlwdERlYnVn
U2VydmVyOjpzdGVwSW50b1N0YXRlbWVudCgpCi17Ci0gICAgaWYgKCFtX3BhdXNlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7Ci0gICAgbV9k
b25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzID0gdHJ1ZTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6c3RlcE92ZXJTdGF0ZW1lbnQoKQotewotICAgIGlmICghbV9wYXVzZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFt
ZS5nZXQoKTsKLSAgICBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0cnVlOwotfQot
Ci12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzdGVwT3V0T2ZGdW5jdGlvbigpCi17Ci0gICAgaWYg
KCFtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0g
bV9jdXJyZW50Q2FsbEZyYW1lID8gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXIoKSA6IDA7Ci0g
ICAgbV9kb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzID0gdHJ1ZTsKIH0KIAogYm9vbCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6Y2FuU2V0U2NyaXB0U291cmNlKCkKQEAgLTI4Nyw3ICsxNDUsNyBAQCBi
b29sIFNjcmlwdERlYnVnU2VydmVyOjpjYW5TZXRTY3JpcHRTb3VyCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIFNjcmlwdERlYnVnU2VydmVyOjpzZXRTY3JpcHRTb3VyY2UoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgU3RyaW5nKiwgU2NyaXB0VmFsdWUqLCBTY3JpcHRP
YmplY3QqKQorYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0U2NyaXB0U291cmNlKGludHB0cl90
LCBjb25zdCBTdHJpbmcmLCBib29sLCBTdHJpbmcqLCBTY3JpcHRWYWx1ZSosIFNjcmlwdE9iamVj
dCopCiB7CiAgICAgLy8gRklYTUUoNDAzMDApOiBpbXBsZW1lbnQgdGhpcy4KICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0zMDIsMTUgKzE2MCwxNSBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjp1cGRh
dGVDYWxsU3RhY2soCiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2Uo
U2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIpCiB7Ci0gICAgQVNTRVJUKG1fcGF1c2VkKTsK
LSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5z
Y29wZUNoYWluKCktPmdsb2JhbE9iamVjdCgpOworICAgIEpTQzo6RGVidWdnZXI6OkZyYW1lVmlz
aXRvciogZnJhbWUgPSBjdXJyZW50RnJhbWUoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gZnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgSlNDOjpF
eGVjU3RhdGUqIHN0YXRlID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgSlNWYWx1
ZSBqc0NhbGxGcmFtZTsKICAgICB7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUtPmlz
VmFsaWQoKSAmJiBnbG9iYWxPYmplY3QtPmluaGVyaXRzKEpTRE9NR2xvYmFsT2JqZWN0OjppbmZv
KCkpKSB7CisgICAgICAgIGlmIChmcmFtZS0+aXNWYWxpZCgpICYmIGdsb2JhbE9iamVjdC0+aW5o
ZXJpdHMoSlNET01HbG9iYWxPYmplY3Q6OmluZm8oKSkpIHsKICAgICAgICAgICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBkb21HbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihn
bG9iYWxPYmplY3QpOwogICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soc3RhdGUpOwotICAg
ICAgICAgICAganNDYWxsRnJhbWUgPSB0b0pTKHN0YXRlLCBkb21HbG9iYWxPYmplY3QsIG1fY3Vy
cmVudENhbGxGcmFtZS5nZXQoKSk7CisgICAgICAgICAgICBqc0NhbGxGcmFtZSA9IHRvSlMoc3Rh
dGUsIGRvbUdsb2JhbE9iamVjdCwgSmF2YVNjcmlwdENhbGxGcmFtZTo6Y3JlYXRlKGZyYW1lKSk7
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAganNDYWxsRnJhbWUgPSBqc1VuZGVmaW5lZCgp
OwogICAgIH0KQEAgLTMyNCw3ICsxODIsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNw
YXRjaERpZENvbnRpCiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGFyc2VT
b3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgU291cmNlUHJvdmlkZXIqIHNvdXJj
ZVByb3ZpZGVyLCBib29sIGlzQ29udGVudFNjcmlwdCkKIHsKLSAgICBTdHJpbmcgc291cmNlSUQg
PSBTdHJpbmc6Om51bWJlcihzb3VyY2VQcm92aWRlci0+YXNJRCgpKTsKKyAgICBpbnRwdHJfdCBz
b3VyY2VJZCA9IHNvdXJjZVByb3ZpZGVyLT5hc0lEKCk7CiAKICAgICBTY3JpcHREZWJ1Z0xpc3Rl
bmVyOjpTY3JpcHQgc2NyaXB0OwogICAgIHNjcmlwdC51cmwgPSBzb3VyY2VQcm92aWRlci0+dXJs
KCk7CkBAIC0zNTIsNyArMjEwLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hE
aWRQYXJzZQogICAgIFZlY3RvcjxTY3JpcHREZWJ1Z0xpc3RlbmVyKj4gY29weTsKICAgICBjb3B5
VG9WZWN0b3IobGlzdGVuZXJzLCBjb3B5KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
cHkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNvcHlbaV0tPmRpZFBhcnNlU291cmNlKHNvdXJjZUlE
LCBzY3JpcHQpOworICAgICAgICBjb3B5W2ldLT5kaWRQYXJzZVNvdXJjZShzb3VyY2VJZCwgc2Ny
aXB0KTsKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hGYWlsZWRUb1BhcnNl
U291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIFNvdXJjZVByb3ZpZGVyKiBzb3Vy
Y2VQcm92aWRlciwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCkBA
IC0zNzIsMjAgKzIzMCw3IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OmlzQ29udGVudFNjcmlw
dCgKICAgICByZXR1cm4gY3VycmVudFdvcmxkKGV4ZWMpICE9IG1haW5UaHJlYWROb3JtYWxXb3Js
ZCgpOwogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkZXRhY2goSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKLXsKLSAgICAvLyBJZiB3ZSdyZSBkZXRhY2hpbmcgZnJvbSB0aGUgY3Vy
cmVudGx5IGV4ZWN1dGluZyBnbG9iYWwgb2JqZWN0LCBtYW51YWxseSB0ZWFyIGRvd24gb3VyCi0g
ICAgLy8gc3RhY2ssIHNpbmNlIHdlIHdvbid0IGdldCBmdXJ0aGVyIGRlYnVnZ2VyIGNhbGxiYWNr
cyB0byBkbyBzby4gQWxzbywgcmVzdW1lIGV4ZWN1dGlvbiwKLSAgICAvLyBzaW5jZSB0aGVyZSdz
IG5vIHBvaW50IGluIHN0YXlpbmcgcGF1c2VkIG9uY2UgYSB3aW5kb3cgY2xvc2VzLgotICAgIGlm
IChtX2N1cnJlbnRDYWxsRnJhbWUgJiYgbV9jdXJyZW50Q2FsbEZyYW1lLT5keW5hbWljR2xvYmFs
T2JqZWN0KCkgPT0gZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIG1fY3VycmVudENhbGxGcmFtZSA9
IDA7Ci0gICAgICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IDA7Ci0gICAgICAgIGNvbnRpbnVlUHJv
Z3JhbSgpOwotICAgIH0KLSAgICBEZWJ1Z2dlcjo6ZGV0YWNoKGdsb2JhbE9iamVjdCk7Ci19Ci0K
LXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNvdXJjZVBhcnNlZChFeGVjU3RhdGUqIGV4ZWMsIFNv
dXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVTb3VyY2VQYXJz
ZWQoRXhlY1N0YXRlKiBleGVjLCBTb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIsIGludCBl
cnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewogICAgIGlmIChtX2NhbGxp
bmdMaXN0ZW5lcnMpCiAgICAgICAgIHJldHVybjsKQEAgLTQwNiw2ICsyNTEsMTEgQEAgdm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6c291cmNlUGFyc2VkKEV4ZQogICAgIG1fY2FsbGluZ0xpc3RlbmVy
cyA9IGZhbHNlOwogfQogCitib29sIFNjcmlwdERlYnVnU2VydmVyOjpuZWVkUGF1c2VIYW5kbGlu
ZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiAhIWdldExpc3Rl
bmVyc0Zvckdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpOworfQorCiB2b2lkIFNjcmlwdERlYnVn
U2VydmVyOjpkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoY29uc3QgTGlzdGVuZXJTZXQmIGxp
c3RlbmVycywgSmF2YVNjcmlwdEV4ZWN1dGlvbkNhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIFZl
Y3RvcjxTY3JpcHREZWJ1Z0xpc3RlbmVyKj4gY29weTsKQEAgLTQyOSw1MyArMjc5LDggQEAgdm9p
ZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hGdW5jdGlvbgogICAgIG1fY2FsbGluZ0xpc3Rl
bmVycyA9IGZhbHNlOwogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjcmVhdGVDYWxsRnJh
bWUoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lKQotewotICAgIGlu
dHB0cl90IHNvdXJjZUlkID0gZGVidWdnZXJDYWxsRnJhbWUuc291cmNlSWQoKTsKLSAgICBtX2N1
cnJlbnRDYWxsRnJhbWUgPSBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjcmVhdGUoZGVidWdnZXJDYWxs
RnJhbWUsIG1fY3VycmVudENhbGxGcmFtZSk7Ci0gICAgaWYgKG1fbGFzdEV4ZWN1dGVkU291cmNl
SWQgIT0gc291cmNlSWQpIHsKLSAgICAgICAgbV9sYXN0RXhlY3V0ZWRMaW5lID0gLTE7Ci0gICAg
ICAgIG1fbGFzdEV4ZWN1dGVkU291cmNlSWQgPSBzb3VyY2VJZDsKLSAgICB9Ci19Ci0KLXZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY29uc3Qg
RGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lKQordm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6aGFuZGxlUGF1c2UoSlNHbG9iYWxPYmplY3QqIGR5bmFtaWNHbG9iYWxPYmplY3QpCiB7
Ci0gICAgLy8gQVNTRVJUKG1fY3VycmVudENhbGxGcmFtZSk7Ci0gICAgaWYgKCFtX2N1cnJlbnRD
YWxsRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY3VycmVudENhbGxGcmFtZS0+dXBk
YXRlKGRlYnVnZ2VyQ2FsbEZyYW1lKTsKLSAgICBwYXVzZUlmTmVlZGVkKGRlYnVnZ2VyQ2FsbEZy
YW1lLmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6
OnBhdXNlSWZOZWVkZWQoSlNHbG9iYWxPYmplY3QqIGR5bmFtaWNHbG9iYWxPYmplY3QpCi17Ci0g
ICAgaWYgKG1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0gCi0gICAgaWYgKCFnZXRMaXN0ZW5l
cnNGb3JHbG9iYWxPYmplY3QoZHluYW1pY0dsb2JhbE9iamVjdCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludDsKLSAgICBib29sIGRpZEhpdEJyZWFr
cG9pbnQgPSBmYWxzZTsKLSAgICBib29sIHBhdXNlTm93ID0gbV9wYXVzZU9uTmV4dFN0YXRlbWVu
dDsKLSAgICBwYXVzZU5vdyB8PSAobV9wYXVzZU9uQ2FsbEZyYW1lID09IG1fY3VycmVudENhbGxG
cmFtZSk7Ci0gICAgcGF1c2VOb3cgfD0gZGlkSGl0QnJlYWtwb2ludCA9IGhhc0JyZWFrcG9pbnQo
bV9jdXJyZW50Q2FsbEZyYW1lLT5zb3VyY2VJRCgpLCBtX2N1cnJlbnRDYWxsRnJhbWUtPnBvc2l0
aW9uKCksICZicmVha3BvaW50KTsKLSAgICBtX2xhc3RFeGVjdXRlZExpbmUgPSBtX2N1cnJlbnRD
YWxsRnJhbWUtPnBvc2l0aW9uKCkubV9saW5lLnplcm9CYXNlZEludCgpOwotICAgIGlmICghcGF1
c2VOb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkaWRIaXRCcmVha3BvaW50KSB7Ci0g
ICAgICAgIGV2YWx1YXRlQnJlYWtwb2ludEFjdGlvbnMoYnJlYWtwb2ludCk7Ci0gICAgICAgIGlm
IChicmVha3BvaW50LmF1dG9Db250aW51ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSAwOwotICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQg
PSBmYWxzZTsKLSAgICBtX3BhdXNlZCA9IHRydWU7Ci0KICAgICBkaXNwYXRjaEZ1bmN0aW9uVG9M
aXN0ZW5lcnMoJlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhdXNlLCBkeW5hbWljR2xv
YmFsT2JqZWN0KTsKICAgICBkaWRQYXVzZShkeW5hbWljR2xvYmFsT2JqZWN0KTsKIApAQCAtNDg4
LDg1ICsyOTMsMTYgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2VJZk5lZWRlZChKUwog
CiAgICAgZGlkQ29udGludWUoZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgZGlzcGF0Y2hGdW5j
dGlvblRvTGlzdGVuZXJzKCZTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRDb250aW51ZSwg
ZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0KLSAgICBtX3BhdXNlZCA9IGZhbHNlOwotfQotCi12b2lk
IFNjcmlwdERlYnVnU2VydmVyOjpjYWxsRXZlbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRl
YnVnZ2VyQ2FsbEZyYW1lKQotewotICAgIGlmICghbV9wYXVzZWQpIHsKLSAgICAgICAgY3JlYXRl
Q2FsbEZyYW1lKGRlYnVnZ2VyQ2FsbEZyYW1lKTsKLSAgICAgICAgcGF1c2VJZk5lZWRlZChkZWJ1
Z2dlckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwotICAgIH0KLX0KLQotdm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6YXRTdGF0ZW1lbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRl
YnVnZ2VyQ2FsbEZyYW1lKQotewotICAgIGlmICghbV9wYXVzZWQpCi0gICAgICAgIHVwZGF0ZUNh
bGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUpOwotfQotCi12b2lkIFNj
cmlwdERlYnVnU2VydmVyOjpyZXR1cm5FdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVi
dWdnZXJDYWxsRnJhbWUpCi17Ci0gICAgaWYgKG1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lKTsK
LQotICAgIC8vIGRldGFjaCBtYXkgaGF2ZSBiZWVuIGNhbGxlZCBkdXJpbmcgcGF1c2VJZk5lZWRl
ZAotICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBUcmVhdCBzdGVwcGluZyBvdmVyIGEgcmV0dXJuIHN0YXRlbWVudCBsaWtlIHN0ZXBwaW5nIG91
dC4KLSAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VPbkNhbGxGcmFtZSkKLSAg
ICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXIoKTsK
LSAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlcigpOwog
fQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpleGNlcHRpb24oY29uc3QgRGVidWdnZXJDYWxs
RnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBib29sIGhhc0hhbmRsZXIpCit2b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpoYW5kbGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24oSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKG1f
cGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXVzZU9uRXhjZXB0aW9uc1N0
YXRlID09IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8IChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUg
PT0gUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAmJiAhaGFzSGFuZGxlcikpCi0gICAgICAgIG1f
cGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOwotCi0gICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1
c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFtZSk7CisgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMs
IGV4Y2VwdGlvbik7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OndpbGxFeGVjdXRlUHJv
Z3JhbShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCit2b2lkIFNj
cmlwdERlYnVnU2VydmVyOjpub3RpZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCkKIHsK
LSAgICBpZiAoIW1fcGF1c2VkKSB7Ci0gICAgICAgIGNyZWF0ZUNhbGxGcmFtZShkZWJ1Z2dlckNh
bGxGcmFtZSk7Ci0gICAgICAgIHBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1p
Y0dsb2JhbE9iamVjdCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRp
ZEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFt
ZSkKLXsKLSAgICBpZiAobV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZUNh
bGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUpOwotCi0gICAgLy8gVHJl
YXQgc3RlcHBpbmcgb3ZlciB0aGUgZW5kIG9mIGEgcHJvZ3JhbSBsaWtlIHN0ZXBwaW5nIG91dC4K
LSAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICht
X2N1cnJlbnRDYWxsRnJhbWUgPT0gbV9wYXVzZU9uQ2FsbEZyYW1lKSB7Ci0gICAgICAgIG1fcGF1
c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyKCk7Ci0gICAgICAgIGlm
ICghbV9jdXJyZW50Q2FsbEZyYW1lKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBt
X2N1cnJlbnRDYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlcigpOwotfQotCi12
b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgRGVidWdnZXJD
YWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lKQotewotICAgIGlmIChtX3BhdXNlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7Ci0gICAgdXBk
YXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFtZSk7CisgICAgbV9k
b25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzID0gdHJ1ZTsKIH0KIAogdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCkKQEAgLTU3NCw3ICszMTAsNyBA
QCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1CiAgICAgbV9yZWNvbXBp
bGVUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNv
bXBpbGVTY3JpcHQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBTdHJpbmcqLCBTdHJpbmcqKQordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y29tcGlsZVNjcmlw
dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGludHB0cl90
KiwgU3RyaW5nKikKIHsKICAgICAvLyBGSVhNRSg4OTY1Mik6IGltcGxlbWVudCB0aGlzLgogfQpA
QCAtNTg0LDcgKzMyMCw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNsZWFyQ29tcGlsZWRT
Y3IKICAgICAvLyBGSVhNRSg4OTY1Mik6IGltcGxlbWVudCB0aGlzLgogfQogCi12b2lkIFNjcmlw
dERlYnVnU2VydmVyOjpydW5TY3JpcHQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmLCBT
Y3JpcHRWYWx1ZSosIGJvb2wqLCBTdHJpbmcqKQordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cnVu
U2NyaXB0KEpTQzo6RXhlY1N0YXRlKiwgaW50cHRyX3QsIFNjcmlwdFZhbHVlKiwgYm9vbCosIFN0
cmluZyopCiB7CiAgICAgLy8gRklYTUUoODk2NTIpOiBpbXBsZW1lbnQgdGhpcy4KIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaAkocmV2
aXNpb24gMTU2MjQ1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdT
ZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDEwLTIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKQEAgLTU1LDMzICs1NSwxOCBAQCBjbGFzcyBTY3JpcHREZWJ1Z0xpc3RlbmVyOwog
Y2xhc3MgU2NyaXB0T2JqZWN0OwogY2xhc3MgU2NyaXB0VmFsdWU7CiAKLWNsYXNzIFNjcmlwdERl
YnVnU2VydmVyIDogcHJvdGVjdGVkIEpTQzo6RGVidWdnZXIgewordHlwZWRlZiBKU0M6OkJyZWFr
cG9pbnRJZCBCcmVha3BvaW50SWQ7Citjb25zdCBCcmVha3BvaW50SWQgbnVsbEJyZWFrcG9pbnRJ
ZCA9IEpTQzo6bnVsbEJyZWFrcG9pbnRJZDsKKworY2xhc3MgU2NyaXB0RGVidWdTZXJ2ZXIgOiBw
dWJsaWMgSlNDOjpEZWJ1Z2dlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2NyaXB0RGVi
dWdTZXJ2ZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBTdHJpbmcg
c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVha3Bv
aW50JiwgaW50KiBhY3R1YWxMaW5lTnVtYmVyLCBpbnQqIGFjdHVhbENvbHVtbk51bWJlcik7Ci0g
ICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkKTsKKyAg
ICBCcmVha3BvaW50SWQgc2V0QnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJZCwgY29uc3QgU2Ny
aXB0QnJlYWtwb2ludCYsIGludCogYWN0dWFsTGluZU51bWJlciwgaW50KiBhY3R1YWxDb2x1bW5O
dW1iZXIpOworICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChCcmVha3BvaW50SWQpOwogICAgIHZv
aWQgY2xlYXJCcmVha3BvaW50cygpOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQo
Ym9vbCBhY3RpdmF0ZWQpOwotICAgIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50cygpIHsgc2V0QnJl
YWtwb2ludHNBY3RpdmF0ZWQodHJ1ZSk7IH0KLSAgICB2b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50
cygpIHsgc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoZmFsc2UpOyB9Ci0KLSAgICBlbnVtIFBhdXNl
T25FeGNlcHRpb25zU3RhdGUgewotICAgICAgICBEb250UGF1c2VPbkV4Y2VwdGlvbnMsCi0gICAg
ICAgIFBhdXNlT25BbGxFeGNlcHRpb25zLAotICAgICAgICBQYXVzZU9uVW5jYXVnaHRFeGNlcHRp
b25zCi0gICAgfTsKLSAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlT25FeGNlcHRpb25z
U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGU7IH0KLSAgICB2
b2lkIHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk7Ci0K
LSAgICB2b2lkIHNldFBhdXNlT25OZXh0U3RhdGVtZW50KGJvb2wgcGF1c2UpOwotICAgIHZvaWQg
YnJlYWtQcm9ncmFtKCk7Ci0gICAgdm9pZCBjb250aW51ZVByb2dyYW0oKTsKLSAgICB2b2lkIHN0
ZXBJbnRvU3RhdGVtZW50KCk7Ci0gICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVudCgpOwotICAgIHZv
aWQgc3RlcE91dE9mRnVuY3Rpb24oKTsKIAogICAgIGJvb2wgY2FuU2V0U2NyaXB0U291cmNlKCk7
Ci0gICAgYm9vbCBzZXRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3Qg
U3RyaW5nJiBuZXdDb250ZW50LCBib29sIHByZXZpZXcsIFN0cmluZyogZXJyb3IsIFNjcmlwdFZh
bHVlKiBuZXdDYWxsRnJhbWVzLCBTY3JpcHRPYmplY3QqIHJlc3VsdCk7CisgICAgYm9vbCBzZXRT
Y3JpcHRTb3VyY2UoaW50cHRyX3Qgc291cmNlSWQsIGNvbnN0IFN0cmluZyYgbmV3Q29udGVudCwg
Ym9vbCBwcmV2aWV3LCBTdHJpbmcqIGVycm9yLCBTY3JpcHRWYWx1ZSogbmV3Q2FsbEZyYW1lcywg
U2NyaXB0T2JqZWN0KiByZXN1bHQpOwogICAgIHZvaWQgdXBkYXRlQ2FsbFN0YWNrKFNjcmlwdFZh
bHVlKiBjYWxsRnJhbWUpOwogCiAgICAgYm9vbCBjYXVzZXNSZWNvbXBpbGF0aW9uKCkgeyByZXR1
cm4gdHJ1ZTsgfQpAQCAtOTUsMTIgKzgwLDExIEBAIHB1YmxpYzoKICAgICAgICAgLy8gRklYTUUo
d2Via2l0Lm9yZy9iLzgyMjAzKTogSW1wbGVtZW50IHByZXByb2Nlc3Nvci4KICAgICB9CiAKLSAg
ICBib29sIGlzUGF1c2VkKCkgeyByZXR1cm4gbV9wYXVzZWQ7IH0KICAgICBib29sIHJ1bm5pbmdO
ZXN0ZWRNZXNzYWdlTG9vcCgpIHsgcmV0dXJuIG1fcnVubmluZ05lc3RlZE1lc3NhZ2VMb29wOyB9
CiAKLSAgICB2b2lkIGNvbXBpbGVTY3JpcHQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcm
IGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBTdHJpbmcqIHNjcmlwdElkLCBT
dHJpbmcqIGV4Y2VwdGlvbk1lc3NhZ2UpOworICAgIHZvaWQgY29tcGlsZVNjcmlwdChKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwsIGludHB0cl90KiBzY3JpcHRJZCwgU3RyaW5nKiBleGNlcHRpb25NZXNzYWdlKTsKICAgICB2
b2lkIGNsZWFyQ29tcGlsZWRTY3JpcHRzKCk7Ci0gICAgdm9pZCBydW5TY3JpcHQoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBTY3JpcHRWYWx1ZSogcmVzdWx0LCBib29s
KiB3YXNUaHJvd24sIFN0cmluZyogZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgdm9pZCBydW5TY3Jp
cHQoSlNDOjpFeGVjU3RhdGUqLCBpbnRwdHJfdCBzY3JpcHRJZCwgU2NyaXB0VmFsdWUqIHJlc3Vs
dCwgYm9vbCogd2FzVGhyb3duLCBTdHJpbmcqIGV4Y2VwdGlvbk1lc3NhZ2UpOwogCiAgICAgY2xh
c3MgVGFzayB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTEzLDcgKzk3
LDcgQEAgcHJvdGVjdGVkOgogICAgIHR5cGVkZWYgSGFzaFNldDxTY3JpcHREZWJ1Z0xpc3RlbmVy
Kj4gTGlzdGVuZXJTZXQ7CiAgICAgdHlwZWRlZiB2b2lkIChTY3JpcHREZWJ1Z1NlcnZlcjo6Kkph
dmFTY3JpcHRFeGVjdXRpb25DYWxsYmFjaykoU2NyaXB0RGVidWdMaXN0ZW5lciopOwogCi0gICAg
U2NyaXB0RGVidWdTZXJ2ZXIoKTsKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcihib29sIGlzV29ya2Vy
VGhyZWFkID0gZmFsc2UpOwogICAgIH5TY3JpcHREZWJ1Z1NlcnZlcigpOwogCiAgICAgdmlydHVh
bCBMaXN0ZW5lclNldCogZ2V0TGlzdGVuZXJzRm9yR2xvYmFsT2JqZWN0KEpTQzo6SlNHbG9iYWxP
YmplY3QqKSA9IDA7CkBAIC0xMjQsOSArMTA4LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVh
bCBib29sIGlzQ29udGVudFNjcmlwdChKU0M6OkV4ZWNTdGF0ZSopOwogCi0gICAgYm9vbCBoYXNC
cmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24mLCBTY3JpcHRC
cmVha3BvaW50KiBoaXRCcmVha3BvaW50KSBjb25zdDsKICAgICBib29sIGV2YWx1YXRlQnJlYWtw
b2ludEFjdGlvbihjb25zdCBTY3JpcHRCcmVha3BvaW50QWN0aW9uJikgY29uc3Q7Ci0gICAgYm9v
bCBldmFsdWF0ZUJyZWFrcG9pbnRBY3Rpb25zKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmKSBjb25z
dDsKKyAgICB2b2lkIGV2YWx1YXRlQnJlYWtwb2ludEFjdGlvbnMoY29uc3QgSlNDOjpCcmVha3Bv
aW50Jik7CiAKICAgICB2b2lkIGRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycyhKYXZhU2NyaXB0
RXhlY3V0aW9uQ2FsbGJhY2ssIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICB2b2lkIGRpc3Bh
dGNoRnVuY3Rpb25Ub0xpc3RlbmVycyhjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBKYXZh
U2NyaXB0RXhlY3V0aW9uQ2FsbGJhY2sgY2FsbGJhY2spOwpAQCAtMTM1LDM5ICsxMTgsMjAgQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZShjb25zdCBMaXN0ZW5l
clNldCYgbGlzdGVuZXJzLCBKU0M6OlNvdXJjZVByb3ZpZGVyKiwgYm9vbCBpc0NvbnRlbnRTY3Jp
cHQpOwogICAgIHZvaWQgZGlzcGF0Y2hGYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IExpc3RlbmVy
U2V0JiBsaXN0ZW5lcnMsIEpTQzo6U291cmNlUHJvdmlkZXIqLCBpbnQgZXJyb3JMaW5lLCBjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAKLSAgICB2b2lkIGNyZWF0ZUNhbGxGcmFtZShjb25z
dCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJik7Ci0gICAgdm9pZCB1cGRhdGVDYWxsRnJhbWVBbmRQ
YXVzZUlmTmVlZGVkKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsKLSAgICB2b2lkIHBh
dXNlSWZOZWVkZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBzb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlNvdXJjZVByb3Zp
ZGVyKiwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1zZyk7Ci0gICAgdmlydHVh
bCB2b2lkIGNhbGxFdmVudChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJik7Ci0gICAgdmly
dHVhbCB2b2lkIGF0U3RhdGVtZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmV0dXJuRXZlbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYp
OwotICAgIHZpcnR1YWwgdm9pZCBleGNlcHRpb24oY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFt
ZSYsIGJvb2wgaGFzSGFuZGxlcik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJvZ3Jh
bShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEV4
ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsK
LQotICAgIHR5cGVkZWYgVmVjdG9yPFNjcmlwdEJyZWFrcG9pbnQ+IEJyZWFrcG9pbnRzSW5MaW5l
OwotICAgIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBCcmVha3BvaW50c0luTGluZT4gTGluZVRvQnJl
YWtwb2ludE1hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50cHRyX3QsIExpbmVUb0JyZWFrcG9p
bnRNYXA+IFNvdXJjZUlkVG9CcmVha3BvaW50c01hcDsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
U291cmNlUGFyc2VkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpTb3VyY2VQcm92aWRlciosIGludCBl
cnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNc2cpOworICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVQYXVzZShKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdmlydHVhbCBib29sIG5lZWRQYXVz
ZUhhbmRsaW5nKEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
RXhjZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlIGV4Y2VwdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeURvbmVQcm9jZXNz
aW5nRGVidWdnZXJFdmVudHMoKTsKKworICAgIHR5cGVkZWYgVmVjdG9yPFNjcmlwdEJyZWFrcG9p
bnRBY3Rpb24+IEJyZWFrcG9pbnRBY3Rpb25zOworICAgIHR5cGVkZWYgSGFzaE1hcDxCcmVha3Bv
aW50SWQsIEJyZWFrcG9pbnRBY3Rpb25zPiBCcmVha3BvaW50SWRUb0FjdGlvbnNNYXA7CiAKICAg
ICBib29sIG1fY2FsbGluZ0xpc3RlbmVyczsKLSAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIG1f
cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZTsKLSAgICBib29sIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQ7
Ci0gICAgYm9vbCBtX3BhdXNlZDsKICAgICBib29sIG1fcnVubmluZ05lc3RlZE1lc3NhZ2VMb29w
OwogICAgIGJvb2wgbV9kb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzOwotICAgIGJvb2wgbV9i
cmVha3BvaW50c0FjdGl2YXRlZDsKLSAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKiBtX3BhdXNlT25D
YWxsRnJhbWU7Ci0gICAgUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IG1fY3VycmVudENhbGxG
cmFtZTsKLSAgICBTb3VyY2VJZFRvQnJlYWtwb2ludHNNYXAgbV9zb3VyY2VJZFRvQnJlYWtwb2lu
dHM7CisgICAgQnJlYWtwb2ludElkVG9BY3Rpb25zTWFwIG1fYnJlYWtwb2ludElkVG9BY3Rpb25z
OwogICAgIFRpbWVyPFNjcmlwdERlYnVnU2VydmVyPiBtX3JlY29tcGlsZVRpbWVyOwotCi0gICAg
aW50IG1fbGFzdEV4ZWN1dGVkTGluZTsKLSAgICBpbnRwdHJfdCBtX2xhc3RFeGVjdXRlZFNvdXJj
ZUlkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2
aXNpb24gMTU2MjQ1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjpXb3JrZXJTY3JpcHREZWJ1
Z1NlcnZlcihXb3JrZXJHbG9iYWxTY29wZSogY29udGV4dCwgY29uc3QgU3RyaW5nJiBtb2RlKQot
ICAgIDogU2NyaXB0RGVidWdTZXJ2ZXIoKQorICAgIDogU2NyaXB0RGVidWdTZXJ2ZXIodHJ1ZSkK
ICAgICAsIG1fd29ya2VyR2xvYmFsU2NvcGUoY29udGV4dCkKICAgICAsIG1fZGVidWdnZXJUYXNr
TW9kZShtb2RlKQogewpAQCAtNjAsMTIgKzYwLDYgQEAgdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1Nl
cnZlcjo6YWRkTGlzdGVuZQogICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKDApOwogfQogCi12
b2lkIFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjp3aWxsRXhlY3V0ZVByb2dyYW0oY29uc3QgSlND
OjpEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCi17Ci0gICAgaWYgKCFtX3Bh
dXNlZCkKLSAgICAgICAgY3JlYXRlQ2FsbEZyYW1lKGRlYnVnZ2VyQ2FsbEZyYW1lKTsKLX0KLQog
dm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVGlt
ZXI8U2NyaXB0RGVidWdTZXJ2ZXI+KikKIHsKICAgICBKU0M6OlZNKiB2bSA9IG1fd29ya2VyR2xv
YmFsU2NvcGUtPnNjcmlwdCgpLT52bSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAxNTYyNDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSw2IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNDb250ZW50U2NyaXB0KEpTQzo6RXhlY1N0YXRlKikgeyByZXR1cm4gZmFsc2U7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCB3aWxsRXhlY3V0ZVByb2dyYW0oY29uc3QgSlNDOjpEZWJ1Z2dl
ckNhbGxGcmFtZSYpOwotCiAgICAgdmlydHVhbCB2b2lkIHJ1bkV2ZW50TG9vcFdoaWxlUGF1c2Vk
KCk7CiAKICAgICBXb3JrZXJHbG9iYWxTY29wZSogbV93b3JrZXJHbG9iYWxTY29wZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5jcHAJKHJldmlzaW9uIDE1NjI0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
CiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKICNpbmNsdWRlICJDb250ZW50U2VhcmNoVXRp
bHMuaCIKKyNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKICNpbmNsdWRlICJJbmplY3RlZFNj
cmlwdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0TWFuYWdlci5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckZyb250ZW5kLmgiCkBAIC02Niw2ICs2Nyw3IEBAIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6Okluc3BlY3RvckRlYnVnZ2UKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVj
dGVkU2NyaXB0TWFuYWdlcikKICAgICAsIG1fZnJvbnRlbmQoMCkKICAgICAsIG1fcGF1c2VkU2Ny
aXB0U3RhdGUoMCkKKyAgICAsIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElkKG51bGxC
cmVha3BvaW50SWQpCiAgICAgLCBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZChmYWxzZSkKICAg
ICAsIG1fbGlzdGVuZXIoMCkKIHsKQEAgLTMyOSwxMyArMzMxLDE2IEBAIHZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2kKICAgICAqb3V0QnJlYWtwb2ludElkID0gYnJlYWtw
b2ludElkOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUxvY2F0aW9uKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG9jYXRpb24sIFN0cmluZyogc2NyaXB0
SWQsIGludCogbGluZU51bWJlciwgaW50KiBjb2x1bW5OdW1iZXIpCitzdGF0aWMgYm9vbCBwYXJz
ZUxvY2F0aW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGxvY2F0aW9uLCBpbnRwdHJfdCogc2NyaXB0SWQsIGludCogbGluZU51bWJlciwgaW50
KiBjb2x1bW5OdW1iZXIpCiB7Ci0gICAgaWYgKCFsb2NhdGlvbi0+Z2V0U3RyaW5nKCJzY3JpcHRJ
ZCIsIHNjcmlwdElkKSB8fCAhbG9jYXRpb24tPmdldE51bWJlcigibGluZU51bWJlciIsIGxpbmVO
dW1iZXIpKSB7CisgICAgU3RyaW5nIHNjcmlwdElkU3RyOworICAgIGlmICghbG9jYXRpb24tPmdl
dFN0cmluZygic2NyaXB0SWQiLCAmc2NyaXB0SWRTdHIpIHx8ICFsb2NhdGlvbi0+Z2V0TnVtYmVy
KCJsaW5lTnVtYmVyIiwgbGluZU51bWJlcikpIHsKICAgICAgICAgLy8gRklYTUU6IHJlcGxhY2Ug
d2l0aCBpbnB1dCB2YWxpZGF0aW9uLgorICAgICAgICAqc2NyaXB0SWQgPSAwOwogICAgICAgICAq
ZXJyb3JTdHJpbmcgPSAic2NyaXB0SWQgYW5kIGxpbmVOdW1iZXIgYXJlIHJlcXVpcmVkLiI7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgKnNjcmlwdElkID0gc2NyaXB0SWRTdHIu
dG9JbnRQdHIoKTsKICAgICAqY29sdW1uTnVtYmVyID0gMDsKICAgICBsb2NhdGlvbi0+Z2V0TnVt
YmVyKCJjb2x1bW5OdW1iZXIiLCBjb2x1bW5OdW1iZXIpOwogICAgIHJldHVybiB0cnVlOwpAQCAt
MzQzLDcgKzM0OCw3IEBAIHN0YXRpYyBib29sIHBhcnNlTG9jYXRpb24oRXJyb3JTdHJpbmcqIGUK
IAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGxvY2F0aW9uLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3B0aW9ucywgVHlwZUJ1aWxkZXI6OkRlYnVn
Z2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpE
ZWJ1Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbikKIHsKLSAgICBTdHJpbmcgc2NyaXB0
SWQ7CisgICAgaW50cHRyX3Qgc2NyaXB0SWQ7CiAgICAgaW50IGxpbmVOdW1iZXI7CiAgICAgaW50
IGNvbHVtbk51bWJlcjsKIApAQCAtMzYzLDExICszNjgsMTIgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpzZXRCcmVha3BvaQogICAgIGlmICghYnJlYWtwb2ludEFjdGlvbnNGcm9tUHJv
dG9jb2woZXJyb3JTdHJpbmcsIGFjdGlvbnMsICZicmVha3BvaW50QWN0aW9ucykpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBzY3JpcHRJZCArICc6JyArIFN0
cmluZzo6bnVtYmVyKGxpbmVOdW1iZXIpICsgJzonICsgU3RyaW5nOjpudW1iZXIoY29sdW1uTnVt
YmVyKTsKKyAgICBTdHJpbmcgYnJlYWtwb2ludElkID0gU3RyaW5nOjpudW1iZXIoc2NyaXB0SWQp
ICsgJzonICsgU3RyaW5nOjpudW1iZXIobGluZU51bWJlcikgKyAnOicgKyBTdHJpbmc6Om51bWJl
cihjb2x1bW5OdW1iZXIpOwogICAgIGlmIChtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVh
a3BvaW50SWRzLmZpbmQoYnJlYWtwb2ludElkKSAhPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2
ZXJCcmVha3BvaW50SWRzLmVuZCgpKSB7CiAgICAgICAgICplcnJvclN0cmluZyA9ICJCcmVha3Bv
aW50IGF0IHNwZWNpZmllZCBsb2NhdGlvbiBhbHJlYWR5IGV4aXN0cy4iOwogICAgICAgICByZXR1
cm47CiAgICAgfQorCiAgICAgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50KGxpbmVOdW1iZXIs
IGNvbHVtbk51bWJlciwgY29uZGl0aW9uLCBicmVha3BvaW50QWN0aW9ucywgYXV0b0NvbnRpbnVl
KTsKICAgICBhY3R1YWxMb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwg
c2NyaXB0SWQsIGJyZWFrcG9pbnQpOwogICAgIGlmIChhY3R1YWxMb2NhdGlvbikKQEAgLTM5Miwx
MiArMzk4LDEyIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWsKIAog
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24p
CiB7Ci0gICAgaWYgKCFtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJZC5pc0VtcHR5KCkp
IHsKKyAgICBpZiAobV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SWQpIHsKICAgICAgICAg
c2NyaXB0RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVha3BvaW50KG1fY29udGludWVUb0xvY2F0aW9u
QnJlYWtwb2ludElkKTsKLSAgICAgICAgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SWQg
PSAiIjsKKyAgICAgICAgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SWQgPSBudWxsQnJl
YWtwb2ludElkOwogICAgIH0KIAotICAgIFN0cmluZyBzY3JpcHRJZDsKKyAgICBpbnRwdHJfdCBz
Y3JpcHRJZDsKICAgICBpbnQgbGluZU51bWJlcjsKICAgICBpbnQgY29sdW1uTnVtYmVyOwogCkBA
IC00MDksNyArNDE1LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRv
TAogICAgIHJlc3VtZShlcnJvclN0cmluZyk7CiB9CiAKLVBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkRlYnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2ZUJyZWFr
cG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQs
IGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQpCitQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkLCBpbnRwdHJfdCBzY3JpcHRJZCwg
Y29uc3QgU2NyaXB0QnJlYWtwb2ludCYgYnJlYWtwb2ludCkKIHsKICAgICBTY3JpcHRzTWFwOjpp
dGVyYXRvciBzY3JpcHRJdGVyYXRvciA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKICAgICBp
ZiAoc2NyaXB0SXRlcmF0b3IgPT0gbV9zY3JpcHRzLmVuZCgpKQpAQCAtNDIwLDE3ICs0MjYsMTcg
QEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aQogCiAgICAgaW50IGFj
dHVhbExpbmVOdW1iZXI7CiAgICAgaW50IGFjdHVhbENvbHVtbk51bWJlcjsKLSAgICBTdHJpbmcg
ZGVidWdTZXJ2ZXJCcmVha3BvaW50SWQgPSBzY3JpcHREZWJ1Z1NlcnZlcigpLnNldEJyZWFrcG9p
bnQoc2NyaXB0SWQsIGJyZWFrcG9pbnQsICZhY3R1YWxMaW5lTnVtYmVyLCAmYWN0dWFsQ29sdW1u
TnVtYmVyKTsKLSAgICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWQuaXNFbXB0eSgpKQorICAg
IEJyZWFrcG9pbnRJZCBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZCA9IHNjcmlwdERlYnVnU2VydmVy
KCkuc2V0QnJlYWtwb2ludChzY3JpcHRJZCwgYnJlYWtwb2ludCwgJmFjdHVhbExpbmVOdW1iZXIs
ICZhY3R1YWxDb2x1bW5OdW1iZXIpOworICAgIGlmICghZGVidWdTZXJ2ZXJCcmVha3BvaW50SWQp
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFr
cG9pbnRJZHNNYXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0g
bV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJ
ZCk7CiAgICAgaWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtw
b2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpCi0gICAgICAgIGRlYnVnU2Vy
dmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJl
YWtwb2ludElkcy5zZXQoYnJlYWtwb2ludElkLCBWZWN0b3I8U3RyaW5nPigpKS5pdGVyYXRvcjsK
KyAgICAgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJ
ZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLnNldChicmVha3BvaW50SWQsIFZlY3RvcjxCcmVh
a3BvaW50SWQ+KCkpLml0ZXJhdG9yOwogICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJh
dG9yLT52YWx1ZS5hcHBlbmQoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWQpOwogCiAgICAgUmVmUHRy
PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxvY2F0aW9uID0gVHlwZUJ1aWxkZXI6
OkRlYnVnZ2VyOjpMb2NhdGlvbjo6Y3JlYXRlKCkKLSAgICAgICAgLnNldFNjcmlwdElkKHNjcmlw
dElkKQorICAgICAgICAuc2V0U2NyaXB0SWQoU3RyaW5nOjpudW1iZXIoc2NyaXB0SWQpKQogICAg
ICAgICAuc2V0TGluZU51bWJlcihhY3R1YWxMaW5lTnVtYmVyKTsKICAgICBsb2NhdGlvbi0+c2V0
Q29sdW1uTnVtYmVyKGFjdHVhbENvbHVtbk51bWJlcik7CiAgICAgcmV0dXJuIGxvY2F0aW9uOwpA
QCAtNDQ2LDIyICs0NTIsMjQgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBz
Y3JpcAogICAgIHJldHVybiB2YWx1ZS0+YXNPYmplY3QoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBT
dHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBjb25zdCBv
cHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdleCwg
UmVmUHRyPEFycmF5PFdlYkNvcmU6OlR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hNYXRjaD4gPiYg
cmVzdWx0cykKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50KEVy
cm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZFN0ciwgY29uc3QgU3RyaW5n
JiBxdWVyeSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBi
b29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxBcnJheTxXZWJDb3JlOjpUeXBlQnVp
bGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+ID4mIHJlc3VsdHMpCiB7CiAgICAgYm9vbCBpc1JlZ2V4
ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZhbHNlOwogICAgIGJvb2wg
Y2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VTZW5z
aXRpdmUgOiBmYWxzZTsKIAorICAgIGludHB0cl90IHNjcmlwdElkID0gc2NyaXB0SWRTdHIudG9J
bnRQdHIoKTsKICAgICBTY3JpcHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNj
cmlwdElkKTsKICAgICBpZiAoaXQgIT0gbV9zY3JpcHRzLmVuZCgpKQogICAgICAgICByZXN1bHRz
ID0gQ29udGVudFNlYXJjaFV0aWxzOjpzZWFyY2hJblRleHRCeUxpbmVzKGl0LT52YWx1ZS5zb3Vy
Y2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKICAgICBlbHNlCi0gICAgICAgICpl
cnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWQ7CisgICAgICAgICplcnJvciA9
ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWRTdHI7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3Qg
U3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBuZXdDb250ZW50LCBjb25zdCBib29sKiBj
b25zdCBwcmV2aWV3LCBSZWZQdHI8QXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJh
bWU+ID4mIG5ld0NhbGxGcmFtZXMsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCit2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyog
ZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWRTdHIsIGNvbnN0IFN0cmluZyYgbmV3Q29udGVu
dCwgY29uc3QgYm9vbCogY29uc3QgcHJldmlldywgUmVmUHRyPEFycmF5PFR5cGVCdWlsZGVyOjpE
ZWJ1Z2dlcjo6Q2FsbEZyYW1lPiA+JiBuZXdDYWxsRnJhbWVzLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgcmVzdWx0KQogewogICAgIGJvb2wgcHJldmlld09ubHkgPSBwcmV2aWV3ICYmICpwcmV2
aWV3OwogICAgIFNjcmlwdE9iamVjdCByZXN1bHRPYmplY3Q7CisgICAgaW50cHRyX3Qgc2NyaXB0
SWQgPSBzY3JpcHRJZFN0ci50b0ludFB0cigpOwogICAgIGlmICghc2NyaXB0RGVidWdTZXJ2ZXIo
KS5zZXRTY3JpcHRTb3VyY2Uoc2NyaXB0SWQsIG5ld0NvbnRlbnQsIHByZXZpZXdPbmx5LCBlcnJv
ciwgJm1fY3VycmVudENhbGxTdGFjaywgJnJlc3VsdE9iamVjdCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBuZXdDYWxsRnJhbWVzID0gY3VycmVudENhbGxGcmFtZXMoKTsKQEAgLTQ3MCwxMyArNDc4
LDE0IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U2NyaXB0U28KICAgICAgICAg
cmVzdWx0ID0gb2JqZWN0OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNj
cmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIFN0
cmluZyogc2NyaXB0U291cmNlKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3Jp
cHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkU3RyLCBT
dHJpbmcqIHNjcmlwdFNvdXJjZSkKIHsKKyAgICBpbnRwdHJfdCBzY3JpcHRJZCA9IHNjcmlwdElk
U3RyLnRvSW50UHRyKCk7CiAgICAgU2NyaXB0c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMu
ZmluZChzY3JpcHRJZCk7CiAgICAgaWYgKGl0ICE9IG1fc2NyaXB0cy5lbmQoKSkKICAgICAgICAg
KnNjcmlwdFNvdXJjZSA9IGl0LT52YWx1ZS5zb3VyY2U7CiAgICAgZWxzZQotICAgICAgICAqZXJy
b3IgPSAiTm8gc2NyaXB0IGZvciBpZDogIiArIHNjcmlwdElkOworICAgICAgICAqZXJyb3IgPSAi
Tm8gc2NyaXB0IGZvciBpZDogIiArIHNjcmlwdElkU3RyOwogfQogCiB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
RnVuY3Rpb25EZXRhaWxzPiYgZGV0YWlscykKQEAgLTYwNSw3ICs2MTQsNyBAQCB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmNvbXBpbGVTY3JpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBTdHJpbmcgc2NyaXB0SWRWYWx1ZTsKKyAgICBpbnRwdHJfdCBzY3JpcHRJZFZhbHVlOwog
ICAgIFN0cmluZyBleGNlcHRpb25NZXNzYWdlOwogICAgIHNjcmlwdERlYnVnU2VydmVyKCkuY29t
cGlsZVNjcmlwdChpbmplY3RlZFNjcmlwdC5zY3JpcHRTdGF0ZSgpLCBleHByZXNzaW9uLCBzb3Vy
Y2VVUkwsICZzY3JpcHRJZFZhbHVlLCAmZXhjZXB0aW9uTWVzc2FnZSk7CiAgICAgaWYgKCFzY3Jp
cHRJZFZhbHVlICYmICFleGNlcHRpb25NZXNzYWdlKSB7CkBAIC02MTMsMTAgKzYyMiwxMCBAQCB2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbXBpbGVTY3JpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgKnN5bnRheEVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbk1lc3NhZ2U7Ci0gICAg
KnNjcmlwdElkID0gc2NyaXB0SWRWYWx1ZTsKKyAgICAqc2NyaXB0SWQgPSBTdHJpbmc6Om51bWJl
cihzY3JpcHRJZFZhbHVlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpydW5T
Y3JpcHQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTY3JpcHRJZCYgc2NyaXB0SWQs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9iamVj
dEdyb3VwLCBjb25zdCBib29sKiBjb25zdCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNv
bnNvbGUsIFJlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0
LCBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pCit2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnJ1blNjcmlwdChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0
IFNjcmlwdElkJiBzY3JpcHRJZFN0ciwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNv
bnN0IFN0cmluZyogY29uc3Qgb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90UGF1
c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdh
c1Rocm93bikKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVk
U2NyaXB0Rm9yRXZhbChlcnJvclN0cmluZywgZXhlY3V0aW9uQ29udGV4dElkKTsKICAgICBpZiAo
aW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CkBAIC02MzQsNiArNjQzLDcgQEAgdm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpydW5TY3JpcHQoRQogICAgIFNjcmlwdFZhbHVlIHZhbHVl
OwogICAgIGJvb2wgd2FzVGhyb3duVmFsdWU7CiAgICAgU3RyaW5nIGV4Y2VwdGlvbk1lc3NhZ2U7
CisgICAgaW50cHRyX3Qgc2NyaXB0SWQgPSBzY3JpcHRJZFN0ci50b0ludFB0cigpOwogICAgIHNj
cmlwdERlYnVnU2VydmVyKCkucnVuU2NyaXB0KGluamVjdGVkU2NyaXB0LnNjcmlwdFN0YXRlKCks
IHNjcmlwdElkLCAmdmFsdWUsICZ3YXNUaHJvd25WYWx1ZSwgJmV4Y2VwdGlvbk1lc3NhZ2UpOwog
ICAgICp3YXNUaHJvd24gPSB3YXNUaHJvd25WYWx1ZTsKICAgICBpZiAodmFsdWUuaGFzTm9WYWx1
ZSgpKSB7CkBAIC03MDEsNyArNzExLDcgQEAgU3RyaW5nIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNvdXJjZU1hcAogCiAvLyBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lciBmdW5jdGlvbnMKIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNj
cmlwdElkLCBjb25zdCBTY3JpcHQmIHNjcmlwdCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6ZGlkUGFyc2VTb3VyY2UoaW50cHRyX3Qgc2NyaXB0SWQsIGNvbnN0IFNjcmlwdCYgc2NyaXB0
KQogewogICAgIC8vIERvbid0IHNlbmQgc2NyaXB0IGNvbnRlbnQgdG8gdGhlIGZyb250IGVuZCB1
bnRpbCBpdCdzIHJlYWxseSBuZWVkZWQuCiAgICAgY29uc3QgYm9vbCogaXNDb250ZW50U2NyaXB0
ID0gc2NyaXB0LmlzQ29udGVudFNjcmlwdCA/ICZzY3JpcHQuaXNDb250ZW50U2NyaXB0IDogMDsK
QEAgLTcxMyw3ICs3MjMsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNl
U291CiAgICAgYm9vbCBoYXNTb3VyY2VVUkwgPSAhc291cmNlVVJMLmlzRW1wdHkoKTsKICAgICBT
dHJpbmcgc2NyaXB0VVJMID0gaGFzU291cmNlVVJMID8gc291cmNlVVJMIDogc2NyaXB0LnVybDsK
ICAgICBib29sKiBoYXNTb3VyY2VVUkxQYXJhbSA9IGhhc1NvdXJjZVVSTCA/ICZoYXNTb3VyY2VV
UkwgOiAwOwotICAgIG1fZnJvbnRlbmQtPnNjcmlwdFBhcnNlZChzY3JpcHRJZCwgc2NyaXB0VVJM
LCBzY3JpcHQuc3RhcnRMaW5lLCBzY3JpcHQuc3RhcnRDb2x1bW4sIHNjcmlwdC5lbmRMaW5lLCBz
Y3JpcHQuZW5kQ29sdW1uLCBpc0NvbnRlbnRTY3JpcHQsIHNvdXJjZU1hcFVSTFBhcmFtLCBoYXNT
b3VyY2VVUkxQYXJhbSk7CisgICAgU3RyaW5nIHNjcmlwdElkU3RyID0gU3RyaW5nOjpudW1iZXIo
c2NyaXB0SWQpOworICAgIG1fZnJvbnRlbmQtPnNjcmlwdFBhcnNlZChzY3JpcHRJZFN0ciwgc2Ny
aXB0VVJMLCBzY3JpcHQuc3RhcnRMaW5lLCBzY3JpcHQuc3RhcnRDb2x1bW4sIHNjcmlwdC5lbmRM
aW5lLCBzY3JpcHQuZW5kQ29sdW1uLCBpc0NvbnRlbnRTY3JpcHQsIHNvdXJjZU1hcFVSTFBhcmFt
LCBoYXNTb3VyY2VVUkxQYXJhbSk7CiAKICAgICBtX3NjcmlwdHMuc2V0KHNjcmlwdElkLCBzY3Jp
cHQpOwogCkBAIC03NzAsOSArNzgxLDkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
aWRQYXVzZShKUwogICAgIG1fZnJvbnRlbmQtPnBhdXNlZChjdXJyZW50Q2FsbEZyYW1lcygpLCBt
X2JyZWFrUmVhc29uLCBtX2JyZWFrQXV4RGF0YSk7CiAgICAgbV9qYXZhU2NyaXB0UGF1c2VTY2hl
ZHVsZWQgPSBmYWxzZTsKIAotICAgIGlmICghbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50
SWQuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElk
KSB7CiAgICAgICAgIHNjcmlwdERlYnVnU2VydmVyKCkucmVtb3ZlQnJlYWtwb2ludChtX2NvbnRp
bnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJZCk7Ci0gICAgICAgIG1fY29udGludWVUb0xvY2F0aW9u
QnJlYWtwb2ludElkID0gIiI7CisgICAgICAgIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2lu
dElkID0gbnVsbEJyZWFrcG9pbnRJZDsKICAgICB9CiAgICAgaWYgKG1fbGlzdGVuZXIpCiAgICAg
ICAgIG1fbGlzdGVuZXItPmRpZFBhdXNlKCk7CkBAIC03OTksNyArODEwLDcgQEAgdm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVhcigpCiAgICAgbV9jdXJyZW50Q2FsbFN0YWNrID0gU2Ny
aXB0VmFsdWUoKTsKICAgICBtX3NjcmlwdHMuY2xlYXIoKTsKICAgICBtX2JyZWFrcG9pbnRJZFRv
RGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmNsZWFyKCk7Ci0gICAgbV9jb250aW51ZVRvTG9jYXRp
b25CcmVha3BvaW50SWQgPSBTdHJpbmcoKTsKKyAgICBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFr
cG9pbnRJZCA9IG51bGxCcmVha3BvaW50SWQ7CiAgICAgY2xlYXJCcmVha0RldGFpbHMoKTsKICAg
ICBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCA9IGZhbHNlOwogICAgIEVycm9yU3RyaW5nIGVy
cm9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oCShyZXZpc2lvbiAxNTYyNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3
IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJTY3JpcHRCcmVh
a3BvaW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0RGVidWdMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlNj
cmlwdERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0xNTEsMjAgKzE1Miwy
MCBAQCBwcml2YXRlOgogCiAgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1
aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+ID4gY3VycmVudENhbGxGcmFtZXMoKTsKIAotICAg
IHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25z
dCBTY3JpcHQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3VyY2UoaW50cHRyX3Qgc2Ny
aXB0SWQsIGNvbnN0IFNjcmlwdCYpOwogICAgIHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291
cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUs
IGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIAogICAgIHZvaWQg
c2V0UGF1c2VPbkV4Y2VwdGlvbnNJbXBsKEVycm9yU3RyaW5nKiwgaW50KTsKIAotICAgIFBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gcmVzb2x2ZUJyZWFrcG9pbnQo
Y29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0
IFNjcmlwdEJyZWFrcG9pbnQmKTsKKyAgICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dl
cjo6TG9jYXRpb24+IHJlc29sdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElk
LCBpbnRwdHJfdCBzY3JpcHRJZCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYpOwogICAgIHZvaWQg
Y2xlYXIoKTsKICAgICBib29sIGFzc2VydFBhdXNlZChFcnJvclN0cmluZyopOwogICAgIHZvaWQg
Y2xlYXJCcmVha0RldGFpbHMoKTsKIAogICAgIFN0cmluZyBzb3VyY2VNYXBVUkxGb3JTY3JpcHQo
Y29uc3QgU2NyaXB0Jik7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTY3JpcHQ+IFNj
cmlwdHNNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBC
cmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkc01hcDsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8aW50cHRyX3QsIFNjcmlwdD4gU2NyaXB0c01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBWZWN0b3I8QnJlYWtwb2ludElkPiA+IEJyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJC
cmVha3BvaW50SWRzTWFwOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVk
U2NyaXB0TWFuYWdlcjsKICAgICBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXIqIG1fZnJvbnRl
bmQ7CkBAIC0xNzIsNyArMTczLDcgQEAgcHJpdmF0ZToKICAgICBTY3JpcHRWYWx1ZSBtX2N1cnJl
bnRDYWxsU3RhY2s7CiAgICAgU2NyaXB0c01hcCBtX3NjcmlwdHM7CiAgICAgQnJlYWtwb2ludElk
VG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXAgbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVy
QnJlYWtwb2ludElkczsKLSAgICBTdHJpbmcgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50
SWQ7CisgICAgQnJlYWtwb2ludElkIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElkOwog
ICAgIEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpFbnVtIG1fYnJlYWtSZWFz
b247CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9icmVha0F1eERhdGE7CiAgICAgYm9v
bCBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaAkocmV2aXNpb24gMTU2MjQ1KQorKysgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5TY3JpcHREZWJ1Z0xp
c3RlbmVyKCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3VyY2UoY29uc3QgU3Ry
aW5nJiBzY3JpcHRJZCwgY29uc3QgU2NyaXB0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRQ
YXJzZVNvdXJjZShpbnRwdHJfdCBzY3JpcHRJZCwgY29uc3QgU2NyaXB0JikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYg
ZXJyb3JNZXNzYWdlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMsIGNvbnN0IFNjcmlwdFZhbHVlJiBl
eGNlcHRpb24pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoKSA9IDA7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTYyODEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMy0wOS0yMyAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgdG8gaGlkZSBE
ZWJ1Z2dlciBjYWxsYmFjayBpbnRlcmZhY2UgaW5zaWRlIEpTQy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTc5Ni4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIFJlaW1wbGVtZW50IFdlYktpdC9tYWMn
cyBXZWJTY3JpcHREZWJ1Z2dlciBiYXNlZCBvbiB0aGUgbmV3CisgICAgICAgICAgSlNDOjpEZWJ1
Z2dlciBpbnRlcmZhY2UgKGkuZS4gbm8gdXNlIG9mIHRoZSBKU0MgZGVidWcgaG9va3MpLgorCisg
ICAgICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5oOgorICAgICAgICAoV2ViU2NyaXB0
RGVidWdnZXI6Om5lZWRQYXVzZUhhbmRsaW5nKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlw
dERlYnVnZ2VyLm1tOgorICAgICAgICAoV2ViU2NyaXB0RGVidWdnZXI6OldlYlNjcmlwdERlYnVn
Z2VyKToKKyAgICAgICAgKFdlYlNjcmlwdERlYnVnZ2VyOjpoYW5kbGVTb3VyY2VQYXJzZWQpOgor
ICAgICAgICAoV2ViU2NyaXB0RGVidWdnZXI6OmhhbmRsZVBhdXNlKToKKwogMjAxMy0wOS0yMSAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBj
b2RlIGluIFdlYktpdC9tYWMncyBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLgpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIuaAkocmV2aXNpb24gMTU2
MjQ1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NSwxNCArNTUsOSBAQCBwdWJsaWM6CiAgICAgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0
KCk7IH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFyc2VkKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpTb3VyY2VQcm92aWRlciosIGludCBlcnJvckxpbmUsIGNvbnN0IFdURjo6
U3RyaW5nJiBlcnJvck1zZyk7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGxFdmVudChjb25zdCBKU0M6
OkRlYnVnZ2VyQ2FsbEZyYW1lJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGF0U3RhdGVtZW50KGNv
bnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmV0dXJu
RXZlbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBleGNlcHRpb24oY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGJvb2wgaGFzSGFuZGxl
cik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJvZ3JhbShjb25zdCBKU0M6OkRlYnVn
Z2VyQ2FsbEZyYW1lJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKGNv
bnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVh
Y2hCcmVha3BvaW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlU291cmNlUGFyc2VkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpTb3VyY2VQ
cm92aWRlciosIGludCBlcnJvckxpbmUsIGNvbnN0IFdURjo6U3RyaW5nJiBlcnJvck1zZyk7Cisg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZVBhdXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB2
aXJ0dWFsIGJvb2wgbmVlZFBhdXNlSGFuZGxpbmcoSlNDOjpKU0dsb2JhbE9iamVjdCopIHsgcmV0
dXJuIHRydWU7IH0KIAogICAgIGJvb2wgbV9jYWxsaW5nRGVsZWdhdGU7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQkocmV2aXNpb24g
MTU2MjQ1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5t
bQkod29ya2luZyBjb3B5KQpAQCAtNzUsMTEgKzc1LDEzIEBAIFdlYlNjcmlwdERlYnVnZ2VyOjpX
ZWJTY3JpcHREZWJ1Z2dlcihKU0cKICAgICA6IG1fY2FsbGluZ0RlbGVnYXRlKGZhbHNlKQogICAg
ICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QpCiB7Cisg
ICAgc2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShQYXVzZU9uQWxsRXhjZXB0aW9ucyk7CisgICAg
ZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CiAgICAgYXR0YWNoKGdsb2JhbE9iamVjdCk7CiB9CiAK
IC8vIGNhbGxiYWNrcyAtIHJlbGF5IHRvIGRlbGVnYXRlCi12b2lkIFdlYlNjcmlwdERlYnVnZ2Vy
Ojpzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiBleGVjLCBTb3VyY2VQcm92aWRlciogc291cmNlUHJv
dmlkZXIsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNc2cpCit2b2lkIFdlYlNj
cmlwdERlYnVnZ2VyOjpoYW5kbGVTb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiBleGVjLCBTb3VyY2VQ
cm92aWRlciogc291cmNlUHJvdmlkZXIsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNc2cpCiB7CiAgICAgaWYgKG1fY2FsbGluZ0RlbGVnYXRlKQogICAgICAgICByZXR1cm47CkBA
IC0xMTYsMjIgKzExOCwyNCBAQCB2b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjpzb3VyY2VQYXJzZWQo
RXhlCiAgICAgbV9jYWxsaW5nRGVsZWdhdGUgPSBmYWxzZTsKIH0KIAotdm9pZCBXZWJTY3JpcHRE
ZWJ1Z2dlcjo6ZXhjZXB0aW9uKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxG
cmFtZSwgYm9vbCBoYXNIYW5kbGVyKQordm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6aGFuZGxlUGF1
c2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBpZiAobV9jYWxsaW5nRGVs
ZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY2FsbGluZ0RlbGVnYXRlID0gdHJ1ZTsK
IAotICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IHRvV2ViRnJhbWUoZGVidWdnZXJDYWxsRnJhbWUu
ZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKKyAgICBXZWJGcmFtZSAqd2ViRnJhbWUgPSB0b1dlYkZy
YW1lKGdsb2JhbE9iamVjdCk7CiAgICAgV2ViVmlldyAqd2ViVmlldyA9IFt3ZWJGcmFtZSB3ZWJW
aWV3XTsKKyAgICBjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUgPSBj
dXJyZW50RnJhbWUoKS0+ZGVidWdnZXJDYWxsRnJhbWUoKTsKICAgICBSZXRhaW5QdHI8V2ViU2Ny
aXB0Q2FsbEZyYW1lPiBjYWxsRnJhbWUgPSBhZG9wdE5TKFtbV2ViU2NyaXB0Q2FsbEZyYW1lIGFs
bG9jXSBfaW5pdFdpdGhHbG9iYWxPYmplY3Q6Y29yZSh3ZWJGcmFtZSktPnNjcmlwdCgpLndpbmRv
d1NjcmlwdE9iamVjdCgpIGRlYnVnZ2VyQ2FsbEZyYW1lOmRlYnVnZ2VyQ2FsbEZyYW1lXSk7CiAK
ICAgICBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSogY2FjaGUgPSBX
ZWJWaWV3R2V0U2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9ucyh3ZWJWaWV3KTsKICAg
ICBpZiAoY2FjaGUtPmV4Y2VwdGlvbldhc1JhaXNlZEZ1bmMpIHsKLSAgICAgICAgaWYgKGNhY2hl
LT5leGNlcHRpb25XYXNSYWlzZWRFeHBlY3RzSGFzSGFuZGxlckZsYWcpCisgICAgICAgIGlmIChj
YWNoZS0+ZXhjZXB0aW9uV2FzUmFpc2VkRXhwZWN0c0hhc0hhbmRsZXJGbGFnKSB7CisgICAgICAg
ICAgICBib29sIGhhc0hhbmRsZXIgPSBoYXNIYW5kbGVyRm9yRXhjZXB0aW9uQ2FsbGJhY2soKTsK
ICAgICAgICAgICAgIENhbGxTY3JpcHREZWJ1Z0RlbGVnYXRlKGNhY2hlLT5leGNlcHRpb25XYXNS
YWlzZWRGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpleGNlcHRpb25XYXNSYWlzZWQ6
aGFzSGFuZGxlcjpzb3VyY2VJZDpsaW5lOmZvcldlYkZyYW1lOiksIGNhbGxGcmFtZS5nZXQoKSwg
aGFzSGFuZGxlciwgZGVidWdnZXJDYWxsRnJhbWUuc291cmNlSWQoKSwgZGVidWdnZXJDYWxsRnJh
bWUubGluZSgpLCB3ZWJGcmFtZSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICBDYWxsU2NyaXB0RGVidWdEZWxlZ2F0ZShjYWNoZS0+ZXhjZXB0aW9uV2FzUmFpc2Vk
RnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZXhjZXB0aW9uV2FzUmFpc2VkOnNvdXJj
ZUlkOmxpbmU6Zm9yV2ViRnJhbWU6KSwgY2FsbEZyYW1lLmdldCgpLCBkZWJ1Z2dlckNhbGxGcmFt
ZS5zb3VyY2VJZCgpLCBkZWJ1Z2dlckNhbGxGcmFtZS5saW5lKCksIHdlYkZyYW1lKTsKICAgICB9
CiAK
</data>
<flag name="commit-queue"
          id="234584"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212383</attachid>
            <date>2013-09-23 13:11:54 -0700</date>
            <delta_ts>2013-11-07 16:25:40 -0800</delta_ts>
            <desc>Fix build issues.</desc>
            <filename>bug-121796.patch</filename>
            <type>text/plain</type>
            <size>118298</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2MjgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBA
CisyMDEzLTA5LTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZWZhY3RvciB0byBoaWRlIERlYnVnZ2VyIGNhbGxiYWNrIGludGVyZmFjZSBpbnNpZGUgSlNDLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzk2Lgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDEuIEV4dHJh
Y3QgdGhlIEpTQyBkZWJ1ZyBob29rIGNhbGxiYWNrcyBpbnRvIGEgSlNDOjpEZWJ1Z2dlckV2ZW50
SGFuZGxlcgorICAgICAgICAgICBpbnRlcmZhY2UuIFRoZSBKU0M6OkRlYnVnZ2VyIG5vdyBwcml2
YXRlbHkgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZS4KKworICAgICAgICAyLiBNb3ZlIG5vbi1m
cm9udCBlbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGZyb20gV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXIKKyAgICAgICAgICAgaW50byBKU0M6OkRlYnVnZ2VyLgorCisgICAgICAgIDMuIE1vdmUg
V2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFtZSBmdW5jdGlvbmFsaXR5IGludG8gYQorICAgICAg
ICAgICBEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yIGNsYXNzLiAgVGhlIEphdmFTY3JpcHRDYWxsRnJh
bWUgaXMgc3RpbGwKKyAgICAgICAgICAgbmVjZXNzYXJ5IGJlY2F1c2UgaXQgaXMgcHVibGlzaGVk
IGFzIGEgSlMgb2JqZWN0IHRvIHRoZSBJbnNwZWN0b3IuIEluCisgICAgICAgICAgIGEgbGF0ZXIg
dGFzaywgSSdsbCBjb25zb2xpZGF0ZSB0aGUgRGVidWdnZXI6OkZyYW1lVmlzaXRvciBmdW5jdGlv
bmFsaXR5CisgICAgICAgICAgIGludG8gRGVidWdnZXJDYWxsRnJhbWUsIGFuZCByZW1vdmUgdGhl
IG5lZWQgZm9yIHRoZSBEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yLgorCisgICAgICAgIDQuIENyZWF0
ZSBhIEpTQzo6QnJlYWtwb2ludCBiYXNlZCBvbiBhIHN1YnNldCBvZiBXZWJDb3JlOjpTY3JpcHRC
cmVha1BvaW50LgorCisgICAgICAgIDUuIFJlaW1wbGVtZW50IFdlYktpdC9tYWMncyBXZWJTY3Jp
cHREZWJ1Z2dlciBiYXNlZCBvbiB0aGUgbmV3CisgICAgICAgICAgIEpTQzo6RGVidWdnZXIgaW50
ZXJmYWNlIChpLmUuIG5vIHVzZSBvZiB0aGUgSlNDIGRlYnVnIGhvb2tzKS4KKworICAgICAgICA2
LiBTb3VyY2UgSUQgaXMgbm93IGFsd2F5cyBhbiBpbnRwdHJfdCBiZWxvdyB0aGUgSW5zcGVjdG9y
RGVidWdBZ2VudCBsYXllci4KKyAgICAgICAgICAgVGhlIEluc3BlY3RvckRlYnVnQWdlbnQgdGFr
ZXMgY2FyZSBvZiB0cmFuc2xhdGluZyBiZXR3ZWVuIHRoZSBJbnNwZWN0b3IKKyAgICAgICAgICAg
SlNPTiBwcm90b2NvbCdzIFN0cmluZyBzb3VyY2VJZCBhbmQgdGhlIGludHB0cl90IHNvdXJjZUlk
IHdoZW4gbmVlZGVkLgorCisgICAgICAgIDcuIEJyZWFrcG9pbnQgSUQgaXMgbm93IGEgbG9uZyBp
bnN0ZWFkIG9mIGEgU3RyaW5nLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKToKKyAgICAgICAgKiBkZWJ1
Z2dlci9CcmVha3BvaW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9T
Y3JpcHRCcmVha3BvaW50LmguCisgICAgICAgIChKU0M6OkJyZWFrcG9pbnQ6OkJyZWFrcG9pbnQp
OgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXI6OkRlYnVnZ2VyKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmRldGFjaCk6CisgICAgICAg
IChKU0M6OkRlYnVnZ2VyOjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6
OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6aGFzQnJlYWtwb2lu
dCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpjbGVhckJyZWFrcG9pbnRzKToKKyAgICAgICAg
KEpTQzo6RGVidWdnZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKToKKyAgICAgICAgKEpTQzo6
RGVidWdnZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUpOgorICAgICAgICAoSlNDOjpEZWJ1
Z2dlcjo6c2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6
YnJlYWtQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmNvbnRpbnVlUHJvZ3JhbSk6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzdGVwSW50b1N0YXRlbWVudCk6CisgICAgICAgIChK
U0M6OkRlYnVnZ2VyOjpzdGVwT3ZlclN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
OjpzdGVwT3V0T2ZGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzb3VyY2VQYXJz
ZWQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6Y3JlYXRlQ2FsbEZyYW1lKToKKyAgICAgICAg
KEpTQzo6RGVidWdnZXI6OnVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQpOgorICAgICAg
ICAoSlNDOjpEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
OjpjYWxsRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6YXRTdGF0ZW1lbnQpOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6ZXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OndpbGxFeGVjdXRlUHJvZ3Jh
bSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpkaWRFeGVjdXRlUHJvZ3JhbSk6CisgICAgICAg
IChKU0M6OkRlYnVnZ2VyOjpkaWRSZWFjaEJyZWFrcG9pbnQpOgorICAgICAgICAqIGRlYnVnZ2Vy
L0RlYnVnZ2VyLmg6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyRXZlbnRIYW5kbGVyOjp+RGVidWdn
ZXJFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyRnJhbWVWaXNpdG9y
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENh
bGxGcmFtZS5jcHAuCisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OkZyYW1l
VmlzaXRvcik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OmNhbGxlcik6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OnNjb3BlQ2hhaW4pOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yOjpkeW5hbWljR2xvYmFsT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6RGVidWdnZXI6OkZyYW1lVmlzaXRvcjo6ZnVuY3Rpb25OYW1lKToKKyAg
ICAgICAgKEpTQzo6RGVidWdnZXI6OkZyYW1lVmlzaXRvcjo6dHlwZSk6CisgICAgICAgIChKU0M6
OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OnRoaXNPYmplY3QpOgorICAgICAgICAoSlNDOjpEZWJ1
Z2dlcjo6RnJhbWVWaXNpdG9yOjpleGVjKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OkZyYW1l
VmlzaXRvcjo6ZXZhbHVhdGUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNw
cDoKKyAgICAgICAgKEpTQzo6dW53aW5kQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OnVud2luZCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkZWJ1Zyk6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjcmVhdGVQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OmNyZWF0ZUV2YWxDb2RlQmxvY2spOgorCiAyMDEzLTA5LTIzICBQYXRyaWNrIEdhbnN0
ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIENsZWFudXAgQ01ha2UgZmlsZXMg
aW4gSmF2YVNjcmlwdENvcmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDE1NjI4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcAogICAgIGRlYnVnZ2VyL0RlYnVnZ2VyQWN0
aXZhdGlvbi5jcHAKICAgICBkZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKKyAgICBkZWJ1
Z2dlci9EZWJ1Z2dlckZyYW1lVmlzaXRvci5jcHAKIAogICAgIGRmZy9ERkdBYnN0cmFjdEhlYXAu
Y3BwCiAgICAgZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU2MjgxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTU0MSwx
MCArNTQxLDEyIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dyaXRlQmFycmllclN1cHBvcnQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJTdXBwb3J0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9jb25maWcuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0JyZWFrcG9pbnQu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24u
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckZyYW1lVmlzaXRvci5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvRm9yd2FyZGluZ0hlYWRlcnMvSmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxNTYyODEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiw3
IEBAIFNPVVJDRVMgKz0gXAogICAgIGhlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgXAogICAg
IGRlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgXAogICAgIGRlYnVnZ2VyL0RlYnVnZ2Vy
Q2FsbEZyYW1lLmNwcCBcCisgICAgZGVidWdnZXIvRGVidWdnZXJGcmFtZVZpc2l0b3IuY3BwIFwK
ICAgICBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgXAogICAgIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3Bw
IFwKICAgICBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTYyODEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0zMjUsNiArMzI1LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZWJ1Z2dlclxEZWJ1Z2dlckFjdGl2YXRpb24uY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCIgLz4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckZyYW1lVmlzaXRvci5jcHAiIC8+DQog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0NvbXBpbGF0aW9uS2V5LmNwcCIgLz4N
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29tcGlsYXRpb25Nb2RlLmNwcCIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRHJpdmVyLmNwcCIgLz4NCkBA
IC02NzYsNiArNjc3LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb21waWxl
clxMYWJlbFNjb3BlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvbXBp
bGVyXFJlZ2lzdGVySUQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjb25maWcu
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxCcmVha3BvaW50Lmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXIuaCIgLz4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckFjdGl2YXRpb24u
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckNhbGxG
cmFtZS5oIiAvPg0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE1NjI4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwko
d29ya2luZyBjb3B5KQpAQCAtMTkyLDYgKzE5Miw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckNhbGxGcmFtZS5jcHAiPg0KICAgICAgIDxGaWx0ZXI+ZGVi
dWdnZXI8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGVidWdnZXJcRGVidWdnZXJGcmFtZVZpc2l0b3IuY3BwIj4NCisgICAgICA8RmlsdGVy
PmRlYnVnZ2VyPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRpc2Fzc2VtYmxlclxEaXNhc3NlbWJsZXIuY3BwIj4NCiAgICAgICA8RmlsdGVy
PmRpc2Fzc2VtYmxlcjwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCkBAIC0xMTQ5LDYgKzEx
NTIsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvbXBpbGVyXFJlZ2lzdGVy
SUQuaCI+DQogICAgICAgPEZpbHRlcj5ieXRlY29kZWNvbXBpbGVyPC9GaWx0ZXI+DQogICAgIDwv
Q2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXEJyZWFrcG9p
bnQuaCI+DQorICAgICAgPEZpbHRlcj5kZWJ1Z2dlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlci5oIj4NCiAg
ICAgICA8RmlsdGVyPmRlYnVnZ2VyPC9GaWx0ZXI+DQogICAgIDwvQ2xJbmNsdWRlPg0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTYyODEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTE1Miw2ICsxMTUyLDggQEAKIAkJRTQ5REMxNkQxMkVGMjk1MzAw
MTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5
QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi87IH07CiAJCUZFMjBDRTlFMTVG
MDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9v
cC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZF
MjY0MTI3MTdFN0E4OUEwMEU1Q0M4RSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTI2NDEyNDE3RTdBODlBMDBFNUNDOEUgLyog
QnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUZFMzhDOTczMTdFN0NFQTgwMEU0RDBBRiAvKiBEZWJ1Z2dlckZyYW1lVmlzaXRvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM4Qzk3
MjE3RTdDRUE4MDBFNEQwQUYgLyogRGVidWdnZXJGcmFtZVZpc2l0b3IuY3BwICovOyB9OwogCQlG
RTRBMzMxRjE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QTMzMUQxNUJEMkUwNzAwNkY1NEYz
IC8qIFZNSW5zcGVjdG9yLmNwcCAqLzsgfTsKIAkJRkU0QTMzMjAxNUJEMkUwNzAwNkY1NEYzIC8q
IFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTY2MTcyODE3NzRFMDM1
MDA0OTVCMDAgLyogVk1TdGFja0JvdW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkU2NjE3MjcxNzc0RTAzNTAwNDk1QjAwIC8qIFZNU3RhY2tCb3Vu
ZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjM4Nyw2ICsyMzg5LDggQEAKIAkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNDSlNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgfTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRDTG9vcC5jcHA7IHBhdGggPSBs
bGludC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENF
OUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTI2NDEyNDE3RTdBODlBMDBFNUNDOEUgLyogQnJl
YWtwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCcmVha3BvaW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMzhDOTcyMTdFN0NFQTgwMEU0RDBBRiAv
KiBEZWJ1Z2dlckZyYW1lVmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZWJ1Z2dlckZyYW1lVmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFNEEzMzFEMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWTUluc3BlY3Rvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNEEzMzFFMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3Bl
Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUluc3BlY3Rvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTY2MTcyNzE3NzRFMDM1MDA0OTVCMDAgLyog
Vk1TdGFja0JvdW5kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTVN0YWNr
Qm91bmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTU5LDYgKzI5NjMsOCBA
QAogCQkxNDgwREI5QTBEREMyMjMxMDAzQ0ZERjIgLyogZGVidWdnZXIgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUZFMzhDOTcyMTdFN0NFQTgwMEU0RDBB
RiAvKiBEZWJ1Z2dlckZyYW1lVmlzaXRvci5jcHAgKi8sCisJCQkJRkUyNjQxMjQxN0U3QTg5QTAw
RTVDQzhFIC8qIEJyZWFrcG9pbnQuaCAqLywKIAkJCQlGNjkyQTg1ODAyNTU1OTdEMDFGRjYwRjcg
LyogRGVidWdnZXIuY3BwICovLAogCQkJCUY2OTJBODU5MDI1NTU5N0QwMUZGNjBGNyAvKiBEZWJ1
Z2dlci5oICovLAogCQkJCUJDMzEzNTYzMEYzMDJGQTMwMDNERkQzQSAvKiBEZWJ1Z2dlckFjdGl2
YXRpb24uY3BwICovLApAQCAtMzg2Nyw2ICszODczLDcgQEAKIAkJCQkwRjgzMzVCODE2MzlDMUVB
MDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdBOEFGMzUxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGRTI2NDEyNzE3RTdBODlBMDBFNUNDOEUgLyogQnJlYWtwb2ludC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5Q29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBB
cnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQ1NTE1RDA3MDU3MDA2
QTU5N0MgLyogQXJyYXlQcm9maWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTQ4OTEsNiArNDg5OCw3
IEBACiAJCQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0N0YzOUM1MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkUzOEM5NzMxN0U3Q0VBODAwRTREMEFG
IC8qIERlYnVnZ2VyRnJhbWVWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODIz
MTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzMx
MzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU2MjgxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSw3IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBV
bmxpbmtlZEZ1bmMKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IGNvZGVDYWNoZS0+Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUoZXhlYy0+dm0o
KSwgbmFtZSwgc291cmNlLCBlcnJvcik7CiAKICAgICBpZiAoZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5oYXNEZWJ1Z2dlcigpKQotICAgICAgICBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmRlYnVnZ2VyKCktPnNvdXJjZVBhcnNlZChleGVjLCBzb3VyY2UucHJvdmlkZXIoKSwgZXJy
b3IubV9saW5lLCBlcnJvci5tX21lc3NhZ2UpOworICAgICAgICBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmRlYnVnZ2VyKCktPmV2ZW50SGFuZGxlcigpLT5zb3VyY2VQYXJzZWQoZXhlYywg
c291cmNlLnByb3ZpZGVyKCksIGVycm9yLm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsKIAogICAg
IGlmIChlcnJvci5tX3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSkgewogICAgICAgICAq
ZXhjZXB0aW9uID0gZXJyb3IudG9FcnJvck9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIHNvdXJjZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvQnJlYWtw
b2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9CcmVh
a3BvaW50LmgJKHJldmlzaW9uIDE1NjAyMSkJKGZyb20gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1NjcmlwdEJyZWFrcG9pbnQuaDoxNTYwMjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvQnJlYWtwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTY3JpcHRCcmVha3BvaW50X2gKKyNkZWZpbmUgU2NyaXB0QnJlYWtwb2ludF9oCisKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBTY3JpcHRCcmVha3BvaW50
QWN0aW9uVHlwZUxvZywKKyAgICBTY3JpcHRCcmVha3BvaW50QWN0aW9uVHlwZUV2YWx1YXRlLAor
ICAgIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlU291bmQKK30gU2NyaXB0QnJlYWtwb2ludEFj
dGlvblR5cGU7CisKK3N0cnVjdCBTY3JpcHRCcmVha3BvaW50QWN0aW9uIHsKKyAgICBTY3JpcHRC
cmVha3BvaW50QWN0aW9uKFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlIHR5cGUsIGNvbnN0IFN0
cmluZyYgZGF0YSkKKyAgICAgICAgOiB0eXBlKHR5cGUpCisgICAgICAgICwgZGF0YShkYXRhKQor
ICAgIHsKKyAgICB9CisKKyAgICBTY3JpcHRCcmVha3BvaW50QWN0aW9uVHlwZSB0eXBlOworICAg
IFN0cmluZyBkYXRhOworfTsKKworc3RydWN0IFNjcmlwdEJyZWFrcG9pbnQgeworICAgIFNjcmlw
dEJyZWFrcG9pbnQoKQorICAgIHsKKyAgICB9CisKKyAgICBTY3JpcHRCcmVha3BvaW50KGludCBs
aW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9v
bCBhdXRvQ29udGludWUpCisgICAgICAgIDogbGluZU51bWJlcihsaW5lTnVtYmVyKQorICAgICAg
ICAsIGNvbHVtbk51bWJlcihjb2x1bW5OdW1iZXIpCisgICAgICAgICwgY29uZGl0aW9uKGNvbmRp
dGlvbikKKyAgICAgICAgLCBhdXRvQ29udGludWUoYXV0b0NvbnRpbnVlKQorICAgIHsKKyAgICB9
CisKKyAgICBTY3JpcHRCcmVha3BvaW50KGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVy
LCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgVmVjdG9yPFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24+
JiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51ZSkKKyAgICAgICAgOiBsaW5lTnVtYmVyKGxpbmVO
dW1iZXIpCisgICAgICAgICwgY29sdW1uTnVtYmVyKGNvbHVtbk51bWJlcikKKyAgICAgICAgLCBj
b25kaXRpb24oY29uZGl0aW9uKQorICAgICAgICAsIGFjdGlvbnMoYWN0aW9ucykKKyAgICAgICAg
LCBhdXRvQ29udGludWUoYXV0b0NvbnRpbnVlKQorICAgIHsKKyAgICB9CisKKyAgICBpbnQgbGlu
ZU51bWJlcjsKKyAgICBpbnQgY29sdW1uTnVtYmVyOworICAgIFN0cmluZyBjb25kaXRpb247Cisg
ICAgVmVjdG9yPFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24+IGFjdGlvbnM7CisgICAgYm9vbCBhdXRv
Q29udGludWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhZGVm
aW5lZChTY3JpcHRCcmVha3BvaW50X2gpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvQnJlYWtwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9CcmVha3BvaW50LmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9CcmVha3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsNjAgKzI3LDUwIEBACiAgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLSNpZm5kZWYgU2NyaXB0QnJlYWtwb2ludF9oCi0jZGVmaW5lIFNjcmlwdEJyZWFrcG9p
bnRfaAorI2lmbmRlZiBCcmVha3BvaW50X2gKKyNkZWZpbmUgQnJlYWtwb2ludF9oCiAKICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLW5h
bWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBKU0MgewogCi10eXBlZGVmIGVudW0gewotICAg
IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlTG9nLAotICAgIFNjcmlwdEJyZWFrcG9pbnRBY3Rp
b25UeXBlRXZhbHVhdGUsCi0gICAgU2NyaXB0QnJlYWtwb2ludEFjdGlvblR5cGVTb3VuZAotfSBT
Y3JpcHRCcmVha3BvaW50QWN0aW9uVHlwZTsKLQotc3RydWN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rp
b24gewotICAgIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24oU2NyaXB0QnJlYWtwb2ludEFjdGlvblR5
cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQotICAgICAgICA6IHR5cGUodHlwZSkKLSAgICAg
ICAgLCBkYXRhKGRhdGEpCi0gICAgewotICAgIH0KLQotICAgIFNjcmlwdEJyZWFrcG9pbnRBY3Rp
b25UeXBlIHR5cGU7Ci0gICAgU3RyaW5nIGRhdGE7Ci19OwordHlwZWRlZiBsb25nIEJyZWFrcG9p
bnRJZDsKK2NvbnN0IGxvbmcgbnVsbEJyZWFrcG9pbnRJZCA9IDA7CiAKLXN0cnVjdCBTY3JpcHRC
cmVha3BvaW50IHsKLSAgICBTY3JpcHRCcmVha3BvaW50KCkKK3N0cnVjdCBCcmVha3BvaW50IHsK
KyAgICBCcmVha3BvaW50KCkKICAgICB7CiAgICAgfQogCi0gICAgU2NyaXB0QnJlYWtwb2ludChp
bnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24s
IGJvb2wgYXV0b0NvbnRpbnVlKQotICAgICAgICA6IGxpbmVOdW1iZXIobGluZU51bWJlcikKKyAg
ICBCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlkLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVt
bk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIGJvb2wgYXV0b0NvbnRpbnVlKQorICAg
ICAgICA6IGlkKG51bGxCcmVha3BvaW50SWQpCisgICAgICAgICwgc291cmNlSWQoc291cmNlSWQp
CisgICAgICAgICwgbGluZU51bWJlcihsaW5lTnVtYmVyKQogICAgICAgICAsIGNvbHVtbk51bWJl
cihjb2x1bW5OdW1iZXIpCiAgICAgICAgICwgY29uZGl0aW9uKGNvbmRpdGlvbikKICAgICAgICAg
LCBhdXRvQ29udGludWUoYXV0b0NvbnRpbnVlKQogICAgIHsKICAgICB9CiAKLSAgICBTY3JpcHRC
cmVha3BvaW50KGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcm
IGNvbmRpdGlvbiwgVmVjdG9yPFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24+JiBhY3Rpb25zLCBib29s
IGF1dG9Db250aW51ZSkKLSAgICAgICAgOiBsaW5lTnVtYmVyKGxpbmVOdW1iZXIpCi0gICAgICAg
ICwgY29sdW1uTnVtYmVyKGNvbHVtbk51bWJlcikKLSAgICAgICAgLCBjb25kaXRpb24oY29uZGl0
aW9uKQotICAgICAgICAsIGFjdGlvbnMoYWN0aW9ucykKLSAgICAgICAgLCBhdXRvQ29udGludWUo
YXV0b0NvbnRpbnVlKQorICAgIEJyZWFrcG9pbnQoQnJlYWtwb2ludElkIGJyZWFrcG9pbnRJZCwg
Y29uc3QgQnJlYWtwb2ludCYgb3RoZXIpCisgICAgICAgIDogaWQoYnJlYWtwb2ludElkKQorICAg
ICAgICAsIHNvdXJjZUlkKG90aGVyLnNvdXJjZUlkKQorICAgICAgICAsIGxpbmVOdW1iZXIob3Ro
ZXIubGluZU51bWJlcikKKyAgICAgICAgLCBjb2x1bW5OdW1iZXIob3RoZXIuY29sdW1uTnVtYmVy
KQorICAgICAgICAsIGNvbmRpdGlvbihvdGhlci5jb25kaXRpb24pCisgICAgICAgICwgYXV0b0Nv
bnRpbnVlKG90aGVyLmF1dG9Db250aW51ZSkKICAgICB7CiAgICAgfQogCisgICAgQnJlYWtwb2lu
dElkIGlkOworICAgIGludHB0cl90IHNvdXJjZUlkOwogICAgIGludCBsaW5lTnVtYmVyOwogICAg
IGludCBjb2x1bW5OdW1iZXI7CiAgICAgU3RyaW5nIGNvbmRpdGlvbjsKLSAgICBWZWN0b3I8U2Ny
aXB0QnJlYWtwb2ludEFjdGlvbj4gYWN0aW9uczsKICAgICBib29sIGF1dG9Db250aW51ZTsKIH07
CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIEpTQwogCi0jZW5kaWYg
Ly8gIWRlZmluZWQoU2NyaXB0QnJlYWtwb2ludF9oKQorI2VuZGlmIC8vIEJyZWFrcG9pbnRfaApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShyZXZp
c2lvbiAxNTYyODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwOC0yMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICoKQEAgLTM3LDcgKzM3LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogY2xhc3MgUmVjb21waWxlciA6IHB1YmxpYyBNYXJr
ZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewogcHVibGljOgotICAgIFJlY29tcGlsZXIoRGVidWdnZXIq
KTsKKyAgICBSZWNvbXBpbGVyKERlYnVnZ2VyRXZlbnRIYW5kbGVyKik7CiAgICAgflJlY29tcGls
ZXIoKTsKICAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKik7CiAKQEAgLTQ1LDEyICs0NSwxMiBA
QCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaFNldDxGdW5jdGlvbkV4ZWN1dGFibGUqPiBGdW5j
dGlvbkV4ZWN1dGFibGVTZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFNvdXJjZVByb3ZpZGVyKiwg
RXhlY1N0YXRlKj4gU291cmNlUHJvdmlkZXJNYXA7CiAgICAgCi0gICAgRGVidWdnZXIqIG1fZGVi
dWdnZXI7CisgICAgRGVidWdnZXJFdmVudEhhbmRsZXIqIG1fZGVidWdnZXI7CiAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlU2V0IG1fZnVuY3Rpb25FeGVjdXRhYmxlczsKICAgICBTb3VyY2VQcm92aWRl
ck1hcCBtX3NvdXJjZVByb3ZpZGVyczsKIH07CiAKLWlubGluZSBSZWNvbXBpbGVyOjpSZWNvbXBp
bGVyKERlYnVnZ2VyKiBkZWJ1Z2dlcikKK2lubGluZSBSZWNvbXBpbGVyOjpSZWNvbXBpbGVyKERl
YnVnZ2VyRXZlbnRIYW5kbGVyKiBkZWJ1Z2dlcikKICAgICA6IG1fZGVidWdnZXIoZGVidWdnZXIp
CiB7CiB9CkBAIC04Myw3ICs4Myw3IEBAIGlubGluZSB2b2lkIFJlY29tcGlsZXI6Om9wZXJhdG9y
KCkoSlNDZWwKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmdW5jdGlvbi0+c2NvcGUoKS0+Z2xvYmFs
T2JqZWN0KCktPkpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7CiAgICAgZXhlY3V0YWJsZS0+
Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKICAgICBleGVjdXRhYmxlLT5jbGVhclVubGlua2Vk
Q29kZUZvclJlY29tcGlsYXRpb25JZk5vdENvbXBpbGluZygpOwotICAgIGlmIChtX2RlYnVnZ2Vy
ID09IGZ1bmN0aW9uLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkKKyAgICBp
ZiAobV9kZWJ1Z2dlciA9PSBmdW5jdGlvbi0+c2NvcGUoKS0+Z2xvYmFsT2JqZWN0KCktPmRlYnVn
Z2VyKCktPmV2ZW50SGFuZGxlcigpKQogICAgICAgICBtX3NvdXJjZVByb3ZpZGVycy5hZGQoZXhl
Y3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlYyk7CiB9CiAKQEAgLTkxLDYgKzkxLDIw
IEBAIGlubGluZSB2b2lkIFJlY29tcGlsZXI6Om9wZXJhdG9yKCkoSlNDZWwKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK0RlYnVnZ2VyOjpEZWJ1Z2dlcihib29sIGlzV29ya2VyVGhyZWFkKQorICAgIDog
bV9pc1dvcmtlclRocmVhZChpc1dvcmtlclRocmVhZCkKKyAgICAsIG1fcGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZShEb250UGF1c2VPbkV4Y2VwdGlvbnMpCisgICAgLCBtX3BhdXNlT25OZXh0U3RhdGVt
ZW50KGZhbHNlKQorICAgICwgbV9wYXVzZWQoZmFsc2UpCisgICAgLCBtX2JyZWFrcG9pbnRzQWN0
aXZhdGVkKHRydWUpCisgICAgLCBtX2hhc0hhbmRsZXJGb3JFeGNlcHRpb25DYWxsYmFjayhmYWxz
ZSkKKyAgICAsIG1fcGF1c2VPbkNhbGxGcmFtZSgwKQorICAgICwgbV9sYXN0RXhlY3V0ZWRMaW5l
KC0xKQorICAgICwgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJZCgtMSkKKyAgICAsIG1fdG9wQnJlYWtw
b2ludElkKG51bGxCcmVha3BvaW50SWQpCit7Cit9CisKIERlYnVnZ2VyOjp+RGVidWdnZXIoKQog
ewogICAgIEhhc2hTZXQ8SlNHbG9iYWxPYmplY3QqPjo6aXRlcmF0b3IgZW5kID0gbV9nbG9iYWxP
YmplY3RzLmVuZCgpOwpAQCAtMTA3LDYgKzEyMSwxNSBAQCB2b2lkIERlYnVnZ2VyOjphdHRhY2go
SlNHbG9iYWxPYmplY3QqIGdsCiAKIHZvaWQgRGVidWdnZXI6OmRldGFjaChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogeworICAgIC8vIElmIHdlJ3JlIGRldGFjaGluZyBmcm9tIHRoZSBj
dXJyZW50bHkgZXhlY3V0aW5nIGdsb2JhbCBvYmplY3QsIG1hbnVhbGx5IHRlYXIgZG93biBvdXIK
KyAgICAvLyBzdGFjaywgc2luY2Ugd2Ugd29uJ3QgZ2V0IGZ1cnRoZXIgZGVidWdnZXIgY2FsbGJh
Y2tzIHRvIGRvIHNvLiBBbHNvLCByZXN1bWUgZXhlY3V0aW9uLAorICAgIC8vIHNpbmNlIHRoZXJl
J3Mgbm8gcG9pbnQgaW4gc3RheWluZyBwYXVzZWQgb25jZSBhIHdpbmRvdyBjbG9zZXMuCisgICAg
aWYgKG1fY3VycmVudENhbGxGcmFtZSAmJiBtX2N1cnJlbnRDYWxsRnJhbWUtPmR5bmFtaWNHbG9i
YWxPYmplY3QoKSA9PSBnbG9iYWxPYmplY3QpIHsKKyAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1l
ID0gMDsKKyAgICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gMDsKKyAgICAgICAgY29udGludWVQ
cm9ncmFtKCk7CisgICAgfQorCiAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0cy5jb250YWlucyhn
bG9iYWxPYmplY3QpKTsKICAgICBtX2dsb2JhbE9iamVjdHMucmVtb3ZlKGdsb2JhbE9iamVjdCk7
CiAgICAgZ2xvYmFsT2JqZWN0LT5zZXREZWJ1Z2dlcigwKTsKQEAgLTE0OCw0ICsxNzEsMzIzIEBA
IEpTVmFsdWUgZXZhbHVhdGVJbkdsb2JhbENhbGxGcmFtZShjb25zdCAKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCitCcmVha3BvaW50SWQgRGVidWdnZXI6OnNldEJyZWFrcG9pbnQoaW50cHRyX3Qg
c291cmNlSWQsIGNvbnN0IEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQsIGludCogYWN0dWFsTGluZU51
bWJlciwgaW50KiBhY3R1YWxDb2x1bW5OdW1iZXIpCit7CisgICAgaWYgKCFzb3VyY2VJZCkKKyAg
ICAgICAgcmV0dXJuIG51bGxCcmVha3BvaW50SWQ7ICAgIAorICAgIFNvdXJjZUlkVG9CcmVha3Bv
aW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5maW5kKHNvdXJj
ZUlkKTsKKyAgICBpZiAoaXQgPT0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZW5kKCkpCisgICAg
ICAgIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuc2V0KHNvdXJjZUlkLCBMaW5lVG9CcmVh
a3BvaW50c01hcCgpKS5pdGVyYXRvcjsKKyAgICBMaW5lVG9CcmVha3BvaW50c01hcDo6aXRlcmF0
b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChicmVha3BvaW50LmxpbmVOdW1iZXIgKyAxKTsK
KyAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnZhbHVlLmVuZCgpKQorICAgICAgICBicmVha3NJdCA9
IGl0LT52YWx1ZS5zZXQoYnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSwgQnJlYWtwb2ludHNJbkxp
bmUoKSkuaXRlcmF0b3I7CisKKyAgICBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVjdG9yID0g
YnJlYWtzSXQtPnZhbHVlOworICAgIHVuc2lnbmVkIGJyZWFrc0NvdW50ID0gYnJlYWtzVmVjdG9y
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJlYWtzQ291bnQ7IGkrKykg
eworICAgICAgICBpZiAoYnJlYWtzVmVjdG9yLmF0KGkpLmNvbHVtbk51bWJlciA9PSBicmVha3Bv
aW50LmNvbHVtbk51bWJlcikKKyAgICAgICAgICAgIHJldHVybiBudWxsQnJlYWtwb2ludElkOwor
ICAgIH0KKworICAgIEJyZWFrcG9pbnRJZCBpZCA9ICsrbV90b3BCcmVha3BvaW50SWQ7CisgICAg
UkVMRUFTRV9BU1NFUlQoaWQgIT0gbnVsbEJyZWFrcG9pbnRJZCk7CisgICAgYnJlYWtzVmVjdG9y
LmFwcGVuZChCcmVha3BvaW50KGlkLCBicmVha3BvaW50KSk7CisKKyAgICBtX2JyZWFrcG9pbnRJ
ZFRvQnJlYWtwb2ludC5zZXQoaWQsICZicmVha3NWZWN0b3IubGFzdCgpKTsKKworICAgICphY3R1
YWxMaW5lTnVtYmVyID0gYnJlYWtwb2ludC5saW5lTnVtYmVyOworICAgICphY3R1YWxDb2x1bW5O
dW1iZXIgPSBicmVha3BvaW50LmNvbHVtbk51bWJlcjsKKyAgICByZXR1cm4gaWQ7Cit9CisKK3Zv
aWQgRGVidWdnZXI6OnJlbW92ZUJyZWFrcG9pbnQoQnJlYWtwb2ludElkIGlkKQoreworICAgIGlm
IChpZCA9PSBudWxsQnJlYWtwb2ludElkKQorICAgICAgICByZXR1cm47CisKKyAgICBCcmVha3Bv
aW50SWRUb0JyZWFrcG9pbnRNYXA6Oml0ZXJhdG9yIGlkSXQgPSBtX2JyZWFrcG9pbnRJZFRvQnJl
YWtwb2ludC5maW5kKGlkKTsKKyAgICBBU1NFUlQoaWRJdCAhPSBtX2JyZWFrcG9pbnRJZFRvQnJl
YWtwb2ludC5lbmQoKSk7CisgICAgQnJlYWtwb2ludCYgYnAgPSAqaWRJdC0+dmFsdWU7CisKKyAg
ICBpbnRwdHJfdCBzb3VyY2VJZCA9IGJwLnNvdXJjZUlkOworICAgIEFTU0VSVChzb3VyY2VJZCk7
CisgICAgU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9IG1fc291cmNlSWRU
b0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSWQpOworICAgIEFTU0VSVChpdCAhPSBtX3NvdXJjZUlk
VG9CcmVha3BvaW50cy5lbmQoKSk7CisgICAgTGluZVRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9y
IGJyZWFrc0l0ID0gaXQtPnZhbHVlLmZpbmQoYnAubGluZU51bWJlciArIDEpOworICAgIEFTU0VS
VChicmVha3NJdCAhPSBpdC0+dmFsdWUuZW5kKCkpOworCisgICAgQnJlYWtwb2ludHNJbkxpbmUm
IGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT52YWx1ZTsKKyAgICB1bnNpZ25lZCBicmVha3NDb3Vu
dCA9IGJyZWFrc1ZlY3Rvci5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJy
ZWFrc0NvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKGJyZWFrc1ZlY3Rvci5hdChpKS5pZCA9PSBz
dGF0aWNfY2FzdDxpbnQ+KGJwLmlkKSkgeworICAgICAgICAgICAgYnJlYWtzVmVjdG9yLnJlbW92
ZShpKTsKKyAgICAgICAgICAgIG1fYnJlYWtwb2ludElkVG9CcmVha3BvaW50LnJlbW92ZShpZEl0
KTsKKworICAgICAgICAgICAgaWYgKGJyZWFrc1ZlY3Rvci5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgICAgICBpdC0+dmFsdWUucmVtb3ZlKGJyZWFrc0l0KTsKKyAgICAgICAgICAgICAgICBpZiAo
aXQtPnZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zb3VyY2VJZFRvQnJl
YWtwb2ludHMucmVtb3ZlKGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorfQorCitib29sIERlYnVnZ2VyOjpoYXNCcmVha3BvaW50KGludHB0
cl90IHNvdXJjZUlkLCBjb25zdCBUZXh0UG9zaXRpb24mIHBvc2l0aW9uLCBCcmVha3BvaW50ICpo
aXRCcmVha3BvaW50KSBjb25zdAoreworICAgIGlmICghbV9icmVha3BvaW50c0FjdGl2YXRlZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSWQp
OworICAgIGlmIChpdCA9PSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaW50IGxpbmVOdW1iZXIgPSBwb3NpdGlvbi5tX2xpbmUuemVy
b0Jhc2VkSW50KCk7CisgICAgaW50IGNvbHVtbk51bWJlciA9IHBvc2l0aW9uLm1fY29sdW1uLnpl
cm9CYXNlZEludCgpOworICAgIGlmIChsaW5lTnVtYmVyIDwgMCB8fCBjb2x1bW5OdW1iZXIgPCAw
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMaW5lVG9CcmVha3BvaW50c01hcDo6Y29u
c3RfaXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChsaW5lTnVtYmVyICsgMSk7Cisg
ICAgaWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYm9vbCBoaXQgPSBmYWxzZTsKKyAgICBjb25zdCBCcmVha3BvaW50c0luTGluZSYg
YnJlYWtzVmVjdG9yID0gYnJlYWtzSXQtPnZhbHVlOworICAgIHVuc2lnbmVkIGJyZWFrc0NvdW50
ID0gYnJlYWtzVmVjdG9yLnNpemUoKTsKKyAgICB1bnNpZ25lZCBpOworICAgIGZvciAoaSA9IDA7
IGkgPCBicmVha3NDb3VudDsgaSsrKSB7CisgICAgICAgIGludCBicmVha0xpbmUgPSBicmVha3NW
ZWN0b3IuYXQoaSkubGluZU51bWJlcjsKKyAgICAgICAgaW50IGJyZWFrQ29sdW1uID0gYnJlYWtz
VmVjdG9yLmF0KGkpLmNvbHVtbk51bWJlcjsKKyAgICAgICAgLy8gU2luY2UgZnJvbnRlbmQgdHJ1
bmNhdGVzIHRoZSBpbmRlbnQsIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gYSBsaW5lIG11c3QgbWF0
Y2ggdGhlIGJyZWFrcG9pbnQgKGxpbmUsMCkuCisgICAgICAgIGlmICgobGluZU51bWJlciAhPSBt
X2xhc3RFeGVjdXRlZExpbmUgJiYgbGluZU51bWJlciA9PSBicmVha0xpbmUgJiYgIWJyZWFrQ29s
dW1uKQorICAgICAgICAgICAgfHwgKGxpbmVOdW1iZXIgPT0gYnJlYWtMaW5lICYmIGNvbHVtbk51
bWJlciA9PSBicmVha0NvbHVtbikpIHsKKyAgICAgICAgICAgIGhpdCA9IHRydWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWhpdCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKGhpdEJyZWFrcG9pbnQpCisgICAgICAgICpoaXRCcmVha3Bv
aW50ID0gYnJlYWtzVmVjdG9yLmF0KGkpOworCisgICAgLy8gQW4gZW1wdHkgY29uZGl0aW9uIGNv
dW50cyBhcyBubyBjb25kaXRpb24gd2hpY2ggaXMgZXF1aXZhbGVudCB0byAidHJ1ZSIuCisgICAg
aWYgKGJyZWFrc1ZlY3Rvci5hdChpKS5jb25kaXRpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
bV9jdXJyZW50Q2FsbEZyYW1lLT5ldmFsdWF0ZShicmVha3NWZWN0b3IuYXQoaSkuY29uZGl0aW9u
LCBleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgLy8gQW4gZXJyb25l
b3VzIGNvbmRpdGlvbiBjb3VudHMgYXMgImZhbHNlIi4KKyAgICAgICAgaGFuZGxlRXhjZXB0aW9u
SW5CcmVha3BvaW50Q29uZGl0aW9uKG1fY3VycmVudENhbGxGcmFtZS0+ZXhlYygpLCBleGNlcHRp
b24pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiByZXN1bHQudG9C
b29sZWFuKG1fY3VycmVudENhbGxGcmFtZS0+ZXhlYygpKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6
Y2xlYXJCcmVha3BvaW50cygpCit7CisgICAgbV90b3BCcmVha3BvaW50SWQgPSBudWxsQnJlYWtw
b2ludElkOworICAgIG1fYnJlYWtwb2ludElkVG9CcmVha3BvaW50LmNsZWFyKCk7CisgICAgbV9z
b3VyY2VJZFRvQnJlYWtwb2ludHMuY2xlYXIoKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6c2V0QnJl
YWtwb2ludHNBY3RpdmF0ZWQoYm9vbCBhY3RpdmF0ZWQpCit7CisgICAgbV9icmVha3BvaW50c0Fj
dGl2YXRlZCA9IGFjdGl2YXRlZDsKK30KKwordm9pZCBEZWJ1Z2dlcjo6c2V0UGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlKQoreworICAgIG1fcGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSA9IHBhdXNlOworfQorCit2b2lkIERlYnVnZ2VyOjpzZXRQYXVzZU9u
TmV4dFN0YXRlbWVudChib29sIHBhdXNlKQoreworICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQg
PSBwYXVzZTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6YnJlYWtQcm9ncmFtKCkKK3sKKyAgICBpZiAo
bV9wYXVzZWQgfHwgIW1fY3VycmVudENhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7CisgICAgcGF1c2VJZk5lZWRlZChtX2N1cnJl
bnRDYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7Cit9CisKK3ZvaWQgRGVidWdnZXI6
OmNvbnRpbnVlUHJvZ3JhbSgpCit7CisgICAgaWYgKCFtX3BhdXNlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IGZhbHNlOworICAgIG5vdGlmeURvbmVQ
cm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6c3RlcEludG9T
dGF0ZW1lbnQoKQoreworICAgIGlmICghbV9wYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOworICAgIG5vdGlmeURvbmVQcm9jZXNzaW5n
RGVidWdnZXJFdmVudHMoKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6c3RlcE92ZXJTdGF0ZW1lbnQo
KQoreworICAgIGlmICghbV9wYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGF1c2VP
bkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS5nZXQoKTsKKyAgICBub3RpZnlEb25lUHJv
Y2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnN0ZXBPdXRPZkZ1
bmN0aW9uKCkKK3sKKyAgICBpZiAoIW1fcGF1c2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRDYWxsRnJh
bWUtPmNhbGxlcigpIDogMDsKKyAgICBub3RpZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRz
KCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnNvdXJjZVBhcnNlZChFeGVjU3RhdGUqIGV4ZWMsIFNv
dXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpCit7CisgICAgaGFuZGxlU291cmNlUGFyc2VkKGV4ZWMsIHNvdXJjZVBy
b3ZpZGVyLCBlcnJvckxpbmUsIGVycm9yTWVzc2FnZSk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OmNy
ZWF0ZUNhbGxGcmFtZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUp
Cit7CisgICAgaW50cHRyX3Qgc291cmNlSWQgPSBkZWJ1Z2dlckNhbGxGcmFtZS5zb3VyY2VJZCgp
OworICAgIG1fY3VycmVudENhbGxGcmFtZSA9IEZyYW1lVmlzaXRvcjo6Y3JlYXRlKGRlYnVnZ2Vy
Q2FsbEZyYW1lLCBtX2N1cnJlbnRDYWxsRnJhbWUpOworICAgIGlmIChtX2xhc3RFeGVjdXRlZFNv
dXJjZUlkICE9IHNvdXJjZUlkKSB7CisgICAgICAgIG1fbGFzdEV4ZWN1dGVkTGluZSA9IC0xOwor
ICAgICAgICBtX2xhc3RFeGVjdXRlZFNvdXJjZUlkID0gc291cmNlSWQ7CisgICAgfQorfQorCit2
b2lkIERlYnVnZ2VyOjp1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNvbnN0IERlYnVn
Z2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKK3sKKyAgICBpZiAoIW1fY3VycmVudENh
bGxGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50Q2FsbEZyYW1lLT51cGRh
dGUoZGVidWdnZXJDYWxsRnJhbWUpOworICAgIHBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxsRnJh
bWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6cGF1c2VJZk5l
ZWRlZChKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCkKK3sKKyAgICBpZiAobV9w
YXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbmVlZFBhdXNlSGFuZGxpbmcoZHlu
YW1pY0dsb2JhbE9iamVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIEJyZWFrcG9pbnQgYnJl
YWtwb2ludDsKKyAgICBib29sIGRpZEhpdEJyZWFrcG9pbnQgPSBmYWxzZTsKKyAgICBib29sIHBh
dXNlTm93ID0gbV9wYXVzZU9uTmV4dFN0YXRlbWVudDsKKyAgICBwYXVzZU5vdyB8PSAobV9wYXVz
ZU9uQ2FsbEZyYW1lID09IG1fY3VycmVudENhbGxGcmFtZSk7CisgICAgcGF1c2VOb3cgfD0gZGlk
SGl0QnJlYWtwb2ludCA9IGhhc0JyZWFrcG9pbnQobV9jdXJyZW50Q2FsbEZyYW1lLT5zb3VyY2VJ
ZCgpLCBtX2N1cnJlbnRDYWxsRnJhbWUtPnBvc2l0aW9uKCksICZicmVha3BvaW50KTsKKyAgICBt
X2xhc3RFeGVjdXRlZExpbmUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPnBvc2l0aW9uKCkubV9saW5l
Lnplcm9CYXNlZEludCgpOworICAgIGlmICghcGF1c2VOb3cpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChkaWRIaXRCcmVha3BvaW50KSB7CisgICAgICAgIGV2YWx1YXRlQnJlYWtwb2ludEFj
dGlvbnMoYnJlYWtwb2ludCk7CisgICAgICAgIGlmIChicmVha3BvaW50LmF1dG9Db250aW51ZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSAw
OworICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSBmYWxzZTsKKyAgICBtX3BhdXNlZCA9IHRy
dWU7CisKKyAgICBoYW5kbGVQYXVzZShkeW5hbWljR2xvYmFsT2JqZWN0KTsKKworICAgIG1fcGF1
c2VkID0gZmFsc2U7Cit9CisKK3ZvaWQgRGVidWdnZXI6OmNhbGxFdmVudChjb25zdCBEZWJ1Z2dl
ckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCit7CisgICAgaWYgKCFtX3BhdXNlZCkgewor
ICAgICAgICBjcmVhdGVDYWxsRnJhbWUoZGVidWdnZXJDYWxsRnJhbWUpOworICAgICAgICBwYXVz
ZUlmTmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7CisgICAg
fQorfQorCit2b2lkIERlYnVnZ2VyOjphdFN0YXRlbWVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFt
ZSYgZGVidWdnZXJDYWxsRnJhbWUpCit7CisgICAgaWYgKCFtX3BhdXNlZCkKKyAgICAgICAgdXBk
YXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFtZSk7Cit9CisKK3Zv
aWQgRGVidWdnZXI6OnJldHVybkV2ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dl
ckNhbGxGcmFtZSkKK3sKKyAgICBpZiAobV9wYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUpOworCisg
ICAgLy8gZGV0YWNoIG1heSBoYXZlIGJlZW4gY2FsbGVkIGR1cmluZyBwYXVzZUlmTmVlZGVkCisg
ICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRy
ZWF0IHN0ZXBwaW5nIG92ZXIgYSByZXR1cm4gc3RhdGVtZW50IGxpa2Ugc3RlcHBpbmcgb3V0Lgor
ICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgPT0gbV9wYXVzZU9uQ2FsbEZyYW1lKQorICAgICAg
ICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlcigpOworICAg
IG1fY3VycmVudENhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyKCk7Cit9CisK
K3ZvaWQgRGVidWdnZXI6OmV4Y2VwdGlvbihjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdn
ZXJDYWxsRnJhbWUsIGJvb2wgaGFzSGFuZGxlcikKK3sKKyAgICBpZiAobV9wYXVzZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VP
bkFsbEV4Y2VwdGlvbnMgfHwgKG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9PSBQYXVzZU9uVW5j
YXVnaHRFeGNlcHRpb25zICYmICFoYXNIYW5kbGVyKSkKKyAgICAgICAgbV9wYXVzZU9uTmV4dFN0
YXRlbWVudCA9IHRydWU7CisKKyAgICBtX2hhc0hhbmRsZXJGb3JFeGNlcHRpb25DYWxsYmFjayA9
IGhhc0hhbmRsZXI7CisgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChkZWJ1Z2dl
ckNhbGxGcmFtZSk7CisgICAgbV9oYXNIYW5kbGVyRm9yRXhjZXB0aW9uQ2FsbGJhY2sgPSBmYWxz
ZTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2Vy
Q2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKK3sKKyAgICBpZiAoIW1fcGF1c2VkKSB7Cisg
ICAgICAgIGNyZWF0ZUNhbGxGcmFtZShkZWJ1Z2dlckNhbGxGcmFtZSk7CisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMjYzNy4KKyAgICAgICAgLy8gUmVtb3ZlIGl0IHdoZW4gd2UgcmV3b3Jr
IHRoZSBkZWJ1Z2dlciBpbXBsZW1lbnRhdGlvbiB0byBub3QgcmVxdWlyZSBjYWxsYmFja3MuCisg
ICAgICAgIGlmICghbV9pc1dvcmtlclRocmVhZCkKKyAgICAgICAgICAgIHBhdXNlSWZOZWVkZWQo
ZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKKyAgICB9Cit9CisKK3Zv
aWQgRGVidWdnZXI6OmRpZEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBk
ZWJ1Z2dlckNhbGxGcmFtZSkKK3sKKyAgICBpZiAobV9wYXVzZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUp
OworCisgICAgLy8gVHJlYXQgc3RlcHBpbmcgb3ZlciB0aGUgZW5kIG9mIGEgcHJvZ3JhbSBsaWtl
IHN0ZXBwaW5nIG91dC4KKyAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgPT0gbV9wYXVzZU9uQ2FsbEZyYW1lKSB7
CisgICAgICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVy
KCk7CisgICAgICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNh
bGxlcigpOworfQorCit2b2lkIERlYnVnZ2VyOjpkaWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgRGVi
dWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lKQoreworICAgIGlmIChtX3BhdXNlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7Cisg
ICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFtZSk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyLmgJKHJldmlzaW9uIDE1NjI4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoK
ICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICog
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjMgKzIyLDI2IEBACiAjaWZuZGVmIERl
YnVnZ2VyX2gKICNkZWZpbmUgRGVidWdnZXJfaAogCisjaW5jbHVkZSAiQnJlYWtwb2ludC5oIgor
I2luY2x1ZGUgIkRlYnVnZ2VyQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRp
b24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lOwogY2xhc3MgRXhlY1N0YXRlOwotY2xhc3MgVk07
CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTVmFsdWU7CiBjbGFzcyBTb3VyY2VQcm92
aWRlcjsKK2NsYXNzIFZNOwogCi1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBEZWJ1Z2dlciB7Citj
bGFzcyBEZWJ1Z2dlckV2ZW50SGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+RGVidWdn
ZXIoKTsKLQotICAgIHZvaWQgYXR0YWNoKEpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdmlydHVhbCB2
b2lkIGRldGFjaChKU0dsb2JhbE9iamVjdCopOworICAgIHZpcnR1YWwgfkRlYnVnZ2VyRXZlbnRI
YW5kbGVyKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFyc2VkKEV4ZWNTdGF0ZSos
IFNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZU51bWJlciwgY29uc3QgV1RGOjpTdHJpbmcm
IGVycm9yTWVzc2FnZSkgPSAwOwogCkBAIC01MCwxMCArNTMsMTYxIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShjb25zdCBEZWJ1Z2dlckNh
bGxGcmFtZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0
IERlYnVnZ2VyQ2FsbEZyYW1lJikgPSAwOworfTsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUg
RGVidWdnZXIgOiBwcml2YXRlIERlYnVnZ2VyRXZlbnRIYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShEZWJ1Z2dlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
CisgICAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgRnJhbWVWaXNpdG9yIDogcHVibGljIFJlZkNv
dW50ZWQ8RnJhbWVWaXNpdG9yPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxGcmFtZVZpc2l0b3I+IGNyZWF0ZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdn
ZXJDYWxsRnJhbWUsIFBhc3NSZWZQdHI8RnJhbWVWaXNpdG9yPiBjYWxsZXIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRnJhbWVWaXNpdG9yKGRlYnVnZ2VyQ2Fs
bEZyYW1lLCBjYWxsZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgaW52YWxpZGF0ZSgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAg
bV9kZWJ1Z2dlckNhbGxGcmFtZS5jbGVhcigpOworICAgICAgICB9CisgICAgICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQorCisgICAgICAgIEZyYW1lVmlzaXRv
ciogY2FsbGVyKCk7CisgICAgICAgIGludHB0cl90IHNvdXJjZUlkKCkgY29uc3QgeyByZXR1cm4g
bV9kZWJ1Z2dlckNhbGxGcmFtZS5zb3VyY2VJZCgpOyB9CisgICAgICAgIGNvbnN0IFRleHRQb3Np
dGlvbiBwb3NpdGlvbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIE9yZGluYWxOdW1i
ZXIgbGluZSA9IFdURjo6T3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KG1fZGVidWdnZXJD
YWxsRnJhbWUubGluZSgpKTsKKyAgICAgICAgICAgIE9yZGluYWxOdW1iZXIgY29sdW1uID0gV1RG
OjpPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobV9kZWJ1Z2dlckNhbGxGcmFtZS5jb2x1
bW4oKSk7CisgICAgICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uKGxpbmUsIGNvbHVtbik7Cisg
ICAgICAgIH0KKyAgICAgICAgaW50IGxpbmUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobV9kZWJ1Z2dlckNh
bGxGcmFtZS5saW5lKCkpLnplcm9CYXNlZEludCgpOworICAgICAgICB9CisgICAgICAgIGludCBj
b2x1bW4oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpPcmRpbmFs
TnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobV9kZWJ1Z2dlckNhbGxGcmFtZS5jb2x1bW4oKSkuemVy
b0Jhc2VkSW50KCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHVwZGF0ZShjb25zdCBEZWJ1
Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fZGVidWdnZXJDYWxsRnJhbWUgPSBkZWJ1Z2dlckNhbGxGcmFtZTsKKyAgICAgICAgICAgIG1f
aXNWYWxpZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBEZWJ1Z2dlckNhbGxG
cmFtZSYgZGVidWdnZXJDYWxsRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZy
YW1lOyB9CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0KCkgY29u
c3Q7CisKKyAgICAgICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSgpIGNvbnN0OworICAgICAgICBEZWJ1
Z2dlckNhbGxGcmFtZTo6VHlwZSB0eXBlKCkgY29uc3Q7CisgICAgICAgIEpTU2NvcGUqIHNjb3Bl
Q2hhaW4oKSBjb25zdDsKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjKCkgY29uc3Q7CisKKyAgICAg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QoKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZSBldmFsdWF0
ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNWYWx1ZSYgZXhjZXB0aW9uKSBjb25zdDsKKworICAg
IHByaXZhdGU6CisgICAgICAgIEZyYW1lVmlzaXRvcihjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYs
IFBhc3NSZWZQdHI8RnJhbWVWaXNpdG9yPiBjYWxsZXIpOworCisgICAgICAgIERlYnVnZ2VyQ2Fs
bEZyYW1lIG1fZGVidWdnZXJDYWxsRnJhbWU7CisgICAgICAgIFJlZlB0cjxGcmFtZVZpc2l0b3I+
IG1fY2FsbGVyOworICAgICAgICBib29sIG1faXNWYWxpZDsKKyAgICB9OworCisgICAgRGVidWdn
ZXJFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGxlcigpIHsgcmV0dXJuIHRoaXM7IH0KKworICAgIHZv
aWQgYXR0YWNoKEpTR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBkZXRhY2goSlNHbG9iYWxPYmpl
Y3QqKTsKKworICAgIEZyYW1lVmlzaXRvciogY3VycmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50Q2FsbEZyYW1lLmdldCgpOyB9CisKKyAgICBib29sIGhhc0JyZWFrcG9pbnQoaW50
cHRyX3Qgc291cmNlSWQsIGNvbnN0IFRleHRQb3NpdGlvbiYsIEJyZWFrcG9pbnQqIGhpdEJyZWFr
cG9pbnQpIGNvbnN0OworICAgIEJyZWFrcG9pbnRJZCBzZXRCcmVha3BvaW50KGludHB0cl90IHNv
dXJjZUlkLCBjb25zdCBCcmVha3BvaW50JiwgaW50KiBhY3R1YWxMaW5lTnVtYmVyLCBpbnQqIGFj
dHVhbENvbHVtbk51bWJlcik7CisgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KEJyZWFrcG9pbnRJ
ZCk7CisgICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7CisgICAgdm9pZCBzZXRCcmVha3BvaW50
c0FjdGl2YXRlZChib29sKTsKKyAgICB2b2lkIGFjdGl2YXRlQnJlYWtwb2ludHMoKSB7IHNldEJy
ZWFrcG9pbnRzQWN0aXZhdGVkKHRydWUpOyB9CisgICAgdm9pZCBkZWFjdGl2YXRlQnJlYWtwb2lu
dHMoKSB7IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGZhbHNlKTsgfQorCisgICAgZW51bSBQYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlIHsKKyAgICAgICAgRG9udFBhdXNlT25FeGNlcHRpb25zLAorICAg
ICAgICBQYXVzZU9uQWxsRXhjZXB0aW9ucywKKyAgICAgICAgUGF1c2VPblVuY2F1Z2h0RXhjZXB0
aW9ucworICAgIH07CisgICAgUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uRXhjZXB0aW9u
c1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOyB9CisgICAg
dm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNlcHRpb25zU3RhdGUpOwor
CisgICAgdm9pZCBzZXRQYXVzZU9uTmV4dFN0YXRlbWVudChib29sKTsKKyAgICB2b2lkIGJyZWFr
UHJvZ3JhbSgpOworICAgIHZvaWQgY29udGludWVQcm9ncmFtKCk7CisgICAgdm9pZCBzdGVwSW50
b1N0YXRlbWVudCgpOworICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1lbnQoKTsKKyAgICB2b2lkIHN0
ZXBPdXRPZkZ1bmN0aW9uKCk7CisKKyAgICBib29sIGlzUGF1c2VkKCkgeyByZXR1cm4gbV9wYXVz
ZWQ7IH0KIAogICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVk0qKTsKIAorcHJvdGVj
dGVkOgorICAgIERlYnVnZ2VyKGJvb2wgaXNXb3JrZXJUaHJlYWQgPSBmYWxzZSk7CisgICAgdmly
dHVhbCB+RGVidWdnZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBldmFsdWF0ZUJyZWFrcG9pbnRB
Y3Rpb25zKGNvbnN0IEJyZWFrcG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlU291
cmNlUGFyc2VkKEV4ZWNTdGF0ZSosIFNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZSwgY29u
c3QgU3RyaW5nJiBlcnJvck1zZykKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShlcnJvckxp
bmUpOworICAgICAgICBVTlVTRURfUEFSQU0oZXJyb3JNc2cpOworICAgIH0KKyAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlUGF1c2UoSlNHbG9iYWxPYmplY3QqKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
bmVlZFBhdXNlSGFuZGxpbmcoSlNHbG9iYWxPYmplY3QqKSB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24oRXhlY1N0
YXRlKiwgSlNWYWx1ZSBleGNlcHRpb24pIGNvbnN0CisgICAgeworICAgICAgICBVTlVTRURfUEFS
QU0oZXhjZXB0aW9uKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeURvbmVQcm9jZXNz
aW5nRGVidWdnZXJFdmVudHMoKSB7IH0KKworICAgIGJvb2wgaGFzSGFuZGxlckZvckV4Y2VwdGlv
bkNhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9oYXNIYW5kbGVyRm9yRXhjZXB0aW9uQ2FsbGJh
Y2s7IH0KKwogcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZUNhbGxGcmFtZShjb25zdCBEZWJ1Z2dl
ckNhbGxGcmFtZSYpOworICAgIHZvaWQgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChj
b25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZvaWQgcGF1c2VJZk5lZWRlZChKU0dsb2Jh
bE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCk7CisKKyAgICAvLyBEZWJ1Z2dlckV2ZW50SGFu
ZGxlciBpbnRlcmZhY2U6CisgICAgdmlydHVhbCB2b2lkIHNvdXJjZVBhcnNlZChFeGVjU3RhdGUq
LCBTb3VyY2VQcm92aWRlciosIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNc2cp
OworCisgICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYs
IGJvb2wgaGFzSGFuZGxlcik7CisgICAgdmlydHVhbCB2b2lkIGF0U3RhdGVtZW50KGNvbnN0IERl
YnVnZ2VyQ2FsbEZyYW1lJik7CisgICAgdmlydHVhbCB2b2lkIGNhbGxFdmVudChjb25zdCBEZWJ1
Z2dlckNhbGxGcmFtZSYpOworICAgIHZpcnR1YWwgdm9pZCByZXR1cm5FdmVudChjb25zdCBEZWJ1
Z2dlckNhbGxGcmFtZSYpOworCisgICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJvZ3JhbShj
b25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlUHJv
Z3JhbShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFj
aEJyZWFrcG9pbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmKTsKKworICAgIHR5cGVkZWYgSGFz
aE1hcDxCcmVha3BvaW50SWQsIEJyZWFrcG9pbnQqPiBCcmVha3BvaW50SWRUb0JyZWFrcG9pbnRN
YXA7CisKKyAgICB0eXBlZGVmIFZlY3RvcjxCcmVha3BvaW50PiBCcmVha3BvaW50c0luTGluZTsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8bG9uZywgQnJlYWtwb2ludHNJbkxpbmU+IExpbmVUb0JyZWFr
cG9pbnRzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgTGluZVRvQnJlYWtwb2lu
dHNNYXA+IFNvdXJjZUlkVG9CcmVha3BvaW50c01hcDsKKworICAgIGJvb2wgbV9pc1dvcmtlclRo
cmVhZDsKKyAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZTsKKyAgICBib29sIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQ7CisgICAgYm9vbCBtX3BhdXNlZDsK
KyAgICBib29sIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQ7CisgICAgYm9vbCBtX2hhc0hhbmRsZXJG
b3JFeGNlcHRpb25DYWxsYmFjazsKKworICAgIEZyYW1lVmlzaXRvciogbV9wYXVzZU9uQ2FsbEZy
YW1lOworICAgIFJlZlB0cjxGcmFtZVZpc2l0b3I+IG1fY3VycmVudENhbGxGcmFtZTsKKyAgICBp
bnQgbV9sYXN0RXhlY3V0ZWRMaW5lOworICAgIGludHB0cl90IG1fbGFzdEV4ZWN1dGVkU291cmNl
SWQ7CisKKyAgICBCcmVha3BvaW50SWQgbV90b3BCcmVha3BvaW50SWQ7CisgICAgQnJlYWtwb2lu
dElkVG9CcmVha3BvaW50TWFwIG1fYnJlYWtwb2ludElkVG9CcmVha3BvaW50OworICAgIFNvdXJj
ZUlkVG9CcmVha3BvaW50c01hcCBtX3NvdXJjZUlkVG9CcmVha3BvaW50czsKKwogICAgIEhhc2hT
ZXQ8SlNHbG9iYWxPYmplY3QqPiBtX2dsb2JhbE9iamVjdHM7CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJGcmFtZVZpc2l0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckZyYW1lVmlzaXRv
ci5jcHAJKHJldmlzaW9uIDE1NjAyMSkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SmF2YVNjcmlwdENhbGxGcmFtZS5jcHA6MTU2MDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyRnJhbWVWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQor
CisjaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgorCisjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCisjaW5jbHVkZSA8ZGVidWdnZXIv
RGVidWdnZXJDYWxsRnJhbWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0NvbXBsZXRpb24uaD4KKyNp
bmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFs
T2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDxydW50aW1l
L0pTT2JqZWN0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK0phdmFTY3JpcHRDYWxs
RnJhbWU6OkphdmFTY3JpcHRDYWxsRnJhbWUoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVn
Z2VyQ2FsbEZyYW1lLCBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IGNhbGxlcikKKyAg
ICA6IG1fZGVidWdnZXJDYWxsRnJhbWUoZGVidWdnZXJDYWxsRnJhbWUpCisgICAgLCBtX2NhbGxl
cihjYWxsZXIpCisgICAgLCBtX2lzVmFsaWQodHJ1ZSkKK3sKK30KKworSmF2YVNjcmlwdENhbGxG
cmFtZSogSmF2YVNjcmlwdENhbGxGcmFtZTo6Y2FsbGVyKCkKK3sKKyAgICByZXR1cm4gbV9jYWxs
ZXIuZ2V0KCk7Cit9CisKK0pTQzo6SlNTY29wZSogSmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVD
aGFpbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faXNWYWxpZCk7CisgICAgaWYgKCFtX2lzVmFs
aWQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLnNj
b3BlKCk7Cit9CisKK0pTQzo6SlNHbG9iYWxPYmplY3QqIEphdmFTY3JpcHRDYWxsRnJhbWU6OmR5
bmFtaWNHbG9iYWxPYmplY3QoKSBjb25zdAoreworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAg
IGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9kZWJ1Z2dl
ckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCk7Cit9CisKK1N0cmluZyBKYXZhU2NyaXB0
Q2FsbEZyYW1lOjpmdW5jdGlvbk5hbWUoKSBjb25zdAoreworICAgIEFTU0VSVChtX2lzVmFsaWQp
OworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgU3Ry
aW5nIGZ1bmN0aW9uTmFtZSA9IG1fZGVidWdnZXJDYWxsRnJhbWUuY2FsY3VsYXRlZEZ1bmN0aW9u
TmFtZSgpOworICAgIGlmIChmdW5jdGlvbk5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTsKK30KKworRGVidWdnZXJDYWxsRnJh
bWU6OlR5cGUgSmF2YVNjcmlwdENhbGxGcmFtZTo6dHlwZSgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG1faXNWYWxpZCk7CisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybiBEZWJ1Z2dl
ckNhbGxGcmFtZTo6UHJvZ3JhbVR5cGU7CisgICAgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUu
dHlwZSgpOworfQorCitKU09iamVjdCogSmF2YVNjcmlwdENhbGxGcmFtZTo6dGhpc09iamVjdCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKG1faXNWYWxpZCk7CisgICAgaWYgKCFtX2lzVmFsaWQpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLnRoaXNPYmpl
Y3QoKTsKK30KKworRXhlY1N0YXRlKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpleGVjKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUuY2FsbEZyYW1lKCk7Cit9
CisKKy8vIEV2YWx1YXRlIHNvbWUgSmF2YVNjcmlwdCBjb2RlIGluIHRoZSBzY29wZSBvZiB0aGlz
IGZyYW1lLgorSlNWYWx1ZSBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShjb25zdCBTdHJp
bmcmIHNjcmlwdCwgSlNWYWx1ZSYgZXhjZXB0aW9uKSBjb25zdAoreworICAgIEFTU0VSVChtX2lz
VmFsaWQpOworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RlYnVnZ2VyQ2FsbEZyYW1lLmNhbGxGcmFtZSgpKTsK
KyAgICByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS5ldmFsdWF0ZShzY3JpcHQsIGV4Y2VwdGlv
bik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyRnJhbWVWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXJGcmFtZVZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJGcmFtZVZpc2l0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAx
MyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI0LDM4ICsyNCwyNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEZWJ1Z2dlci5oIgogCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgorI2luY2x1ZGUgIkpTU2NvcGUuaCIKIAotI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJh
bWUuaCIKK25hbWVzcGFjZSBKU0MgewogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5j
bHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCi0jaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXJDYWxs
RnJhbWUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxydW50
aW1lL0pTQ0pTVmFsdWUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLUphdmFTY3JpcHRDYWxsRnJhbWU6OkphdmFT
Y3JpcHRDYWxsRnJhbWUoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1l
LCBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IGNhbGxlcikKK0RlYnVnZ2VyOjpGcmFt
ZVZpc2l0b3I6OkZyYW1lVmlzaXRvcihjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJD
YWxsRnJhbWUsIFBhc3NSZWZQdHI8RGVidWdnZXI6OkZyYW1lVmlzaXRvcj4gY2FsbGVyKQogICAg
IDogbV9kZWJ1Z2dlckNhbGxGcmFtZShkZWJ1Z2dlckNhbGxGcmFtZSkKICAgICAsIG1fY2FsbGVy
KGNhbGxlcikKICAgICAsIG1faXNWYWxpZCh0cnVlKQogewogfQogCi1KYXZhU2NyaXB0Q2FsbEZy
YW1lKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjYWxsZXIoKQorRGVidWdnZXI6OkZyYW1lVmlzaXRv
ciogRGVidWdnZXI6OkZyYW1lVmlzaXRvcjo6Y2FsbGVyKCkKIHsKICAgICByZXR1cm4gbV9jYWxs
ZXIuZ2V0KCk7CiB9CiAKLUpTQzo6SlNTY29wZSogSmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVD
aGFpbigpIGNvbnN0CitKU1Njb3BlKiBEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yOjpzY29wZUNoYWlu
KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9pc1ZhbGlkKTsKICAgICBpZiAoIW1faXNWYWxpZCkK
QEAgLTYzLDcgKzUyLDcgQEAgSlNDOjpKU1Njb3BlKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29w
ZQogICAgIHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLnNjb3BlKCk7CiB9CiAKLUpTQzo6SlNH
bG9iYWxPYmplY3QqIEphdmFTY3JpcHRDYWxsRnJhbWU6OmR5bmFtaWNHbG9iYWxPYmplY3QoKSBj
b25zdAorSlNHbG9iYWxPYmplY3QqIERlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OmR5bmFtaWNHbG9i
YWxPYmplY3QoKSBjb25zdAogewogICAgIEFTU0VSVChtX2lzVmFsaWQpOwogICAgIGlmICghbV9p
c1ZhbGlkKQpAQCAtNzEsNyArNjAsNyBAQCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBKYXZhU2NyaXB0
Q2FsbEZyYW1lCiAgICAgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9i
amVjdCgpOwogfQogCi1TdHJpbmcgSmF2YVNjcmlwdENhbGxGcmFtZTo6ZnVuY3Rpb25OYW1lKCkg
Y29uc3QKK1N0cmluZyBEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yOjpmdW5jdGlvbk5hbWUoKSBjb25z
dAogewogICAgIEFTU0VSVChtX2lzVmFsaWQpOwogICAgIGlmICghbV9pc1ZhbGlkKQpAQCAtODIs
NyArNzEsNyBAQCBTdHJpbmcgSmF2YVNjcmlwdENhbGxGcmFtZTo6ZnVuY3Rpb25OYW1lCiAgICAg
cmV0dXJuIGZ1bmN0aW9uTmFtZTsKIH0KIAotRGVidWdnZXJDYWxsRnJhbWU6OlR5cGUgSmF2YVNj
cmlwdENhbGxGcmFtZTo6dHlwZSgpIGNvbnN0CitEZWJ1Z2dlckNhbGxGcmFtZTo6VHlwZSBEZWJ1
Z2dlcjo6RnJhbWVWaXNpdG9yOjp0eXBlKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9pc1ZhbGlk
KTsKICAgICBpZiAoIW1faXNWYWxpZCkKQEAgLTkwLDcgKzc5LDcgQEAgRGVidWdnZXJDYWxsRnJh
bWU6OlR5cGUgSmF2YVNjcmlwdENhbGxGcgogICAgIHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1l
LnR5cGUoKTsKIH0KIAotSlNPYmplY3QqIEphdmFTY3JpcHRDYWxsRnJhbWU6OnRoaXNPYmplY3Qo
KSBjb25zdAorSlNPYmplY3QqIERlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OnRoaXNPYmplY3QoKSBj
b25zdAogewogICAgIEFTU0VSVChtX2lzVmFsaWQpOwogICAgIGlmICghbV9pc1ZhbGlkKQpAQCAt
OTgsNyArODcsNyBAQCBKU09iamVjdCogSmF2YVNjcmlwdENhbGxGcmFtZTo6dGhpc09iamVjCiAg
ICAgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUudGhpc09iamVjdCgpOwogfQogCi1FeGVjU3Rh
dGUqIEphdmFTY3JpcHRDYWxsRnJhbWU6OmV4ZWMoKSBjb25zdAorRXhlY1N0YXRlKiBEZWJ1Z2dl
cjo6RnJhbWVWaXNpdG9yOjpleGVjKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9pc1ZhbGlkKTsK
ICAgICBpZiAoIW1faXNWYWxpZCkKQEAgLTEwNyw3ICs5Niw3IEBAIEV4ZWNTdGF0ZSogSmF2YVNj
cmlwdENhbGxGcmFtZTo6ZXhlYygpIGMKIH0KIAogLy8gRXZhbHVhdGUgc29tZSBKYXZhU2NyaXB0
IGNvZGUgaW4gdGhlIHNjb3BlIG9mIHRoaXMgZnJhbWUuCi1KU1ZhbHVlIEphdmFTY3JpcHRDYWxs
RnJhbWU6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBKU1ZhbHVlJiBleGNlcHRpb24p
IGNvbnN0CitKU1ZhbHVlIERlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OmV2YWx1YXRlKGNvbnN0IFN0
cmluZyYgc2NyaXB0LCBKU1ZhbHVlJiBleGNlcHRpb24pIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1f
aXNWYWxpZCk7CiAgICAgaWYgKCFtX2lzVmFsaWQpCkBAIC0xMTcsNiArMTA2LDQgQEAgSlNWYWx1
ZSBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShjbwogICAgIHJldHVybiBtX2RlYnVnZ2Vy
Q2FsbEZyYW1lLmV2YWx1YXRlKHNjcmlwdCwgZXhjZXB0aW9uKTsKIH0KIAotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCit9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTU2MjgxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzk2LDcgKzM5Niw3IEBAIHN0YXRpYyBib29sIHVud2luZENhbGxGcmFtZShTdGFja1Zpc2l0b3IK
ICAgICBDb2RlQmxvY2sqIG9sZENvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICBKU1Njb3BlKiBz
Y29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKIAotICAgIGlmIChEZWJ1Z2dlciogZGVidWdnZXIg
PSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkgeworICAgIGlm
IChEZWJ1Z2dlckV2ZW50SGFuZGxlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9i
YWxPYmplY3QoKS0+ZGVidWdnZXIoKS0+ZXZlbnRIYW5kbGVyKCkpIHsKICAgICAgICAgaW50IGxp
bmUgPSBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5sYXN0TGluZSgpOwogICAgICAgICBE
ZWJ1Z2dlckNhbGxGcmFtZSBkZWJ1Z2dlckNhbGxGcmFtZShjYWxsRnJhbWUsIGxpbmUsIDAsIGV4
Y2VwdGlvblZhbHVlKTsKICAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbGVlKCkpCkBAIC02NTgs
NyArNjU4LDcgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dQogICAg
IEFTU0VSVChjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uU3RhY2soKS5zaXplKCkpOwogICAgIEFT
U0VSVCghZXhjZXB0aW9uVmFsdWUuaXNPYmplY3QoKSB8fCBhc09iamVjdChleGNlcHRpb25WYWx1
ZSktPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT52bSgpLnByb3BlcnR5TmFtZXMt
PnN0YWNrKSk7CiAKLSAgICBpZiAoRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT5keW5h
bWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsKKyAgICBpZiAoRGVidWdnZXJFdmVudEhh
bmRsZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVn
Z2VyKCktPmV2ZW50SGFuZGxlcigpKSB7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgdGhl
IGV4Y2VwdGlvbiBhbmQgdGhlIGV4Y2VwdGlvbiBzdGFjayBoZXJlIGluIG9yZGVyIHRvIHNlZSBp
ZiBhIG5ldyBleGNlcHRpb24gaGFwcGVucy4KICAgICAgICAgLy8gQWZ0ZXJ3YXJkcywgdGhlIHZh
bHVlcyBhcmUgcHV0IGJhY2sgdG8gY29udGludWUgcHJvY2Vzc2luZyB0aGlzIGVycm9yLgogICAg
ICAgICBDbGVhckV4Y2VwdGlvblNjb3BlIHNjb3BlKCZjYWxsRnJhbWUtPnZtKCkpOwpAQCAtMTI2
Miw3ICsxMjYyLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQog
CiBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWcoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIERlYnVnSG9va0lEIGRlYnVnSG9va0lELCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUs
IGludCBjb2x1bW4pCiB7Ci0gICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT5keW5h
bWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7CisgICAgRGVidWdnZXJFdmVudEhhbmRsZXIq
IGRlYnVnZ2VyID0gY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkt
PmV2ZW50SGFuZGxlcigpOwogICAgIGlmICghZGVidWdnZXIpCiAgICAgICAgIHJldHVybjsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAkocmV2aXNpb24gMTU2MjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjMsNyArNzIzLDcgQEAgVW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBKU0dsb2JhbE9iamVjdAogICAgIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jayogdW5saW5rZWRDb2RlID0gdm0oKS5jb2RlQ2FjaGUoKS0+Z2V0UHJvZ3JhbUNv
ZGVCbG9jayh2bSgpLCBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5zb3VyY2UoKSwgc3RyaWN0bmVz
cywgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKIAogICAgIGlmIChoYXNEZWJ1
Z2dlcigpKQotICAgICAgICBkZWJ1Z2dlcigpLT5zb3VyY2VQYXJzZWQoY2FsbEZyYW1lLCBleGVj
dXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBlcnJvci5tX2xpbmUsIGVycm9yLm1fbWVzc2Fn
ZSk7CisgICAgICAgIGRlYnVnZ2VyKCktPmV2ZW50SGFuZGxlcigpLT5zb3VyY2VQYXJzZWQoY2Fs
bEZyYW1lLCBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBlcnJvci5tX2xpbmUsIGVy
cm9yLm1fbWVzc2FnZSk7CiAKICAgICBpZiAoZXJyb3IubV90eXBlICE9IFBhcnNlckVycm9yOjpF
cnJvck5vbmUpIHsKICAgICAgICAgKmV4Y2VwdGlvbiA9IGVycm9yLnRvRXJyb3JPYmplY3QodGhp
cywgZXhlY3V0YWJsZS0+c291cmNlKCkpOwpAQCAtNzQyLDcgKzc0Miw3IEBAIFVubGlua2VkRXZh
bENvZGVCbG9jayogSlNHbG9iYWxPYmplY3Q6OmMKICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sq
IHVubGlua2VkQ29kZSA9IHZtKCkuY29kZUNhY2hlKCktPmdldEV2YWxDb2RlQmxvY2sodm0oKSwg
ZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+c291cmNlKCksIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9k
ZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CiAKICAgICBpZiAoaGFzRGVidWdnZXIoKSkKLSAgICAg
ICAgZGVidWdnZXIoKS0+c291cmNlUGFyc2VkKGNhbGxGcmFtZSwgZXhlY3V0YWJsZS0+c291cmNl
KCkucHJvdmlkZXIoKSwgZXJyb3IubV9saW5lLCBlcnJvci5tX21lc3NhZ2UpOworICAgICAgICBk
ZWJ1Z2dlcigpLT5ldmVudEhhbmRsZXIoKS0+c291cmNlUGFyc2VkKGNhbGxGcmFtZSwgZXhlY3V0
YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXJyb3IubV9saW5lLCBlcnJvci5tX21lc3NhZ2Up
OwogCiAgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKSB7CiAg
ICAgICAgIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIGVycm9yLnRvRXJyb3JPYmplY3QodGhpcywg
ZXhlY3V0YWJsZS0+c291cmNlKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjI4MSkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgw
IEBACisyMDEzLTA5LTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZWZhY3RvciB0byBoaWRlIERlYnVnZ2VyIGNhbGxiYWNrIGludGVyZmFjZSBpbnNpZGUgSlND
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzk2
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4KKworICAgICAgICAxLiBFeHRyYWN0IHRoZSBKU0MgZGVidWcgaG9vayBjYWxsYmFj
a3MgaW50byBhIEpTQzo6RGVidWdnZXJFdmVudEhhbmRsZXIKKyAgICAgICAgICAgaW50ZXJmYWNl
LiBUaGUgSlNDOjpEZWJ1Z2dlciBub3cgcHJpdmF0ZWx5IGltcGxlbWVudHMgdGhpcyBpbnRlcmZh
Y2UuCisKKyAgICAgICAgMi4gTW92ZSBub24tZnJvbnQgZW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0
eSBmcm9tIFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyCisgICAgICAgICAgIGludG8gSlNDOjpE
ZWJ1Z2dlci4KKworICAgICAgICAzLiBNb3ZlIFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWUg
ZnVuY3Rpb25hbGl0eSBpbnRvIGEKKyAgICAgICAgICAgRGVidWdnZXI6OkZyYW1lVmlzaXRvciBj
bGFzcy4gIFRoZSBKYXZhU2NyaXB0Q2FsbEZyYW1lIGlzIHN0aWxsCisgICAgICAgICAgIG5lY2Vz
c2FyeSBiZWNhdXNlIGl0IGlzIHB1Ymxpc2hlZCBhcyBhIEpTIG9iamVjdCB0byB0aGUgSW5zcGVj
dG9yLiBJbgorICAgICAgICAgICBhIGxhdGVyIHRhc2ssIEknbGwgY29uc29saWRhdGUgdGhlIERl
YnVnZ2VyOjpGcmFtZVZpc2l0b3IgZnVuY3Rpb25hbGl0eQorICAgICAgICAgICBpbnRvIERlYnVn
Z2VyQ2FsbEZyYW1lLCBhbmQgcmVtb3ZlIHRoZSBuZWVkIGZvciB0aGUgRGVidWdnZXI6OkZyYW1l
VmlzaXRvci4KKworICAgICAgICA0LiBDcmVhdGUgYSBKU0M6OkJyZWFrcG9pbnQgYmFzZWQgb24g
YSBzdWJzZXQgb2YgV2ViQ29yZTo6U2NyaXB0QnJlYWtQb2ludC4KKworICAgICAgICA1LiBSZWlt
cGxlbWVudCBXZWJLaXQvbWFjJ3MgV2ViU2NyaXB0RGVidWdnZXIgYmFzZWQgb24gdGhlIG5ldwor
ICAgICAgICAgICBKU0M6OkRlYnVnZ2VyIGludGVyZmFjZSAoaS5lLiBubyB1c2Ugb2YgdGhlIEpT
QyBkZWJ1ZyBob29rcykuCisKKyAgICAgICAgNi4gU291cmNlIElEIGlzIG5vdyBhbHdheXMgYW4g
aW50cHRyX3QgYmVsb3cgdGhlIEluc3BlY3RvckRlYnVnQWdlbnQgbGF5ZXIuCisgICAgICAgICAg
IFRoZSBJbnNwZWN0b3JEZWJ1Z0FnZW50IHRha2VzIGNhcmUgb2YgdHJhbnNsYXRpbmcgYmV0d2Vl
biB0aGUgSW5zcGVjdG9yCisgICAgICAgICAgIEpTT04gcHJvdG9jb2wncyBTdHJpbmcgc291cmNl
SWQgYW5kIHRoZSBpbnRwdHJfdCBzb3VyY2VJZCB3aGVuIG5lZWRlZC4KKworICAgICAgICA3LiBC
cmVha3BvaW50IElEIGlzIG5vdyBhIGxvbmcgaW5zdGVhZCBvZiBhIFN0cmluZy4KKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0
Q2FsbEZyYW1lOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFt
ZTo6c291cmNlSUQpOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFtZTo6Y2Fs
bGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JpcHRCcmVha3BvaW50VG9KU0NCcmVha3BvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpTY3JpcHREZWJ1Z1NlcnZlcik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3BvaW50QWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpldmFsdWF0ZUJyZWFrcG9pbnRBY3Rp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRTY3JpcHRTb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1
c2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGFy
c2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZVNv
dXJjZVBhcnNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6bmVlZFBh
dXNlSGFuZGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRs
ZVBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVFeGNl
cHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6Om5vdGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmNvbXBpbGVTY3JpcHQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJ1blNjcmlwdCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3Jp
cHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHREZWJ1Z1Nl
cnZlcjo6V29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dv
cmtlclNjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFr
cG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGlu
dWVUb0xvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnJlc29sdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNlYXJjaEluQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpzZXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmNvbXBpbGVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6cnVuU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmNsZWFyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVy
Lmg6CisKIDIwMTMtMDktMjMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZSBSZW5kZXJPYmplY3RDaGlsZExpc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU2MjgxKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjQ5OSw3ICsyNDk5LDYgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1
ZXN0VXBsb2FkQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0
aFJlc3VsdEN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFBy
b2Nlc3NvckN1c3RvbS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0
Q2FsbEZyYW1lLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RpY3Rpb25hcnkuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9EaWN0aW9uYXJ5LmggXApJbmRleDogU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCShyZXZpc2lvbiAxNTYyODEpCisrKyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3
b3JraW5nIGNvcHkpCkBAIC0zODk1LDcgKzM4OTUsNiBAQCBlbmFibGU/KEpBVkFTQ1JJUFRfREVC
VUdHRVIpIHsKICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgYmluZGluZ3MvanMvSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL1NjcmlwdFByb2Zp
bGVyLmNwcCBcCi0gICAgICAgIGJpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCiB9
CiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQkocmV2aXNpb24gMTU2MjgxKQorKysgU291cmNlL1dl
YkNvcmUvVXNlSlNDLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDYgQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVz
dFVwbG9hZEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNw
cAogICAgIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAKLSAgICBiaW5kaW5n
cy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAogICAgIGJpbmRpbmdzL2pzL1BhZ2VTY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAKICAgICBiaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCiAgICAg
YmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTYyODEp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTczNiwyMCArMTU3MzYsNiBAQAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlv
bnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlv
bnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXEphdmFTY3JpcHRDYWxsRnJhbWUuY3Bw
Ij4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0g
ICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxF
eGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAg
ICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAg
ICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnU3VmZml4fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0g
ICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAg
ICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAg
IDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J1JlbGVhc2V8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAg
ICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgot
ICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgot
ICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAg
ICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXEpT
QXR0ckN1c3RvbS5jcHAiPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1
aWxkPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
ai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTU2MjgxKQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkp
CkBAIC00MzgzLDkgKzQzODMsNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYmluZGlu
Z3NcanNcSURCQmluZGluZ1V0aWxpdGllcy5jcHAiPgogICAgICAgPEZpbHRlcj5iaW5kaW5nc1xq
czwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
YmluZGluZ3NcanNcSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAiPgotICAgICAgPEZpbHRlcj5iaW5k
aW5nc1xqczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYmluZGluZ3NcanNcSlNBdHRyQ3VzdG9tLmNwcCI+CiAgICAgICA8RmlsdGVyPmJpbmRp
bmdzXGpzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTYyODEp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTc5Nyw3ICs3OTcsNiBAQAogCQkxQzgxQjk1QTBFOTczMzA4MDAyNjZF
MDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNv
bnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxQzgxQjk1QjBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzgxQjk1NzBF
OTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi87IH07CiAJCTFDODFC
OTVDMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDODFCOTU4MEU5NzMzMDgwMDI2NkUwNyAv
KiBJbnNwZWN0b3JDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkxQzgxQkEwOTBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxG
cmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QzgxQkEwMzBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgKi87IH07
CiAJCTFDODFCQTBBMEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzgxQkEwNDBFOTcz
NDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oICovOyB9OwogCQkxQ0ExOUUwNTBE
QzI1NTk1MDA2NUE5OTQgLyogRXZlbnRMb29wTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNBMTlFMDMwREMyNTU5NTAwNjVBOTk0IC8qIEV2ZW50
TG9vcE1hYy5tbSAqLzsgfTsKIAkJMUNBMTlFMTYwREMyNTVDQTAwNjVBOTk0IC8qIEV2ZW50TG9v
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNBMTlF
MTUwREMyNTVDQTAwNjVBOTk0IC8qIEV2ZW50TG9vcC5oICovOyB9OwpAQCAtNzI2MCw3ICs3MjU5
LDYgQEAKIAkJMUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1NzBFOTczMzA4MDAyNjZFMDcg
LyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbnNwZWN0b3JDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JDbGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUM4MUJBMDMwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSmF2
YVNjcmlwdENhbGxGcmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFC
QTA0MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEphdmFTY3JpcHRDYWxsRnJhbWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUJBMDUwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRD
YWxsRnJhbWUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEphdmFTY3JpcHRDYWxsRnJhbWUu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNERGOTBCQTlEMkM4MDA4MUU5
RDAgLyogVmVyc2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBW
ZXJzaW9uLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkyMjgsNyAr
MTkyMjYsNiBAQAogCQkJCTE0MzJFODQ2MEM1MTQ5MzgwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIu
aCAqLywKIAkJCQlDNTg1QTY2MDExRDRGQUM1MDA0QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGll
cy5jcHAgKi8sCiAJCQkJQzU4NUE2NjExMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGls
aXRpZXMuaCAqLywKLQkJCQkxQzgxQkEwMzBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENh
bGxGcmFtZS5jcHAgKi8sCiAJCQkJMUM4MUJBMDQwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3Jp
cHRDYWxsRnJhbWUuaCAqLywKIAkJCQlCQ0U0MzhBMTE0MEMwREJGMDA1RTQzN0UgLyogSlNEaWN0
aW9uYXJ5LmNwcCAqLywKIAkJCQlCQ0U0Mzg5QjE0MEIxQkE3MDA1RTQzN0UgLyogSlNEaWN0aW9u
YXJ5LmggKi8sCkBAIC0yNjAzNCw3ICsyNjAzMSw2IEBACiAJCQkJQjI3NTM1N0QwQjA1MzgxNDAw
MkNFNjRGIC8qIEludFJlY3RNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMjc1MzU2MjBCMDUz
ODE0MDAyQ0U2NEYgLyogSW50U2l6ZUNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTdF
MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUM4
MUJBMDkwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDE4Rjg4MDQwRkY5NTdBRTAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDczQkUzNEYxN0QxODE4MzAwMkJENDMxIC8qIFJUQ0lj
ZUNhbmRpZGF0ZURlc2NyaXB0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFQzkxMkIw
M0Y1MDAwM0E1ODNBIC8qIEpTQW5hbHlzZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5j
cHAJKHJldmlzaW9uIDE1NjI4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFT
Y3JpcHRDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0KLSNpbmNsdWRlICJKYXZh
U2NyaXB0Q2FsbEZyYW1lLmgiCi0KLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRl
ICJKU0RPTVdpbmRvd0Jhc2UuaCIKLSNpbmNsdWRlIDxkZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFt
ZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNDSlNWYWx1ZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNs
dWRlIDxydW50aW1lL0pTTG9jay5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotSmF2YVNjcmlwdENhbGxGcmFtZTo6SmF2YVNjcmlw
dENhbGxGcmFtZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIFBh
c3NSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gY2FsbGVyKQotICAgIDogbV9kZWJ1Z2dlckNh
bGxGcmFtZShkZWJ1Z2dlckNhbGxGcmFtZSkKLSAgICAsIG1fY2FsbGVyKGNhbGxlcikKLSAgICAs
IG1faXNWYWxpZCh0cnVlKQotewotfQotCi1KYXZhU2NyaXB0Q2FsbEZyYW1lKiBKYXZhU2NyaXB0
Q2FsbEZyYW1lOjpjYWxsZXIoKQotewotICAgIHJldHVybiBtX2NhbGxlci5nZXQoKTsKLX0KLQot
SlNDOjpKU1Njb3BlKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWluKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQobV9pc1ZhbGlkKTsKLSAgICBpZiAoIW1faXNWYWxpZCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUuc2NvcGUoKTsKLX0KLQotSlND
OjpKU0dsb2JhbE9iamVjdCogSmF2YVNjcmlwdENhbGxGcmFtZTo6ZHluYW1pY0dsb2JhbE9iamVj
dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faXNWYWxpZCk7Ci0gICAgaWYgKCFtX2lzVmFsaWQp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFt
aWNHbG9iYWxPYmplY3QoKTsKLX0KLQotU3RyaW5nIEphdmFTY3JpcHRDYWxsRnJhbWU6OmZ1bmN0
aW9uTmFtZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faXNWYWxpZCk7Ci0gICAgaWYgKCFtX2lz
VmFsaWQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBTdHJpbmcgZnVuY3Rpb25OYW1l
ID0gbV9kZWJ1Z2dlckNhbGxGcmFtZS5jYWxjdWxhdGVkRnVuY3Rpb25OYW1lKCk7Ci0gICAgaWYg
KGZ1bmN0aW9uTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBy
ZXR1cm4gZnVuY3Rpb25OYW1lOwotfQotCi1EZWJ1Z2dlckNhbGxGcmFtZTo6VHlwZSBKYXZhU2Ny
aXB0Q2FsbEZyYW1lOjp0eXBlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9pc1ZhbGlkKTsKLSAg
ICBpZiAoIW1faXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIERlYnVnZ2VyQ2FsbEZyYW1lOjpQcm9n
cmFtVHlwZTsKLSAgICByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS50eXBlKCk7Ci19Ci0KLUpT
T2JqZWN0KiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0aGlzT2JqZWN0KCkgY29uc3QKLXsKLSAgICBB
U1NFUlQobV9pc1ZhbGlkKTsKLSAgICBpZiAoIW1faXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUudGhpc09iamVjdCgpOwotfQotCi1FeGVj
U3RhdGUqIEphdmFTY3JpcHRDYWxsRnJhbWU6OmV4ZWMoKSBjb25zdAotewotICAgIEFTU0VSVCht
X2lzVmFsaWQpOwotICAgIGlmICghbV9pc1ZhbGlkKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS5jYWxsRnJhbWUoKTsKLX0KLQotLy8gRXZhbHVhdGUg
c29tZSBKYXZhU2NyaXB0IGNvZGUgaW4gdGhlIHNjb3BlIG9mIHRoaXMgZnJhbWUuCi1KU1ZhbHVl
IEphdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBKU1Zh
bHVlJiBleGNlcHRpb24pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faXNWYWxpZCk7Ci0gICAgaWYg
KCFtX2lzVmFsaWQpCi0gICAgICAgIHJldHVybiBqc051bGwoKTsKLQotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKG1fZGVidWdnZXJDYWxsRnJhbWUuY2FsbEZyYW1lKCkpOwotICAgIHJldHVybiBtX2Rl
YnVnZ2VyQ2FsbEZyYW1lLmV2YWx1YXRlKHNjcmlwdCwgZXhjZXB0aW9uKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxG
cmFtZS5oCShyZXZpc2lvbiAxNTYyODEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
YXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAog
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogCi0jaW5jbHVkZSA8ZGVidWdnZXIvRGVi
dWdnZXJDYWxsRnJhbWUuaD4KKyNpbmNsdWRlIDxkZWJ1Z2dlci9EZWJ1Z2dlci5oPgogI2luY2x1
ZGUgPGludGVycHJldGVyL0NhbGxGcmFtZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTM3LDYwICszNywxOSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEphdmFTY3JpcHRDYWxsRnJhbWUgOiBwdWJsaWMgUmVmQ291
bnRlZDxKYXZhU2NyaXB0Q2FsbEZyYW1lPiB7CitjbGFzcyBKYXZhU2NyaXB0Q2FsbEZyYW1lIDog
cHVibGljIEpTQzo6RGVidWdnZXI6OkZyYW1lVmlzaXRvciB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gY3JlYXRlKGNvbnN0IEpTQzo6RGVidWdn
ZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxs
RnJhbWU+IGNhbGxlcikKKyAgICBzdGF0aWMgSmF2YVNjcmlwdENhbGxGcmFtZSogY3JlYXRlKEpT
Qzo6RGVidWdnZXI6OkZyYW1lVmlzaXRvciogZnJhbWUpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEphdmFTY3JpcHRDYWxsRnJhbWUoZGVidWdnZXJDYWxsRnJhbWUsIGNhbGxl
cikpOworICAgICAgICBBU1NFUlQoc2l6ZW9mKEphdmFTY3JpcHRDYWxsRnJhbWUpID09IHNpemVv
ZihKU0M6OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3IpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8SmF2YVNjcmlwdENhbGxGcmFtZSo+KGZyYW1lKTsKICAgICB9CiAKLSAgICB2b2lk
IGludmFsaWRhdGUoKQotICAgIHsKLSAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAg
IG1fZGVidWdnZXJDYWxsRnJhbWUuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBib29sIGlzVmFsaWQo
KSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLQotICAgIEphdmFTY3JpcHRDYWxsRnJhbWUq
IGNhbGxlcigpOworICAgIGludHB0cl90IHNvdXJjZUlEKCkgY29uc3QgeyByZXR1cm4gc291cmNl
SWQoKTsgfQorICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGNhbGxlcigpIHsgcmV0dXJuIGNyZWF0
ZShKU0M6OkRlYnVnZ2VyOjpGcmFtZVZpc2l0b3I6OmNhbGxlcigpKTsgfQogCi0gICAgaW50cHRy
X3Qgc291cmNlSUQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLnNvdXJjZUlk
KCk7IH0KLSAgICBjb25zdCBUZXh0UG9zaXRpb24gcG9zaXRpb24oKSBjb25zdAotICAgIHsKLSAg
ICAgICAgT3JkaW5hbE51bWJlciBsaW5lID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFz
ZWRJbnQobV9kZWJ1Z2dlckNhbGxGcmFtZS5saW5lKCkpOwotICAgICAgICBPcmRpbmFsTnVtYmVy
IGNvbHVtbiA9IFdURjo6T3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KG1fZGVidWdnZXJD
YWxsRnJhbWUuY29sdW1uKCkpOwotICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uKGxpbmUsIGNv
bHVtbik7Ci0gICAgfQotICAgIGludCBsaW5lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBXVEY6Ok9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChtX2RlYnVnZ2VyQ2FsbEZyYW1l
LmxpbmUoKSkuemVyb0Jhc2VkSW50KCk7Ci0gICAgfQotICAgIGludCBjb2x1bW4oKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6T3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50
KG1fZGVidWdnZXJDYWxsRnJhbWUuY29sdW1uKCkpLnplcm9CYXNlZEludCgpOwotICAgIH0KLQot
ICAgIHZvaWQgdXBkYXRlKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2Fs
bEZyYW1lKQotICAgIHsKLSAgICAgICAgbV9kZWJ1Z2dlckNhbGxGcmFtZSA9IGRlYnVnZ2VyQ2Fs
bEZyYW1lOwotICAgICAgICBtX2lzVmFsaWQgPSB0cnVlOwotICAgIH0KLQotICAgIFN0cmluZyBm
dW5jdGlvbk5hbWUoKSBjb25zdDsKLSAgICBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpUeXBlIHR5
cGUoKSBjb25zdDsKLSAgICBKU0M6OkpTU2NvcGUqIHNjb3BlQ2hhaW4oKSBjb25zdDsKLSAgICBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0KCkgY29uc3Q7Ci0gICAgSlND
OjpFeGVjU3RhdGUqIGV4ZWMoKSBjb25zdDsKLQotICAgIEpTQzo6SlNPYmplY3QqIHRoaXNPYmpl
Y3QoKSBjb25zdDsKLSAgICBKU0M6OkpTVmFsdWUgZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3Jp
cHQsIEpTQzo6SlNWYWx1ZSYgZXhjZXB0aW9uKSBjb25zdDsKLSAgICAKIHByaXZhdGU6Ci0gICAg
SmF2YVNjcmlwdENhbGxGcmFtZShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgUGFzc1Jl
ZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBjYWxsZXIpOwotCi0gICAgSlNDOjpEZWJ1Z2dlckNh
bGxGcmFtZSBtX2RlYnVnZ2VyQ2FsbEZyYW1lOwotICAgIFJlZlB0cjxKYXZhU2NyaXB0Q2FsbEZy
YW1lPiBtX2NhbGxlcjsKLSAgICBib29sIG1faXNWYWxpZDsKKyAgICBKYXZhU2NyaXB0Q2FsbEZy
YW1lKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxNTYy
ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAxMC0yMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC01MywxOCArNTMsMTcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1TY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0RGVidWdTZXJ2ZXIoKQot
ICAgIDogbV9jYWxsaW5nTGlzdGVuZXJzKGZhbHNlKQotICAgICwgbV9wYXVzZU9uRXhjZXB0aW9u
c1N0YXRlKERvbnRQYXVzZU9uRXhjZXB0aW9ucykKLSAgICAsIG1fcGF1c2VPbk5leHRTdGF0ZW1l
bnQoZmFsc2UpCi0gICAgLCBtX3BhdXNlZChmYWxzZSkKK2lubGluZSBzdGF0aWMgSlNDOjpCcmVh
a3BvaW50IHNjcmlwdEJyZWFrcG9pbnRUb0pTQ0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSWQs
IGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmIHNiKQoreworICAgIHJldHVybiBKU0M6OkJyZWFrcG9p
bnQoc291cmNlSWQsIHNiLmxpbmVOdW1iZXIsIHNiLmNvbHVtbk51bWJlciwgc2IuY29uZGl0aW9u
LCBzYi5hdXRvQ29udGludWUpOworfQorCitTY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0RGVidWdT
ZXJ2ZXIoYm9vbCBpc1dvcmtlclRocmVhZCkKKyAgICA6IERlYnVnZ2VyKGlzV29ya2VyVGhyZWFk
KQorICAgICwgbV9jYWxsaW5nTGlzdGVuZXJzKGZhbHNlKQogICAgICwgbV9ydW5uaW5nTmVzdGVk
TWVzc2FnZUxvb3AoZmFsc2UpCiAgICAgLCBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMo
dHJ1ZSkKLSAgICAsIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQodHJ1ZSkKLSAgICAsIG1fcGF1c2VP
bkNhbGxGcmFtZSgwKQogICAgICwgbV9yZWNvbXBpbGVUaW1lcih0aGlzLCAmU2NyaXB0RGVidWdT
ZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKQotICAgICwgbV9sYXN0RXhlY3V0ZWRMaW5l
KC0xKQotICAgICwgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJZCgtMSkKIHsKIH0KIApAQCAtNzIsMTMx
ICs3MSw1NCBAQCBTY3JpcHREZWJ1Z1NlcnZlcjo6flNjcmlwdERlYnVnU2VydmVyKCkKIHsKIH0K
IAotU3RyaW5nIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYg
c291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmIHNjcmlwdEJyZWFrcG9pbnQsIGludCog
YWN0dWFsTGluZU51bWJlciwgaW50KiBhY3R1YWxDb2x1bW5OdW1iZXIpCitCcmVha3BvaW50SWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSWQsIGNvbnN0
IFNjcmlwdEJyZWFrcG9pbnQmIHNjcmlwdEJyZWFrcG9pbnQsIGludCogYWN0dWFsTGluZU51bWJl
ciwgaW50KiBhY3R1YWxDb2x1bW5OdW1iZXIpCiB7Ci0gICAgaW50cHRyX3Qgc291cmNlSURWYWx1
ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7Ci0gICAgaWYgKCFzb3VyY2VJRFZhbHVlKQotICAgICAg
ICByZXR1cm4gIiI7Ci0gICAgU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9
IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSURWYWx1ZSk7Ci0gICAgaWYgKGl0
ID09IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmVuZCgpKQotICAgICAgICBpdCA9IG1fc291cmNl
SWRUb0JyZWFrcG9pbnRzLnNldChzb3VyY2VJRFZhbHVlLCBMaW5lVG9CcmVha3BvaW50TWFwKCkp
Lml0ZXJhdG9yOwotICAgIExpbmVUb0JyZWFrcG9pbnRNYXA6Oml0ZXJhdG9yIGJyZWFrc0l0ID0g
aXQtPnZhbHVlLmZpbmQoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyICsgMSk7Ci0gICAgaWYg
KGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKLSAgICAgICAgYnJlYWtzSXQgPSBpdC0+dmFs
dWUuc2V0KHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciArIDEsIEJyZWFrcG9pbnRzSW5MaW5l
KCkpLml0ZXJhdG9yOwotCi0gICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJy
ZWFrc0l0LT52YWx1ZTsKLSAgICB1bnNpZ25lZCBicmVha3NDb3VudCA9IGJyZWFrc1ZlY3Rvci5z
aXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyZWFrc0NvdW50OyBpKyspIHsK
LSAgICAgICAgaWYgKGJyZWFrc1ZlY3Rvci5hdChpKS5jb2x1bW5OdW1iZXIgPT0gc2NyaXB0QnJl
YWtwb2ludC5jb2x1bW5OdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gIiI7CisgICAgSlNDOjpC
cmVha3BvaW50IGJyZWFrcG9pbnQgPSBzY3JpcHRCcmVha3BvaW50VG9KU0NCcmVha3BvaW50KHNv
dXJjZUlkLCBzY3JpcHRCcmVha3BvaW50KTsKKyAgICBCcmVha3BvaW50SWQgaWQgPSBEZWJ1Z2dl
cjo6c2V0QnJlYWtwb2ludChzb3VyY2VJZCwgYnJlYWtwb2ludCwgYWN0dWFsTGluZU51bWJlciwg
YWN0dWFsQ29sdW1uTnVtYmVyKTsKKyAgICBpZiAoaWQgIT0gbnVsbEJyZWFrcG9pbnRJZCkgewor
I2lmbmRlZiBOREVCVUcKKyAgICAgICAgQnJlYWtwb2ludElkVG9BY3Rpb25zTWFwOjppdGVyYXRv
ciBpdCA9IG1fYnJlYWtwb2ludElkVG9BY3Rpb25zLmZpbmQoaWQpOworICAgICAgICBBU1NFUlQo
aXQgPT0gbV9icmVha3BvaW50SWRUb0FjdGlvbnMuZW5kKCkpOworI2VuZGlmCisgICAgICAgIGNv
bnN0IFZlY3RvcjxTY3JpcHRCcmVha3BvaW50QWN0aW9uPiAmYWN0aW9ucyA9IHNjcmlwdEJyZWFr
cG9pbnQuYWN0aW9uczsKKyAgICAgICAgbV9icmVha3BvaW50SWRUb0FjdGlvbnMuc2V0KGlkLCBh
Y3Rpb25zKTsKICAgICB9Ci0gICAgYnJlYWtzVmVjdG9yLmFwcGVuZChzY3JpcHRCcmVha3BvaW50
KTsKLQotICAgICphY3R1YWxMaW5lTnVtYmVyID0gc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVy
OwotICAgICphY3R1YWxDb2x1bW5OdW1iZXIgPSBzY3JpcHRCcmVha3BvaW50LmNvbHVtbk51bWJl
cjsKLSAgICByZXR1cm4gc291cmNlSUQgKyAiOiIgKyBTdHJpbmc6Om51bWJlcihzY3JpcHRCcmVh
a3BvaW50LmxpbmVOdW1iZXIpICsgIjoiICsgU3RyaW5nOjpudW1iZXIoc2NyaXB0QnJlYWtwb2lu
dC5jb2x1bW5OdW1iZXIpOworICAgIHJldHVybiBpZDsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKK3ZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoQnJlYWtwb2ludElkIGlkKQogewot
ICAgIFZlY3RvcjxTdHJpbmc+IHRva2VuczsKLSAgICBicmVha3BvaW50SWQuc3BsaXQoIjoiLCB0
b2tlbnMpOwotICAgIGlmICh0b2tlbnMuc2l6ZSgpICE9IDMpCi0gICAgICAgIHJldHVybjsKLSAg
ICBib29sIHN1Y2Nlc3M7Ci0gICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHRva2Vuc1swXS50
b0ludFB0cigmc3VjY2Vzcyk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm47Ci0g
ICAgdW5zaWduZWQgbGluZU51bWJlciA9IHRva2Vuc1sxXS50b1VJbnQoJnN1Y2Nlc3MpOwotICAg
IGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGNvbHVtbk51bWJl
ciA9IHRva2Vuc1syXS50b1VJbnQoJnN1Y2Nlc3MpOwotICAgIGlmICghc3VjY2VzcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9
IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSURWYWx1ZSk7Ci0gICAgaWYgKGl0
ID09IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0gICAg
TGluZVRvQnJlYWtwb2ludE1hcDo6aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChs
aW5lTnVtYmVyICsgMSk7Ci0gICAgaWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKKyAg
ICBpZiAoaWQgPT0gbnVsbEJyZWFrcG9pbnRJZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQnJl
YWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT52YWx1ZTsKLSAgICB1bnNp
Z25lZCBicmVha3NDb3VudCA9IGJyZWFrc1ZlY3Rvci5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJyZWFrc0NvdW50OyBpKyspIHsKLSAgICAgICAgaWYgKGJyZWFrc1ZlY3Rv
ci5hdChpKS5jb2x1bW5OdW1iZXIgPT0gc3RhdGljX2Nhc3Q8aW50Pihjb2x1bW5OdW1iZXIpKSB7
Ci0gICAgICAgICAgICBicmVha3NWZWN0b3IucmVtb3ZlKGkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9CisgICAgQnJlYWtwb2ludElkVG9BY3Rpb25zTWFwOjppdGVyYXRv
ciBpdCA9IG1fYnJlYWtwb2ludElkVG9BY3Rpb25zLmZpbmQoaWQpOworICAgIEFTU0VSVChpdCAh
PSBtX2JyZWFrcG9pbnRJZFRvQWN0aW9ucy5lbmQoKSk7CisgICAgbV9icmVha3BvaW50SWRUb0Fj
dGlvbnMucmVtb3ZlKGl0KTsKKyAgICBEZWJ1Z2dlcjo6cmVtb3ZlQnJlYWtwb2ludChpZCk7CiB9
CiAKLWJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNl
SUQsIGNvbnN0IFRleHRQb3NpdGlvbiYgcG9zaXRpb24sIFNjcmlwdEJyZWFrcG9pbnQgKmhpdEJy
ZWFrcG9pbnQpIGNvbnN0Cit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjbGVhckJyZWFrcG9pbnRz
KCkKIHsKLSAgICBpZiAoIW1fYnJlYWtwb2ludHNBY3RpdmF0ZWQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIFNvdXJjZUlkVG9CcmVha3BvaW50c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5maW5kKHNvdXJjZUlEKTsKLSAgICBpZiAoaXQgPT0g
bV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGludCBsaW5lTnVtYmVyID0gcG9zaXRpb24ubV9saW5lLnplcm9CYXNlZEludCgpOwotICAg
IGludCBjb2x1bW5OdW1iZXIgPSBwb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKTsKLSAg
ICBpZiAobGluZU51bWJlciA8IDAgfHwgY29sdW1uTnVtYmVyIDwgMCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgTGluZVRvQnJlYWtwb2ludE1hcDo6Y29uc3RfaXRlcmF0b3IgYnJlYWtz
SXQgPSBpdC0+dmFsdWUuZmluZChsaW5lTnVtYmVyICsgMSk7Ci0gICAgaWYgKGJyZWFrc0l0ID09
IGl0LT52YWx1ZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBoaXQg
PSBmYWxzZTsKLSAgICBjb25zdCBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVjdG9yID0gYnJl
YWtzSXQtPnZhbHVlOwotICAgIHVuc2lnbmVkIGJyZWFrc0NvdW50ID0gYnJlYWtzVmVjdG9yLnNp
emUoKTsKLSAgICB1bnNpZ25lZCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBicmVha3NDb3VudDsg
aSsrKSB7Ci0gICAgICAgIGludCBicmVha0xpbmUgPSBicmVha3NWZWN0b3IuYXQoaSkubGluZU51
bWJlcjsKLSAgICAgICAgaW50IGJyZWFrQ29sdW1uID0gYnJlYWtzVmVjdG9yLmF0KGkpLmNvbHVt
bk51bWJlcjsKLSAgICAgICAgLy8gU2luY2UgZnJvbnRlbmQgdHJ1bmNhdGVzIHRoZSBpbmRlbnQs
IHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gYSBsaW5lIG11c3QgbWF0Y2ggdGhlIGJyZWFrcG9pbnQg
KGxpbmUsMCkuCi0gICAgICAgIGlmICgobGluZU51bWJlciAhPSBtX2xhc3RFeGVjdXRlZExpbmUg
JiYgbGluZU51bWJlciA9PSBicmVha0xpbmUgJiYgIWJyZWFrQ29sdW1uKQotICAgICAgICAgICAg
fHwgKGxpbmVOdW1iZXIgPT0gYnJlYWtMaW5lICYmIGNvbHVtbk51bWJlciA9PSBicmVha0NvbHVt
bikpIHsKLSAgICAgICAgICAgIGhpdCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBpZiAoIWhpdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKGhpdEJyZWFrcG9pbnQpCi0gICAgICAgICpoaXRCcmVha3BvaW50ID0gYnJlYWtzVmVjdG9y
LmF0KGkpOwotCi0gICAgLy8gQW4gZW1wdHkgY29uZGl0aW9uIGNvdW50cyBhcyBubyBjb25kaXRp
b24gd2hpY2ggaXMgZXF1aXZhbGVudCB0byAidHJ1ZSIuCi0gICAgaWYgKGJyZWFrc1ZlY3Rvci5h
dChpKS5jb25kaXRpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEpT
VmFsdWUgZXhjZXB0aW9uOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9jdXJyZW50Q2FsbEZyYW1l
LT5ldmFsdWF0ZShicmVha3NWZWN0b3IuYXQoaSkuY29uZGl0aW9uLCBleGNlcHRpb24pOwotICAg
IGlmIChleGNlcHRpb24pIHsKLSAgICAgICAgLy8gQW4gZXJyb25lb3VzIGNvbmRpdGlvbiBjb3Vu
dHMgYXMgImZhbHNlIi4KLSAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fY3VycmVudENhbGxGcmFt
ZS0+ZXhlYygpLCBleGNlcHRpb24pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiByZXN1bHQudG9Cb29sZWFuKG1fY3VycmVudENhbGxGcmFtZS0+ZXhlYygpKTsKKyAg
ICBEZWJ1Z2dlcjo6Y2xlYXJCcmVha3BvaW50cygpOworICAgIG1fYnJlYWtwb2ludElkVG9BY3Rp
b25zLmNsZWFyKCk7CiB9CiAKIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OmV2YWx1YXRlQnJlYWtw
b2ludEFjdGlvbihjb25zdCBTY3JpcHRCcmVha3BvaW50QWN0aW9uJiBicmVha3BvaW50QWN0aW9u
KSBjb25zdAogewogICAgIHN3aXRjaCAoYnJlYWtwb2ludEFjdGlvbi50eXBlKSB7CiAgICAgY2Fz
ZSBTY3JpcHRCcmVha3BvaW50QWN0aW9uVHlwZUxvZzogewotICAgICAgICBET01XaW5kb3cqIHdp
bmRvdyA9IGFzSlNET01XaW5kb3cobV9jdXJyZW50Q2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2Jq
ZWN0KCkpLT5pbXBsKCk7CisgICAgICAgIEpTQzo6RGVidWdnZXI6OkZyYW1lVmlzaXRvciogZnJh
bWUgPSBjdXJyZW50RnJhbWUoKTsKKyAgICAgICAgRE9NV2luZG93KiB3aW5kb3cgPSBhc0pTRE9N
V2luZG93KGZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCk7CiAgICAgICAgIGlm
IChQYWdlQ29uc29sZSogY29uc29sZSA9IHdpbmRvdy0+cGFnZUNvbnNvbGUoKSkKICAgICAgICAg
ICAgIGNvbnNvbGUtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlTGV2ZWws
IGJyZWFrcG9pbnRBY3Rpb24uZGF0YSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb25UeXBlRXZhbHVhdGU6IHsKICAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb247Ci0gICAgICAgIG1fY3VycmVudENhbGxGcmFtZS0+ZXZhbHVhdGUoYnJlYWtwb2lu
dEFjdGlvbi5kYXRhLCBleGNlcHRpb24pOworICAgICAgICBKU0M6OkRlYnVnZ2VyOjpGcmFtZVZp
c2l0b3IqIGZyYW1lID0gY3VycmVudEZyYW1lKCk7CisgICAgICAgIGZyYW1lLT5ldmFsdWF0ZShi
cmVha3BvaW50QWN0aW9uLmRhdGEsIGV4Y2VwdGlvbik7CiAgICAgICAgIGlmIChleGNlcHRpb24p
Ci0gICAgICAgICAgICByZXBvcnRFeGNlcHRpb24obV9jdXJyZW50Q2FsbEZyYW1lLT5leGVjKCks
IGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXBvcnRFeGNlcHRpb24oZnJhbWUtPmV4ZWMoKSwg
ZXhjZXB0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgU2NyaXB0QnJlYWtw
b2ludEFjdGlvblR5cGVTb3VuZDoKQEAgLTIwNyw3OSArMTI5LDE1IEBAIGJvb2wgU2NyaXB0RGVi
dWdTZXJ2ZXI6OmV2YWx1YXRlQnJlYWtwb2kKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3BvaW50QWN0aW9ucyhjb25zdCBTY3JpcHRC
cmVha3BvaW50JiBicmVha3BvaW50KSBjb25zdAordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZh
bHVhdGVCcmVha3BvaW50QWN0aW9ucyhjb25zdCBKU0M6OkJyZWFrcG9pbnQmIGJyZWFrcG9pbnQp
CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBicmVha3BvaW50LmFjdGlvbnMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKCFldmFsdWF0ZUJyZWFrcG9pbnRBY3Rpb24oYnJlYWtwb2lu
dC5hY3Rpb25zW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBCcmVha3BvaW50
SWRUb0FjdGlvbnNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9icmVha3BvaW50SWRUb0FjdGlvbnMuZmlu
ZChicmVha3BvaW50LmlkKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9icmVha3BvaW50SWRUb0FjdGlv
bnMuZW5kKCkpOworICAgIEJyZWFrcG9pbnRBY3Rpb25zJiBhY3Rpb25zID0gaXQtPnZhbHVlOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoIWV2YWx1YXRlQnJlYWtwb2ludEFjdGlvbihhY3Rpb25zW2ldKSkKKyAgICAgICAgICAg
IHJldHVybjsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50cygpCi17Ci0gICAgbV9zb3VyY2VJZFRvQnJlYWtwb2lu
dHMuY2xlYXIoKTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludHNB
Y3RpdmF0ZWQoYm9vbCBhY3RpdmF0ZWQpCi17Ci0gICAgbV9icmVha3BvaW50c0FjdGl2YXRlZCA9
IGFjdGl2YXRlZDsKLX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlKQotewotICAgIG1fcGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSA9IHBhdXNlOwotfQotCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpz
ZXRQYXVzZU9uTmV4dFN0YXRlbWVudChib29sIHBhdXNlKQotewotICAgIG1fcGF1c2VPbk5leHRT
dGF0ZW1lbnQgPSBwYXVzZTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6YnJlYWtQcm9n
cmFtKCkKLXsKLSAgICBpZiAobV9wYXVzZWQgfHwgIW1fY3VycmVudENhbGxGcmFtZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7Ci0gICAgcGF1
c2VJZk5lZWRlZChtX2N1cnJlbnRDYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7Ci19
Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNvbnRpbnVlUHJvZ3JhbSgpCi17Ci0gICAgaWYg
KCFtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVu
dCA9IGZhbHNlOwotICAgIG1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cyA9IHRydWU7Ci19
Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBJbnRvU3RhdGVtZW50KCkKLXsKLSAgICBp
ZiAoIW1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdXNlT25OZXh0U3RhdGVt
ZW50ID0gdHJ1ZTsKLSAgICBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0cnVlOwot
fQotCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzdGVwT3ZlclN0YXRlbWVudCgpCi17Ci0gICAg
aWYgKCFtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXVzZU9uQ2FsbEZyYW1l
ID0gbV9jdXJyZW50Q2FsbEZyYW1lLmdldCgpOwotICAgIG1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dl
ckV2ZW50cyA9IHRydWU7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBPdXRPZkZ1
bmN0aW9uKCkKLXsKLSAgICBpZiAoIW1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRDYWxsRnJh
bWUtPmNhbGxlcigpIDogMDsKLSAgICBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0
cnVlOwogfQogCiBib29sIFNjcmlwdERlYnVnU2VydmVyOjpjYW5TZXRTY3JpcHRTb3VyY2UoKQpA
QCAtMjg3LDcgKzE0NSw3IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OmNhblNldFNjcmlwdFNv
dXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldFNj
cmlwdFNvdXJjZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29sLCBTdHJpbmcqLCBT
Y3JpcHRWYWx1ZSosIFNjcmlwdE9iamVjdCopCitib29sIFNjcmlwdERlYnVnU2VydmVyOjpzZXRT
Y3JpcHRTb3VyY2UoaW50cHRyX3QsIGNvbnN0IFN0cmluZyYsIGJvb2wsIFN0cmluZyosIFNjcmlw
dFZhbHVlKiwgU2NyaXB0T2JqZWN0KikKIHsKICAgICAvLyBGSVhNRSg0MDMwMCk6IGltcGxlbWVu
dCB0aGlzLgogICAgIHJldHVybiBmYWxzZTsKQEAgLTMwMiwxNSArMTYwLDE1IEBAIHZvaWQgU2Ny
aXB0RGVidWdTZXJ2ZXI6OnVwZGF0ZUNhbGxTdGFjaygKIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6ZGlzcGF0Y2hEaWRQYXVzZShTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lcikKIHsKLSAg
ICBBU1NFUlQobV9wYXVzZWQpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBt
X2N1cnJlbnRDYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlND
OjpEZWJ1Z2dlcjo6RnJhbWVWaXNpdG9yKiBmcmFtZSA9IGN1cnJlbnRGcmFtZSgpOworICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBmcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxP
YmplY3QoKTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUgPSBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKICAgICBKU1ZhbHVlIGpzQ2FsbEZyYW1lOwogICAgIHsKLSAgICAgICAgaWYgKG1f
Y3VycmVudENhbGxGcmFtZS0+aXNWYWxpZCgpICYmIGdsb2JhbE9iamVjdC0+aW5oZXJpdHMoSlNE
T01HbG9iYWxPYmplY3Q6OmluZm8oKSkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5pc1ZhbGlkKCkg
JiYgZ2xvYmFsT2JqZWN0LT5pbmhlcml0cyhKU0RPTUdsb2JhbE9iamVjdDo6aW5mbygpKSkgewog
ICAgICAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIGRvbUdsb2JhbE9iamVjdCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhzdGF0ZSk7Ci0gICAgICAgICAgICBqc0NhbGxGcmFtZSA9IHRvSlMoc3RhdGUsIGRv
bUdsb2JhbE9iamVjdCwgbV9jdXJyZW50Q2FsbEZyYW1lLmdldCgpKTsKKyAgICAgICAgICAgIGpz
Q2FsbEZyYW1lID0gdG9KUyhzdGF0ZSwgZG9tR2xvYmFsT2JqZWN0LCBKYXZhU2NyaXB0Q2FsbEZy
YW1lOjpjcmVhdGUoZnJhbWUpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBqc0NhbGxG
cmFtZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgfQpAQCAtMzI0LDcgKzE4Miw3IEBAIHZvaWQgU2Ny
aXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkQ29udGkKIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6ZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZShjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBT
b3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIsIGJvb2wgaXNDb250ZW50U2NyaXB0KQogewot
ICAgIFN0cmluZyBzb3VyY2VJRCA9IFN0cmluZzo6bnVtYmVyKHNvdXJjZVByb3ZpZGVyLT5hc0lE
KCkpOworICAgIGludHB0cl90IHNvdXJjZUlkID0gc291cmNlUHJvdmlkZXItPmFzSUQoKTsKIAog
ICAgIFNjcmlwdERlYnVnTGlzdGVuZXI6OlNjcmlwdCBzY3JpcHQ7CiAgICAgc2NyaXB0LnVybCA9
IHNvdXJjZVByb3ZpZGVyLT51cmwoKTsKQEAgLTM1Miw3ICsyMTAsNyBAQCB2b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpkaXNwYXRjaERpZFBhcnNlCiAgICAgVmVjdG9yPFNjcmlwdERlYnVnTGlzdGVu
ZXIqPiBjb3B5OwogICAgIGNvcHlUb1ZlY3RvcihsaXN0ZW5lcnMsIGNvcHkpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY29weS5zaXplKCk7ICsraSkKLSAgICAgICAgY29weVtpXS0+ZGlk
UGFyc2VTb3VyY2Uoc291cmNlSUQsIHNjcmlwdCk7CisgICAgICAgIGNvcHlbaV0tPmRpZFBhcnNl
U291cmNlKHNvdXJjZUlkLCBzY3JpcHQpOwogfQogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpk
aXNwYXRjaEZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywg
U291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkKQEAgLTM3MiwyMCArMjMwLDcgQEAgYm9vbCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6aXNDb250ZW50U2NyaXB0KAogICAgIHJldHVybiBjdXJyZW50V29ybGQoZXhlYykgIT0g
bWFpblRocmVhZE5vcm1hbFdvcmxkKCk7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRl
dGFjaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIC8vIElmIHdlJ3JlIGRl
dGFjaGluZyBmcm9tIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGdsb2JhbCBvYmplY3QsIG1hbnVh
bGx5IHRlYXIgZG93biBvdXIKLSAgICAvLyBzdGFjaywgc2luY2Ugd2Ugd29uJ3QgZ2V0IGZ1cnRo
ZXIgZGVidWdnZXIgY2FsbGJhY2tzIHRvIGRvIHNvLiBBbHNvLCByZXN1bWUgZXhlY3V0aW9uLAot
ICAgIC8vIHNpbmNlIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gc3RheWluZyBwYXVzZWQgb25jZSBhIHdp
bmRvdyBjbG9zZXMuCi0gICAgaWYgKG1fY3VycmVudENhbGxGcmFtZSAmJiBtX2N1cnJlbnRDYWxs
RnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSA9PSBnbG9iYWxPYmplY3QpIHsKLSAgICAgICAg
bV9jdXJyZW50Q2FsbEZyYW1lID0gMDsKLSAgICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gMDsK
LSAgICAgICAgY29udGludWVQcm9ncmFtKCk7Ci0gICAgfQotICAgIERlYnVnZ2VyOjpkZXRhY2go
Z2xvYmFsT2JqZWN0KTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c291cmNlUGFyc2Vk
KEV4ZWNTdGF0ZSogZXhlYywgU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyLCBpbnQgZXJy
b3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OmhhbmRsZVNvdXJjZVBhcnNlZChFeGVjU3RhdGUqIGV4ZWMsIFNvdXJjZVByb3ZpZGVyKiBz
b3VyY2VQcm92aWRlciwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
CiB7CiAgICAgaWYgKG1fY2FsbGluZ0xpc3RlbmVycykKICAgICAgICAgcmV0dXJuOwpAQCAtNDA2
LDYgKzI1MSwxMSBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzb3VyY2VQYXJzZWQoRXhlCiAg
ICAgbV9jYWxsaW5nTGlzdGVuZXJzID0gZmFsc2U7CiB9CiAKK2Jvb2wgU2NyaXB0RGVidWdTZXJ2
ZXI6Om5lZWRQYXVzZUhhbmRsaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgcmV0dXJuICEhZ2V0TGlzdGVuZXJzRm9yR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCk7Cit9
CisKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycyhj
b25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBKYXZhU2NyaXB0RXhlY3V0aW9uQ2FsbGJhY2sg
Y2FsbGJhY2spCiB7CiAgICAgVmVjdG9yPFNjcmlwdERlYnVnTGlzdGVuZXIqPiBjb3B5OwpAQCAt
NDI5LDUzICsyNzksOCBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaEZ1bmN0aW9u
CiAgICAgbV9jYWxsaW5nTGlzdGVuZXJzID0gZmFsc2U7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdT
ZXJ2ZXI6OmNyZWF0ZUNhbGxGcmFtZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJD
YWxsRnJhbWUpCi17Ci0gICAgaW50cHRyX3Qgc291cmNlSWQgPSBkZWJ1Z2dlckNhbGxGcmFtZS5z
b3VyY2VJZCgpOwotICAgIG1fY3VycmVudENhbGxGcmFtZSA9IEphdmFTY3JpcHRDYWxsRnJhbWU6
OmNyZWF0ZShkZWJ1Z2dlckNhbGxGcmFtZSwgbV9jdXJyZW50Q2FsbEZyYW1lKTsKLSAgICBpZiAo
bV9sYXN0RXhlY3V0ZWRTb3VyY2VJZCAhPSBzb3VyY2VJZCkgewotICAgICAgICBtX2xhc3RFeGVj
dXRlZExpbmUgPSAtMTsKLSAgICAgICAgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJZCA9IHNvdXJjZUlk
OwotICAgIH0KLX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6dXBkYXRlQ2FsbEZyYW1lQW5k
UGF1c2VJZk5lZWRlZChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUp
Cit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVQYXVzZShKU0dsb2JhbE9iamVjdCogZHlu
YW1pY0dsb2JhbE9iamVjdCkKIHsKLSAgICAvLyBBU1NFUlQobV9jdXJyZW50Q2FsbEZyYW1lKTsK
LSAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9j
dXJyZW50Q2FsbEZyYW1lLT51cGRhdGUoZGVidWdnZXJDYWxsRnJhbWUpOwotICAgIHBhdXNlSWZO
ZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKLX0KLQotdm9p
ZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2VJZk5lZWRlZChKU0dsb2JhbE9iamVjdCogZHluYW1p
Y0dsb2JhbE9iamVjdCkKLXsKLSAgICBpZiAobV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLSAK
LSAgICBpZiAoIWdldExpc3RlbmVyc0Zvckdsb2JhbE9iamVjdChkeW5hbWljR2xvYmFsT2JqZWN0
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50Owot
ICAgIGJvb2wgZGlkSGl0QnJlYWtwb2ludCA9IGZhbHNlOwotICAgIGJvb2wgcGF1c2VOb3cgPSBt
X3BhdXNlT25OZXh0U3RhdGVtZW50OwotICAgIHBhdXNlTm93IHw9IChtX3BhdXNlT25DYWxsRnJh
bWUgPT0gbV9jdXJyZW50Q2FsbEZyYW1lKTsKLSAgICBwYXVzZU5vdyB8PSBkaWRIaXRCcmVha3Bv
aW50ID0gaGFzQnJlYWtwb2ludChtX2N1cnJlbnRDYWxsRnJhbWUtPnNvdXJjZUlEKCksIG1fY3Vy
cmVudENhbGxGcmFtZS0+cG9zaXRpb24oKSwgJmJyZWFrcG9pbnQpOwotICAgIG1fbGFzdEV4ZWN1
dGVkTGluZSA9IG1fY3VycmVudENhbGxGcmFtZS0+cG9zaXRpb24oKS5tX2xpbmUuemVyb0Jhc2Vk
SW50KCk7Ci0gICAgaWYgKCFwYXVzZU5vdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRp
ZEhpdEJyZWFrcG9pbnQpIHsKLSAgICAgICAgZXZhbHVhdGVCcmVha3BvaW50QWN0aW9ucyhicmVh
a3BvaW50KTsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQuYXV0b0NvbnRpbnVlKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IDA7Ci0gICAgbV9w
YXVzZU9uTmV4dFN0YXRlbWVudCA9IGZhbHNlOwotICAgIG1fcGF1c2VkID0gdHJ1ZTsKLQogICAg
IGRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycygmU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNo
RGlkUGF1c2UsIGR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgIGRpZFBhdXNlKGR5bmFtaWNHbG9i
YWxPYmplY3QpOwogCkBAIC00ODgsODUgKzI5MywxNiBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVy
OjpwYXVzZUlmTmVlZGVkKEpTCiAKICAgICBkaWRDb250aW51ZShkeW5hbWljR2xvYmFsT2JqZWN0
KTsKICAgICBkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoJlNjcmlwdERlYnVnU2VydmVyOjpk
aXNwYXRjaERpZENvbnRpbnVlLCBkeW5hbWljR2xvYmFsT2JqZWN0KTsKLQotICAgIG1fcGF1c2Vk
ID0gZmFsc2U7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNhbGxFdmVudChjb25zdCBE
ZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCi17Ci0gICAgaWYgKCFtX3BhdXNl
ZCkgewotICAgICAgICBjcmVhdGVDYWxsRnJhbWUoZGVidWdnZXJDYWxsRnJhbWUpOwotICAgICAg
ICBwYXVzZUlmTmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7
Ci0gICAgfQotfQotCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjphdFN0YXRlbWVudChjb25zdCBE
ZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCi17Ci0gICAgaWYgKCFtX3BhdXNl
ZCkKLSAgICAgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxG
cmFtZSk7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJldHVybkV2ZW50KGNvbnN0IERl
YnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSkKLXsKLSAgICBpZiAobV9wYXVzZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQo
ZGVidWdnZXJDYWxsRnJhbWUpOwotCi0gICAgLy8gZGV0YWNoIG1heSBoYXZlIGJlZW4gY2FsbGVk
IGR1cmluZyBwYXVzZUlmTmVlZGVkCi0gICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFRyZWF0IHN0ZXBwaW5nIG92ZXIgYSByZXR1cm4gc3RhdGVt
ZW50IGxpa2Ugc3RlcHBpbmcgb3V0LgotICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgPT0gbV9w
YXVzZU9uQ2FsbEZyYW1lKQotICAgICAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRD
YWxsRnJhbWUtPmNhbGxlcigpOwotICAgIG1fY3VycmVudENhbGxGcmFtZSA9IG1fY3VycmVudENh
bGxGcmFtZS0+Y2FsbGVyKCk7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmV4Y2VwdGlv
bihjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGJvb2wgaGFzSGFu
ZGxlcikKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2lu
dENvbmRpdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbikg
Y29uc3QKIHsKLSAgICBpZiAobV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPbkFsbEV4Y2VwdGlvbnMgfHwgKG1fcGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9PSBQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zICYmICFoYXNI
YW5kbGVyKSkKLSAgICAgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7Ci0KLSAgICB1
cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGRlYnVnZ2VyQ2FsbEZyYW1lKTsKKyAgICBy
ZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dl
ckNhbGxGcmFtZSkKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6Om5vdGlmeURvbmVQcm9jZXNzaW5n
RGVidWdnZXJFdmVudHMoKQogewotICAgIGlmICghbV9wYXVzZWQpIHsKLSAgICAgICAgY3JlYXRl
Q2FsbEZyYW1lKGRlYnVnZ2VyQ2FsbEZyYW1lKTsKLSAgICAgICAgcGF1c2VJZk5lZWRlZChkZWJ1
Z2dlckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwotICAgIH0KLX0KLQotdm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6ZGlkRXhlY3V0ZVByb2dyYW0oY29uc3QgRGVidWdnZXJDYWxsRnJh
bWUmIGRlYnVnZ2VyQ2FsbEZyYW1lKQotewotICAgIGlmIChtX3BhdXNlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxG
cmFtZSk7Ci0KLSAgICAvLyBUcmVhdCBzdGVwcGluZyBvdmVyIHRoZSBlbmQgb2YgYSBwcm9ncmFt
IGxpa2Ugc3RlcHBpbmcgb3V0LgotICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKG1fY3VycmVudENhbGxGcmFtZSA9PSBtX3BhdXNlT25DYWxsRnJh
bWUpIHsKLSAgICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5j
YWxsZXIoKTsKLSAgICAgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIG1fY3VycmVudENhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFt
ZS0+Y2FsbGVyKCk7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlYWNoQnJlYWtw
b2ludChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUpCi17Ci0gICAg
aWYgKG1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdXNlT25OZXh0U3RhdGVt
ZW50ID0gdHJ1ZTsKLSAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGRlYnVnZ2Vy
Q2FsbEZyYW1lKTsKKyAgICBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0cnVlOwog
fQogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24o
KQpAQCAtNTc0LDcgKzMxMCw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFs
bEpTRnUKICAgICBtX3JlY29tcGlsZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAotdm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6Y29tcGlsZVNjcmlwdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYsIFN0cmluZyosIFN0cmluZyopCit2b2lkIFNjcmlwdERlYnVn
U2VydmVyOjpjb21waWxlU2NyaXB0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiwgaW50cHRyX3QqLCBTdHJpbmcqKQogewogICAgIC8vIEZJWE1FKDg5NjUyKTog
aW1wbGVtZW50IHRoaXMuCiB9CkBAIC01ODQsNyArMzIwLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6Y2xlYXJDb21waWxlZFNjcgogICAgIC8vIEZJWE1FKDg5NjUyKTogaW1wbGVtZW50IHRo
aXMuCiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJ1blNjcmlwdChKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IFN0cmluZyYsIFNjcmlwdFZhbHVlKiwgYm9vbCosIFN0cmluZyopCit2b2lkIFNj
cmlwdERlYnVnU2VydmVyOjpydW5TY3JpcHQoSlNDOjpFeGVjU3RhdGUqLCBpbnRwdHJfdCwgU2Ny
aXB0VmFsdWUqLCBib29sKiwgU3RyaW5nKikKIHsKICAgICAvLyBGSVhNRSg4OTY1Mik6IGltcGxl
bWVudCB0aGlzLgogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVi
dWdTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAxNTYyODEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTUsMzMgKzU1LDE4IEBAIGNsYXNzIFNj
cmlwdERlYnVnTGlzdGVuZXI7CiBjbGFzcyBTY3JpcHRPYmplY3Q7CiBjbGFzcyBTY3JpcHRWYWx1
ZTsKIAotY2xhc3MgU2NyaXB0RGVidWdTZXJ2ZXIgOiBwcm90ZWN0ZWQgSlNDOjpEZWJ1Z2dlciB7
Cit0eXBlZGVmIEpTQzo6QnJlYWtwb2ludElkIEJyZWFrcG9pbnRJZDsKK2NvbnN0IEJyZWFrcG9p
bnRJZCBudWxsQnJlYWtwb2ludElkID0gSlNDOjpudWxsQnJlYWtwb2ludElkOworCitjbGFzcyBT
Y3JpcHREZWJ1Z1NlcnZlciA6IHB1YmxpYyBKU0M6OkRlYnVnZ2VyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTY3JpcHREZWJ1Z1NlcnZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIFN0cmluZyBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQs
IGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmLCBpbnQqIGFjdHVhbExpbmVOdW1iZXIsIGludCogYWN0
dWFsQ29sdW1uTnVtYmVyKTsKLSAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBicmVha3BvaW50SWQpOworICAgIEJyZWFrcG9pbnRJZCBzZXRCcmVha3BvaW50KGludHB0cl90
IHNvdXJjZUlkLCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiwgaW50KiBhY3R1YWxMaW5lTnVtYmVy
LCBpbnQqIGFjdHVhbENvbHVtbk51bWJlcik7CisgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KEJy
ZWFrcG9pbnRJZCk7CiAgICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7Ci0gICAgdm9pZCBzZXRC
cmVha3BvaW50c0FjdGl2YXRlZChib29sIGFjdGl2YXRlZCk7Ci0gICAgdm9pZCBhY3RpdmF0ZUJy
ZWFrcG9pbnRzKCkgeyBzZXRCcmVha3BvaW50c0FjdGl2YXRlZCh0cnVlKTsgfQotICAgIHZvaWQg
ZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCkgeyBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChmYWxzZSk7
IH0KLQotICAgIGVudW0gUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSB7Ci0gICAgICAgIERvbnRQYXVz
ZU9uRXhjZXB0aW9ucywKLSAgICAgICAgUGF1c2VPbkFsbEV4Y2VwdGlvbnMsCi0gICAgICAgIFBh
dXNlT25VbmNhdWdodEV4Y2VwdGlvbnMKLSAgICB9OwotICAgIFBhdXNlT25FeGNlcHRpb25zU3Rh
dGUgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZTsgfQotICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShQYXVzZU9u
RXhjZXB0aW9uc1N0YXRlKTsKLQotICAgIHZvaWQgc2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQoYm9v
bCBwYXVzZSk7Ci0gICAgdm9pZCBicmVha1Byb2dyYW0oKTsKLSAgICB2b2lkIGNvbnRpbnVlUHJv
Z3JhbSgpOwotICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnQoKTsKLSAgICB2b2lkIHN0ZXBPdmVy
U3RhdGVtZW50KCk7Ci0gICAgdm9pZCBzdGVwT3V0T2ZGdW5jdGlvbigpOwogCiAgICAgYm9vbCBj
YW5TZXRTY3JpcHRTb3VyY2UoKTsKLSAgICBib29sIHNldFNjcmlwdFNvdXJjZShjb25zdCBTdHJp
bmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIG5ld0NvbnRlbnQsIGJvb2wgcHJldmlldywgU3Ry
aW5nKiBlcnJvciwgU2NyaXB0VmFsdWUqIG5ld0NhbGxGcmFtZXMsIFNjcmlwdE9iamVjdCogcmVz
dWx0KTsKKyAgICBib29sIHNldFNjcmlwdFNvdXJjZShpbnRwdHJfdCBzb3VyY2VJZCwgY29uc3Qg
U3RyaW5nJiBuZXdDb250ZW50LCBib29sIHByZXZpZXcsIFN0cmluZyogZXJyb3IsIFNjcmlwdFZh
bHVlKiBuZXdDYWxsRnJhbWVzLCBTY3JpcHRPYmplY3QqIHJlc3VsdCk7CiAgICAgdm9pZCB1cGRh
dGVDYWxsU3RhY2soU2NyaXB0VmFsdWUqIGNhbGxGcmFtZSk7CiAKICAgICBib29sIGNhdXNlc1Jl
Y29tcGlsYXRpb24oKSB7IHJldHVybiB0cnVlOyB9CkBAIC05NSwxMiArODAsMTEgQEAgcHVibGlj
OgogICAgICAgICAvLyBGSVhNRSh3ZWJraXQub3JnL2IvODIyMDMpOiBJbXBsZW1lbnQgcHJlcHJv
Y2Vzc29yLgogICAgIH0KIAotICAgIGJvb2wgaXNQYXVzZWQoKSB7IHJldHVybiBtX3BhdXNlZDsg
fQogICAgIGJvb2wgcnVubmluZ05lc3RlZE1lc3NhZ2VMb29wKCkgeyByZXR1cm4gbV9ydW5uaW5n
TmVzdGVkTWVzc2FnZUxvb3A7IH0KIAotICAgIHZvaWQgY29tcGlsZVNjcmlwdChKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkws
IFN0cmluZyogc2NyaXB0SWQsIFN0cmluZyogZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgdm9pZCBj
b21waWxlU2NyaXB0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50cHRyX3QqIHNjcmlwdElkLCBTdHJpbmcqIGV4Y2Vw
dGlvbk1lc3NhZ2UpOwogICAgIHZvaWQgY2xlYXJDb21waWxlZFNjcmlwdHMoKTsKLSAgICB2b2lk
IHJ1blNjcmlwdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIFNjcmlw
dFZhbHVlKiByZXN1bHQsIGJvb2wqIHdhc1Rocm93biwgU3RyaW5nKiBleGNlcHRpb25NZXNzYWdl
KTsKKyAgICB2b2lkIHJ1blNjcmlwdChKU0M6OkV4ZWNTdGF0ZSosIGludHB0cl90IHNjcmlwdElk
LCBTY3JpcHRWYWx1ZSogcmVzdWx0LCBib29sKiB3YXNUaHJvd24sIFN0cmluZyogZXhjZXB0aW9u
TWVzc2FnZSk7CiAKICAgICBjbGFzcyBUYXNrIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CkBAIC0xMTMsNyArOTcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdHlwZWRlZiBIYXNoU2V0
PFNjcmlwdERlYnVnTGlzdGVuZXIqPiBMaXN0ZW5lclNldDsKICAgICB0eXBlZGVmIHZvaWQgKFNj
cmlwdERlYnVnU2VydmVyOjoqSmF2YVNjcmlwdEV4ZWN1dGlvbkNhbGxiYWNrKShTY3JpcHREZWJ1
Z0xpc3RlbmVyKik7CiAKLSAgICBTY3JpcHREZWJ1Z1NlcnZlcigpOworICAgIFNjcmlwdERlYnVn
U2VydmVyKGJvb2wgaXNXb3JrZXJUaHJlYWQgPSBmYWxzZSk7CiAgICAgflNjcmlwdERlYnVnU2Vy
dmVyKCk7CiAKICAgICB2aXJ0dWFsIExpc3RlbmVyU2V0KiBnZXRMaXN0ZW5lcnNGb3JHbG9iYWxP
YmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCopID0gMDsKQEAgLTEyNCw5ICsxMDgsOCBAQCBwcm90
ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50U2NyaXB0KEpTQzo6RXhlY1N0YXRl
Kik7CiAKLSAgICBib29sIGhhc0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRl
eHRQb3NpdGlvbiYsIFNjcmlwdEJyZWFrcG9pbnQqIGhpdEJyZWFrcG9pbnQpIGNvbnN0OwogICAg
IGJvb2wgZXZhbHVhdGVCcmVha3BvaW50QWN0aW9uKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rp
b24mKSBjb25zdDsKLSAgICBib29sIGV2YWx1YXRlQnJlYWtwb2ludEFjdGlvbnMoY29uc3QgU2Ny
aXB0QnJlYWtwb2ludCYpIGNvbnN0OworICAgIHZvaWQgZXZhbHVhdGVCcmVha3BvaW50QWN0aW9u
cyhjb25zdCBKU0M6OkJyZWFrcG9pbnQmKTsKIAogICAgIHZvaWQgZGlzcGF0Y2hGdW5jdGlvblRv
TGlzdGVuZXJzKEphdmFTY3JpcHRFeGVjdXRpb25DYWxsYmFjaywgSlNDOjpKU0dsb2JhbE9iamVj
dCopOwogICAgIHZvaWQgZGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVuZXJzKGNvbnN0IExpc3RlbmVy
U2V0JiBsaXN0ZW5lcnMsIEphdmFTY3JpcHRFeGVjdXRpb25DYWxsYmFjayBjYWxsYmFjayk7CkBA
IC0xMzUsMzkgKzExOCwyMCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkaXNwYXRjaERpZFBhcnNl
U291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIEpTQzo6U291cmNlUHJvdmlkZXIq
LCBib29sIGlzQ29udGVudFNjcmlwdCk7CiAgICAgdm9pZCBkaXNwYXRjaEZhaWxlZFRvUGFyc2VT
b3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgSlNDOjpTb3VyY2VQcm92aWRlcios
IGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIAotICAgIHZvaWQg
Y3JlYXRlQ2FsbEZyYW1lKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsKLSAgICB2b2lk
IHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxG
cmFtZSYpOwotICAgIHZvaWQgcGF1c2VJZk5lZWRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBkeW5h
bWljR2xvYmFsT2JqZWN0KTsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goSlNDOjpKU0dsb2Jh
bE9iamVjdCopOwotCi0gICAgdmlydHVhbCB2b2lkIHNvdXJjZVBhcnNlZChKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6U291cmNlUHJvdmlkZXIqLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVy
cm9yTXNnKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsbEV2ZW50KGNvbnN0IEpTQzo6RGVidWdnZXJD
YWxsRnJhbWUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXRTdGF0ZW1lbnQoY29uc3QgSlNDOjpEZWJ1
Z2dlckNhbGxGcmFtZSYpOwotICAgIHZpcnR1YWwgdm9pZCByZXR1cm5FdmVudChjb25zdCBKU0M6
OkRlYnVnZ2VyQ2FsbEZyYW1lJik7Ci0gICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihjb25zdCBK
U0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgYm9vbCBoYXNIYW5kbGVyKTsKLSAgICB2aXJ0dWFsIHZv
aWQgd2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkRXhlY3V0ZVByb2dyYW0oY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxG
cmFtZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgSlNDOjpE
ZWJ1Z2dlckNhbGxGcmFtZSYpOwotCi0gICAgdHlwZWRlZiBWZWN0b3I8U2NyaXB0QnJlYWtwb2lu
dD4gQnJlYWtwb2ludHNJbkxpbmU7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGxvbmcsIEJyZWFrcG9p
bnRzSW5MaW5lPiBMaW5lVG9CcmVha3BvaW50TWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRw
dHJfdCwgTGluZVRvQnJlYWtwb2ludE1hcD4gU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOworICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVTb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlNv
dXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1zZyk7Cisg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZVBhdXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB2
aXJ0dWFsIGJvb2wgbmVlZFBhdXNlSGFuZGxpbmcoSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24oSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5RG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cygpOworCisgICAgdHlwZWRlZiBW
ZWN0b3I8U2NyaXB0QnJlYWtwb2ludEFjdGlvbj4gQnJlYWtwb2ludEFjdGlvbnM7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPEJyZWFrcG9pbnRJZCwgQnJlYWtwb2ludEFjdGlvbnM+IEJyZWFrcG9pbnRJ
ZFRvQWN0aW9uc01hcDsKIAogICAgIGJvb2wgbV9jYWxsaW5nTGlzdGVuZXJzOwotICAgIFBhdXNl
T25FeGNlcHRpb25zU3RhdGUgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOwotICAgIGJvb2wgbV9w
YXVzZU9uTmV4dFN0YXRlbWVudDsKLSAgICBib29sIG1fcGF1c2VkOwogICAgIGJvb2wgbV9ydW5u
aW5nTmVzdGVkTWVzc2FnZUxvb3A7CiAgICAgYm9vbCBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJF
dmVudHM7Ci0gICAgYm9vbCBtX2JyZWFrcG9pbnRzQWN0aXZhdGVkOwotICAgIEphdmFTY3JpcHRD
YWxsRnJhbWUqIG1fcGF1c2VPbkNhbGxGcmFtZTsKLSAgICBSZWZQdHI8SmF2YVNjcmlwdENhbGxG
cmFtZT4gbV9jdXJyZW50Q2FsbEZyYW1lOwotICAgIFNvdXJjZUlkVG9CcmVha3BvaW50c01hcCBt
X3NvdXJjZUlkVG9CcmVha3BvaW50czsKKyAgICBCcmVha3BvaW50SWRUb0FjdGlvbnNNYXAgbV9i
cmVha3BvaW50SWRUb0FjdGlvbnM7CiAgICAgVGltZXI8U2NyaXB0RGVidWdTZXJ2ZXI+IG1fcmVj
b21waWxlVGltZXI7Ci0KLSAgICBpbnQgbV9sYXN0RXhlY3V0ZWRMaW5lOwotICAgIGludHB0cl90
IG1fbGFzdEV4ZWN1dGVkU291cmNlSWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxNTYyODEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDcgKzQzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV29ya2VyU2NyaXB0RGVidWdTZXJ2
ZXI6OldvcmtlclNjcmlwdERlYnVnU2VydmVyKFdvcmtlckdsb2JhbFNjb3BlKiBjb250ZXh0LCBj
b25zdCBTdHJpbmcmIG1vZGUpCi0gICAgOiBTY3JpcHREZWJ1Z1NlcnZlcigpCisgICAgOiBTY3Jp
cHREZWJ1Z1NlcnZlcih0cnVlKQogICAgICwgbV93b3JrZXJHbG9iYWxTY29wZShjb250ZXh0KQog
ICAgICwgbV9kZWJ1Z2dlclRhc2tNb2RlKG1vZGUpCiB7CkBAIC02MCwxMiArNjAsNiBAQCB2b2lk
IFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0ZW5lCiAgICAgcmVjb21waWxlQWxsSlNG
dW5jdGlvbnMoMCk7CiB9CiAKLXZvaWQgV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6OndpbGxFeGVj
dXRlUHJvZ3JhbShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFt
ZSkKLXsKLSAgICBpZiAoIW1fcGF1c2VkKQotICAgICAgICBjcmVhdGVDYWxsRnJhbWUoZGVidWdn
ZXJDYWxsRnJhbWUpOwotfQotCiB2b2lkIFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBp
bGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4qKQogewogICAgIEpTQzo6
Vk0qIHZtID0gbV93b3JrZXJHbG9iYWxTY29wZS0+c2NyaXB0KCktPnZtKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVy
LmgJKHJldmlzaW9uIDE1NjI4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtl
clNjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDYgQEAgcHJp
dmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRTY3JpcHQoSlNDOjpFeGVjU3RhdGUq
KSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJvZ3Jh
bShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJik7Ci0KICAgICB2aXJ0dWFsIHZvaWQgcnVu
RXZlbnRMb29wV2hpbGVQYXVzZWQoKTsKIAogICAgIFdvcmtlckdsb2JhbFNjb3BlKiBtX3dvcmtl
ckdsb2JhbFNjb3BlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAkocmV2aXNpb24gMTU2MjgxKQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgogI2luY2x1
ZGUgIkNvbnRlbnRTZWFyY2hVdGlscy5oIgorI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgog
I2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKQEAgLTY2LDYgKzY3LDcgQEAg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZQogICAgICwgbV9pbmplY3Rl
ZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9mcm9udGVuZCgw
KQogICAgICwgbV9wYXVzZWRTY3JpcHRTdGF0ZSgwKQorICAgICwgbV9jb250aW51ZVRvTG9jYXRp
b25CcmVha3BvaW50SWQobnVsbEJyZWFrcG9pbnRJZCkKICAgICAsIG1famF2YVNjcmlwdFBhdXNl
U2NoZWR1bGVkKGZhbHNlKQogICAgICwgbV9saXN0ZW5lcigwKQogewpAQCAtMzI5LDEzICszMzEs
MTYgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaQogICAgICpvdXRC
cmVha3BvaW50SWQgPSBicmVha3BvaW50SWQ7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlTG9jYXRp
b24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2Nh
dGlvbiwgU3RyaW5nKiBzY3JpcHRJZCwgaW50KiBsaW5lTnVtYmVyLCBpbnQqIGNvbHVtbk51bWJl
cikKK3N0YXRpYyBib29sIHBhcnNlTG9jYXRpb24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG9jYXRpb24sIGludHB0cl90KiBzY3JpcHRJZCwg
aW50KiBsaW5lTnVtYmVyLCBpbnQqIGNvbHVtbk51bWJlcikKIHsKLSAgICBpZiAoIWxvY2F0aW9u
LT5nZXRTdHJpbmcoInNjcmlwdElkIiwgc2NyaXB0SWQpIHx8ICFsb2NhdGlvbi0+Z2V0TnVtYmVy
KCJsaW5lTnVtYmVyIiwgbGluZU51bWJlcikpIHsKKyAgICBTdHJpbmcgc2NyaXB0SWRTdHI7Cisg
ICAgaWYgKCFsb2NhdGlvbi0+Z2V0U3RyaW5nKCJzY3JpcHRJZCIsICZzY3JpcHRJZFN0cikgfHwg
IWxvY2F0aW9uLT5nZXROdW1iZXIoImxpbmVOdW1iZXIiLCBsaW5lTnVtYmVyKSkgewogICAgICAg
ICAvLyBGSVhNRTogcmVwbGFjZSB3aXRoIGlucHV0IHZhbGlkYXRpb24uCisgICAgICAgICpzY3Jp
cHRJZCA9IDA7CiAgICAgICAgICplcnJvclN0cmluZyA9ICJzY3JpcHRJZCBhbmQgbGluZU51bWJl
ciBhcmUgcmVxdWlyZWQuIjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICAqc2Ny
aXB0SWQgPSBzY3JpcHRJZFN0ci50b0ludFB0cigpOwogICAgICpjb2x1bW5OdW1iZXIgPSAwOwog
ICAgIGxvY2F0aW9uLT5nZXROdW1iZXIoImNvbHVtbk51bWJlciIsIGNvbHVtbk51bWJlcik7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0zNDMsNyArMzQ4LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VMb2Nh
dGlvbihFcnJvclN0cmluZyogZQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJy
ZWFrcG9pbnQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvcHRpb25z
LCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkLCBS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4mIGFjdHVhbExvY2F0aW9uKQog
ewotICAgIFN0cmluZyBzY3JpcHRJZDsKKyAgICBpbnRwdHJfdCBzY3JpcHRJZDsKICAgICBpbnQg
bGluZU51bWJlcjsKICAgICBpbnQgY29sdW1uTnVtYmVyOwogCkBAIC0zNjMsMTEgKzM2OCwxMiBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pCiAgICAgaWYgKCFicmVh
a3BvaW50QWN0aW9uc0Zyb21Qcm90b2NvbChlcnJvclN0cmluZywgYWN0aW9ucywgJmJyZWFrcG9p
bnRBY3Rpb25zKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGJyZWFrcG9pbnRJZCA9
IHNjcmlwdElkICsgJzonICsgU3RyaW5nOjpudW1iZXIobGluZU51bWJlcikgKyAnOicgKyBTdHJp
bmc6Om51bWJlcihjb2x1bW5OdW1iZXIpOworICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBTdHJp
bmc6Om51bWJlcihzY3JpcHRJZCkgKyAnOicgKyBTdHJpbmc6Om51bWJlcihsaW5lTnVtYmVyKSAr
ICc6JyArIFN0cmluZzo6bnVtYmVyKGNvbHVtbk51bWJlcik7CiAgICAgaWYgKG1fYnJlYWtwb2lu
dElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZmluZChicmVha3BvaW50SWQpICE9IG1fYnJl
YWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpIHsKICAgICAgICAgKmVy
cm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uIGFscmVhZHkgZXhp
c3RzLiI7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKICAgICBTY3JpcHRCcmVha3BvaW50IGJy
ZWFrcG9pbnQobGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIGJyZWFrcG9pbnRB
Y3Rpb25zLCBhdXRvQ29udGludWUpOwogICAgIGFjdHVhbExvY2F0aW9uID0gcmVzb2x2ZUJyZWFr
cG9pbnQoYnJlYWtwb2ludElkLCBzY3JpcHRJZCwgYnJlYWtwb2ludCk7CiAgICAgaWYgKGFjdHVh
bExvY2F0aW9uKQpAQCAtMzkyLDEyICszOTgsMTIgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpyZW1vdmVCcmVhawogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVl
VG9Mb2NhdGlvbihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiBsb2NhdGlvbikKIHsKLSAgICBpZiAoIW1fY29udGludWVUb0xvY2F0aW9uQnJl
YWtwb2ludElkLmlzRW1wdHkoKSkgeworICAgIGlmIChtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFr
cG9pbnRJZCkgewogICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLnJlbW92ZUJyZWFrcG9pbnQo
bV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SWQpOwotICAgICAgICBtX2NvbnRpbnVlVG9M
b2NhdGlvbkJyZWFrcG9pbnRJZCA9ICIiOworICAgICAgICBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJy
ZWFrcG9pbnRJZCA9IG51bGxCcmVha3BvaW50SWQ7CiAgICAgfQogCi0gICAgU3RyaW5nIHNjcmlw
dElkOworICAgIGludHB0cl90IHNjcmlwdElkOwogICAgIGludCBsaW5lTnVtYmVyOwogICAgIGlu
dCBjb2x1bW5OdW1iZXI7CiAKQEAgLTQwOSw3ICs0MTUsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmNvbnRpbnVlVG9MCiAgICAgcmVzdW1lKGVycm9yU3RyaW5nKTsKIH0KIAotUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpyZXNvbHZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCwgY29u
c3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYgYnJlYWtwb2ludCkK
K1Bhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6cmVzb2x2ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQs
IGludHB0cl90IHNjcmlwdElkLCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBicmVha3BvaW50KQog
ewogICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIHNjcmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZp
bmQoc2NyaXB0SWQpOwogICAgIGlmIChzY3JpcHRJdGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkp
CkBAIC00MjAsMTcgKzQyNiwxNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
TG9jYXRpCiAKICAgICBpbnQgYWN0dWFsTGluZU51bWJlcjsKICAgICBpbnQgYWN0dWFsQ29sdW1u
TnVtYmVyOwotICAgIFN0cmluZyBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZCA9IHNjcmlwdERlYnVn
U2VydmVyKCkuc2V0QnJlYWtwb2ludChzY3JpcHRJZCwgYnJlYWtwb2ludCwgJmFjdHVhbExpbmVO
dW1iZXIsICZhY3R1YWxDb2x1bW5OdW1iZXIpOwotICAgIGlmIChkZWJ1Z1NlcnZlckJyZWFrcG9p
bnRJZC5pc0VtcHR5KCkpCisgICAgQnJlYWtwb2ludElkIGRlYnVnU2VydmVyQnJlYWtwb2ludElk
ID0gc2NyaXB0RGVidWdTZXJ2ZXIoKS5zZXRCcmVha3BvaW50KHNjcmlwdElkLCBicmVha3BvaW50
LCAmYWN0dWFsTGluZU51bWJlciwgJmFjdHVhbENvbHVtbk51bWJlcik7CisgICAgaWYgKCFkZWJ1
Z1NlcnZlckJyZWFrcG9pbnRJZCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBCcmVha3BvaW50
SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkc01hcDo6aXRlcmF0b3IgZGVidWdTZXJ2ZXJCcmVh
a3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50
SWRzLmZpbmQoYnJlYWtwb2ludElkKTsKICAgICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRz
SXRlcmF0b3IgPT0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5lbmQo
KSkKLSAgICAgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFrcG9p
bnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLnNldChicmVha3BvaW50SWQsIFZlY3RvcjxT
dHJpbmc+KCkpLml0ZXJhdG9yOworICAgICAgICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVy
YXRvciA9IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuc2V0KGJyZWFr
cG9pbnRJZCwgVmVjdG9yPEJyZWFrcG9pbnRJZD4oKSkuaXRlcmF0b3I7CiAgICAgZGVidWdTZXJ2
ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnZhbHVlLmFwcGVuZChkZWJ1Z1NlcnZlckJyZWFrcG9p
bnRJZCk7CiAKICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9j
YXRpb24gPSBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uOjpjcmVhdGUoKQotICAgICAg
ICAuc2V0U2NyaXB0SWQoc2NyaXB0SWQpCisgICAgICAgIC5zZXRTY3JpcHRJZChTdHJpbmc6Om51
bWJlcihzY3JpcHRJZCkpCiAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGFjdHVhbExpbmVOdW1iZXIp
OwogICAgIGxvY2F0aW9uLT5zZXRDb2x1bW5OdW1iZXIoYWN0dWFsQ29sdW1uTnVtYmVyKTsKICAg
ICByZXR1cm4gbG9jYXRpb247CkBAIC00NDYsMjIgKzQ1MiwyNCBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHNjcmlwCiAgICAgcmV0dXJuIHZhbHVlLT5hc09iamVjdCgpOwog
fQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0
cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29u
c3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8QXJyYXk8V2ViQ29yZTo6VHlwZUJ1aWxkZXI6OlBh
Z2U6OlNlYXJjaE1hdGNoPiA+JiByZXN1bHRzKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmlw
dElkU3RyLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbENh
c2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEFy
cmF5PFdlYkNvcmU6OlR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hNYXRjaD4gPiYgcmVzdWx0cykK
IHsKICAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXggPyAqb3B0aW9uYWxJc1JlZ2V4
IDogZmFsc2U7CiAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vuc2l0aXZl
ID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNlOwogCisgICAgaW50cHRyX3Qgc2NyaXB0
SWQgPSBzY3JpcHRJZFN0ci50b0ludFB0cigpOwogICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdHMuZW5k
KCkpCiAgICAgICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbHM6OnNlYXJjaEluVGV4dEJ5
TGluZXMoaXQtPnZhbHVlLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOwog
ICAgIGVsc2UKLSAgICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJ
ZDsKKyAgICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJZFN0cjsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTY3JpcHRTb3VyY2UoRXJyb3JT
dHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG5ld0Nv
bnRlbnQsIGNvbnN0IGJvb2wqIGNvbnN0IHByZXZpZXcsIFJlZlB0cjxBcnJheTxUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OkNhbGxGcmFtZT4gPiYgbmV3Q2FsbEZyYW1lcywgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U2NyaXB0
U291cmNlKEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJZFN0ciwgY29u
c3QgU3RyaW5nJiBuZXdDb250ZW50LCBjb25zdCBib29sKiBjb25zdCBwcmV2aWV3LCBSZWZQdHI8
QXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+ID4mIG5ld0NhbGxGcmFtZXMs
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCiB7CiAgICAgYm9vbCBwcmV2aWV3T25s
eSA9IHByZXZpZXcgJiYgKnByZXZpZXc7CiAgICAgU2NyaXB0T2JqZWN0IHJlc3VsdE9iamVjdDsK
KyAgICBpbnRwdHJfdCBzY3JpcHRJZCA9IHNjcmlwdElkU3RyLnRvSW50UHRyKCk7CiAgICAgaWYg
KCFzY3JpcHREZWJ1Z1NlcnZlcigpLnNldFNjcmlwdFNvdXJjZShzY3JpcHRJZCwgbmV3Q29udGVu
dCwgcHJldmlld09ubHksIGVycm9yLCAmbV9jdXJyZW50Q2FsbFN0YWNrLCAmcmVzdWx0T2JqZWN0
KSkKICAgICAgICAgcmV0dXJuOwogICAgIG5ld0NhbGxGcmFtZXMgPSBjdXJyZW50Q2FsbEZyYW1l
cygpOwpAQCAtNDcwLDEzICs0NzgsMTQgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
ZXRTY3JpcHRTbwogICAgICAgICByZXN1bHQgPSBvYmplY3Q7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3Qg
U3RyaW5nJiBzY3JpcHRJZCwgU3RyaW5nKiBzY3JpcHRTb3VyY2UpCit2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0
cmluZyYgc2NyaXB0SWRTdHIsIFN0cmluZyogc2NyaXB0U291cmNlKQogeworICAgIGludHB0cl90
IHNjcmlwdElkID0gc2NyaXB0SWRTdHIudG9JbnRQdHIoKTsKICAgICBTY3JpcHRzTWFwOjppdGVy
YXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkKTsKICAgICBpZiAoaXQgIT0gbV9zY3Jp
cHRzLmVuZCgpKQogICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnZhbHVlLnNvdXJjZTsKICAg
ICBlbHNlCi0gICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWQ7
CisgICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SWRTdHI7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiBkZXRhaWxzKQpAQCAtNjA1LDcg
KzYxNCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29tcGlsZVNjcmkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIFN0cmluZyBzY3JpcHRJZFZhbHVlOworICAgIGludHB0
cl90IHNjcmlwdElkVmFsdWU7CiAgICAgU3RyaW5nIGV4Y2VwdGlvbk1lc3NhZ2U7CiAgICAgc2Ny
aXB0RGVidWdTZXJ2ZXIoKS5jb21waWxlU2NyaXB0KGluamVjdGVkU2NyaXB0LnNjcmlwdFN0YXRl
KCksIGV4cHJlc3Npb24sIHNvdXJjZVVSTCwgJnNjcmlwdElkVmFsdWUsICZleGNlcHRpb25NZXNz
YWdlKTsKICAgICBpZiAoIXNjcmlwdElkVmFsdWUgJiYgIWV4Y2VwdGlvbk1lc3NhZ2UpIHsKQEAg
LTYxMywxMCArNjIyLDEwIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29tcGlsZVNj
cmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAqc3ludGF4RXJyb3JNZXNzYWdlID0gZXhj
ZXB0aW9uTWVzc2FnZTsKLSAgICAqc2NyaXB0SWQgPSBzY3JpcHRJZFZhbHVlOworICAgICpzY3Jp
cHRJZCA9IFN0cmluZzo6bnVtYmVyKHNjcmlwdElkVmFsdWUpOwogfQogCi12b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnJ1blNjcmlwdChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0
IFNjcmlwdElkJiBzY3JpcHRJZCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0
IFN0cmluZyogY29uc3Qgb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90UGF1c2VP
bkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiByZXN1bHQsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Ro
cm93bikKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cnVuU2NyaXB0KEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgY29uc3QgU2NyaXB0SWQmIHNjcmlwdElkU3RyLCBjb25zdCBpbnQqIGV4
ZWN1dGlvbkNvbnRleHRJZCwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmplY3RHcm91cCwgY29uc3Qg
Ym9vbCogY29uc3QgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBSZWZQdHI8
VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgVHlwZUJ1aWxkZXI6
Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBleGVjdXRpb25D
b250ZXh0SWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKQEAgLTYz
NCw2ICs2NDMsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJ1blNjcmlwdChFCiAg
ICAgU2NyaXB0VmFsdWUgdmFsdWU7CiAgICAgYm9vbCB3YXNUaHJvd25WYWx1ZTsKICAgICBTdHJp
bmcgZXhjZXB0aW9uTWVzc2FnZTsKKyAgICBpbnRwdHJfdCBzY3JpcHRJZCA9IHNjcmlwdElkU3Ry
LnRvSW50UHRyKCk7CiAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5ydW5TY3JpcHQoaW5qZWN0ZWRT
Y3JpcHQuc2NyaXB0U3RhdGUoKSwgc2NyaXB0SWQsICZ2YWx1ZSwgJndhc1Rocm93blZhbHVlLCAm
ZXhjZXB0aW9uTWVzc2FnZSk7CiAgICAgKndhc1Rocm93biA9IHdhc1Rocm93blZhbHVlOwogICAg
IGlmICh2YWx1ZS5oYXNOb1ZhbHVlKCkpIHsKQEAgLTcwMSw3ICs3MTEsNyBAQCBTdHJpbmcgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c291cmNlTWFwCiAKIC8vIEphdmFTY3JpcHREZWJ1Z0xpc3Rl
bmVyIGZ1bmN0aW9ucwogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291
cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFNjcmlwdCYgc2NyaXB0KQordm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShpbnRwdHJfdCBzY3JpcHRJZCwg
Y29uc3QgU2NyaXB0JiBzY3JpcHQpCiB7CiAgICAgLy8gRG9uJ3Qgc2VuZCBzY3JpcHQgY29udGVu
dCB0byB0aGUgZnJvbnQgZW5kIHVudGlsIGl0J3MgcmVhbGx5IG5lZWRlZC4KICAgICBjb25zdCBi
b29sKiBpc0NvbnRlbnRTY3JpcHQgPSBzY3JpcHQuaXNDb250ZW50U2NyaXB0ID8gJnNjcmlwdC5p
c0NvbnRlbnRTY3JpcHQgOiAwOwpAQCAtNzEzLDcgKzcyMyw4IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3UKICAgICBib29sIGhhc1NvdXJjZVVSTCA9ICFzb3VyY2VV
UkwuaXNFbXB0eSgpOwogICAgIFN0cmluZyBzY3JpcHRVUkwgPSBoYXNTb3VyY2VVUkwgPyBzb3Vy
Y2VVUkwgOiBzY3JpcHQudXJsOwogICAgIGJvb2wqIGhhc1NvdXJjZVVSTFBhcmFtID0gaGFzU291
cmNlVVJMID8gJmhhc1NvdXJjZVVSTCA6IDA7Ci0gICAgbV9mcm9udGVuZC0+c2NyaXB0UGFyc2Vk
KHNjcmlwdElkLCBzY3JpcHRVUkwsIHNjcmlwdC5zdGFydExpbmUsIHNjcmlwdC5zdGFydENvbHVt
biwgc2NyaXB0LmVuZExpbmUsIHNjcmlwdC5lbmRDb2x1bW4sIGlzQ29udGVudFNjcmlwdCwgc291
cmNlTWFwVVJMUGFyYW0sIGhhc1NvdXJjZVVSTFBhcmFtKTsKKyAgICBTdHJpbmcgc2NyaXB0SWRT
dHIgPSBTdHJpbmc6Om51bWJlcihzY3JpcHRJZCk7CisgICAgbV9mcm9udGVuZC0+c2NyaXB0UGFy
c2VkKHNjcmlwdElkU3RyLCBzY3JpcHRVUkwsIHNjcmlwdC5zdGFydExpbmUsIHNjcmlwdC5zdGFy
dENvbHVtbiwgc2NyaXB0LmVuZExpbmUsIHNjcmlwdC5lbmRDb2x1bW4sIGlzQ29udGVudFNjcmlw
dCwgc291cmNlTWFwVVJMUGFyYW0sIGhhc1NvdXJjZVVSTFBhcmFtKTsKIAogICAgIG1fc2NyaXB0
cy5zZXQoc2NyaXB0SWQsIHNjcmlwdCk7CiAKQEAgLTc3MCw5ICs3ODEsOSBAQCB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKEpTCiAgICAgbV9mcm9udGVuZC0+cGF1c2VkKGN1
cnJlbnRDYWxsRnJhbWVzKCksIG1fYnJlYWtSZWFzb24sIG1fYnJlYWtBdXhEYXRhKTsKICAgICBt
X2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCA9IGZhbHNlOwogCi0gICAgaWYgKCFtX2NvbnRpbnVl
VG9Mb2NhdGlvbkJyZWFrcG9pbnRJZC5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9jb250aW51ZVRv
TG9jYXRpb25CcmVha3BvaW50SWQpIHsKICAgICAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5yZW1v
dmVCcmVha3BvaW50KG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElkKTsKLSAgICAgICAg
bV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SWQgPSAiIjsKKyAgICAgICAgbV9jb250aW51
ZVRvTG9jYXRpb25CcmVha3BvaW50SWQgPSBudWxsQnJlYWtwb2ludElkOwogICAgIH0KICAgICBp
ZiAobV9saXN0ZW5lcikKICAgICAgICAgbV9saXN0ZW5lci0+ZGlkUGF1c2UoKTsKQEAgLTc5OSw3
ICs4MTAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNsZWFyKCkKICAgICBtX2N1
cnJlbnRDYWxsU3RhY2sgPSBTY3JpcHRWYWx1ZSgpOwogICAgIG1fc2NyaXB0cy5jbGVhcigpOwog
ICAgIG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuY2xlYXIoKTsKLSAg
ICBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJZCA9IFN0cmluZygpOworICAgIG1fY29u
dGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElkID0gbnVsbEJyZWFrcG9pbnRJZDsKICAgICBjbGVh
ckJyZWFrRGV0YWlscygpOwogICAgIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gZmFsc2U7
CiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgJKHJldmlzaW9uIDE1NjI4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgog
I2luY2x1ZGUgIlNjcmlwdEJyZWFrcG9pbnQuaCIKICNpbmNsdWRlICJTY3JpcHREZWJ1Z0xpc3Rl
bmVyLmgiCisjaW5jbHVkZSAiU2NyaXB0RGVidWdTZXJ2ZXIuaCIKICNpbmNsdWRlICJTY3JpcHRT
dGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KQEAgLTE1MSwyMCArMTUyLDIwIEBAIHByaXZhdGU6CiAKICAgICBQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZT4gPiBjdXJyZW50
Q2FsbEZyYW1lcygpOwogCi0gICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKGNvbnN0IFN0
cmluZyYgc2NyaXB0SWQsIGNvbnN0IFNjcmlwdCYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJz
ZVNvdXJjZShpbnRwdHJfdCBzY3JpcHRJZCwgY29uc3QgU2NyaXB0Jik7CiAgICAgdmlydHVhbCB2
b2lkIGZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
ZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UpOwogCiAgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc0ltcGwoRXJyb3JTdHJpbmcq
LCBpbnQpOwogCi0gICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9u
PiByZXNvbHZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCwgY29uc3QgU3Ry
aW5nJiBzY3JpcHRJZCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYpOworICAgIFBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gcmVzb2x2ZUJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBicmVha3BvaW50SWQsIGludHB0cl90IHNjcmlwdElkLCBjb25zdCBTY3JpcHRCcmVh
a3BvaW50Jik7CiAgICAgdm9pZCBjbGVhcigpOwogICAgIGJvb2wgYXNzZXJ0UGF1c2VkKEVycm9y
U3RyaW5nKik7CiAgICAgdm9pZCBjbGVhckJyZWFrRGV0YWlscygpOwogCiAgICAgU3RyaW5nIHNv
dXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBTY3JpcHQmKTsKIAotICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIFNjcmlwdD4gU2NyaXB0c01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBWZWN0b3I8U3RyaW5nPiA+IEJyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRz
TWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgU2NyaXB0PiBTY3JpcHRzTWFwOwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxCcmVha3BvaW50SWQ+ID4gQnJlYWtw
b2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA7CiAKICAgICBJbmplY3RlZFNjcmlw
dE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogICAgIEluc3BlY3RvckZyb250ZW5k
OjpEZWJ1Z2dlciogbV9mcm9udGVuZDsKQEAgLTE3Miw3ICsxNzMsNyBAQCBwcml2YXRlOgogICAg
IFNjcmlwdFZhbHVlIG1fY3VycmVudENhbGxTdGFjazsKICAgICBTY3JpcHRzTWFwIG1fc2NyaXB0
czsKICAgICBCcmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkc01hcCBtX2JyZWFr
cG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzOwotICAgIFN0cmluZyBtX2NvbnRpbnVl
VG9Mb2NhdGlvbkJyZWFrcG9pbnRJZDsKKyAgICBCcmVha3BvaW50SWQgbV9jb250aW51ZVRvTG9j
YXRpb25CcmVha3BvaW50SWQ7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpSZWFz
b246OkVudW0gbV9icmVha1JlYXNvbjsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2Jy
ZWFrQXV4RGF0YTsKICAgICBib29sIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oCShyZXZp
c2lvbiAxNTYyODEpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0
ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgflNjcmlwdERlYnVnTGlzdGVuZXIoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkaWRQ
YXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTY3JpcHQmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKGludHB0cl90IHNjcmlwdElkLCBjb25zdCBT
Y3JpcHQmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9y
TGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkUGF1c2UoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYgY2FsbEZyYW1lcywg
Y29uc3QgU2NyaXB0VmFsdWUmIGV4Y2VwdGlvbikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRD
b250aW51ZSgpID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjI4MSkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIw
IEBACisyMDEzLTA5LTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZWZhY3RvciB0byBoaWRlIERlYnVnZ2VyIGNhbGxiYWNrIGludGVyZmFjZSBpbnNpZGUgSlND
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzk2
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gUmVp
bXBsZW1lbnQgV2ViS2l0L21hYydzIFdlYlNjcmlwdERlYnVnZ2VyIGJhc2VkIG9uIHRoZSBuZXcK
KyAgICAgICAgICBKU0M6OkRlYnVnZ2VyIGludGVyZmFjZSAoaS5lLiBubyB1c2Ugb2YgdGhlIEpT
QyBkZWJ1ZyBob29rcykuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmg6
CisgICAgICAgIChXZWJTY3JpcHREZWJ1Z2dlcjo6bmVlZFBhdXNlSGFuZGxpbmcpOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW06CisgICAgICAgIChXZWJTY3JpcHREZWJ1
Z2dlcjo6V2ViU2NyaXB0RGVidWdnZXIpOgorICAgICAgICAoV2ViU2NyaXB0RGVidWdnZXI6Omhh
bmRsZVNvdXJjZVBhcnNlZCk6CisgICAgICAgIChXZWJTY3JpcHREZWJ1Z2dlcjo6aGFuZGxlUGF1
c2UpOgorCiAyMDEzLTA5LTIxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZW1vdmUgdW51c2VkIGNvZGUgaW4gV2ViS2l0L21hYydzIFdlYlNjcmlwdERlYnVnRGVs
ZWdhdGUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1
Z2dlci5oCShyZXZpc2lvbiAxNTYyODEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlNjcmlwdERlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE0ICs1NSw5IEBAIHB1Ymxp
YzoKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBz
b3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlNvdXJjZVByb3ZpZGVyKiwgaW50IGVy
cm9yTGluZSwgY29uc3QgV1RGOjpTdHJpbmcmIGVycm9yTXNnKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2FsbEV2ZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgYXRTdGF0ZW1lbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCByZXR1cm5FdmVudChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJikg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZy
YW1lJiwgYm9vbCBoYXNIYW5kbGVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9n
cmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkRXhlY3V0ZVByb2dyYW0oY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxG
cmFtZSYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVTb3VyY2VQYXJzZWQoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZSwgY29uc3QgV1RGOjpT
dHJpbmcmIGVycm9yTXNnKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGF1c2UoSlNDOjpKU0ds
b2JhbE9iamVjdCopOworICAgIHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhKU0M6OkpT
R2xvYmFsT2JqZWN0KikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgYm9vbCBtX2NhbGxpbmdEZWxl
Z2F0ZTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dl
ci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERl
YnVnZ2VyLm1tCShyZXZpc2lvbiAxNTYyODEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlNjcmlwdERlYnVnZ2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMSArNzUsMTMgQEAg
V2ViU2NyaXB0RGVidWdnZXI6OldlYlNjcmlwdERlYnVnZ2VyKEpTRwogICAgIDogbV9jYWxsaW5n
RGVsZWdhdGUoZmFsc2UpCiAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZtKCks
IGdsb2JhbE9iamVjdCkKIHsKKyAgICBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25B
bGxFeGNlcHRpb25zKTsKKyAgICBkZWFjdGl2YXRlQnJlYWtwb2ludHMoKTsKICAgICBhdHRhY2go
Z2xvYmFsT2JqZWN0KTsKIH0KIAogLy8gY2FsbGJhY2tzIC0gcmVsYXkgdG8gZGVsZWdhdGUKLXZv
aWQgV2ViU2NyaXB0RGVidWdnZXI6OnNvdXJjZVBhcnNlZChFeGVjU3RhdGUqIGV4ZWMsIFNvdXJj
ZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBl
cnJvck1zZykKK3ZvaWQgV2ViU2NyaXB0RGVidWdnZXI6OmhhbmRsZVNvdXJjZVBhcnNlZChFeGVj
U3RhdGUqIGV4ZWMsIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciwgaW50IGVycm9yTGlu
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1zZykKIHsKICAgICBpZiAobV9jYWxsaW5nRGVsZWdhdGUp
CiAgICAgICAgIHJldHVybjsKQEAgLTExNiwyMiArMTE4LDI0IEBAIHZvaWQgV2ViU2NyaXB0RGVi
dWdnZXI6OnNvdXJjZVBhcnNlZChFeGUKICAgICBtX2NhbGxpbmdEZWxlZ2F0ZSA9IGZhbHNlOwog
fQogCi12b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjpleGNlcHRpb24oY29uc3QgRGVidWdnZXJDYWxs
RnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBib29sIGhhc0hhbmRsZXIpCit2b2lkIFdlYlNjcmlw
dERlYnVnZ2VyOjpoYW5kbGVQYXVzZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewog
ICAgIGlmIChtX2NhbGxpbmdEZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jYWxs
aW5nRGVsZWdhdGUgPSB0cnVlOwogCi0gICAgV2ViRnJhbWUgKndlYkZyYW1lID0gdG9XZWJGcmFt
ZShkZWJ1Z2dlckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpOworICAgIFdlYkZyYW1l
ICp3ZWJGcmFtZSA9IHRvV2ViRnJhbWUoZ2xvYmFsT2JqZWN0KTsKICAgICBXZWJWaWV3ICp3ZWJW
aWV3ID0gW3dlYkZyYW1lIHdlYlZpZXddOworICAgIGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBk
ZWJ1Z2dlckNhbGxGcmFtZSA9IGN1cnJlbnRGcmFtZSgpLT5kZWJ1Z2dlckNhbGxGcmFtZSgpOwog
ICAgIFJldGFpblB0cjxXZWJTY3JpcHRDYWxsRnJhbWU+IGNhbGxGcmFtZSA9IGFkb3B0TlMoW1tX
ZWJTY3JpcHRDYWxsRnJhbWUgYWxsb2NdIF9pbml0V2l0aEdsb2JhbE9iamVjdDpjb3JlKHdlYkZy
YW1lKS0+c2NyaXB0KCkud2luZG93U2NyaXB0T2JqZWN0KCkgZGVidWdnZXJDYWxsRnJhbWU6ZGVi
dWdnZXJDYWxsRnJhbWVdKTsKIAogICAgIFdlYlNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRh
dGlvbkNhY2hlKiBjYWNoZSA9IFdlYlZpZXdHZXRTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50
YXRpb25zKHdlYlZpZXcpOwogICAgIGlmIChjYWNoZS0+ZXhjZXB0aW9uV2FzUmFpc2VkRnVuYykg
ewotICAgICAgICBpZiAoY2FjaGUtPmV4Y2VwdGlvbldhc1JhaXNlZEV4cGVjdHNIYXNIYW5kbGVy
RmxhZykKKyAgICAgICAgaWYgKGNhY2hlLT5leGNlcHRpb25XYXNSYWlzZWRFeHBlY3RzSGFzSGFu
ZGxlckZsYWcpIHsKKyAgICAgICAgICAgIGJvb2wgaGFzSGFuZGxlciA9IGhhc0hhbmRsZXJGb3JF
eGNlcHRpb25DYWxsYmFjaygpOwogICAgICAgICAgICAgQ2FsbFNjcmlwdERlYnVnRGVsZWdhdGUo
Y2FjaGUtPmV4Y2VwdGlvbldhc1JhaXNlZEZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3
OmV4Y2VwdGlvbldhc1JhaXNlZDpoYXNIYW5kbGVyOnNvdXJjZUlkOmxpbmU6Zm9yV2ViRnJhbWU6
KSwgY2FsbEZyYW1lLmdldCgpLCBoYXNIYW5kbGVyLCBkZWJ1Z2dlckNhbGxGcmFtZS5zb3VyY2VJ
ZCgpLCBkZWJ1Z2dlckNhbGxGcmFtZS5saW5lKCksIHdlYkZyYW1lKTsKLSAgICAgICAgZWxzZQor
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIENhbGxTY3JpcHREZWJ1Z0RlbGVnYXRlKGNhY2hl
LT5leGNlcHRpb25XYXNSYWlzZWRGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpleGNl
cHRpb25XYXNSYWlzZWQ6c291cmNlSWQ6bGluZTpmb3JXZWJGcmFtZTopLCBjYWxsRnJhbWUuZ2V0
KCksIGRlYnVnZ2VyQ2FsbEZyYW1lLnNvdXJjZUlkKCksIGRlYnVnZ2VyQ2FsbEZyYW1lLmxpbmUo
KSwgd2ViRnJhbWUpOwogICAgIH0KIAo=
</data>
<flag name="review"
          id="234592"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216342</attachid>
            <date>2013-11-07 16:25:40 -0800</date>
            <delta_ts>2013-11-07 17:31:44 -0800</delta_ts>
            <desc>candidate patch with the latest goodness.</desc>
            <filename>bug-121796b.patch</filename>
            <type>text/plain</type>
            <size>97676</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4ODc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEzLTExLTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
b3ZlIGJyZWFrcG9pbnQgKGFuZCBleGNlcHRpb24gYnJlYWspIGZ1bmN0aW9uYWxpdHkgaW50byBK
U0M6OkRlYnVnZ2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIxNzk2LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIC0gSW4gU2NyaXB0RGVidWdTZXJ2ZXIgYW5kIEpTQzo6RGVidWdnZXIsIFNvdXJjZUlE
IGFuZCBCcmVha3BvaW50SUQgYXJlCisgICAgICAgICAgbm93IG51bWVyaWMgdG9rZW5zLgorCisg
ICAgICAgIC0gSlNDOjpEZWJ1Z2dlciBub3cgdHJhY2tzIHVzZXIgZGVmaW5lZCBicmVha3BvaW50
cyBpbiBhIEpTQzo6QnJlYWtwb2ludAorICAgICAgICAgIHJlY29yZC4gUHJldmlvdXNseSwgdGhp
cyBpbmZvIGlzIHRyYWNrZWQgaW4gdGhlIFNjcmlwdEJyZWFrcG9pbnQgcmVjb3JkCisgICAgICAg
ICAgaW4gU2NyaXB0RGVidWdTZXJ2ZXIuIFRoZSBvbmx5IGVsZW1lbnQgb2YgU2NyaXB0QnJlYWtw
b2ludCB0aGF0IGlzIG5vdAorICAgICAgICAgIGJlaW5nIHRyYWNrZWQgYnkgSlNDOjpCcmVha3Bv
aW50IGlzIHRoZSBTY3JpcHRCcmVha3BvaW50QWN0aW9uLgorICAgICAgICAgICAgIFRoZSBTY3Jp
cHRCcmVha3BvaW50QWN0aW9uIGlzIHN0aWxsIHRyYWNrZWQgYnkgdGhlIFNjcmlwdERlYnVnU2Vy
dmVyCisgICAgICAgICAgaW4gYSBsaXN0IGtleWVkIG9uIHRoZSBjb3JyZXNwb25kaW5nIEJyZWFr
cG9pbnRJRC4KKyAgICAgICAgICAgICBUaGUgU2NyaXB0QnJlYWtwb2ludCByZWNvcmQgaXMgbm93
IG9ubHkgdXNlZCBhcyBhIG1lYW5zIG9mIHBhc3NpbmcKKyAgICAgICAgICBicmVha3BvaW50IHBh
cmFtYXRlcnMgdG8gdGhlIFNjcmlwdERlYnVnU2VydmVyLgorCisgICAgICAgIC0gU2NyaXB0RGVi
dWdTZXJ2ZXIgbm93IG5vIGxvbmdlciBhY2Nlc3NlcyB0aGUgSlNDOjpDYWxsRnJhbWUqIGRpcmVj
dGx5LgorICAgICAgICAgIEl0IGFsd2F5cyBnb2VzIHRocm91Z2ggdGhlIERlYnVnZ2VyQ2FsbEZy
YW1lLgorCisJKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGRlYnVnZ2VyL0JyZWFrcG9pbnQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkJyZWFr
cG9pbnQ6OkJyZWFrcG9pbnQpOgorICAgICAgICAtIEJyZWFrcG9pbnQgY2xhc3MgdG8gdHJhY2sg
aW5mbyBmb3IgZWFjaCBicmVha3BvaW50IGluIEpTQzo6RGVidWdnZXIuCisgICAgICAgICogZGVi
dWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZVNjb3Bl
OjpEZWJ1Z2dlckNhbGxGcmFtZVNjb3BlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJh
bWVTY29wZTo6fkRlYnVnZ2VyQ2FsbEZyYW1lU2NvcGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6RGVidWdnZXIpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGV0YWNoKToKKyAgICAgICAg
KEpTQzo6RGVidWdnZXI6OnVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKToKKyAgICAgICAg
KEpTQzo6RGVidWdnZXI6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6
cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpoYXNCcmVha3BvaW50
KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmNsZWFyQnJlYWtwb2ludHMpOgorICAgICAgICAo
SlNDOjpEZWJ1Z2dlcjo6c2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQpOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlcjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk6CisgICAgICAgIChKU0M6OkRlYnVn
Z2VyOjpzZXRQYXVzZU9uTmV4dFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpi
cmVha1Byb2dyYW0pOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6Y29udGludWVQcm9ncmFtKToK
KyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnN0ZXBJbnRvU3RhdGVtZW50KToKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXI6OnN0ZXBPdmVyU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6
OnN0ZXBPdXRPZkZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnVwZGF0ZUNhbGxG
cmFtZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjp1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlm
TmVlZGVkKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnBhdXNlSWZOZWVkZWQpOgorICAgICAg
ICAoSlNDOjpEZWJ1Z2dlcjo6ZXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmF0
U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmNhbGxFdmVudCk6CisgICAgICAg
IChKU0M6OkRlYnVnZ2VyOjpyZXR1cm5FdmVudCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjp3
aWxsRXhlY3V0ZVByb2dyYW0pOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGlkRXhlY3V0ZVBy
b2dyYW0pOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGlkUmVhY2hCcmVha3BvaW50KToKKyAg
ICAgICAgKEpTQzo6RGVidWdnZXI6OmN1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZSk6CisgICAgICAg
ICogZGVidWdnZXIvRGVidWdnZXIuaDoKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckNhbGxG
cmFtZS5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpzb3VyY2VJRCk6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpzb3VyY2VJREZvckNhbGxGcmFtZSk6Cisg
ICAgICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaDoKKyAgICAgICAgKiBkZWJ1Z2dl
ci9EZWJ1Z2dlclByaW1pdGl2ZXMuaDogQWRkZWQuCisgICAgICAgIC0gZGVmaW5lIFNvdXJjZUlE
LCBub1NvdXJjZUlELCBCcmVha3BvaW50SUQsIGFuZCBub0JyZWFrcG9pbnRJRC4KKwogMjAxMy0x
MS0wNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcHJvZHVj
aWJsZSBjcmFzaCB3aGVuIHVzaW5nIE1hcCAoYWZmZWN0cyBXZWIgSW5zcGVjdG9yKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1ODg2NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjIwLDYgKzEyMjAsOCBAQAogCQlGRTRBMzMxRjE1QkQyRTA3MDA2
RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkU0QTMzMUQxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNw
cCAqLzsgfTsKIAkJRkU0QTMzMjAxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRBMzMxRTE1QkQy
RTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTY2MTcyODE3NzRFMDM1MDA0OTVCMDAgLyogVk1TdGFj
a0JvdW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU2NjE3MjcxNzc0RTAzNTAwNDk1QjAwIC8qIFZNU3RhY2tCb3VuZHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRUEwODYyMDE4MkI3QTA0MDBG
NkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRUEwODYyMTE4
MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyog
RGVidWdnZXJQcmltaXRpdmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQyODdCMTE1
RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQgLyogV2F0
Y2hkb2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkVEOTRGMkIxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLzsgfTsKIAkJRkVEOTRG
MkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hk
b2cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjUyOSw2ICsyNTMxLDggQEAKIAkJRkU0QTMzMUQxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVj
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZNSW5zcGVjdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU0QTMzMUUxNUJEMkUwNzAwNkY1
NEYzIC8qIFZNSW5zcGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZN
SW5zcGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNjYxNzI3MTc3NEUw
MzUwMDQ5NUIwMCAvKiBWTVN0YWNrQm91bmRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZNU3RhY2tCb3VuZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVB
MDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnJlYWtwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyUHJpbWl0aXZlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRUQyODdCMTE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRP
cGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRPcGNvZGUuaDsg
cGF0aCA9IGxsaW50L0xMSW50T3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXRjaGRvZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXRjaGRvZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMzE2MCw2ICszMTY0LDggQEAKIAkJMTQ4MERCOUEwRERDMjIzMTAwM0NGREYy
IC8qIGRlYnVnZ2VyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQlGRUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovLAorCQkJCUZF
QTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLywKIAkJCQlG
NjkyQTg1ODAyNTU1OTdEMDFGRjYwRjcgLyogRGVidWdnZXIuY3BwICovLAogCQkJCUY2OTJBODU5
MDI1NTU5N0QwMUZGNjBGNyAvKiBEZWJ1Z2dlci5oICovLAogCQkJCUJDMzEzNTYzMEYzMDJGQTMw
MDNERkQzQSAvKiBEZWJ1Z2dlckFjdGl2YXRpb24uY3BwICovLApAQCAtNDExOSw3ICs0MTI1LDkg
QEAKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFs
bG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUEwODYyMDE4MkI3QTA0MDBG
NkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVG
MzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUEwODYyMTE4
MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNFNjBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5Q29u
dmVudGlvbnMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0JyZWFrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGVidWdnZXIvQnJlYWtwb2ludC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0JyZWFrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QnJlYWtwb2ludF9oCisjZGVmaW5lIEJyZWFrcG9pbnRfaAorCisjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCisKKyNpbmNsdWRlICJEZWJ1Z2dlclByaW1pdGl2ZXMuaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBCcmVh
a3BvaW50IHsKKyAgICBCcmVha3BvaW50KCkKKyAgICAgICAgOiBpZChub0JyZWFrcG9pbnRJRCkK
KyAgICAgICAgLCBzb3VyY2VJRChub1NvdXJjZUlEKQorICAgICAgICAsIGxpbmUoMCkKKyAgICAg
ICAgLCBjb2x1bW4oMCkKKyAgICAgICAgLCBhdXRvQ29udGludWUoZmFsc2UpCisgICAgeworICAg
IH0KKworICAgIEJyZWFrcG9pbnQoU291cmNlSUQgc291cmNlSUQsIHVuc2lnbmVkIGxpbmUsIHVu
c2lnbmVkIGNvbHVtbiwgU3RyaW5nIGNvbmRpdGlvbiwgYm9vbCBhdXRvQ29udGludWUpCisgICAg
ICAgIDogaWQobm9CcmVha3BvaW50SUQpCisgICAgICAgICwgc291cmNlSUQoc291cmNlSUQpCisg
ICAgICAgICwgbGluZShsaW5lKQorICAgICAgICAsIGNvbHVtbihjb2x1bW4pCisgICAgICAgICwg
Y29uZGl0aW9uKGNvbmRpdGlvbikKKyAgICAgICAgLCBhdXRvQ29udGludWUoYXV0b0NvbnRpbnVl
KQorICAgIHsKKyAgICB9CisKKyAgICBCcmVha3BvaW50SUQgaWQ7CisgICAgU291cmNlSUQgc291
cmNlSUQ7CisgICAgdW5zaWduZWQgbGluZTsKKyAgICB1bnNpZ25lZCBjb2x1bW47CisgICAgU3Ry
aW5nIGNvbmRpdGlvbjsKKyAgICBib29sIGF1dG9Db250aW51ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisKKyNlbmRp
ZiAvLyBCcmVha3BvaW50X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyLmNwcAkocmV2aXNpb24gMTU4ODY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
CiAgKgpAQCAtMjIsOSArMjIsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJE
ZWJ1Z2dlci5oIgogCisjaW5jbHVkZSAiRGVidWdnZXJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJF
cnJvci5oIgogI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5oIgogI2luY2x1ZGUgIkludGVy
cHJldGVyLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0Z1
bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCkBAIC05MSwxMSArOTMsNDQgQEAgaW5saW5lIHZvaWQgUmVjb21waWxlcjo6b3BlcmF0
b3IoKShKU0NlbAogCiBuYW1lc3BhY2UgSlNDIHsKIAotRGVidWdnZXI6OkRlYnVnZ2VyKCkKLSAg
ICA6IG1fbmVlZHNFeGNlcHRpb25DYWxsYmFja3MoZmFsc2UpCitjbGFzcyBEZWJ1Z2dlckNhbGxG
cmFtZVNjb3BlIHsKK3B1YmxpYzoKKyAgICBEZWJ1Z2dlckNhbGxGcmFtZVNjb3BlKERlYnVnZ2Vy
JiBkZWJ1Z2dlcikKKyAgICAgICAgOiBtX2RlYnVnZ2VyKGRlYnVnZ2VyKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFtX2RlYnVnZ2VyLm1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lKTsKKyAgICAg
ICAgaWYgKG1fZGVidWdnZXIubV9jdXJyZW50Q2FsbEZyYW1lKQorICAgICAgICAgICAgbV9kZWJ1
Z2dlci5tX2N1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZSA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpjcmVh
dGUoZGVidWdnZXIubV9jdXJyZW50Q2FsbEZyYW1lKTsKKyAgICB9CisKKyAgICB+RGVidWdnZXJD
YWxsRnJhbWVTY29wZSgpCisgICAgeworICAgICAgICBpZiAobV9kZWJ1Z2dlci5tX2N1cnJlbnRE
ZWJ1Z2dlckNhbGxGcmFtZSkgeworICAgICAgICAgICAgbV9kZWJ1Z2dlci5tX2N1cnJlbnREZWJ1
Z2dlckNhbGxGcmFtZS0+aW52YWxpZGF0ZSgpOworICAgICAgICAgICAgbV9kZWJ1Z2dlci5tX2N1
cnJlbnREZWJ1Z2dlckNhbGxGcmFtZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6
CisgICAgRGVidWdnZXImIG1fZGVidWdnZXI7Cit9OworCisKK0RlYnVnZ2VyOjpEZWJ1Z2dlcihi
b29sIGlzSW5Xb3JrZXJUaHJlYWQpCisgICAgOiBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUoRG9u
dFBhdXNlT25FeGNlcHRpb25zKQorICAgICwgbV9wYXVzZU9uTmV4dFN0YXRlbWVudChmYWxzZSkK
KyAgICAsIG1faXNQYXVzZWQoZmFsc2UpCisgICAgLCBtX2JyZWFrcG9pbnRzQWN0aXZhdGVkKHRy
dWUpCisgICAgLCBtX2hhc0hhbmRsZXJGb3JFeGNlcHRpb25DYWxsYmFjayhmYWxzZSkKKyAgICAs
IG1faXNJbldvcmtlclRocmVhZChpc0luV29ya2VyVGhyZWFkKQorICAgICwgbV9yZWFzb25Gb3JQ
YXVzZShOb3RQYXVzZWQpCisgICAgLCBtX3BhdXNlT25DYWxsRnJhbWUoMCkKKyAgICAsIG1fY3Vy
cmVudENhbGxGcmFtZSgwKQorICAgICwgbV9sYXN0RXhlY3V0ZWRMaW5lKFVJTlRfTUFYKQorICAg
ICwgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJRChub1NvdXJjZUlEKQorICAgICwgbV90b3BCcmVha3Bv
aW50SUQobm9CcmVha3BvaW50SUQpCiAgICAgLCBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNrcyhmYWxz
ZSkKICAgICAsIG1fc2hvdWxkUGF1c2UoZmFsc2UpCi0gICAgLCBtX251bWJlck9mQnJlYWtwb2lu
dHMoMCkKIHsKIH0KIApAQCAtMTE1LDE2ICsxNTAsMjAgQEAgdm9pZCBEZWJ1Z2dlcjo6YXR0YWNo
KEpTR2xvYmFsT2JqZWN0KiBnbAogCiB2b2lkIERlYnVnZ2VyOjpkZXRhY2goSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKIHsKKyAgICAvLyBJZiB3ZSdyZSBkZXRhY2hpbmcgZnJvbSB0aGUg
Y3VycmVudGx5IGV4ZWN1dGluZyBnbG9iYWwgb2JqZWN0LCBtYW51YWxseSB0ZWFyIGRvd24gb3Vy
CisgICAgLy8gc3RhY2ssIHNpbmNlIHdlIHdvbid0IGdldCBmdXJ0aGVyIGRlYnVnZ2VyIGNhbGxi
YWNrcyB0byBkbyBzby4gQWxzbywgcmVzdW1lIGV4ZWN1dGlvbiwKKyAgICAvLyBzaW5jZSB0aGVy
ZSdzIG5vIHBvaW50IGluIHN0YXlpbmcgcGF1c2VkIG9uY2UgYSB3aW5kb3cgY2xvc2VzLgorICAg
IGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgJiYgbV9jdXJyZW50Q2FsbEZyYW1lLT5keW5hbWljR2xv
YmFsT2JqZWN0KCkgPT0gZ2xvYmFsT2JqZWN0KSB7CisgICAgICAgIG1fY3VycmVudENhbGxGcmFt
ZSA9IDA7CisgICAgICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IDA7CisgICAgICAgIGNvbnRpbnVl
UHJvZ3JhbSgpOworICAgIH0KKwogICAgIEFTU0VSVChtX2dsb2JhbE9iamVjdHMuY29udGFpbnMo
Z2xvYmFsT2JqZWN0KSk7CiAgICAgbV9nbG9iYWxPYmplY3RzLnJlbW92ZShnbG9iYWxPYmplY3Qp
OwogICAgIGdsb2JhbE9iamVjdC0+c2V0RGVidWdnZXIoMCk7CiB9CiAKLXZvaWQgRGVidWdnZXI6
OnNldE5lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKGJvb2wgdmFsdWUpCi17Ci0gICAgbV9uZWVkc0V4
Y2VwdGlvbkNhbGxiYWNrcyA9IHZhbHVlOwotfQotCiB2b2lkIERlYnVnZ2VyOjpzZXRTaG91bGRQ
YXVzZShib29sIHZhbHVlKQogewogICAgIG1fc2hvdWxkUGF1c2UgPSB2YWx1ZTsKQEAgLTE0Niwx
NiArMTg1LDM3MyBAQCB2b2lkIERlYnVnZ2VyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhWCiAg
ICAgdm0tPmhlYXAub2JqZWN0U3BhY2UoKS5mb3JFYWNoTGl2ZUNlbGwoaXRlcmF0aW9uU2NvcGUs
IHJlY29tcGlsZXIpOwogfQogCi12b2lkIERlYnVnZ2VyOjp1cGRhdGVOdW1iZXJPZkJyZWFrcG9p
bnRzKGludCBudW1iZXJPZkJyZWFrcG9pbnRzKQordm9pZCBEZWJ1Z2dlcjo6dXBkYXRlTmVlZEZv
ck9wRGVidWdDYWxsYmFja3MoKQoreworICAgIHNpemVfdCBudW1iZXJPZkJyZWFrcG9pbnRzID0g
bV9icmVha3BvaW50SURUb0JyZWFrcG9pbnQuc2l6ZSgpOworICAgIG1fbmVlZHNPcERlYnVnQ2Fs
bGJhY2tzID0gbV9zaG91bGRQYXVzZSB8fCBudW1iZXJPZkJyZWFrcG9pbnRzOworfQorCitCcmVh
a3BvaW50SUQgRGVidWdnZXI6OnNldEJyZWFrcG9pbnQoQnJlYWtwb2ludCBicmVha3BvaW50LCB1
bnNpZ25lZCYgYWN0dWFsTGluZSwgdW5zaWduZWQmIGFjdHVhbENvbHVtbikKK3sKKyAgICBTb3Vy
Y2VJRCBzb3VyY2VJRCA9IGJyZWFrcG9pbnQuc291cmNlSUQ7CisgICAgdW5zaWduZWQgbGluZSA9
IGJyZWFrcG9pbnQubGluZTsKKyAgICB1bnNpZ25lZCBjb2x1bW4gPSBicmVha3BvaW50LmNvbHVt
bjsKKworICAgIFNvdXJjZUlEVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJj
ZUlEVG9CcmVha3BvaW50cy5maW5kKHNvdXJjZUlEKTsKKyAgICBpZiAoaXQgPT0gbV9zb3VyY2VJ
RFRvQnJlYWtwb2ludHMuZW5kKCkpCisgICAgICAgIGl0ID0gbV9zb3VyY2VJRFRvQnJlYWtwb2lu
dHMuc2V0KHNvdXJjZUlELCBMaW5lVG9CcmVha3BvaW50c01hcCgpKS5pdGVyYXRvcjsKKyAgICBM
aW5lVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChs
aW5lKTsKKyAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnZhbHVlLmVuZCgpKQorICAgICAgICBicmVh
a3NJdCA9IGl0LT52YWx1ZS5zZXQobGluZSwgQnJlYWtwb2ludHNJbkxpbmUoKSkuaXRlcmF0b3I7
CisKKyAgICBCcmVha3BvaW50c0luTGluZSYgYnJlYWtwb2ludHMgPSBicmVha3NJdC0+dmFsdWU7
CisgICAgdW5zaWduZWQgYnJlYWtwb2ludHNDb3VudCA9IGJyZWFrcG9pbnRzLnNpemUoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJlYWtwb2ludHNDb3VudDsgaSsrKQorICAgICAg
ICBpZiAoYnJlYWtwb2ludHNbaV0uY29sdW1uID09IGNvbHVtbikgeworICAgICAgICAgICAgLy8g
VGhlIGJyZWFrcG9pbnQgYWxyZWFkeSBleGlzdHMuIFdlJ3JlIG5vdCBhbGxvd2VkIHRvIGNyZWF0
ZSBhIG5ldworICAgICAgICAgICAgLy8gYnJlYWtwb2ludCBhdCB0aGlzIGxvY2F0aW9uLiBSYXRo
ZXIgdGhhbiByZXR1cm5pbmcgdGhlIGJyZWFrcG9pbnRJRAorICAgICAgICAgICAgLy8gb2YgdGhl
IHByZS1leGlzdGluZyBicmVha3BvaW50LCB3ZSBuZWVkIHRvIHJldHVybiBub0JyZWFrcG9pbnRJ
RAorICAgICAgICAgICAgLy8gdG8gaW5kaWNhdGUgdGhhdCB3ZSdyZSBub3QgY3JlYXRpbmcgYSBu
ZXcgb25lLgorICAgICAgICAgICAgcmV0dXJuIG5vQnJlYWtwb2ludElEOworICAgICAgICB9CisK
KyAgICBCcmVha3BvaW50SUQgaWQgPSArK21fdG9wQnJlYWtwb2ludElEOworICAgIFJFTEVBU0Vf
QVNTRVJUKGlkICE9IG5vQnJlYWtwb2ludElEKTsKKworICAgIGJyZWFrcG9pbnQuaWQgPSBpZDsK
KyAgICBhY3R1YWxMaW5lID0gbGluZTsKKyAgICBhY3R1YWxDb2x1bW4gPSBjb2x1bW47CisKKyAg
ICBicmVha3BvaW50cy5hcHBlbmQoYnJlYWtwb2ludCk7CisgICAgbV9icmVha3BvaW50SURUb0Jy
ZWFrcG9pbnQuc2V0KGlkLCAmYnJlYWtwb2ludHMubGFzdCgpKTsKKworICAgIHVwZGF0ZU5lZWRG
b3JPcERlYnVnQ2FsbGJhY2tzKCk7CisKKyAgICByZXR1cm4gaWQ7Cit9CisKK3ZvaWQgRGVidWdn
ZXI6OnJlbW92ZUJyZWFrcG9pbnQoQnJlYWtwb2ludElEIGlkKQogewotICAgIEFTU0VSVChudW1i
ZXJPZkJyZWFrcG9pbnRzID49IDApOwotICAgIG1fbnVtYmVyT2ZCcmVha3BvaW50cyA9IG51bWJl
ck9mQnJlYWtwb2ludHM7CisgICAgQVNTRVJUKGlkICE9IG5vQnJlYWtwb2ludElEKTsKKworICAg
IEJyZWFrcG9pbnRJRFRvQnJlYWtwb2ludE1hcDo6aXRlcmF0b3IgaWRJdCA9IG1fYnJlYWtwb2lu
dElEVG9CcmVha3BvaW50LmZpbmQoaWQpOworICAgIEFTU0VSVChpZEl0ICE9IG1fYnJlYWtwb2lu
dElEVG9CcmVha3BvaW50LmVuZCgpKTsKKyAgICBCcmVha3BvaW50JiBicmVha3BvaW50ID0gKmlk
SXQtPnZhbHVlOworCisgICAgU291cmNlSUQgc291cmNlSUQgPSBicmVha3BvaW50LnNvdXJjZUlE
OworICAgIEFTU0VSVChzb3VyY2VJRCk7CisgICAgU291cmNlSURUb0JyZWFrcG9pbnRzTWFwOjpp
dGVyYXRvciBpdCA9IG1fc291cmNlSURUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSUQpOworICAg
IEFTU0VSVChpdCAhPSBtX3NvdXJjZUlEVG9CcmVha3BvaW50cy5lbmQoKSk7CisgICAgTGluZVRv
QnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnZhbHVlLmZpbmQoYnJlYWtw
b2ludC5saW5lKTsKKyAgICBBU1NFUlQoYnJlYWtzSXQgIT0gaXQtPnZhbHVlLmVuZCgpKTsKKwor
ICAgIEJyZWFrcG9pbnRzSW5MaW5lJiBicmVha3BvaW50cyA9IGJyZWFrc0l0LT52YWx1ZTsKKyAg
ICB1bnNpZ25lZCBicmVha3BvaW50c0NvdW50ID0gYnJlYWtwb2ludHMuc2l6ZSgpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBicmVha3BvaW50c0NvdW50OyBpKyspIHsKKyAgICAgICAg
aWYgKGJyZWFrcG9pbnRzW2ldLmlkID09IGJyZWFrcG9pbnQuaWQpIHsKKyAgICAgICAgICAgIGJy
ZWFrcG9pbnRzLnJlbW92ZShpKTsKKyAgICAgICAgICAgIG1fYnJlYWtwb2ludElEVG9CcmVha3Bv
aW50LnJlbW92ZShpZEl0KTsKKworICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRzLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5yZW1vdmUoYnJlYWtzSXQpOworICAgICAg
ICAgICAgICAgIGlmIChpdC0+dmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBt
X3NvdXJjZUlEVG9CcmVha3BvaW50cy5yZW1vdmUoaXQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKICAgICB1cGRhdGVOZWVkRm9yT3BEZWJ1
Z0NhbGxiYWNrcygpOwogfQogCi12b2lkIERlYnVnZ2VyOjp1cGRhdGVOZWVkRm9yT3BEZWJ1Z0Nh
bGxiYWNrcygpCitib29sIERlYnVnZ2VyOjpoYXNCcmVha3BvaW50KFNvdXJjZUlEIHNvdXJjZUlE
LCBjb25zdCBUZXh0UG9zaXRpb24mIHBvc2l0aW9uLCBCcmVha3BvaW50ICpoaXRCcmVha3BvaW50
KSBjb25zdAoreworICAgIGlmICghbV9icmVha3BvaW50c0FjdGl2YXRlZCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgU291cmNlSURUb0JyZWFrcG9pbnRzTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fc291cmNlSURUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSUQpOworICAgIGlmIChp
dCA9PSBtX3NvdXJjZUlEVG9CcmVha3BvaW50cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgdW5zaWduZWQgbGluZSA9IHBvc2l0aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKTsK
KyAgICB1bnNpZ25lZCBjb2x1bW4gPSBwb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKTsK
KworICAgIExpbmVUb0JyZWFrcG9pbnRzTWFwOjpjb25zdF9pdGVyYXRvciBicmVha3NJdCA9IGl0
LT52YWx1ZS5maW5kKGxpbmUpOworICAgIGlmIChicmVha3NJdCA9PSBpdC0+dmFsdWUuZW5kKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgaGl0ID0gZmFsc2U7CisgICAgY29u
c3QgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrcG9pbnRzID0gYnJlYWtzSXQtPnZhbHVlOworICAg
IHVuc2lnbmVkIGJyZWFrcG9pbnRzQ291bnQgPSBicmVha3BvaW50cy5zaXplKCk7CisgICAgdW5z
aWduZWQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgYnJlYWtwb2ludHNDb3VudDsgaSsrKSB7Cisg
ICAgICAgIHVuc2lnbmVkIGJyZWFrTGluZSA9IGJyZWFrcG9pbnRzW2ldLmxpbmU7CisgICAgICAg
IHVuc2lnbmVkIGJyZWFrQ29sdW1uID0gYnJlYWtwb2ludHNbaV0uY29sdW1uOworICAgICAgICAv
LyBTaW5jZSBmcm9udGVuZCB0cnVuY2F0ZXMgdGhlIGluZGVudCwgdGhlIGZpcnN0IHN0YXRlbWVu
dCBpbiBhIGxpbmUgbXVzdCBtYXRjaCB0aGUgYnJlYWtwb2ludCAobGluZSwwKS4KKyAgICAgICAg
aWYgKChsaW5lICE9IG1fbGFzdEV4ZWN1dGVkTGluZSAmJiBsaW5lID09IGJyZWFrTGluZSAmJiAh
YnJlYWtDb2x1bW4pCisgICAgICAgICAgICB8fCAobGluZSA9PSBicmVha0xpbmUgJiYgY29sdW1u
ID09IGJyZWFrQ29sdW1uKSkgeworICAgICAgICAgICAgaGl0ID0gdHJ1ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmICghaGl0KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoaGl0QnJlYWtwb2ludCkKKyAgICAgICAgKmhpdEJyZWFrcG9pbnQg
PSBicmVha3BvaW50c1tpXTsKKworICAgIGlmIChicmVha3BvaW50c1tpXS5jb25kaXRpb24uaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIEpTVmFsdWUgZXhjZXB0aW9uOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlV2l0aENhbGxG
cmFtZShtX2N1cnJlbnRDYWxsRnJhbWUsIGJyZWFrcG9pbnRzW2ldLmNvbmRpdGlvbiwgZXhjZXB0
aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgIC8vIEFuIGVycm9uZW91cyBjb25k
aXRpb24gY291bnRzIGFzICJmYWxzZSIuCisgICAgICAgIGhhbmRsZUV4Y2VwdGlvbkluQnJlYWtw
b2ludENvbmRpdGlvbihtX2N1cnJlbnRDYWxsRnJhbWUsIGV4Y2VwdGlvbik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC50b0Jvb2xlYW4obV9jdXJyZW50
Q2FsbEZyYW1lKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6Y2xlYXJCcmVha3BvaW50cygpCit7Cisg
ICAgbV90b3BCcmVha3BvaW50SUQgPSBub0JyZWFrcG9pbnRJRDsKKyAgICBtX2JyZWFrcG9pbnRJ
RFRvQnJlYWtwb2ludC5jbGVhcigpOworICAgIG1fc291cmNlSURUb0JyZWFrcG9pbnRzLmNsZWFy
KCk7CisKKyAgICB1cGRhdGVOZWVkRm9yT3BEZWJ1Z0NhbGxiYWNrcygpOworfQorCit2b2lkIERl
YnVnZ2VyOjpzZXRCcmVha3BvaW50c0FjdGl2YXRlZChib29sIGFjdGl2YXRlZCkKK3sKKyAgICBt
X2JyZWFrcG9pbnRzQWN0aXZhdGVkID0gYWN0aXZhdGVkOworfQorCit2b2lkIERlYnVnZ2VyOjpz
ZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNlcHRpb25zU3RhdGUgcGF1c2UpCit7
CisgICAgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID0gcGF1c2U7Cit9CisKK3ZvaWQgRGVidWdn
ZXI6OnNldFBhdXNlT25OZXh0U3RhdGVtZW50KGJvb2wgcGF1c2UpCit7CisgICAgbV9wYXVzZU9u
TmV4dFN0YXRlbWVudCA9IHBhdXNlOworICAgIGlmIChwYXVzZSkKKyAgICAgICAgc2V0U2hvdWxk
UGF1c2UodHJ1ZSk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OmJyZWFrUHJvZ3JhbSgpCit7CisgICAg
aWYgKG1faXNQYXVzZWQgfHwgIW1fY3VycmVudENhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7CisgICAgc2V0U2hvdWxkUGF1c2Uo
dHJ1ZSk7CisgICAgcGF1c2VJZk5lZWRlZChtX2N1cnJlbnRDYWxsRnJhbWUpOworfQorCit2b2lk
IERlYnVnZ2VyOjpjb250aW51ZVByb2dyYW0oKQoreworICAgIGlmICghbV9pc1BhdXNlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IGZhbHNlOworICAg
IG5vdGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKTsKK30KKwordm9pZCBEZWJ1Z2dl
cjo6c3RlcEludG9TdGF0ZW1lbnQoKQoreworICAgIGlmICghbV9pc1BhdXNlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7CisgICAgc2V0U2hv
dWxkUGF1c2UodHJ1ZSk7CisgICAgbm90aWZ5RG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cygp
OworfQorCit2b2lkIERlYnVnZ2VyOjpzdGVwT3ZlclN0YXRlbWVudCgpCit7CisgICAgaWYgKCFt
X2lzUGF1c2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSBt
X2N1cnJlbnRDYWxsRnJhbWU7CisgICAgbm90aWZ5RG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50
cygpOworfQorCit2b2lkIERlYnVnZ2VyOjpzdGVwT3V0T2ZGdW5jdGlvbigpCit7CisgICAgaWYg
KCFtX2lzUGF1c2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhdXNlT25DYWxsRnJhbWUg
PSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1lU2tp
cHBpbmdWTUVudHJ5U2VudGluZWwoKSA6IDA7CisgICAgbm90aWZ5RG9uZVByb2Nlc3NpbmdEZWJ1
Z2dlckV2ZW50cygpOworfQorCit2b2lkIERlYnVnZ2VyOjp1cGRhdGVDYWxsRnJhbWUoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCit7CisgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gY2FsbEZyYW1lOwor
ICAgIFNvdXJjZUlEIHNvdXJjZUlEID0gRGVidWdnZXJDYWxsRnJhbWU6OnNvdXJjZUlERm9yQ2Fs
bEZyYW1lKGNhbGxGcmFtZSk7CisgICAgaWYgKG1fbGFzdEV4ZWN1dGVkU291cmNlSUQgIT0gc291
cmNlSUQpIHsKKyAgICAgICAgbV9sYXN0RXhlY3V0ZWRMaW5lID0gLTE7CisgICAgICAgIG1fbGFz
dEV4ZWN1dGVkU291cmNlSUQgPSBzb3VyY2VJRDsKKyAgICB9Cit9CisKK3ZvaWQgRGVidWdnZXI6
OnVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7
CisgICAgdXBkYXRlQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CisgICAgcGF1c2VJZk5lZWRlZChjYWxs
RnJhbWUpOworICAgIGlmICghbmVlZHNPcERlYnVnQ2FsbGJhY2tzKCkpCisgICAgICAgIG1fY3Vy
cmVudENhbGxGcmFtZSA9IDA7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnBhdXNlSWZOZWVkZWQoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgaWYgKG1faXNQYXVzZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1l
LT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CisgICAgaWYgKCFuZWVkUGF1c2VIYW5kbGluZyhkeW5h
bWljR2xvYmFsT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQnJlYWtwb2ludCBicmVh
a3BvaW50OworICAgIGJvb2wgZGlkSGl0QnJlYWtwb2ludCA9IGZhbHNlOworICAgIGJvb2wgcGF1
c2VOb3cgPSBtX3BhdXNlT25OZXh0U3RhdGVtZW50OworICAgIHBhdXNlTm93IHw9IChtX3BhdXNl
T25DYWxsRnJhbWUgPT0gbV9jdXJyZW50Q2FsbEZyYW1lKTsKKworICAgIGludHB0cl90IHNvdXJj
ZUlEID0gRGVidWdnZXJDYWxsRnJhbWU6OnNvdXJjZUlERm9yQ2FsbEZyYW1lKG1fY3VycmVudENh
bGxGcmFtZSk7CisgICAgVGV4dFBvc2l0aW9uIHBvc2l0aW9uID0gRGVidWdnZXJDYWxsRnJhbWU6
OnBvc2l0aW9uRm9yQ2FsbEZyYW1lKG1fY3VycmVudENhbGxGcmFtZSk7CisgICAgcGF1c2VOb3cg
fD0gZGlkSGl0QnJlYWtwb2ludCA9IGhhc0JyZWFrcG9pbnQoc291cmNlSUQsIHBvc2l0aW9uLCAm
YnJlYWtwb2ludCk7CisgICAgbV9sYXN0RXhlY3V0ZWRMaW5lID0gcG9zaXRpb24ubV9saW5lLnpl
cm9CYXNlZEludCgpOworICAgIGlmICghcGF1c2VOb3cpCisgICAgICAgIHJldHVybjsKKworICAg
IERlYnVnZ2VyQ2FsbEZyYW1lU2NvcGUgZGVidWdnZXJDYWxsRnJhbWVTY29wZSgqdGhpcyk7CisK
KyAgICBpZiAoZGlkSGl0QnJlYWtwb2ludCkgeworICAgICAgICBoYW5kbGVCcmVha3BvaW50SGl0
KGJyZWFrcG9pbnQpOworICAgICAgICBpZiAoYnJlYWtwb2ludC5hdXRvQ29udGludWUpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gMDsKKyAg
ICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gZmFsc2U7CisgICAgbV9pc1BhdXNlZCA9IHRydWU7
CisKKyAgICBoYW5kbGVQYXVzZShtX3JlYXNvbkZvclBhdXNlLCBkeW5hbWljR2xvYmFsT2JqZWN0
KTsKKworICAgIGlmICghbV9wYXVzZU9uTmV4dFN0YXRlbWVudCAmJiAhbV9wYXVzZU9uQ2FsbEZy
YW1lKSB7CisgICAgICAgIHNldFNob3VsZFBhdXNlKGZhbHNlKTsKKyAgICAgICAgaWYgKCFuZWVk
c09wRGVidWdDYWxsYmFja3MoKSkKKyAgICAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZSA9IDA7
CisgICAgfQorCisgICAgbV9pc1BhdXNlZCA9IGZhbHNlOworfQorCit2b2lkIERlYnVnZ2VyOjpl
eGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgZXhjZXB0aW9uLCBib29sIGhh
c0hhbmRsZXIpCit7CisgICAgaWYgKG1faXNQYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IFBhdXNlUmVhc29uRGVjbGFyYXRpb24gcmVhc29uKCp0aGlzLCBQYXVzZWRGb3JFeGNlcHRpb24p
OworICAgIGlmIChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPbkFsbEV4Y2VwdGlv
bnMgfHwgKG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9PSBQYXVzZU9uVW5jYXVnaHRFeGNlcHRp
b25zICYmICFoYXNIYW5kbGVyKSkgeworICAgICAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0g
dHJ1ZTsKKyAgICAgICAgc2V0U2hvdWxkUGF1c2UodHJ1ZSk7CisgICAgfQorCisgICAgbV9oYXNI
YW5kbGVyRm9yRXhjZXB0aW9uQ2FsbGJhY2sgPSB0cnVlOworICAgIG1fY3VycmVudEV4Y2VwdGlv
biA9IGV4Y2VwdGlvbjsKKyAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNhbGxG
cmFtZSk7CisgICAgbV9jdXJyZW50RXhjZXB0aW9uID0gSlNWYWx1ZSgpOworICAgIG1faGFzSGFu
ZGxlckZvckV4Y2VwdGlvbkNhbGxiYWNrID0gZmFsc2U7Cit9CisKK3ZvaWQgRGVidWdnZXI6OmF0
U3RhdGVtZW50KENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIGlmIChtX2lzUGF1c2VkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHJlYXNvbigqdGhp
cywgUGF1c2VkQXRTdGF0ZW1lbnQpOworICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVk
ZWQoY2FsbEZyYW1lKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6Y2FsbEV2ZW50KENhbGxGcmFtZSog
Y2FsbEZyYW1lKQoreworICAgIGlmIChtX2lzUGF1c2VkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHJlYXNvbigqdGhpcywgUGF1c2VkQWZ0ZXJDYWxsKTsK
KyAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7Cit9CisKK3Zv
aWQgRGVidWdnZXI6OnJldHVybkV2ZW50KENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIGlm
IChtX2lzUGF1c2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBQYXVzZVJlYXNvbkRlY2xhcmF0
aW9uIHJlYXNvbigqdGhpcywgUGF1c2VkQmVmb3JlUmV0dXJuKTsKKyAgICB1cGRhdGVDYWxsRnJh
bWVBbmRQYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7CisKKyAgICAvLyBkZXRhY2ggbWF5IGhhdmUg
YmVlbiBjYWxsZWQgZHVyaW5nIHBhdXNlSWZOZWVkZWQKKyAgICBpZiAoIW1fY3VycmVudENhbGxG
cmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVHJlYXQgc3RlcHBpbmcgb3ZlciBhIHJl
dHVybiBzdGF0ZW1lbnQgbGlrZSBzdGVwcGluZyBvdXQuCisgICAgaWYgKG1fY3VycmVudENhbGxG
cmFtZSA9PSBtX3BhdXNlT25DYWxsRnJhbWUpCisgICAgICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9
IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWVTa2lwcGluZ1ZNRW50cnlTZW50aW5lbCgp
OworCisgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJG
cmFtZVNraXBwaW5nVk1FbnRyeVNlbnRpbmVsKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OndpbGxF
eGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBpZiAobV9pc1BhdXNl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGF1c2VSZWFzb25EZWNsYXJhdGlvbiByZWFzb24o
KnRoaXMsIFBhdXNlZEF0U3RhcnRPZlByb2dyYW0pOworICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNr
IGZvciB3aGV0aGVyIHdlJ3JlIGRlYnVnZ2luZyBhIHdvcmtlciB0aHJlYWQgaXMgYSB3b3JrYXJv
dW5kCisgICAgLy8gZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDI2MzcuIFJlbW92ZSBpdCB3aGVuIHdlIHJld29yaworICAgIC8vIHRoZSBkZWJ1Z2dlciBpbXBs
ZW1lbnRhdGlvbiB0byBub3QgcmVxdWlyZSBjYWxsYmFja3MuCisgICAgaWYgKCFtX2lzSW5Xb3Jr
ZXJUaHJlYWQpCisgICAgICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZy
YW1lKTsKKyAgICBlbHNlIGlmIChuZWVkc09wRGVidWdDYWxsYmFja3MoKSkKKyAgICAgICAgdXBk
YXRlQ2FsbEZyYW1lKGNhbGxGcmFtZSk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OmRpZEV4ZWN1dGVQ
cm9ncmFtKENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIGlmIChtX2lzUGF1c2VkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHJlYXNvbigqdGhpcywg
UGF1c2VkQXRFbmRPZlByb2dyYW0pOworICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVk
ZWQoY2FsbEZyYW1lKTsKKworICAgIC8vIFRyZWF0IHN0ZXBwaW5nIG92ZXIgdGhlIGVuZCBvZiBh
IHByb2dyYW0gbGlrZSBzdGVwcGluZyBvdXQuCisgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VP
bkNhbGxGcmFtZSkgeworICAgICAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxs
RnJhbWUtPmNhbGxlckZyYW1lU2tpcHBpbmdWTUVudHJ5U2VudGluZWwoKTsKKyAgICAgICAgaWYg
KCFtX2N1cnJlbnRDYWxsRnJhbWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
Y3VycmVudENhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWVTa2lwcGlu
Z1ZNRW50cnlTZW50aW5lbCgpOworfQorCit2b2lkIERlYnVnZ2VyOjpkaWRSZWFjaEJyZWFrcG9p
bnQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgaWYgKG1faXNQYXVzZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIFBhdXNlUmVhc29uRGVjbGFyYXRpb24gcmVhc29uKCp0aGlzLCBQYXVz
ZWRGb3JCcmVha3BvaW50KTsKKyAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKKyAg
ICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKKyAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVl
ZGVkKGNhbGxGcmFtZSk7Cit9CisKK0RlYnVnZ2VyQ2FsbEZyYW1lKiBEZWJ1Z2dlcjo6Y3VycmVu
dERlYnVnZ2VyQ2FsbEZyYW1lKCkgY29uc3QKIHsKLSAgICBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNr
cyA9IG1fc2hvdWxkUGF1c2UgfHwgbV9udW1iZXJPZkJyZWFrcG9pbnRzOworICAgIEFTU0VSVCht
X2N1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZSk7CisgICAgcmV0dXJuIG1fY3VycmVudERlYnVnZ2Vy
Q2FsbEZyYW1lLmdldCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCShyZXZpc2lvbiAxNTg4NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0y
Miw2MyArMjIsMTY4IEBACiAjaWZuZGVmIERlYnVnZ2VyX2gKICNkZWZpbmUgRGVidWdnZXJfaAog
CisjaW5jbHVkZSAiQnJlYWtwb2ludC5oIgorI2luY2x1ZGUgIkRlYnVnZ2VyUHJpbWl0aXZlcy5o
IgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRGVi
dWdnZXJDYWxsRnJhbWU7CiBjbGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBWTTsKIGNsYXNzIEpTR2xv
YmFsT2JqZWN0OwotY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIFNvdXJjZVByb3ZpZGVyOworY2xhc3Mg
Vk07CiAKIHR5cGVkZWYgRXhlY1N0YXRlIENhbGxGcmFtZTsKIAogY2xhc3MgSlNfRVhQT1JUX1BS
SVZBVEUgRGVidWdnZXIgewogcHVibGljOgotICAgIERlYnVnZ2VyKCk7CisgICAgRGVidWdnZXIo
Ym9vbCBpc0luV29ya2VyVGhyZWFkID0gZmFsc2UpOwogICAgIHZpcnR1YWwgfkRlYnVnZ2VyKCk7
CiAKICAgICBib29sIG5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fbmVl
ZHNPcERlYnVnQ2FsbGJhY2tzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBuZWVkc09wRGVidWdD
YWxsYmFja3NPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGVidWdnZXIsIG1fbmVl
ZHNPcERlYnVnQ2FsbGJhY2tzKTsgfQogCi0gICAgYm9vbCBzaG91bGRQYXVzZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hvdWxkUGF1c2U7IH0KLSAgICB2b2lkIHNldFNob3VsZFBhdXNlKGJvb2wpOwot
Ci0gICAgYm9vbCBuZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fbmVl
ZHNFeGNlcHRpb25DYWxsYmFja3M7IH0KLSAgICB2b2lkIHNldE5lZWRzRXhjZXB0aW9uQ2FsbGJh
Y2tzKGJvb2wpOworICAgIEpTQzo6RGVidWdnZXJDYWxsRnJhbWUqIGN1cnJlbnREZWJ1Z2dlckNh
bGxGcmFtZSgpIGNvbnN0OworICAgIGJvb2wgaGFzSGFuZGxlckZvckV4Y2VwdGlvbkNhbGxiYWNr
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3JlYXNvbkZvclBhdXNlID09IFBhdXNl
ZEZvckV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybiBtX2hhc0hhbmRsZXJGb3JFeGNlcHRpb25D
YWxsYmFjazsKKyAgICB9CisgICAgSlNWYWx1ZSBjdXJyZW50RXhjZXB0aW9uKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX3JlYXNvbkZvclBhdXNlID09IFBhdXNlZEZvckV4Y2VwdGlvbik7Cisg
ICAgICAgIHJldHVybiBtX2N1cnJlbnRFeGNlcHRpb247CisgICAgfQogCi0gICAgdm9pZCBpbmNO
dW1iZXJPZkJyZWFrcG9pbnRzKCkgeyB1cGRhdGVOdW1iZXJPZkJyZWFrcG9pbnRzKG1fbnVtYmVy
T2ZCcmVha3BvaW50cyArIDEpOyB9Ci0gICAgdm9pZCBkZWNOdW1iZXJPZkJyZWFrcG9pbnRzKCkg
IHsgdXBkYXRlTnVtYmVyT2ZCcmVha3BvaW50cyhtX251bWJlck9mQnJlYWtwb2ludHMgLSAxKTsg
fQotICAgIHZvaWQgdXBkYXRlTnVtYmVyT2ZCcmVha3BvaW50cyhpbnQpOworICAgIGJvb2wgbmVl
ZHNFeGNlcHRpb25DYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlT25FeGNlcHRpb25z
U3RhdGUgIT0gRG9udFBhdXNlT25FeGNlcHRpb25zOyB9CiAKICAgICB2b2lkIGF0dGFjaChKU0ds
b2JhbE9iamVjdCopOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goSlNHbG9iYWxPYmplY3QqKTsK
IAorICAgIEJyZWFrcG9pbnRJRCBzZXRCcmVha3BvaW50KEJyZWFrcG9pbnQsIHVuc2lnbmVkJiBh
Y3R1YWxMaW5lLCB1bnNpZ25lZCYgYWN0dWFsQ29sdW1uKTsKKyAgICB2b2lkIHJlbW92ZUJyZWFr
cG9pbnQoQnJlYWtwb2ludElEKTsKKyAgICB2b2lkIGNsZWFyQnJlYWtwb2ludHMoKTsKKyAgICB2
b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wpOworICAgIHZvaWQgYWN0aXZhdGVCcmVh
a3BvaW50cygpIHsgc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQodHJ1ZSk7IH0KKyAgICB2b2lkIGRl
YWN0aXZhdGVCcmVha3BvaW50cygpIHsgc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoZmFsc2UpOyB9
CisKKyAgICBlbnVtIFBhdXNlT25FeGNlcHRpb25zU3RhdGUgeworICAgICAgICBEb250UGF1c2VP
bkV4Y2VwdGlvbnMsCisgICAgICAgIFBhdXNlT25BbGxFeGNlcHRpb25zLAorICAgICAgICBQYXVz
ZU9uVW5jYXVnaHRFeGNlcHRpb25zCisgICAgfTsKKyAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRl
IHBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlT25FeGNlcHRp
b25zU3RhdGU7IH0KKyAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4
Y2VwdGlvbnNTdGF0ZSk7CisKKyAgICB2b2lkIHNldFBhdXNlT25OZXh0U3RhdGVtZW50KGJvb2wp
OworICAgIHZvaWQgYnJlYWtQcm9ncmFtKCk7CisgICAgdm9pZCBjb250aW51ZVByb2dyYW0oKTsK
KyAgICB2b2lkIHN0ZXBJbnRvU3RhdGVtZW50KCk7CisgICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVu
dCgpOworICAgIHZvaWQgc3RlcE91dE9mRnVuY3Rpb24oKTsKKworICAgIGJvb2wgaXNQYXVzZWQo
KSB7IHJldHVybiBtX2lzUGF1c2VkOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFyc2Vk
KEV4ZWNTdGF0ZSosIFNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZU51bWJlciwgY29uc3Qg
V1RGOjpTdHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGV4Y2Vw
dGlvbihDYWxsRnJhbWUqLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBib29sIGhhc0hhbmRsZXIp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXRTdGF0ZW1lbnQoQ2FsbEZyYW1lKikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBjYWxsRXZlbnQoQ2FsbEZyYW1lKikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCByZXR1cm5FdmVudChDYWxsRnJhbWUqKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4
ZWN1dGVQcm9ncmFtKENhbGxGcmFtZSopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhlY3V0
ZVByb2dyYW0oQ2FsbEZyYW1lKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFjaEJyZWFr
cG9pbnQoQ2FsbEZyYW1lKikgPSAwOworICAgIHZvaWQgZXhjZXB0aW9uKENhbGxGcmFtZSosIEpT
VmFsdWUgZXhjZXB0aW9uVmFsdWUsIGJvb2wgaGFzSGFuZGxlcik7CisgICAgdm9pZCBhdFN0YXRl
bWVudChDYWxsRnJhbWUqKTsKKyAgICB2b2lkIGNhbGxFdmVudChDYWxsRnJhbWUqKTsKKyAgICB2
b2lkIHJldHVybkV2ZW50KENhbGxGcmFtZSopOworICAgIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFt
KENhbGxGcmFtZSopOworICAgIHZvaWQgZGlkRXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1lKik7Cisg
ICAgdm9pZCBkaWRSZWFjaEJyZWFrcG9pbnQoQ2FsbEZyYW1lKik7CiAKICAgICB2b2lkIHJlY29t
cGlsZUFsbEpTRnVuY3Rpb25zKFZNKik7CiAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wg
bmVlZFBhdXNlSGFuZGxpbmcoSlNHbG9iYWxPYmplY3QqKSB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVCcmVha3BvaW50SGl0KGNvbnN0IEJyZWFrcG9pbnQmKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXhjZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKEV4
ZWNTdGF0ZSosIEpTVmFsdWUgZXhjZXB0aW9uKSBjb25zdCB7IFVOVVNFRF9QQVJBTShleGNlcHRp
b24pOyB9CisKKyAgICBlbnVtIFJlYXNvbkZvclBhdXNlIHsKKyAgICAgICAgTm90UGF1c2VkLAor
ICAgICAgICBQYXVzZWRGb3JFeGNlcHRpb24sCisgICAgICAgIFBhdXNlZEF0U3RhdGVtZW50LAor
ICAgICAgICBQYXVzZWRBZnRlckNhbGwsCisgICAgICAgIFBhdXNlZEJlZm9yZVJldHVybiwKKyAg
ICAgICAgUGF1c2VkQXRTdGFydE9mUHJvZ3JhbSwKKyAgICAgICAgUGF1c2VkQXRFbmRPZlByb2dy
YW0sCisgICAgICAgIFBhdXNlZEZvckJyZWFrcG9pbnQKKyAgICB9OworCisgICAgdmlydHVhbCB2
b2lkIGhhbmRsZVBhdXNlKFJlYXNvbkZvclBhdXNlLCBKU0dsb2JhbE9iamVjdCopIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCkgeyB9CisK
IHByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPEJyZWFrcG9pbnRJRCwgQnJlYWtwb2ludCo+
IEJyZWFrcG9pbnRJRFRvQnJlYWtwb2ludE1hcDsKKworICAgIHR5cGVkZWYgVmVjdG9yPEJyZWFr
cG9pbnQ+IEJyZWFrcG9pbnRzSW5MaW5lOworICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwg
QnJlYWtwb2ludHNJbkxpbmUsIFdURjo6SW50SGFzaDxpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPGludD4+IExpbmVUb0JyZWFrcG9pbnRzTWFwOworICAgIHR5cGVkZWYg
SGFzaE1hcDxTb3VyY2VJRCwgTGluZVRvQnJlYWtwb2ludHNNYXA+IFNvdXJjZUlEVG9CcmVha3Bv
aW50c01hcDsKKworICAgIGNsYXNzIFBhdXNlUmVhc29uRGVjbGFyYXRpb24geworICAgIHB1Ymxp
YzoKKyAgICAgICAgUGF1c2VSZWFzb25EZWNsYXJhdGlvbihEZWJ1Z2dlciYgZGVidWdnZXIsIFJl
YXNvbkZvclBhdXNlIHJlYXNvbikKKyAgICAgICAgICAgIDogbV9kZWJ1Z2dlcihkZWJ1Z2dlcikK
KyAgICAgICAgeworICAgICAgICAgICAgbV9kZWJ1Z2dlci5tX3JlYXNvbkZvclBhdXNlID0gcmVh
c29uOworICAgICAgICB9CisKKyAgICAgICAgflBhdXNlUmVhc29uRGVjbGFyYXRpb24oKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX2RlYnVnZ2VyLm1fcmVhc29uRm9yUGF1c2UgPSBOb3RQYXVz
ZWQ7CisgICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICBEZWJ1Z2dlciYgbV9kZWJ1Z2dl
cjsKKyAgICB9OworCisgICAgYm9vbCBoYXNCcmVha3BvaW50KFNvdXJjZUlELCBjb25zdCBUZXh0
UG9zaXRpb24mLCBCcmVha3BvaW50KiBoaXRCcmVha3BvaW50KSBjb25zdDsKKworICAgIGJvb2wg
c2hvdWxkUGF1c2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFBhdXNlOyB9CisgICAgdm9pZCBz
ZXRTaG91bGRQYXVzZShib29sKTsKICAgICB2b2lkIHVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJh
Y2tzKCk7CiAKKyAgICAvLyBUaGVzZSB1cGRhdGUgZnVuY3Rpb25zIGFyZSBvbmx5IG5lZWRlZCBi
ZWNhdXNlIG91ciBjdXJyZW50IGJyZWFrcG9pbnRzIGFyZQorICAgIC8vIGtleSdlZCBvZmYgdGhl
IHNvdXJjZSBwb3NpdGlvbiBpbnN0ZWFkIG9mIHRoZSBieXRlY29kZSBQQy4gVGhpcyBlbnN1cmVz
CisgICAgLy8gdGhhdCB3ZSBkb24ndCBicmVhayBvbiB0aGUgc2FtZSBsaW5lIG1vcmUgdGhhbiBv
bmNlLiBPbmNlIHdlIHN3aXRjaCB0byBhCisgICAgLy8gYnl0ZWNvZGUgUEMga2V5J2VkIGJyZWFr
cG9pbnQsIHdlIHdpbGwgbm90IG5lZWQgdGhlc2UgYW55bW9yZSBhbmQgc2hvdWxkCisgICAgLy8g
YmUgYWJsZSB0byByZW1vdmUgdGhlbS4KKyAgICB2b2lkIHVwZGF0ZUNhbGxGcmFtZShKU0M6OkNh
bGxGcmFtZSopOworICAgIHZvaWQgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChKU0M6
OkNhbGxGcmFtZSopOworICAgIHZvaWQgcGF1c2VJZk5lZWRlZChKU0M6OkNhbGxGcmFtZSopOwor
CiAgICAgSGFzaFNldDxKU0dsb2JhbE9iamVjdCo+IG1fZ2xvYmFsT2JqZWN0czsKIAotICAgIGJv
b2wgbV9uZWVkc0V4Y2VwdGlvbkNhbGxiYWNrczsKKyAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRl
IG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZTsKKyAgICBib29sIG1fcGF1c2VPbk5leHRTdGF0ZW1l
bnQgOiAxOworICAgIGJvb2wgbV9pc1BhdXNlZCA6IDE7CisgICAgYm9vbCBtX2JyZWFrcG9pbnRz
QWN0aXZhdGVkIDogMTsKKyAgICBib29sIG1faGFzSGFuZGxlckZvckV4Y2VwdGlvbkNhbGxiYWNr
IDogMTsKKyAgICBib29sIG1faXNJbldvcmtlclRocmVhZCA6IDE7CisKKyAgICBSZWFzb25Gb3JQ
YXVzZSBtX3JlYXNvbkZvclBhdXNlOworICAgIEpTVmFsdWUgbV9jdXJyZW50RXhjZXB0aW9uOwor
ICAgIENhbGxGcmFtZSogbV9wYXVzZU9uQ2FsbEZyYW1lOworICAgIENhbGxGcmFtZSogbV9jdXJy
ZW50Q2FsbEZyYW1lOworICAgIHVuc2lnbmVkIG1fbGFzdEV4ZWN1dGVkTGluZTsKKyAgICBTb3Vy
Y2VJRCBtX2xhc3RFeGVjdXRlZFNvdXJjZUlEOworCisgICAgQnJlYWtwb2ludElEIG1fdG9wQnJl
YWtwb2ludElEOworICAgIEJyZWFrcG9pbnRJRFRvQnJlYWtwb2ludE1hcCBtX2JyZWFrcG9pbnRJ
RFRvQnJlYWtwb2ludDsKKyAgICBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXAgbV9zb3VyY2VJRFRv
QnJlYWtwb2ludHM7CisKICAgICBib29sIG1fbmVlZHNPcERlYnVnQ2FsbGJhY2tzOwogICAgIGJv
b2wgbV9zaG91bGRQYXVzZTsKLSAgICBpbnQgbV9udW1iZXJPZkJyZWFrcG9pbnRzOwogCisgICAg
UmVmUHRyPEpTQzo6RGVidWdnZXJDYWxsRnJhbWU+IG1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1l
OworCisgICAgZnJpZW5kIGNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lU2NvcGU7CiAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkocmV2aXNp
b24gMTU4ODY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2Fs
bEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMTEgKzg1LDExIEBAIEpTQzo6SlNHbG9i
YWxPYmplY3QqIERlYnVnZ2VyQ2FsbEZyYW1lOjoKICAgICByZXR1cm4gbV9jYWxsRnJhbWUtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKTsKIH0KIAotaW50cHRyX3QgRGVidWdnZXJDYWxsRnJhbWU6OnNv
dXJjZUlEKCkgY29uc3QKK1NvdXJjZUlEIERlYnVnZ2VyQ2FsbEZyYW1lOjpzb3VyY2VJRCgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbm9Tb3VyY2VJRDsKICAgICByZXR1cm4gc291
cmNlSURGb3JDYWxsRnJhbWUobV9jYWxsRnJhbWUpOwogfQogCkBAIC0xODUsMTIgKzE4NSwxMiBA
QCBUZXh0UG9zaXRpb24gRGVidWdnZXJDYWxsRnJhbWU6OnBvc2l0aW9uCiAgICAgcmV0dXJuIFRl
eHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoZnVuY3Rvci5saW5lKCkp
LCBPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoZnVuY3Rvci5jb2x1bW4oKSkpOwogfQog
Ci1pbnRwdHJfdCBEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSURGb3JDYWxsRnJhbWUoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCitTb3VyY2VJRCBEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSURGb3JD
YWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgQVNTRVJUKGNhbGxGcmFtZSk7
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAg
IGlmICghY29kZUJsb2NrKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG5vU291
cmNlSUQ7CiAgICAgcmV0dXJuIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZUlE
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNh
bGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlckNhbGxGcmFtZS5oCShyZXZpc2lvbiAxNTg4NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MTIgKzMwLDEzIEBACiAjZGVmaW5lIERlYnVnZ2VyQ2FsbEZyYW1lX2gKIAogI2luY2x1ZGUgIkNh
bGxGcmFtZS5oIgorI2luY2x1ZGUgIkRlYnVnZ2VyUHJpbWl0aXZlcy5oIgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci0gICAgCisKIGNsYXNz
IERlYnVnZ2VyQ2FsbEZyYW1lIDogcHVibGljIFJlZkNvdW50ZWQ8RGVidWdnZXJDYWxsRnJhbWU+
IHsKIHB1YmxpYzoKICAgICBlbnVtIFR5cGUgeyBQcm9ncmFtVHlwZSwgRnVuY3Rpb25UeXBlIH07
CkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1lOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGFzc1Jl
ZlB0cjxEZWJ1Z2dlckNhbGxGcmFtZT4gY2FsbGVyRnJhbWUoKTsKICAgICBFeGVjU3RhdGUqIGV4
ZWMoKSBjb25zdCB7IHJldHVybiBtX2NhbGxGcmFtZTsgfQotICAgIEpTX0VYUE9SVF9QUklWQVRF
IGludHB0cl90IHNvdXJjZUlEKCkgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU291cmNl
SUQgc291cmNlSUQoKSBjb25zdDsKIAogICAgIC8vIGxpbmUgYW5kIGNvbHVtbiBhcmUgaW4gYmFz
ZSAwIGUuZy4gdGhlIGZpcnN0IGxpbmUgaXMgbGluZSAwLgogICAgIGludCBsaW5lKCkgY29uc3Qg
eyByZXR1cm4gbV9wb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50KCk7IH0KQEAgLTcyLDcgKzcz
LDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTVmFsdWUgZXZh
bHVhdGVXaXRoQ2FsbEZyYW1lKENhbGxGcmFtZSosIGNvbnN0IFN0cmluZyYgc2NyaXB0LCBKU1Zh
bHVlJiBleGNlcHRpb24pOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUZXh0UG9zaXRp
b24gcG9zaXRpb25Gb3JDYWxsRnJhbWUoQ2FsbEZyYW1lKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIGludHB0cl90IHNvdXJjZUlERm9yQ2FsbEZyYW1lKENhbGxGcmFtZSopOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTb3VyY2VJRCBzb3VyY2VJREZvckNhbGxGcmFtZShD
YWxsRnJhbWUqKTsKICAgICBzdGF0aWMgSlNWYWx1ZSB0aGlzVmFsdWVGb3JDYWxsRnJhbWUoQ2Fs
bEZyYW1lKik7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJQcmltaXRpdmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyUHJpbWl0aXZlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyUHJpbWl0aXZlcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBEZWJ1Z2dlclByaW1pdGl2ZXNfaAorI2RlZmluZSBEZWJ1Z2dl
clByaW1pdGl2ZXNfaAorCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisKK25hbWVz
cGFjZSBKU0MgeworCit0eXBlZGVmIGludHB0cl90IFNvdXJjZUlEOworc3RhdGljIGNvbnN0IFNv
dXJjZUlEIG5vU291cmNlSUQgPSAwOworCit0eXBlZGVmIGludDMyX3QgQnJlYWtwb2ludElEOwor
c3RhdGljIGNvbnN0IEJyZWFrcG9pbnRJRCBub0JyZWFrcG9pbnRJRCA9IDA7CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisKKyNl
bmRpZiAvLyBEZWJ1Z2dlclByaW1pdGl2ZXNfaApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4
ODc2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsNjEgQEAKKzIwMTMtMTEtMDcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisg
ICAgICAgIE1vdmUgYnJlYWtwb2ludCAoYW5kIGV4Y2VwdGlvbiBicmVhaykgZnVuY3Rpb25hbGl0
eSBpbnRvIEpTQzo6RGVidWdnZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjE3OTYuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgIC0gSW4gU2NyaXB0RGVidWdT
ZXJ2ZXIgYW5kIEpTQzo6RGVidWdnZXIsIFNvdXJjZUlEIGFuZCBCcmVha3BvaW50SUQgYXJlCisg
ICAgICAgICAgbm93IG51bWVyaWMgdG9rZW5zLgorCisgICAgICAgIC0gSlNDOjpEZWJ1Z2dlciBu
b3cgdHJhY2tzIHVzZXIgZGVmaW5lZCBicmVha3BvaW50cyBpbiBhIEpTQzo6QnJlYWtwb2ludAor
ICAgICAgICAgIHJlY29yZC4gUHJldmlvdXNseSwgdGhpcyBpbmZvIGlzIHRyYWNrZWQgaW4gdGhl
IFNjcmlwdEJyZWFrcG9pbnQgcmVjb3JkCisgICAgICAgICAgaW4gU2NyaXB0RGVidWdTZXJ2ZXIu
IFRoZSBvbmx5IGVsZW1lbnQgb2YgU2NyaXB0QnJlYWtwb2ludCB0aGF0IGlzIG5vdAorICAgICAg
ICAgIGJlaW5nIHRyYWNrZWQgYnkgSlNDOjpCcmVha3BvaW50IGlzIHRoZSBTY3JpcHRCcmVha3Bv
aW50QWN0aW9uLgorICAgICAgICAgICAgIFRoZSBTY3JpcHRCcmVha3BvaW50QWN0aW9uIGlzIHN0
aWxsIHRyYWNrZWQgYnkgdGhlIFNjcmlwdERlYnVnU2VydmVyCisgICAgICAgICAgaW4gYSBsaXN0
IGtleWVkIG9uIHRoZSBjb3JyZXNwb25kaW5nIEJyZWFrcG9pbnRJRC4KKyAgICAgICAgICAgICBU
aGUgU2NyaXB0QnJlYWtwb2ludCByZWNvcmQgaXMgbm93IG9ubHkgdXNlZCBhcyBhIG1lYW5zIG9m
IHBhc3NpbmcKKyAgICAgICAgICBicmVha3BvaW50IHBhcmFtYXRlcnMgdG8gdGhlIFNjcmlwdERl
YnVnU2VydmVyLgorCisgICAgICAgIC0gU2NyaXB0RGVidWdTZXJ2ZXIgbm93IG5vIGxvbmdlciBh
Y2Nlc3NlcyB0aGUgSlNDOjpDYWxsRnJhbWUqIGRpcmVjdGx5LgorICAgICAgICAgIEl0IGFsd2F5
cyBnb2VzIHRocm91Z2ggdGhlIERlYnVnZ2VyQ2FsbEZyYW1lLgorCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0JyZWFr
cG9pbnRJRC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0RGVidWdT
ZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmNsZWFyQnJlYWtwb2lu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1
c2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkQ29u
dGludWUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlk
UGFyc2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6Om5vdGlm
eURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RGVidWdTZXJ2ZXI6Om5lZWRQYXVzZUhhbmRsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dERlYnVnU2VydmVyOjpoYW5kbGVCcmVha3BvaW50SGl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdERlYnVnU2VydmVyOjpoYW5kbGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZVBhdXNlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NvdXJjZUlELmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlw
dERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdERlYnVnU2Vy
dmVyOjpXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcik6CisgICAgICAgICogYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtw
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51
ZVRvTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
cmVzb2x2ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2VhcmNoSW5Db250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpjbGVhcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oOgor
CiAyMDEzLTExLTA3ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZSBucHIub3JnIHNwZWNpZmljIGhhY2sgaW4gSFRNTE1lZGlhRWxlbWVudApJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTU4ODY1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MzMzLDcgKzUzMzMsNiBAQAog
CQlDRDU0REU0QjE3NDY5QzZEMDA1RTVCMzYgLyogQXVkaW9TZXNzaW9uTWFjLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENTRERTQ5MTc0NjlDNkQw
MDVFNUIzNiAvKiBBdWRpb1Nlc3Npb25NYWMuY3BwICovOyB9OwogCQlDRDYxRkU2NzE3OTRBQURC
MDA0MTAxRUIgLyogTWVkaWFTb3VyY2VSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMUE5NDJFMTE1QjVDRTIyMDBENTI1RDEgLyogTWVk
aWFTb3VyY2VSZWdpc3RyeS5jcHAgKi87IH07CiAJCUNENjFGRTY4MTc5NEFBREIwMDQxMDFFQiAv
KiBNZWRpYVNvdXJjZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMUE5NDJFMjE1QjVDRTIyMDBENTI1RDEgLyogTWVkaWFTb3VyY2VSZWdp
c3RyeS5oICovOyB9OwotCiAJCUNENjQxRUIzMTgxOEY1RUQwMEVFNEM0MSAvKiBNZWRpYVNvdXJj
ZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENENjQxRUIxMTgxOEY1RUQwMEVFNEM0MSAvKiBNZWRpYVNvdXJjZVByaXZhdGUuaCAqLzsgfTsK
IAkJQ0Q2NDFFQjQxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZlclByaXZhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENjQxRUIyMTgxOEY1
RUQwMEVFNEM0MSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmggKi87IH07CiAJCUNENjQxRUJGMTgx
OUIzNjAwMEVFNEM0MSAvKiBNZWRpYVRpbWVNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q2NDFFQkQxODE5QjM1OTAwRUU0QzQxIC8qIE1lZGlh
VGltZU1hYy5jcHAgKi87IH07CkBAIC02MjM5LDYgKzYyMzgsNyBAQAogCQlGRTE2Q0ZENDE2OUQx
REVEMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTE2Q0ZEMDE2OUQxREVDMDBEM0EwQzcgLyogRGF0YWJh
c2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRkUxNkNGRDUxNjlEMURFRDAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZFN5bmMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxNkNGRDEx
NjlEMURFQzAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZFN5bmMuY3BwICovOyB9OwogCQlGRTE2
Q0ZENjE2OUQxREVEMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kU3luYy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxNkNGRDIxNjlEMURFQzAwRDNB
MEM3IC8qIERhdGFiYXNlQmFja2VuZFN5bmMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlGRTIxM0IyOTE4MkJFOUY4MDBBRDJEMTIgLyogU291cmNl
SUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjEz
QjI4MTgyQkU5RjgwMEFEMkQxMiAvKiBTb3VyY2VJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzM3MUEyMTY3QzExRDQwMEVEQjc1MiAvKiBE
YXRhYmFzZUJhc2ljVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMzM3MUEwMTY3QzExRDQwMEVEQjc1MiAvKiBEYXRhYmFzZUJhc2ljVHlwZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTM2
RkQxNTE2Qzc4MjY1MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzZGRDExMTZDNzgyNjQwMEY4ODdD
MSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oICovOyB9OwogCQlGRTM2RkQxNjE2Qzc4MjY1MDBGODg3
QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNkZEMTIxNkM3ODI2NDAwRjg4N0MxIC8qIFNR
TFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmNwcCAqLzsgfTsKQEAgLTYyNzAsNiArNjI3MCw3IEBA
CiAJCUZFQkM1RjMxMTZCRDBDQzMwMDY1OUJEMyAvKiBEYXRhYmFzZUJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVCQzVGMkYxNkJEMENDMzAw
NjU5QkQzIC8qIERhdGFiYXNlQmFzZS5jcHAgKi87IH07CiAJCUZFQkM1RjMyMTZCRDBDQzMwMDY1
OUJEMyAvKiBEYXRhYmFzZUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFQkM1RjMwMTZCRDBDQzMwMDY1OUJEMyAvKiBEYXRhYmFzZUJhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUQxM0Qz
QTBDRUE5MzQ2MDBEODk0NjYgLyogRWRpdG9ySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEMTNEMzkwQ0VBOTM0NjAwRDg5NDY2IC8qIEVkaXRv
cklPUy5tbSAqLzsgfTsKKwkJRkVEQkZGMTYxODJCN0E4RDAwMTdGQTY0IC8qIEJyZWFrcG9pbnRJ
RC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEQkZG
MTQxODJCN0E4RDAwMTdGQTY0IC8qIEJyZWFrcG9pbnRJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFREVGODQxMTY3OTcxMDgwMDBFNDQ0QSAv
KiBEYXRhYmFzZVN0cmF0ZWd5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFREVGODNGMTY3OTcxMDgwMDBFNDQ0QSAvKiBEYXRhYmFzZVN0cmF0ZWd5
LmNwcCAqLzsgfTsKIAkJRkVERUY4NDIxNjc5NzEwODAwMEU0NDRBIC8qIERhdGFiYXNlU3RyYXRl
Z3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFREVG
ODQwMTY3OTcxMDgwMDBFNDQ0QSAvKiBEYXRhYmFzZVN0cmF0ZWd5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVFMTgxMTMxNkMzMTlFODAwMDg0
ODQ5IC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUUxODExMTE2QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJh
bnNhY3Rpb25CYWNrZW5kLmNwcCAqLzsgfTsKQEAgLTEzMzg4LDYgKzEzMzg5LDcgQEAKIAkJRkUx
NkNGRDAxNjlEMURFQzAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkUxNkNGRDExNjlEMURFQzAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZFN5
bmMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YWJhc2VCYWNr
ZW5kU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTZDRkQyMTY5RDFE
RUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERhdGFiYXNlQmFja2VuZFN5bmMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkUyMTNCMjgxODJCRTlGODAwQUQyRDEyIC8qIFNvdXJjZUlELmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUlELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMzM3MUEwMTY3QzExRDQwMEVEQjc1MiAvKiBEYXRhYmFzZUJhc2ljVHlwZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VCYXNpY1R5cGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzZGRDExMTZDNzgyNjQwMEY4ODdDMSAv
KiBDaGFuZ2VWZXJzaW9uRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
aGFuZ2VWZXJzaW9uRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTM2RkQx
MjE2Qzc4MjY0MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hp
bmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM0MTksNiArMTM0MjEsNyBA
QAogCQlGRUJDNUYyRjE2QkQwQ0MzMDA2NTlCRDMgLyogRGF0YWJhc2VCYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFiYXNlQmFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFQkM1RjMwMTZCRDBDQzMwMDY1OUJEMyAvKiBEYXRhYmFz
ZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VCYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRDEzRDM5MENFQTkzNDYwMEQ4OTQ2NiAv
KiBFZGl0b3JJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBF
ZGl0b3JJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFREJGRjE0MTgyQjdB
OEQwMDE3RkE2NCAvKiBCcmVha3BvaW50SUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQnJlYWtwb2ludElELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREVG
ODNGMTY3OTcxMDgwMDBFNDQ0QSAvKiBEYXRhYmFzZVN0cmF0ZWd5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFiYXNlU3RyYXRlZ3kuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRURFRjg0MDE2Nzk3MTA4MDAwRTQ0NEEgLyogRGF0YWJhc2VT
dHJhdGVneS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZVN0cmF0
ZWd5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRTE4MTExMTZDMzE5RTgwMDA4
NDg0OSAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE5NDE3LDYgKzE5NDIwLDcgQEAKIAkJQkMxQTM3OTMwOTdDNkZCMTAw
MTlGM0Q4IC8qIGpzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQlGRTIxM0IyODE4MkJFOUY4MDBBRDJEMTIgLyogU291cmNlSUQuaCAqLywKIAkJCQlCQ0NF
NThBNzEwNjFFODJGMDA4RkIzNUEgLyogQ2FsbGJhY2sgT2JqZWN0cyAqLywKIAkJCQlCQ0NFNThC
NDEwNjFFOTI1MDA4RkIzNUEgLyogQ29uc3RydWN0b3JzICovLAogCQkJCUJDNEVERUY3MEMwOEY0
MTQwMDdFREQ0OSAvKiBDdXN0b20gKi8sCkBAIC0xOTQyNCw2ICsxOTQyOCw3IEBACiAJCQkJOTNG
OEIzMDYwQTMwMEZFQTAwRjYxQUI4IC8qIENvZGVHZW5lcmF0b3JKUy5wbSAqLywKIAkJCQk0OUIz
NzYwQTE1QzZDNjg0MDA1OTEzMUQgLyogQXJyYXlWYWx1ZS5jcHAgKi8sCiAJCQkJNDlCMzc2MEIx
NUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuaCAqLywKKwkJCQlGRURCRkYxNDE4MkI3QThE
MDAxN0ZBNjQgLyogQnJlYWtwb2ludElELmggKi8sCiAJCQkJQkNENTMzNjMwRUQ2ODQ4OTAwODg3
NDY4IC8qIENhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggKi8sCiAJCQkJMzEyRDY3QjAxNTM1
NjkxRjAwNTYzRDBEIC8qIERpY3Rpb25hcnkuY3BwICovLAogCQkJCTMxNjAyM0VGMTUzMkM0MEMw
MEQ1MEZGNCAvKiBEaWN0aW9uYXJ5LmggKi8sCkBAIC0yMTg0NSw2ICsyMTg1MCw3IEBACiAJCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJOTMyQUQ3MDYx
N0VGQTJDNDAwMzhGOEZGIC8qIE1haW5GcmFtZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVEQkZG
MTYxODJCN0E4RDAwMTdGQTY0IC8qIEJyZWFrcG9pbnRJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkUxMTVGQUIxNjc5ODhDRDAwMjQ5MTM0IC8qIEFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTlBNTI4RTg0MTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVj
dHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEFBREVFMTZEMkMzNzQwMDAyNkZGQyAvKiBBYnN0
cmFjdFNRTFN0YXRlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTg4NCw2ICsyMTg5MCw3IEBA
CiAJCQkJQkNGN0U0OTExMzdDRDdDNzAwMUREQUU3IC8qIEFkanVzdFZpZXdTaXplT3JOb3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFu
c2Zvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCUNFREExMkQ3MTUyQ0ExQ0IwMEQ5RTA4RCAvKiBB
bHRlcm5hdGl2ZVRleHRDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMjEzQjI5MTgyQkU5
RjgwMEFEMkQxMiAvKiBTb3VyY2VJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UwOEMzRDIxNTJC
NTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUNFN0IyREIzMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRy
b2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDNFMTJCMDI2NzYwMEMxQTM1OSAvKiBB
bmFseXNlck5vZGUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvQnJlYWtwb2ludElELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvQnJlYWtwb2ludElELmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9CcmVha3BvaW50SUQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnJl
YWtwb2ludElEX2gKKyNkZWZpbmUgQnJlYWtwb2ludElEX2gKKworI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQorCisjaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEpTQzo6QnJlYWtwb2ludElEIEJyZWFrcG9pbnRJRDsK
K2NvbnN0IEJyZWFrcG9pbnRJRCBub0JyZWFrcG9pbnRJRCA9IEpTQzo6bm9CcmVha3BvaW50SUQ7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQorCisjZW5kaWYgLy8gQnJlYWtwb2ludElEX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDE1
ODg2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC01Myw0MiArNTMsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEZWJ1Z2dlckNhbGxGcmFtZVNjb3BlIHsK
LXB1YmxpYzoKLSAgICBEZWJ1Z2dlckNhbGxGcmFtZVNjb3BlKFNjcmlwdERlYnVnU2VydmVyJiBk
ZWJ1Z2dlcikKLSAgICAgICAgOiBtX2RlYnVnZ2VyKGRlYnVnZ2VyKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKCFtX2RlYnVnZ2VyLm1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lKTsKLSAgICAgICAg
aWYgKG1fZGVidWdnZXIubV9jdXJyZW50Q2FsbEZyYW1lKQotICAgICAgICAgICAgbV9kZWJ1Z2dl
ci5tX2N1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZSA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpjcmVhdGUo
ZGVidWdnZXIubV9jdXJyZW50Q2FsbEZyYW1lKTsKLSAgICB9Ci0KLSAgICB+RGVidWdnZXJDYWxs
RnJhbWVTY29wZSgpCi0gICAgewotICAgICAgICBpZiAobV9kZWJ1Z2dlci5tX2N1cnJlbnREZWJ1
Z2dlckNhbGxGcmFtZSkgewotICAgICAgICAgICAgbV9kZWJ1Z2dlci5tX2N1cnJlbnREZWJ1Z2dl
ckNhbGxGcmFtZS0+aW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgbV9kZWJ1Z2dlci5tX2N1cnJl
bnREZWJ1Z2dlckNhbGxGcmFtZSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgU2NyaXB0RGVidWdTZXJ2ZXImIG1fZGVidWdnZXI7Ci19OwotCi0KLVNjcmlwdERlYnVnU2Vy
dmVyOjpTY3JpcHREZWJ1Z1NlcnZlcigpCi0gICAgOiBtX2NhbGxpbmdMaXN0ZW5lcnMoZmFsc2Up
Ci0gICAgLCBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUoRG9udFBhdXNlT25FeGNlcHRpb25zKQot
ICAgICwgbV9wYXVzZU9uTmV4dFN0YXRlbWVudChmYWxzZSkKLSAgICAsIG1fcGF1c2VkKGZhbHNl
KQotICAgICwgbV9ydW5uaW5nTmVzdGVkTWVzc2FnZUxvb3AoZmFsc2UpCitTY3JpcHREZWJ1Z1Nl
cnZlcjo6U2NyaXB0RGVidWdTZXJ2ZXIoYm9vbCBpc0luV29ya2VyVGhyZWFkKQorICAgIDogRGVi
dWdnZXIoaXNJbldvcmtlclRocmVhZCkKICAgICAsIG1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2
ZW50cyh0cnVlKQotICAgICwgbV9icmVha3BvaW50c0FjdGl2YXRlZCh0cnVlKQotICAgICwgbV9w
YXVzZU9uQ2FsbEZyYW1lKDApCi0gICAgLCBtX2N1cnJlbnRDYWxsRnJhbWUoMCkKKyAgICAsIG1f
Y2FsbGluZ0xpc3RlbmVycyhmYWxzZSkKKyAgICAsIG1fcnVubmluZ05lc3RlZE1lc3NhZ2VMb29w
KGZhbHNlKQogICAgICwgbV9yZWNvbXBpbGVUaW1lcih0aGlzLCAmU2NyaXB0RGVidWdTZXJ2ZXI6
OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKQotICAgICwgbV9sYXN0RXhlY3V0ZWRMaW5lKC0xKQot
ICAgICwgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJRCgtMSkKIHsKIH0KIApAQCAtOTYsMTE3ICs2Niwz
MiBAQCBTY3JpcHREZWJ1Z1NlcnZlcjo6flNjcmlwdERlYnVnU2VydmVyKCkKIHsKIH0KIAotU3Ry
aW5nIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNl
SUQsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmIHNjcmlwdEJyZWFrcG9pbnQsIGludCogYWN0dWFs
TGluZU51bWJlciwgaW50KiBhY3R1YWxDb2x1bW5OdW1iZXIpCi17Ci0gICAgaW50cHRyX3Qgc291
cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7Ci0gICAgaWYgKCFzb3VyY2VJRFZhbHVl
KQotICAgICAgICByZXR1cm4gIiI7Ci0gICAgU291cmNlSURUb0JyZWFrcG9pbnRzTWFwOjppdGVy
YXRvciBpdCA9IG1fc291cmNlSURUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSURWYWx1ZSk7Ci0g
ICAgaWYgKGl0ID09IG1fc291cmNlSURUb0JyZWFrcG9pbnRzLmVuZCgpKQotICAgICAgICBpdCA9
IG1fc291cmNlSURUb0JyZWFrcG9pbnRzLnNldChzb3VyY2VJRFZhbHVlLCBMaW5lVG9CcmVha3Bv
aW50c01hcCgpKS5pdGVyYXRvcjsKLSAgICBMaW5lVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3Ig
YnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIpOwot
ICAgIGlmIChicmVha3NJdCA9PSBpdC0+dmFsdWUuZW5kKCkpCi0gICAgICAgIGJyZWFrc0l0ID0g
aXQtPnZhbHVlLnNldChzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIsIEJyZWFrcG9pbnRzSW5M
aW5lKCkpLml0ZXJhdG9yOwotCi0gICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9
IGJyZWFrc0l0LT52YWx1ZTsKLSAgICB1bnNpZ25lZCBicmVha3NDb3VudCA9IGJyZWFrc1ZlY3Rv
ci5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyZWFrc0NvdW50OyBpKysp
IHsKLSAgICAgICAgaWYgKGJyZWFrc1ZlY3Rvci5hdChpKS5jb2x1bW5OdW1iZXIgPT0gc2NyaXB0
QnJlYWtwb2ludC5jb2x1bW5OdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gIiI7Ci0gICAgfQot
ICAgIGJyZWFrc1ZlY3Rvci5hcHBlbmQoc2NyaXB0QnJlYWtwb2ludCk7Ci0gICAgaW5jTnVtYmVy
T2ZCcmVha3BvaW50cygpOwotCi0gICAgKmFjdHVhbExpbmVOdW1iZXIgPSBzY3JpcHRCcmVha3Bv
aW50LmxpbmVOdW1iZXI7Ci0gICAgKmFjdHVhbENvbHVtbk51bWJlciA9IHNjcmlwdEJyZWFrcG9p
bnQuY29sdW1uTnVtYmVyOwotICAgIHJldHVybiBzb3VyY2VJRCArICI6IiArIFN0cmluZzo6bnVt
YmVyKHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlcikgKyAiOiIgKyBTdHJpbmc6Om51bWJlcihz
Y3JpcHRCcmVha3BvaW50LmNvbHVtbk51bWJlcik7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SUQpCitCcmVha3Bv
aW50SUQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoU291cmNlSUQgc291cmNlSUQs
IGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmIHNjcmlwdEJyZWFrcG9pbnQsIHVuc2lnbmVkKiBhY3R1
YWxMaW5lTnVtYmVyLCB1bnNpZ25lZCogYWN0dWFsQ29sdW1uTnVtYmVyKQogewotICAgIFZlY3Rv
cjxTdHJpbmc+IHRva2VuczsKLSAgICBicmVha3BvaW50SUQuc3BsaXQoIjoiLCB0b2tlbnMpOwot
ICAgIGlmICh0b2tlbnMuc2l6ZSgpICE9IDMpCi0gICAgICAgIHJldHVybjsKLSAgICBib29sIHN1
Y2Nlc3M7Ci0gICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHRva2Vuc1swXS50b0ludFB0cigm
c3VjY2Vzcyk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgdW5zaWdu
ZWQgbGluZU51bWJlciA9IHRva2Vuc1sxXS50b1VJbnQoJnN1Y2Nlc3MpOwotICAgIGlmICghc3Vj
Y2VzcykKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGNvbHVtbk51bWJlciA9IHRva2Vu
c1syXS50b1VJbnQoJnN1Y2Nlc3MpOwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJu
OworICAgIGlmICghc291cmNlSUQpCisgICAgICAgIHJldHVybiBub0JyZWFrcG9pbnRJRDsKIAot
ICAgIFNvdXJjZUlEVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlEVG9C
cmVha3BvaW50cy5maW5kKHNvdXJjZUlEVmFsdWUpOwotICAgIGlmIChpdCA9PSBtX3NvdXJjZUlE
VG9CcmVha3BvaW50cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIExpbmVUb0JyZWFrcG9p
bnRzTWFwOjppdGVyYXRvciBicmVha3NJdCA9IGl0LT52YWx1ZS5maW5kKGxpbmVOdW1iZXIpOwot
ICAgIGlmIChicmVha3NJdCA9PSBpdC0+dmFsdWUuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEJyZWFrcG9pbnRzSW5MaW5lJiBicmVha3NWZWN0b3IgPSBicmVha3NJdC0+dmFsdWU7Ci0g
ICAgdW5zaWduZWQgYnJlYWtzQ291bnQgPSBicmVha3NWZWN0b3Iuc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBicmVha3NDb3VudDsgaSsrKSB7Ci0gICAgICAgIGlmIChicmVh
a3NWZWN0b3IuYXQoaSkuY29sdW1uTnVtYmVyID09IHN0YXRpY19jYXN0PGludD4oY29sdW1uTnVt
YmVyKSkgewotICAgICAgICAgICAgYnJlYWtzVmVjdG9yLnJlbW92ZShpKTsKLSAgICAgICAgICAg
IGRlY051bWJlck9mQnJlYWtwb2ludHMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisgICAgSlNDOjpCcmVha3BvaW50IGJyZWFrcG9pbnQoc291cmNlSUQsIHNjcmlwdEJyZWFrcG9p
bnQubGluZU51bWJlciwgc2NyaXB0QnJlYWtwb2ludC5jb2x1bW5OdW1iZXIsIHNjcmlwdEJyZWFr
cG9pbnQuY29uZGl0aW9uLCBzY3JpcHRCcmVha3BvaW50LmF1dG9Db250aW51ZSk7CisgICAgQnJl
YWtwb2ludElEIGlkID0gRGVidWdnZXI6OnNldEJyZWFrcG9pbnQoYnJlYWtwb2ludCwgKmFjdHVh
bExpbmVOdW1iZXIsICphY3R1YWxDb2x1bW5OdW1iZXIpOworICAgIGlmIChpZCAhPSBub0JyZWFr
cG9pbnRJRCAmJiAhc2NyaXB0QnJlYWtwb2ludC5hY3Rpb25zLmlzRW1wdHkoKSkgeworI2lmbmRl
ZiBOREVCVUcKKyAgICAgICAgQnJlYWtwb2ludElEVG9BY3Rpb25zTWFwOjppdGVyYXRvciBpdCA9
IG1fYnJlYWtwb2ludElEVG9BY3Rpb25zLmZpbmQoaWQpOworICAgICAgICBBU1NFUlQoaXQgPT0g
bV9icmVha3BvaW50SURUb0FjdGlvbnMuZW5kKCkpOworI2VuZGlmCisgICAgICAgIGNvbnN0IFZl
Y3RvcjxTY3JpcHRCcmVha3BvaW50QWN0aW9uPiAmYWN0aW9ucyA9IHNjcmlwdEJyZWFrcG9pbnQu
YWN0aW9uczsKKyAgICAgICAgbV9icmVha3BvaW50SURUb0FjdGlvbnMuc2V0KGlkLCBhY3Rpb25z
KTsKICAgICB9CisgICAgcmV0dXJuIGlkOwogfQogCi1ib29sIFNjcmlwdERlYnVnU2VydmVyOjpo
YXNCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24mIHBvc2l0
aW9uLCBTY3JpcHRCcmVha3BvaW50ICpoaXRCcmVha3BvaW50KSBjb25zdAordm9pZCBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludChCcmVha3BvaW50SUQgaWQpCiB7Ci0gICAgaWYg
KCFtX2JyZWFrcG9pbnRzQWN0aXZhdGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNT
RVJUKGlkICE9IG5vQnJlYWtwb2ludElEKTsKKyAgICBCcmVha3BvaW50SURUb0FjdGlvbnNNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9icmVha3BvaW50SURUb0FjdGlvbnMuZmluZChpZCk7CisgICAgaWYg
KGl0ICE9IG1fYnJlYWtwb2ludElEVG9BY3Rpb25zLmVuZCgpKQorICAgICAgICBtX2JyZWFrcG9p
bnRJRFRvQWN0aW9ucy5yZW1vdmUoaXQpOwogCi0gICAgU291cmNlSURUb0JyZWFrcG9pbnRzTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc291cmNlSURUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNl
SUQpOwotICAgIGlmIChpdCA9PSBtX3NvdXJjZUlEVG9CcmVha3BvaW50cy5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGxpbmUgPSBwb3NpdGlvbi5tX2xpbmUuemVyb0Jh
c2VkSW50KCk7Ci0gICAgaW50IGNvbHVtbiA9IHBvc2l0aW9uLm1fY29sdW1uLnplcm9CYXNlZElu
dCgpOwotICAgIGlmIChsaW5lIDwgMCB8fCBjb2x1bW4gPCAwKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBMaW5lVG9CcmVha3BvaW50c01hcDo6Y29uc3RfaXRlcmF0b3IgYnJlYWtzSXQg
PSBpdC0+dmFsdWUuZmluZChsaW5lKTsKLSAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnZhbHVlLmVu
ZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGhpdCA9IGZhbHNlOwotICAg
IGNvbnN0IEJyZWFrcG9pbnRzSW5MaW5lJiBicmVha3NWZWN0b3IgPSBicmVha3NJdC0+dmFsdWU7
Ci0gICAgdW5zaWduZWQgYnJlYWtzQ291bnQgPSBicmVha3NWZWN0b3Iuc2l6ZSgpOwotICAgIHVu
c2lnbmVkIGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGJyZWFrc0NvdW50OyBpKyspIHsKLSAgICAg
ICAgaW50IGJyZWFrTGluZSA9IGJyZWFrc1ZlY3Rvci5hdChpKS5saW5lTnVtYmVyOwotICAgICAg
ICBpbnQgYnJlYWtDb2x1bW4gPSBicmVha3NWZWN0b3IuYXQoaSkuY29sdW1uTnVtYmVyOwotICAg
ICAgICAvLyBTaW5jZSBmcm9udGVuZCB0cnVuY2F0ZXMgdGhlIGluZGVudCwgdGhlIGZpcnN0IHN0
YXRlbWVudCBpbiBhIGxpbmUgbXVzdCBtYXRjaCB0aGUgYnJlYWtwb2ludCAobGluZSwwKS4KLSAg
ICAgICAgaWYgKChsaW5lICE9IG1fbGFzdEV4ZWN1dGVkTGluZSAmJiBsaW5lID09IGJyZWFrTGlu
ZSAmJiAhYnJlYWtDb2x1bW4pCi0gICAgICAgICAgICB8fCAobGluZSA9PSBicmVha0xpbmUgJiYg
Y29sdW1uID09IGJyZWFrQ29sdW1uKSkgewotICAgICAgICAgICAgaGl0ID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghaGl0KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaGl0QnJlYWtwb2ludCkKLSAgICAgICAgKmhpdEJyZWFr
cG9pbnQgPSBicmVha3NWZWN0b3IuYXQoaSk7Ci0KLSAgICAvLyBBbiBlbXB0eSBjb25kaXRpb24g
Y291bnRzIGFzIG5vIGNvbmRpdGlvbiB3aGljaCBpcyBlcXVpdmFsZW50IHRvICJ0cnVlIi4KLSAg
ICBpZiAoYnJlYWtzVmVjdG9yLmF0KGkpLmNvbmRpdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgSlNWYWx1ZSBleGNlcHRpb247Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGVXaXRoQ2FsbEZyYW1lKG1fY3VycmVudENhbGxG
cmFtZSwgYnJlYWtzVmVjdG9yLmF0KGkpLmNvbmRpdGlvbiwgZXhjZXB0aW9uKTsKLSAgICBpZiAo
ZXhjZXB0aW9uKSB7Ci0gICAgICAgIC8vIEFuIGVycm9uZW91cyBjb25kaXRpb24gY291bnRzIGFz
ICJmYWxzZSIuCi0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihtX2N1cnJlbnRDYWxsRnJhbWUsIGV4
Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3Vs
dC50b0Jvb2xlYW4obV9jdXJyZW50Q2FsbEZyYW1lKTsKKyAgICBEZWJ1Z2dlcjo6cmVtb3ZlQnJl
YWtwb2ludChpZCk7CiB9CiAKIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OmV2YWx1YXRlQnJlYWtw
b2ludEFjdGlvbihjb25zdCBTY3JpcHRCcmVha3BvaW50QWN0aW9uJiBicmVha3BvaW50QWN0aW9u
KSBjb25zdApAQCAtMjM0LDg1ICsxMTksMTAgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZh
bHVhdGVCcmVha3BvaQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNjcmlwdERlYnVnU2Vy
dmVyOjpldmFsdWF0ZUJyZWFrcG9pbnRBY3Rpb25zKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmIGJy
ZWFrcG9pbnQpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBicmVha3BvaW50
LmFjdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFldmFsdWF0ZUJyZWFrcG9pbnRB
Y3Rpb24oYnJlYWtwb2ludC5hY3Rpb25zW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6
Y2xlYXJCcmVha3BvaW50cygpCiB7Ci0gICAgbV9zb3VyY2VJRFRvQnJlYWtwb2ludHMuY2xlYXIo
KTsKLSAgICB1cGRhdGVOdW1iZXJPZkJyZWFrcG9pbnRzKDApOwotfQotCi12b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpzZXRCcmVha3BvaW50c0FjdGl2YXRlZChib29sIGFjdGl2YXRlZCkKLXsKLSAg
ICBtX2JyZWFrcG9pbnRzQWN0aXZhdGVkID0gYWN0aXZhdGVkOwotfQotCi12b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNlcHRpb25zU3Rh
dGUgcGF1c2UpCi17Ci0gICAgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID0gcGF1c2U7Ci0gICAg
c2V0TmVlZHNFeGNlcHRpb25DYWxsYmFja3MocGF1c2UgIT0gRG9udFBhdXNlT25FeGNlcHRpb25z
KTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQo
Ym9vbCBwYXVzZSkKLXsKLSAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gcGF1c2U7Ci0gICAg
aWYgKHBhdXNlKQotICAgICAgICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKLX0KLQotdm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6YnJlYWtQcm9ncmFtKCkKLXsKLSAgICBpZiAobV9wYXVzZWQgfHwgIW1f
Y3VycmVudENhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXVzZU9uTmV4dFN0
YXRlbWVudCA9IHRydWU7Ci0gICAgc2V0U2hvdWxkUGF1c2UodHJ1ZSk7Ci0gICAgcGF1c2VJZk5l
ZWRlZChtX2N1cnJlbnRDYWxsRnJhbWUpOwotfQotCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpj
b250aW51ZVByb2dyYW0oKQotewotICAgIGlmICghbV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSBmYWxzZTsKLSAgICBtX2RvbmVQcm9jZXNz
aW5nRGVidWdnZXJFdmVudHMgPSB0cnVlOwotfQotCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpz
dGVwSW50b1N0YXRlbWVudCgpCi17Ci0gICAgaWYgKCFtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7Ci0gICAgc2V0U2hvdWxkUGF1
c2UodHJ1ZSk7Ci0gICAgbV9kb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzID0gdHJ1ZTsKLX0K
LQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcE92ZXJTdGF0ZW1lbnQoKQotewotICAgIGlm
ICghbV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9
IG1fY3VycmVudENhbGxGcmFtZTsKLSAgICBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMg
PSB0cnVlOwotfQotCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzdGVwT3V0T2ZGdW5jdGlvbigp
Ci17Ci0gICAgaWYgKCFtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXVzZU9u
Q2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lID8gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZVNraXBwaW5nVk1FbnRyeVNlbnRpbmVsKCkgOiAwOwotICAgIG1fZG9uZVByb2Nlc3Np
bmdEZWJ1Z2dlckV2ZW50cyA9IHRydWU7CisgICAgRGVidWdnZXI6OmNsZWFyQnJlYWtwb2ludHMo
KTsKKyAgICBtX2JyZWFrcG9pbnRJRFRvQWN0aW9ucy5jbGVhcigpOwogfQogCiBib29sIFNjcmlw
dERlYnVnU2VydmVyOjpjYW5TZXRTY3JpcHRTb3VyY2UoKQpAQCAtMzMzLDE1ICsxNDMsOSBAQCB2
b2lkIFNjcmlwdERlYnVnU2VydmVyOjp1cGRhdGVDYWxsU3RhY2soCiAgICAgLy8gRklYTUUoNDAz
MDApOiBpbXBsZW1lbnQgdGhpcy4KIH0KIAotRGVidWdnZXJDYWxsRnJhbWUqIFNjcmlwdERlYnVn
U2VydmVyOjpjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUoKSBjb25zdAotewotICAgIEFTU0VSVCht
X2N1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZSk7Ci0gICAgcmV0dXJuIG1fY3VycmVudERlYnVnZ2Vy
Q2FsbEZyYW1lLmdldCgpOwotfQotCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERp
ZFBhdXNlKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyKQogewotICAgIEFTU0VSVChtX3Bh
dXNlZCk7CisgICAgQVNTRVJUKGlzUGF1c2VkKCkpOwogICAgIERlYnVnZ2VyQ2FsbEZyYW1lKiBk
ZWJ1Z2dlckNhbGxGcmFtZSA9IGN1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZSgpOwogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBkZWJ1Z2dlckNhbGxGcmFtZS0+c2NvcGUoKS0+Z2xv
YmFsT2JqZWN0KCk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIHN0YXRlID0gZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7CkBAIC0zNjEsMTYgKzE2NSwxMSBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVy
OjpkaXNwYXRjaERpZFBhdXNlCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZENv
bnRpbnVlKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyKQogewogICAgIGxpc3RlbmVyLT5k
aWRDb250aW51ZSgpOwotICAgIGlmICghbV9wYXVzZU9uTmV4dFN0YXRlbWVudCAmJiAhbV9wYXVz
ZU9uQ2FsbEZyYW1lKSB7Ci0gICAgICAgIHNldFNob3VsZFBhdXNlKGZhbHNlKTsKLSAgICAgICAg
aWYgKCFuZWVkc09wRGVidWdDYWxsYmFja3MoKSkKLSAgICAgICAgICAgIG1fY3VycmVudENhbGxG
cmFtZSA9IDA7Ci0gICAgfQogfQogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERp
ZFBhcnNlU291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIFNvdXJjZVByb3ZpZGVy
KiBzb3VyY2VQcm92aWRlciwgYm9vbCBpc0NvbnRlbnRTY3JpcHQpCiB7Ci0gICAgU3RyaW5nIHNv
dXJjZUlEID0gU3RyaW5nOjpudW1iZXIoc291cmNlUHJvdmlkZXItPmFzSUQoKSk7CisgICAgU291
cmNlSUQgc291cmNlSUQgPSBzb3VyY2VQcm92aWRlci0+YXNJRCgpOwogCiAgICAgU2NyaXB0RGVi
dWdMaXN0ZW5lcjo6U2NyaXB0IHNjcmlwdDsKICAgICBzY3JpcHQudXJsID0gc291cmNlUHJvdmlk
ZXItPnVybCgpOwpAQCAtNDE4LDE5ICsyMTcsNiBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpp
c0NvbnRlbnRTY3JpcHQoCiAgICAgcmV0dXJuICZjdXJyZW50V29ybGQoZXhlYykgIT0gJm1haW5U
aHJlYWROb3JtYWxXb3JsZCgpOwogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkZXRhY2go
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICAvLyBJZiB3ZSdyZSBkZXRhY2hp
bmcgZnJvbSB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBnbG9iYWwgb2JqZWN0LCBtYW51YWxseSB0
ZWFyIGRvd24gb3VyCi0gICAgLy8gc3RhY2ssIHNpbmNlIHdlIHdvbid0IGdldCBmdXJ0aGVyIGRl
YnVnZ2VyIGNhbGxiYWNrcyB0byBkbyBzby4gQWxzbywgcmVzdW1lIGV4ZWN1dGlvbiwKLSAgICAv
LyBzaW5jZSB0aGVyZSdzIG5vIHBvaW50IGluIHN0YXlpbmcgcGF1c2VkIG9uY2UgYSB3aW5kb3cg
Y2xvc2VzLgotICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgJiYgbV9jdXJyZW50Q2FsbEZyYW1l
LT5keW5hbWljR2xvYmFsT2JqZWN0KCkgPT0gZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIG1fY3Vy
cmVudENhbGxGcmFtZSA9IDA7Ci0gICAgICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IDA7Ci0gICAg
ICAgIGNvbnRpbnVlUHJvZ3JhbSgpOwotICAgIH0KLSAgICBEZWJ1Z2dlcjo6ZGV0YWNoKGdsb2Jh
bE9iamVjdCk7Ci19Ci0KIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNvdXJjZVBhcnNlZChFeGVj
U3RhdGUqIGV4ZWMsIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciwgaW50IGVycm9yTGlu
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgaWYgKG1fY2FsbGluZ0xpc3Rl
bmVycykKQEAgLTQ3NSw1NyArMjYxLDM1IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3Bh
dGNoRnVuY3Rpb24KICAgICBtX2NhbGxpbmdMaXN0ZW5lcnMgPSBmYWxzZTsKIH0KIAotdm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6dXBkYXRlQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKQor
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6bm90aWZ5RG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50
cygpCiB7Ci0gICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gY2FsbEZyYW1lOwotICAgIGludHB0cl90
IHNvdXJjZUlEID0gRGVidWdnZXJDYWxsRnJhbWU6OnNvdXJjZUlERm9yQ2FsbEZyYW1lKGNhbGxG
cmFtZSk7Ci0gICAgaWYgKG1fbGFzdEV4ZWN1dGVkU291cmNlSUQgIT0gc291cmNlSUQpIHsKLSAg
ICAgICAgbV9sYXN0RXhlY3V0ZWRMaW5lID0gLTE7Ci0gICAgICAgIG1fbGFzdEV4ZWN1dGVkU291
cmNlSUQgPSBzb3VyY2VJRDsKLSAgICB9CisgICAgbV9kb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZl
bnRzID0gdHJ1ZTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6dXBkYXRlQ2FsbEZyYW1l
QW5kUGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK2Jvb2wgU2NyaXB0RGVidWdT
ZXJ2ZXI6Om5lZWRQYXVzZUhhbmRsaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7
Ci0gICAgdXBkYXRlQ2FsbEZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgcGF1c2VJZk5lZWRlZChjYWxs
RnJhbWUpOwotICAgIGlmICghbmVlZHNPcERlYnVnQ2FsbGJhY2tzKCkpCi0gICAgICAgIG1fY3Vy
cmVudENhbGxGcmFtZSA9IDA7CisgICAgcmV0dXJuICEhZ2V0TGlzdGVuZXJzRm9yR2xvYmFsT2Jq
ZWN0KGdsb2JhbE9iamVjdCk7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlSWZO
ZWVkZWQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpoYW5k
bGVCcmVha3BvaW50SGl0KGNvbnN0IEpTQzo6QnJlYWtwb2ludCYgYnJlYWtwb2ludCkKIHsKLSAg
ICBpZiAobV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLSAKLSAgICBKU0dsb2JhbE9iamVjdCog
ZHluYW1pY0dsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOwot
ICAgIGlmICghZ2V0TGlzdGVuZXJzRm9yR2xvYmFsT2JqZWN0KGR5bmFtaWNHbG9iYWxPYmplY3Qp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQ7Ci0g
ICAgYm9vbCBkaWRIaXRCcmVha3BvaW50ID0gZmFsc2U7Ci0gICAgYm9vbCBwYXVzZU5vdyA9IG1f
cGF1c2VPbk5leHRTdGF0ZW1lbnQ7Ci0gICAgcGF1c2VOb3cgfD0gKG1fcGF1c2VPbkNhbGxGcmFt
ZSA9PSBtX2N1cnJlbnRDYWxsRnJhbWUpOwotCi0gICAgaW50cHRyX3Qgc291cmNlSUQgPSBEZWJ1
Z2dlckNhbGxGcmFtZTo6c291cmNlSURGb3JDYWxsRnJhbWUobV9jdXJyZW50Q2FsbEZyYW1lKTsK
LSAgICBUZXh0UG9zaXRpb24gcG9zaXRpb24gPSBEZWJ1Z2dlckNhbGxGcmFtZTo6cG9zaXRpb25G
b3JDYWxsRnJhbWUobV9jdXJyZW50Q2FsbEZyYW1lKTsKLSAgICBwYXVzZU5vdyB8PSBkaWRIaXRC
cmVha3BvaW50ID0gaGFzQnJlYWtwb2ludChzb3VyY2VJRCwgcG9zaXRpb24sICZicmVha3BvaW50
KTsKLSAgICBtX2xhc3RFeGVjdXRlZExpbmUgPSBwb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50
KCk7Ci0gICAgaWYgKCFwYXVzZU5vdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGVidWdnZXJD
YWxsRnJhbWVTY29wZSBkZWJ1Z2dlckNhbGxGcmFtZVNjb3BlKCp0aGlzKTsKLQotICAgIGlmIChk
aWRIaXRCcmVha3BvaW50KSB7Ci0gICAgICAgIGV2YWx1YXRlQnJlYWtwb2ludEFjdGlvbnMoYnJl
YWtwb2ludCk7Ci0gICAgICAgIGlmIChicmVha3BvaW50LmF1dG9Db250aW51ZSkKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICBCcmVha3BvaW50SURUb0FjdGlvbnNNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9icmVha3BvaW50SURUb0FjdGlvbnMuZmluZChicmVha3BvaW50LmlkKTsKKyAgICBpZiAoaXQg
IT0gbV9icmVha3BvaW50SURUb0FjdGlvbnMuZW5kKCkpIHsKKyAgICAgICAgQnJlYWtwb2ludEFj
dGlvbnMmIGFjdGlvbnMgPSBpdC0+dmFsdWU7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYWN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCFldmFsdWF0ZUJyZWFr
cG9pbnRBY3Rpb24oYWN0aW9uc1tpXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CiAgICAgfQorfQogCi0gICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gMDsKLSAgICBtX3BhdXNl
T25OZXh0U3RhdGVtZW50ID0gZmFsc2U7Ci0gICAgbV9wYXVzZWQgPSB0cnVlOwordm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6aGFuZGxlRXhjZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uKSBjb25zdAoreworICAgIHJl
cG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOworfQogCit2b2lkIFNjcmlwdERlYnVnU2Vy
dmVyOjpoYW5kbGVQYXVzZShEZWJ1Z2dlcjo6UmVhc29uRm9yUGF1c2UsIEpTR2xvYmFsT2JqZWN0
KiBkeW5hbWljR2xvYmFsT2JqZWN0KQorewogICAgIGRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVy
cygmU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2UsIGR5bmFtaWNHbG9iYWxPYmpl
Y3QpOwogICAgIGRpZFBhdXNlKGR5bmFtaWNHbG9iYWxPYmplY3QpOwogCkBAIC01MzgsODcgKzMw
Miw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlSWZOZWVkZWQoQ2EKIAogICAgIGRp
ZENvbnRpbnVlKGR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgIGRpc3BhdGNoRnVuY3Rpb25Ub0xp
c3RlbmVycygmU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkQ29udGludWUsIGR5bmFtaWNH
bG9iYWxPYmplY3QpOwotCi0gICAgbV9wYXVzZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6Y2FsbEV2ZW50KENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIGlmICgh
bV9wYXVzZWQpCi0gICAgICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZy
YW1lKTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6YXRTdGF0ZW1lbnQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCi17Ci0gICAgaWYgKCFtX3BhdXNlZCkKLSAgICAgICAgdXBkYXRlQ2FsbEZy
YW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwogfQotCi12b2lkIFNjcmlwdERlYnVnU2Vy
dmVyOjpyZXR1cm5FdmVudChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBpZiAobV9wYXVz
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVk
ZWQoY2FsbEZyYW1lKTsKLQotICAgIC8vIGRldGFjaCBtYXkgaGF2ZSBiZWVuIGNhbGxlZCBkdXJp
bmcgcGF1c2VJZk5lZWRlZAotICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBUcmVhdCBzdGVwcGluZyBvdmVyIGEgcmV0dXJuIHN0YXRlbWVudCBs
aWtlIHN0ZXBwaW5nIG91dC4KLSAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VP
bkNhbGxGcmFtZSkKLSAgICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZy
YW1lLT5jYWxsZXJGcmFtZVNraXBwaW5nVk1FbnRyeVNlbnRpbmVsKCk7Ci0KLSAgICBtX2N1cnJl
bnRDYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1lU2tpcHBpbmdWTUVu
dHJ5U2VudGluZWwoKTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXhjZXB0aW9uKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlLCBib29sIGhhc0hhbmRsZXIpCi17Ci0gICAgaWYg
KG1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXVzZU9uRXhjZXB0aW9u
c1N0YXRlID09IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8IChtX3BhdXNlT25FeGNlcHRpb25zU3Rh
dGUgPT0gUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAmJiAhaGFzSGFuZGxlcikpIHsKLSAgICAg
ICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7Ci0gICAgICAgIHNldFNob3VsZFBhdXNl
KHRydWUpOwotICAgIH0KLQotICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY2Fs
bEZyYW1lKTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6d2lsbEV4ZWN1dGVQcm9ncmFt
KENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIGlmICghbV9wYXVzZWQpCi0gICAgICAgIHVw
ZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKLX0KLQotdm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6ZGlkRXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17
Ci0gICAgaWYgKG1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1cGRhdGVDYWxsRnJh
bWVBbmRQYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7Ci0KLSAgICAvLyBUcmVhdCBzdGVwcGluZyBv
dmVyIHRoZSBlbmQgb2YgYSBwcm9ncmFtIGxpa2Ugc3RlcHBpbmcgb3V0LgotICAgIGlmICghbV9j
dXJyZW50Q2FsbEZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fY3VycmVudENhbGxG
cmFtZSA9PSBtX3BhdXNlT25DYWxsRnJhbWUpIHsKLSAgICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1l
ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZVNraXBwaW5nVk1FbnRyeVNlbnRpbmVs
KCk7Ci0gICAgICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNh
bGxlckZyYW1lU2tpcHBpbmdWTUVudHJ5U2VudGluZWwoKTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlkUmVhY2hCcmVha3BvaW50KENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAg
IGlmIChtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXVzZU9uTmV4dFN0YXRl
bWVudCA9IHRydWU7Ci0gICAgc2V0U2hvdWxkUGF1c2UodHJ1ZSk7Ci0gICAgdXBkYXRlQ2FsbEZy
YW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwotfQotCiB2b2lkIFNjcmlwdERlYnVnU2Vy
dmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKQogewogICAgIG1fcmVjb21waWxlVGlt
ZXIuc3RhcnRPbmVTaG90KDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAxNTg4NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMyLDggKzMyLDEwIEBACiAK
ICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKIAotI2luY2x1ZGUgIlNjcmlwdERlYnVn
TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJCcmVha3BvaW50SUQuaCIKICNpbmNsdWRlICJTY3JpcHRC
cmVha3BvaW50LmgiCisjaW5jbHVkZSAiU2NyaXB0RGVidWdMaXN0ZW5lci5oIgorI2luY2x1ZGUg
IlNvdXJjZUlELmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDxkZWJ1Z2dlci9EZWJ1
Z2dlci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC01NCwzMCArNTYsMTIgQEAgY2xh
c3MgU2NyaXB0RGVidWdMaXN0ZW5lcjsKIGNsYXNzIFNjcmlwdE9iamVjdDsKIGNsYXNzIFNjcmlw
dFZhbHVlOwogCi1jbGFzcyBTY3JpcHREZWJ1Z1NlcnZlciA6IHByb3RlY3RlZCBKU0M6OkRlYnVn
Z2VyIHsKK2NsYXNzIFNjcmlwdERlYnVnU2VydmVyIDogcHVibGljIEpTQzo6RGVidWdnZXIgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcmlwdERlYnVnU2VydmVyKTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgU3RyaW5nIHNldEJyZWFrcG9pbnQoY29uc3QgU3Ry
aW5nJiBzb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYsIGludCogYWN0dWFsTGluZU51
bWJlciwgaW50KiBhY3R1YWxDb2x1bW5OdW1iZXIpOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2lu
dChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJRCk7CisgICAgQnJlYWtwb2ludElEIHNldEJyZWFr
cG9pbnQoU291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmLCB1bnNpZ25lZCogYWN0dWFs
TGluZU51bWJlciwgdW5zaWduZWQqIGFjdHVhbENvbHVtbk51bWJlcik7CisgICAgdm9pZCByZW1v
dmVCcmVha3BvaW50KEJyZWFrcG9pbnRJRCk7CiAgICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7
Ci0gICAgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChib29sIGFjdGl2YXRlZCk7Ci0gICAg
dm9pZCBhY3RpdmF0ZUJyZWFrcG9pbnRzKCkgeyBzZXRCcmVha3BvaW50c0FjdGl2YXRlZCh0cnVl
KTsgfQotICAgIHZvaWQgZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCkgeyBzZXRCcmVha3BvaW50c0Fj
dGl2YXRlZChmYWxzZSk7IH0KLQotICAgIGVudW0gUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSB7Ci0g
ICAgICAgIERvbnRQYXVzZU9uRXhjZXB0aW9ucywKLSAgICAgICAgUGF1c2VPbkFsbEV4Y2VwdGlv
bnMsCi0gICAgICAgIFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnMKLSAgICB9OwotICAgIFBhdXNl
T25FeGNlcHRpb25zU3RhdGUgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZTsgfQotICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKTsKLQotICAgIHZvaWQgc2V0UGF1c2VPbk5l
eHRTdGF0ZW1lbnQoYm9vbCBwYXVzZSk7Ci0gICAgdm9pZCBicmVha1Byb2dyYW0oKTsKLSAgICB2
b2lkIGNvbnRpbnVlUHJvZ3JhbSgpOwotICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnQoKTsKLSAg
ICB2b2lkIHN0ZXBPdmVyU3RhdGVtZW50KCk7Ci0gICAgdm9pZCBzdGVwT3V0T2ZGdW5jdGlvbigp
OwogCiAgICAgYm9vbCBjYW5TZXRTY3JpcHRTb3VyY2UoKTsKICAgICBib29sIHNldFNjcmlwdFNv
dXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIG5ld0NvbnRlbnQsIGJv
b2wgcHJldmlldywgU3RyaW5nKiBlcnJvciwgU2NyaXB0VmFsdWUqIG5ld0NhbGxGcmFtZXMsIFNj
cmlwdE9iamVjdCogcmVzdWx0KTsKQEAgLTk0LDcgKzc4LDYgQEAgcHVibGljOgogICAgICAgICAv
LyBGSVhNRSh3ZWJraXQub3JnL2IvODIyMDMpOiBJbXBsZW1lbnQgcHJlcHJvY2Vzc29yLgogICAg
IH0KIAotICAgIGJvb2wgaXNQYXVzZWQoKSB7IHJldHVybiBtX3BhdXNlZDsgfQogICAgIGJvb2wg
cnVubmluZ05lc3RlZE1lc3NhZ2VMb29wKCkgeyByZXR1cm4gbV9ydW5uaW5nTmVzdGVkTWVzc2Fn
ZUxvb3A7IH0KIAogICAgIHZvaWQgY29tcGlsZVNjcmlwdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIFN0cmluZyogc2Ny
aXB0SUQsIFN0cmluZyogZXhjZXB0aW9uTWVzc2FnZSk7CkBAIC0xMTIsNyArOTUsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdHlwZWRlZiBIYXNoU2V0PFNjcmlwdERlYnVnTGlzdGVuZXIqPiBMaXN0ZW5l
clNldDsKICAgICB0eXBlZGVmIHZvaWQgKFNjcmlwdERlYnVnU2VydmVyOjoqSmF2YVNjcmlwdEV4
ZWN1dGlvbkNhbGxiYWNrKShTY3JpcHREZWJ1Z0xpc3RlbmVyKik7CiAKLSAgICBTY3JpcHREZWJ1
Z1NlcnZlcigpOworICAgIFNjcmlwdERlYnVnU2VydmVyKGJvb2wgaXNJbldvcmtlclRocmVhZCA9
IGZhbHNlKTsKICAgICB+U2NyaXB0RGVidWdTZXJ2ZXIoKTsKIAogICAgIHZpcnR1YWwgTGlzdGVu
ZXJTZXQqIGdldExpc3RlbmVyc0Zvckdsb2JhbE9iamVjdChKU0M6OkpTR2xvYmFsT2JqZWN0Kikg
PSAwOwpAQCAtMTIzLDkgKzEwNiw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgYm9vbCBp
c0NvbnRlbnRTY3JpcHQoSlNDOjpFeGVjU3RhdGUqKTsKIAotICAgIGJvb2wgaGFzQnJlYWtwb2lu
dChpbnRwdHJfdCBzb3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uJiwgU2NyaXB0QnJlYWtwb2lu
dCogaGl0QnJlYWtwb2ludCkgY29uc3Q7CiAgICAgYm9vbCBldmFsdWF0ZUJyZWFrcG9pbnRBY3Rp
b24oY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYpIGNvbnN0OwotICAgIGJvb2wgZXZhbHVh
dGVCcmVha3BvaW50QWN0aW9ucyhjb25zdCBTY3JpcHRCcmVha3BvaW50JikgY29uc3Q7CiAKICAg
ICB2b2lkIGRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycyhKYXZhU2NyaXB0RXhlY3V0aW9uQ2Fs
bGJhY2ssIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICB2b2lkIGRpc3BhdGNoRnVuY3Rpb25U
b0xpc3RlbmVycyhjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBKYXZhU2NyaXB0RXhlY3V0
aW9uQ2FsbGJhY2sgY2FsbGJhY2spOwpAQCAtMTM0LDQ4ICsxMTUsMjUgQEAgcHJvdGVjdGVkOgog
ICAgIHZvaWQgZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZShjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVu
ZXJzLCBKU0M6OlNvdXJjZVByb3ZpZGVyKiwgYm9vbCBpc0NvbnRlbnRTY3JpcHQpOwogICAgIHZv
aWQgZGlzcGF0Y2hGYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5l
cnMsIEpTQzo6U291cmNlUHJvdmlkZXIqLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSk7CiAKLSAgICAvLyBUaGVzZSB1cGRhdGUgZnVuY3Rpb25zIGFyZSBvbmx5IG5l
ZWRlZCBiZWNhdXNlIG91ciBjdXJyZW50IGJyZWFrcG9pbnRzIGFyZQotICAgIC8vIGtleSdlZCBv
ZmYgdGhlIHNvdXJjZSBwb3NpdGlvbiBpbnN0ZWFkIG9mIHRoZSBieXRlY29kZSBQQy4gVGhpcyBl
bnN1cmVzCi0gICAgLy8gdGhhdCB3ZSBkb24ndCBicmVhayBvbiB0aGUgc2FtZSBsaW5lIG1vcmUg
dGhhbiBvbmNlLiBPbmNlIHdlIHN3aXRjaCB0byBhCi0gICAgLy8gYnl0ZWNvZGUgUEMga2V5J2Vk
IGJyZWFrcG9pbnQsIHdlIHdpbGwgbm90IG5lZWQgdGhlc2UgYW55bW9yZSBhbmQgc2hvdWxkCi0g
ICAgLy8gYmUgYWJsZSB0byByZW1vdmUgdGhlbS4KLSAgICB2b2lkIHVwZGF0ZUNhbGxGcmFtZShK
U0M6OkNhbGxGcmFtZSopOwotICAgIHZvaWQgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRl
ZChKU0M6OkNhbGxGcmFtZSopOwotICAgIHZvaWQgcGF1c2VJZk5lZWRlZChKU0M6OkNhbGxGcmFt
ZSopOwotCi0gICAgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSogY3VycmVudERlYnVnZ2VyQ2FsbEZy
YW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNvdXJjZVBhcnNlZChKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6U291cmNlUHJvdmlkZXIqLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVy
cm9yTXNnKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goSlNDOjpKU0dsb2Jh
bE9iamVjdCopIE9WRVJSSURFOworICAgIGJvb2wgbV9kb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZl
bnRzOwogCi0gICAgdmlydHVhbCB2b2lkIHNvdXJjZVBhcnNlZChKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6U291cmNlUHJvdmlkZXIqLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTXNn
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsbEV2ZW50KEpTQzo6Q2FsbEZyYW1lKikg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGF0U3RhdGVtZW50KEpTQzo6Q2FsbEZyYW1lKikg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJldHVybkV2ZW50KEpTQzo6Q2FsbEZyYW1lKikg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihKU0M6OkNhbGxGcmFtZSosIEpT
Qzo6SlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgYm9vbCBoYXNIYW5kbGVyKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKEpTQzo6Q2FsbEZyYW1lKikgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKEpTQzo6Q2FsbEZyYW1lKikg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlYWNoQnJlYWtwb2ludChKU0M6OkNhbGxG
cmFtZSopIE9WRVJSSURFOwotCi0gICAgdHlwZWRlZiBWZWN0b3I8U2NyaXB0QnJlYWtwb2ludD4g
QnJlYWtwb2ludHNJbkxpbmU7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGludCwgQnJlYWtwb2ludHNJ
bkxpbmUsIFdURjo6SW50SGFzaDxpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPGludD4+IExpbmVUb0JyZWFrcG9pbnRzTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRw
dHJfdCwgTGluZVRvQnJlYWtwb2ludHNNYXA+IFNvdXJjZUlEVG9CcmVha3BvaW50c01hcDsKK3By
aXZhdGU6CisgICAgdHlwZWRlZiBWZWN0b3I8U2NyaXB0QnJlYWtwb2ludEFjdGlvbj4gQnJlYWtw
b2ludEFjdGlvbnM7CisgICAgdHlwZWRlZiBIYXNoTWFwPEJyZWFrcG9pbnRJRCwgQnJlYWtwb2lu
dEFjdGlvbnM+IEJyZWFrcG9pbnRJRFRvQWN0aW9uc01hcDsKKworICAgIHZpcnR1YWwgYm9vbCBu
ZWVkUGF1c2VIYW5kbGluZyhKU0M6OkpTR2xvYmFsT2JqZWN0KikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUJyZWFrcG9pbnRIaXQoY29uc3QgSlNDOjpCcmVha3BvaW50JikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRp
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24pIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQYXVzZShKU0M6OkRlYnVnZ2VyOjpSZWFzb25G
b3JQYXVzZSwgSlNDOjpKU0dsb2JhbE9iamVjdCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCkgT1ZFUlJJREU7CiAKICAgICBi
b29sIG1fY2FsbGluZ0xpc3RlbmVyczsKLSAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIG1fcGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZTsKLSAgICBib29sIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQ7Ci0g
ICAgYm9vbCBtX3BhdXNlZDsKICAgICBib29sIG1fcnVubmluZ05lc3RlZE1lc3NhZ2VMb29wOwot
ICAgIGJvb2wgbV9kb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzOwotICAgIGJvb2wgbV9icmVh
a3BvaW50c0FjdGl2YXRlZDsKLSAgICBKU0M6OkNhbGxGcmFtZSogbV9wYXVzZU9uQ2FsbEZyYW1l
OwotICAgIEpTQzo6Q2FsbEZyYW1lKiBtX2N1cnJlbnRDYWxsRnJhbWU7Ci0gICAgUmVmUHRyPEpT
Qzo6RGVidWdnZXJDYWxsRnJhbWU+IG1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lOwotICAgIFNv
dXJjZUlEVG9CcmVha3BvaW50c01hcCBtX3NvdXJjZUlEVG9CcmVha3BvaW50czsKKyAgICBCcmVh
a3BvaW50SURUb0FjdGlvbnNNYXAgbV9icmVha3BvaW50SURUb0FjdGlvbnM7CiAgICAgVGltZXI8
U2NyaXB0RGVidWdTZXJ2ZXI+IG1fcmVjb21waWxlVGltZXI7CiAKLSAgICBpbnQgbV9sYXN0RXhl
Y3V0ZWRMaW5lOwotICAgIGludHB0cl90IG1fbGFzdEV4ZWN1dGVkU291cmNlSUQ7Ci0KICAgICBm
cmllbmQgY2xhc3MgRGVidWdnZXJDYWxsRnJhbWVTY29wZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NvdXJjZUlELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU291cmNlSUQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NvdXJjZUlELmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNv
dXJjZUlEX2gKKyNkZWZpbmUgU291cmNlSURfaAorCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCisKKyNpbmNsdWRlIDxkZWJ1Z2dlci9EZWJ1Z2dlci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3R5cGVkZWYgSlNDOjpTb3VyY2VJRCBTb3VyY2VJRDsKK3N0YXRpYyBjb25zdCBT
b3VyY2VJRCBub1NvdXJjZUlEID0gSlNDOjpub1NvdXJjZUlEOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKworI2VuZGlm
IC8vIFNvdXJjZUlEX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNj
cmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDE1ODg2NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCkBAIC00Myw3ICs0NCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdvcmtlclNj
cmlwdERlYnVnU2VydmVyOjpXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcihXb3JrZXJHbG9iYWxTY29w
ZSogY29udGV4dCwgY29uc3QgU3RyaW5nJiBtb2RlKQotICAgIDogU2NyaXB0RGVidWdTZXJ2ZXIo
KQorICAgIDogU2NyaXB0RGVidWdTZXJ2ZXIodHJ1ZSkKICAgICAsIG1fd29ya2VyR2xvYmFsU2Nv
cGUoY29udGV4dCkKICAgICAsIG1fZGVidWdnZXJUYXNrTW9kZShtb2RlKQogewpAQCAtNjAsMTIg
KzYxLDYgQEAgdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6YWRkTGlzdGVuZQogICAgIHJl
Y29tcGlsZUFsbEpTRnVuY3Rpb25zKDApOwogfQogCi12b2lkIFdvcmtlclNjcmlwdERlYnVnU2Vy
dmVyOjp3aWxsRXhlY3V0ZVByb2dyYW0oSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAg
ICBpZiAoIW1fcGF1c2VkKQotICAgICAgICB1cGRhdGVDYWxsRnJhbWUoY2FsbEZyYW1lKTsKLX0K
LQogdm9pZCBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMo
VGltZXI8U2NyaXB0RGVidWdTZXJ2ZXI+KikKIHsKICAgICBKU0M6OlZNKiB2bSA9IG1fd29ya2Vy
R2xvYmFsU2NvcGUtPnNjcmlwdCgpLT52bSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5oCShyZXZpc2lvbiAxNTg4
NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSw2IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNDb250ZW50U2NyaXB0KEpTQzo6RXhlY1N0YXRlKikgT1ZFUlJJREUgeyByZXR1
cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB3aWxsRXhlY3V0ZVByb2dyYW0oSlNDOjpD
YWxsRnJhbWUqKSBPVkVSUklERTsKLQogICAgIHZpcnR1YWwgdm9pZCBydW5FdmVudExvb3BXaGls
ZVBhdXNlZCgpIE9WRVJSSURFOwogCiAgICAgV29ya2VyR2xvYmFsU2NvcGUqIG1fd29ya2VyR2xv
YmFsU2NvcGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuY3BwCShyZXZpc2lvbiAxNTg4NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTksNiArNTksNyBA
QCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlCiAgICAgLCBtX2luamVj
dGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX2Zyb250ZW5k
KDApCiAgICAgLCBtX3BhdXNlZFNjcmlwdFN0YXRlKDApCisgICAgLCBtX2NvbnRpbnVlVG9Mb2Nh
dGlvbkJyZWFrcG9pbnRJRChub0JyZWFrcG9pbnRJRCkKICAgICAsIG1fZW5hYmxlZChmYWxzZSkK
ICAgICAsIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKGZhbHNlKQogICAgICwgbV9saXN0ZW5l
cigwKQpAQCAtMzAyLDEzICszMDMsMTYgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
ZXRCcmVha3BvaQogICAgICpvdXRCcmVha3BvaW50SWRlbnRpZmllciA9IGJyZWFrcG9pbnRJZGVu
dGlmaWVyOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUxvY2F0aW9uKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG9jYXRpb24sIFN0cmluZyogc2NyaXB0
SUQsIGludCogbGluZU51bWJlciwgaW50KiBjb2x1bW5OdW1iZXIpCitzdGF0aWMgYm9vbCBwYXJz
ZUxvY2F0aW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgSW5zcGVjdG9yT2JqZWN0KiBsb2Nh
dGlvbiwgU291cmNlSUQqIHNvdXJjZUlELCB1bnNpZ25lZCogbGluZU51bWJlciwgdW5zaWduZWQq
IGNvbHVtbk51bWJlcikKIHsKLSAgICBpZiAoIWxvY2F0aW9uLT5nZXRTdHJpbmcoInNjcmlwdElk
Iiwgc2NyaXB0SUQpIHx8ICFsb2NhdGlvbi0+Z2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgbGluZU51
bWJlcikpIHsKKyAgICBTdHJpbmcgc2NyaXB0SURTdHI7CisgICAgaWYgKCFsb2NhdGlvbi0+Z2V0
U3RyaW5nKCJzY3JpcHRJZCIsICZzY3JpcHRJRFN0cikgfHwgIWxvY2F0aW9uLT5nZXROdW1iZXIo
ImxpbmVOdW1iZXIiLCBsaW5lTnVtYmVyKSkgewogICAgICAgICAvLyBGSVhNRTogcmVwbGFjZSB3
aXRoIGlucHV0IHZhbGlkYXRpb24uCisgICAgICAgICpzb3VyY2VJRCA9IG5vU291cmNlSUQ7CiAg
ICAgICAgICplcnJvclN0cmluZyA9ICJzY3JpcHRJZCBhbmQgbGluZU51bWJlciBhcmUgcmVxdWly
ZWQuIjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICAqc291cmNlSUQgPSBzY3Jp
cHRJRFN0ci50b0ludFB0cigpOwogICAgICpjb2x1bW5OdW1iZXIgPSAwOwogICAgIGxvY2F0aW9u
LT5nZXROdW1iZXIoImNvbHVtbk51bWJlciIsIGNvbHVtbk51bWJlcik7CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0zMTYsMTEgKzMyMCwxMSBAQCBzdGF0aWMgYm9vbCBwYXJzZUxvY2F0aW9uKEVycm9y
U3RyaW5nKiBlCiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBs
b2NhdGlvbiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIFR5cGVCdWls
ZGVyOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50SWRlbnRpZmllciwgUmVm
UHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbikKIHsK
LSAgICBTdHJpbmcgc2NyaXB0SUQ7Ci0gICAgaW50IGxpbmVOdW1iZXI7Ci0gICAgaW50IGNvbHVt
bk51bWJlcjsKKyAgICBTb3VyY2VJRCBzb3VyY2VJRDsKKyAgICB1bnNpZ25lZCBsaW5lTnVtYmVy
OworICAgIHVuc2lnbmVkIGNvbHVtbk51bWJlcjsKIAotICAgIGlmICghcGFyc2VMb2NhdGlvbihl
cnJvclN0cmluZywgbG9jYXRpb24sICZzY3JpcHRJRCwgJmxpbmVOdW1iZXIsICZjb2x1bW5OdW1i
ZXIpKQorICAgIGlmICghcGFyc2VMb2NhdGlvbihlcnJvclN0cmluZywgbG9jYXRpb24uZ2V0KCks
ICZzb3VyY2VJRCwgJmxpbmVOdW1iZXIsICZjb2x1bW5OdW1iZXIpKQogICAgICAgICByZXR1cm47
CiAKICAgICBTdHJpbmcgY29uZGl0aW9uID0gZW1wdHlTdHJpbmcoKTsKQEAgLTMzNiwxMyArMzQw
LDE0IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2kKICAgICBpZiAo
IWJyZWFrcG9pbnRBY3Rpb25zRnJvbVByb3RvY29sKGVycm9yU3RyaW5nLCBhY3Rpb25zLCAmYnJl
YWtwb2ludEFjdGlvbnMpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgYnJlYWtwb2lu
dElkZW50aWZpZXIgPSBzY3JpcHRJRCArICc6JyArIFN0cmluZzo6bnVtYmVyKGxpbmVOdW1iZXIp
ICsgJzonICsgU3RyaW5nOjpudW1iZXIoY29sdW1uTnVtYmVyKTsKKyAgICBTdHJpbmcgYnJlYWtw
b2ludElkZW50aWZpZXIgPSBTdHJpbmc6Om51bWJlcihzb3VyY2VJRCkgKyAnOicgKyBTdHJpbmc6
Om51bWJlcihsaW5lTnVtYmVyKSArICc6JyArIFN0cmluZzo6bnVtYmVyKGNvbHVtbk51bWJlcik7
CiAgICAgaWYgKG1fYnJlYWtwb2ludElkZW50aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElE
cy5maW5kKGJyZWFrcG9pbnRJZGVudGlmaWVyKSAhPSBtX2JyZWFrcG9pbnRJZGVudGlmaWVyVG9E
ZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHMuZW5kKCkpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0g
IkJyZWFrcG9pbnQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzLiI7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CisKICAgICBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQobGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIGJyZWFrcG9pbnRBY3Rpb25zLCBhdXRv
Q29udGludWUpOwotICAgIGFjdHVhbExvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtw
b2ludElkZW50aWZpZXIsIHNjcmlwdElELCBicmVha3BvaW50KTsKKyAgICBhY3R1YWxMb2NhdGlv
biA9IHJlc29sdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZGVudGlmaWVyLCBzb3VyY2VJRCwgYnJl
YWtwb2ludCk7CiAgICAgaWYgKGFjdHVhbExvY2F0aW9uKQogICAgICAgICAqb3V0QnJlYWtwb2lu
dElkZW50aWZpZXIgPSBicmVha3BvaW50SWRlbnRpZmllcjsKICAgICBlbHNlCkBAIC0zNjMsNDUg
KzM2OCw0NSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrCiAKIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGxvY2F0aW9uKQog
ewotICAgIGlmICghbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQuaXNFbXB0eSgpKSB7
CisgICAgaWYgKG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElEICE9IG5vQnJlYWtwb2lu
dElEKSB7CiAgICAgICAgIHNjcmlwdERlYnVnU2VydmVyKCkucmVtb3ZlQnJlYWtwb2ludChtX2Nv
bnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRCk7Ci0gICAgICAgIG1fY29udGludWVUb0xvY2F0
aW9uQnJlYWtwb2ludElEID0gIiI7CisgICAgICAgIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtw
b2ludElEID0gbm9CcmVha3BvaW50SUQ7CiAgICAgfQogCi0gICAgU3RyaW5nIHNjcmlwdElEOwot
ICAgIGludCBsaW5lTnVtYmVyOwotICAgIGludCBjb2x1bW5OdW1iZXI7CisgICAgU291cmNlSUQg
c291cmNlSUQ7CisgICAgdW5zaWduZWQgbGluZU51bWJlcjsKKyAgICB1bnNpZ25lZCBjb2x1bW5O
dW1iZXI7CiAKLSAgICBpZiAoIXBhcnNlTG9jYXRpb24oZXJyb3JTdHJpbmcsIGxvY2F0aW9uLCAm
c2NyaXB0SUQsICZsaW5lTnVtYmVyLCAmY29sdW1uTnVtYmVyKSkKKyAgICBpZiAoIXBhcnNlTG9j
YXRpb24oZXJyb3JTdHJpbmcsIGxvY2F0aW9uLmdldCgpLCAmc291cmNlSUQsICZsaW5lTnVtYmVy
LCAmY29sdW1uTnVtYmVyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU2NyaXB0QnJlYWtwb2lu
dCBicmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgIiIsIGZhbHNlKTsKLSAgICBt
X2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRCA9IHNjcmlwdERlYnVnU2VydmVyKCkuc2V0
QnJlYWtwb2ludChzY3JpcHRJRCwgYnJlYWtwb2ludCwgJmxpbmVOdW1iZXIsICZjb2x1bW5OdW1i
ZXIpOworICAgIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElEID0gc2NyaXB0RGVidWdT
ZXJ2ZXIoKS5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBicmVha3BvaW50LCAmbGluZU51bWJlciwg
JmNvbHVtbk51bWJlcik7CiAgICAgcmVzdW1lKGVycm9yU3RyaW5nKTsKIH0KIAotUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpyZXNvbHZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIHNjcmlwdElELCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBicmVha3BvaW50
KQorUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJ
ZGVudGlmaWVyLCBTb3VyY2VJRCBzb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYgYnJl
YWtwb2ludCkKIHsKLSAgICBTY3JpcHRzTWFwOjppdGVyYXRvciBzY3JpcHRJdGVyYXRvciA9IG1f
c2NyaXB0cy5maW5kKHNjcmlwdElEKTsKKyAgICBTY3JpcHRzTWFwOjppdGVyYXRvciBzY3JpcHRJ
dGVyYXRvciA9IG1fc2NyaXB0cy5maW5kKHNvdXJjZUlEKTsKICAgICBpZiAoc2NyaXB0SXRlcmF0
b3IgPT0gbV9zY3JpcHRzLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBTY3JpcHQmIHNj
cmlwdCA9IHNjcmlwdEl0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoYnJlYWtwb2ludC5saW5lTnVt
YmVyIDwgc2NyaXB0LnN0YXJ0TGluZSB8fCBzY3JpcHQuZW5kTGluZSA8IGJyZWFrcG9pbnQubGlu
ZU51bWJlcikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgYWN0dWFsTGluZU51bWJlcjsK
LSAgICBpbnQgYWN0dWFsQ29sdW1uTnVtYmVyOwotICAgIFN0cmluZyBkZWJ1Z1NlcnZlckJyZWFr
cG9pbnRJRCA9IHNjcmlwdERlYnVnU2VydmVyKCkuc2V0QnJlYWtwb2ludChzY3JpcHRJRCwgYnJl
YWtwb2ludCwgJmFjdHVhbExpbmVOdW1iZXIsICZhY3R1YWxDb2x1bW5OdW1iZXIpOwotICAgIGlm
IChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRC5pc0VtcHR5KCkpCisgICAgdW5zaWduZWQgYWN0dWFs
TGluZU51bWJlcjsKKyAgICB1bnNpZ25lZCBhY3R1YWxDb2x1bW5OdW1iZXI7CisgICAgQnJlYWtw
b2ludElEIGRlYnVnU2VydmVyQnJlYWtwb2ludElEID0gc2NyaXB0RGVidWdTZXJ2ZXIoKS5zZXRC
cmVha3BvaW50KHNvdXJjZUlELCBicmVha3BvaW50LCAmYWN0dWFsTGluZU51bWJlciwgJmFjdHVh
bENvbHVtbk51bWJlcik7CisgICAgaWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElEID09IG5vQnJl
YWtwb2ludElEKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEJyZWFrcG9pbnRJZGVudGlmaWVy
VG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNNYXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtw
b2ludElEc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVh
a3BvaW50SURzLmZpbmQoYnJlYWtwb2ludElkZW50aWZpZXIpOwogICAgIGlmIChkZWJ1Z1NlcnZl
ckJyZWFrcG9pbnRJRHNJdGVyYXRvciA9PSBtX2JyZWFrcG9pbnRJZGVudGlmaWVyVG9EZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJRHMuZW5kKCkpCi0gICAgICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElE
c0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50
SURzLnNldChicmVha3BvaW50SWRlbnRpZmllciwgVmVjdG9yPFN0cmluZz4oKSkuaXRlcmF0b3I7
CisgICAgICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElEc0l0ZXJhdG9yID0gbV9icmVha3BvaW50
SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzLnNldChicmVha3BvaW50SWRlbnRp
ZmllciwgVmVjdG9yPEJyZWFrcG9pbnRJRD4oKSkuaXRlcmF0b3I7CiAgICAgZGVidWdTZXJ2ZXJC
cmVha3BvaW50SURzSXRlcmF0b3ItPnZhbHVlLmFwcGVuZChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJ
RCk7CiAKICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRp
b24gPSBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uOjpjcmVhdGUoKQotICAgICAgICAu
c2V0U2NyaXB0SWQoc2NyaXB0SUQpCisgICAgICAgIC5zZXRTY3JpcHRJZChTdHJpbmc6Om51bWJl
cihzb3VyY2VJRCkpCiAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGFjdHVhbExpbmVOdW1iZXIpOwog
ICAgIGxvY2F0aW9uLT5zZXRDb2x1bW5OdW1iZXIoYWN0dWFsQ29sdW1uTnVtYmVyKTsKICAgICBy
ZXR1cm4gbG9jYXRpb247CkBAIC00MTcsMTYgKzQyMiwxNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHNjcmlwCiAgICAgcmV0dXJuIHZhbHVlLT5hc09iamVjdCgpOwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChFcnJvclN0cmlu
ZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNv
bnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qg
b3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8QXJyYXk8V2ViQ29yZTo6VHlwZUJ1aWxkZXI6OlBhZ2U6
OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
YXJjaEluQ29udGVudChFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SURT
dHIsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNl
bnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8QXJyYXk8
V2ViQ29yZTo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMpCiB7CiAg
ICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZh
bHNlOwogICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpv
cHRpb25hbENhc2VTZW5zaXRpdmUgOiBmYWxzZTsKIAotICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SUQpOworICAgIFNvdXJjZUlEIHNvdXJjZUlEID0g
c2NyaXB0SURTdHIudG9JbnRQdHIoKTsKKyAgICBTY3JpcHRzTWFwOjppdGVyYXRvciBpdCA9IG1f
c2NyaXB0cy5maW5kKHNvdXJjZUlEKTsKICAgICBpZiAoaXQgIT0gbV9zY3JpcHRzLmVuZCgpKQog
ICAgICAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxzOjpzZWFyY2hJblRleHRCeUxpbmVz
KGl0LT52YWx1ZS5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKICAgICBl
bHNlCi0gICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SUQ7Cisg
ICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2NyaXB0SURTdHI7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5n
KiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgY29uc3QgU3RyaW5nJiBuZXdDb250ZW50
LCBjb25zdCBib29sKiBjb25zdCBwcmV2aWV3LCBSZWZQdHI8QXJyYXk8VHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpDYWxsRnJhbWU+PiYgbmV3Q2FsbEZyYW1lcywgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mIHJlc3VsdCkKQEAgLTQ0MSwxMyArNDQ3LDE0IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2V0U2NyaXB0U28KICAgICAgICAgcmVzdWx0ID0gb2JqZWN0OwogfQogCi12b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJyb3Is
IGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIFN0cmluZyogc2NyaXB0U291cmNlKQordm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqIGVycm9yLCBj
b25zdCBTdHJpbmcmIHNjcmlwdElEU3RyLCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkKIHsKLSAgICBT
Y3JpcHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElEKTsKKyAgICBT
b3VyY2VJRCBzb3VyY2VJRCA9IHNjcmlwdElEU3RyLnRvSW50UHRyKCk7CisgICAgU2NyaXB0c01h
cDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7CiAgICAgaWYgKGl0ICE9
IG1fc2NyaXB0cy5lbmQoKSkKICAgICAgICAgKnNjcmlwdFNvdXJjZSA9IGl0LT52YWx1ZS5zb3Vy
Y2U7CiAgICAgZWxzZQotICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZvciBpZDogIiArIHNj
cmlwdElEOworICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZvciBpZDogIiArIHNjcmlwdElE
U3RyOwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWls
cyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVm
UHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgZGV0YWlscykKQEAg
LTY3MCw3ICs2NzcsNyBAQCBTdHJpbmcgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c291cmNlTWFw
CiAKIC8vIEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyIGZ1bmN0aW9ucwogCi12b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIGNv
bnN0IFNjcmlwdCYgaW5TY3JpcHQpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBh
cnNlU291cmNlKFNvdXJjZUlEIHNvdXJjZUlELCBjb25zdCBTY3JpcHQmIGluU2NyaXB0KQogewog
ICAgIFNjcmlwdCBzY3JpcHQgPSBpblNjcmlwdDsKICAgICBpZiAoIXNjcmlwdC5zdGFydExpbmUg
JiYgIXNjcmlwdC5zdGFydENvbHVtbikKQEAgLTY4Miw5ICs2ODksMTAgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdQogICAgIGJvb2wqIGhhc1NvdXJjZVVSTFBhcmFt
ID0gaGFzU291cmNlVVJMID8gJmhhc1NvdXJjZVVSTCA6IDA7CiAgICAgU3RyaW5nKiBzb3VyY2VN
YXBVUkxQYXJhbSA9IHNjcmlwdC5zb3VyY2VNYXBwaW5nVVJMLmlzTnVsbCgpID8gMCA6ICZzY3Jp
cHQuc291cmNlTWFwcGluZ1VSTDsKICAgICBjb25zdCBib29sKiBpc0NvbnRlbnRTY3JpcHQgPSBz
Y3JpcHQuaXNDb250ZW50U2NyaXB0ID8gJnNjcmlwdC5pc0NvbnRlbnRTY3JpcHQgOiAwOwotICAg
IG1fZnJvbnRlbmQtPnNjcmlwdFBhcnNlZChzY3JpcHRJRCwgc2NyaXB0VVJMLCBzY3JpcHQuc3Rh
cnRMaW5lLCBzY3JpcHQuc3RhcnRDb2x1bW4sIHNjcmlwdC5lbmRMaW5lLCBzY3JpcHQuZW5kQ29s
dW1uLCBpc0NvbnRlbnRTY3JpcHQsIHNvdXJjZU1hcFVSTFBhcmFtLCBoYXNTb3VyY2VVUkxQYXJh
bSk7CisgICAgU3RyaW5nIHNjcmlwdElEU3RyID0gU3RyaW5nOjpudW1iZXIoc291cmNlSUQpOwor
ICAgIG1fZnJvbnRlbmQtPnNjcmlwdFBhcnNlZChzY3JpcHRJRFN0ciwgc2NyaXB0VVJMLCBzY3Jp
cHQuc3RhcnRMaW5lLCBzY3JpcHQuc3RhcnRDb2x1bW4sIHNjcmlwdC5lbmRMaW5lLCBzY3JpcHQu
ZW5kQ29sdW1uLCBpc0NvbnRlbnRTY3JpcHQsIHNvdXJjZU1hcFVSTFBhcmFtLCBoYXNTb3VyY2VV
UkxQYXJhbSk7CiAKLSAgICBtX3NjcmlwdHMuc2V0KHNjcmlwdElELCBzY3JpcHQpOworICAgIG1f
c2NyaXB0cy5zZXQoc291cmNlSUQsIHNjcmlwdCk7CiAKICAgICBpZiAoc2NyaXB0VVJMLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzA5LDcgKzcxNyw3IEBAIHZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3UKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAKLSAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGxv
Y2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoaXQtPmtleSwgc2NyaXB0SUQsIGJyZWFrcG9pbnQp
OworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gbG9jYXRp
b24gPSByZXNvbHZlQnJlYWtwb2ludChpdC0+a2V5LCBzb3VyY2VJRCwgYnJlYWtwb2ludCk7CiAg
ICAgICAgIGlmIChsb2NhdGlvbikKICAgICAgICAgICAgIG1fZnJvbnRlbmQtPmJyZWFrcG9pbnRS
ZXNvbHZlZChpdC0+a2V5LCBsb2NhdGlvbik7CiAgICAgfQpAQCAtNzM4LDkgKzc0Niw5IEBAIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoSlMKICAgICBtX2Zyb250ZW5kLT5w
YXVzZWQoY3VycmVudENhbGxGcmFtZXMoKSwgbV9icmVha1JlYXNvbiwgbV9icmVha0F1eERhdGEp
OwogICAgIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gZmFsc2U7CiAKLSAgICBpZiAoIW1f
Y29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElELmlzRW1wdHkoKSkgeworICAgIGlmIChtX2Nv
bnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRCAhPSBub0JyZWFrcG9pbnRJRCkgewogICAgICAg
ICBzY3JpcHREZWJ1Z1NlcnZlcigpLnJlbW92ZUJyZWFrcG9pbnQobV9jb250aW51ZVRvTG9jYXRp
b25CcmVha3BvaW50SUQpOwotICAgICAgICBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJ
RCA9ICIiOworICAgICAgICBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRCA9IG5vQnJl
YWtwb2ludElEOwogICAgIH0KICAgICBpZiAobV9saXN0ZW5lcikKICAgICAgICAgbV9saXN0ZW5l
ci0+ZGlkUGF1c2UoKTsKQEAgLTc2Nyw3ICs3NzUsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmNsZWFyKCkKICAgICBtX2N1cnJlbnRDYWxsU3RhY2sgPSBTY3JpcHRWYWx1ZSgpOwog
ICAgIG1fc2NyaXB0cy5jbGVhcigpOwogICAgIG1fYnJlYWtwb2ludElkZW50aWZpZXJUb0RlYnVn
U2VydmVyQnJlYWtwb2ludElEcy5jbGVhcigpOwotICAgIG1fY29udGludWVUb0xvY2F0aW9uQnJl
YWtwb2ludElEID0gU3RyaW5nKCk7CisgICAgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50
SUQgPSBub0JyZWFrcG9pbnRJRDsKICAgICBjbGVhckJyZWFrRGV0YWlscygpOwogICAgIG1famF2
YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gZmFsc2U7CiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmgJKHJldmlzaW9uIDE1ODg2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzEsNiArMzEsNyBAQAogI2RlZmluZSBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50X2gKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBF
TkFCTEUoSU5TUEVDVE9SKQorI2luY2x1ZGUgIkJyZWFrcG9pbnRJRC5oIgogI2luY2x1ZGUgIkNv
bnNvbGVBUElUeXBlcy5oIgogI2luY2x1ZGUgIkNvbnNvbGVUeXBlcy5oIgogI2luY2x1ZGUgIklu
amVjdGVkU2NyaXB0LmgiCkBAIC0zOSw2ICs0MCw3IEBACiAjaW5jbHVkZSAiU2NyaXB0QnJlYWtw
b2ludC5oIgogI2luY2x1ZGUgIlNjcmlwdERlYnVnTGlzdGVuZXIuaCIKICNpbmNsdWRlICJTY3Jp
cHRTdGF0ZS5oIgorI2luY2x1ZGUgIlNvdXJjZUlELmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CkBAIC0xNDksMjAgKzE1MSwyMCBAQCBwcml2YXRlOgogCiAgICAgUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBjdXJyZW50Q2Fs
bEZyYW1lcygpOwogCi0gICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmlu
ZyYgc2NyaXB0SUQsIGNvbnN0IFNjcmlwdCYpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwg
dm9pZCBkaWRQYXJzZVNvdXJjZShTb3VyY2VJRCwgY29uc3QgU2NyaXB0JikgT1ZFUlJJREUgRklO
QUw7CiAgICAgdmlydHVhbCB2b2lkIGZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIE9WRVJSSURFIEZJTkFMOwogCiAgICAgdm9pZCBzZXRQ
YXVzZU9uRXhjZXB0aW9uc0ltcGwoRXJyb3JTdHJpbmcqLCBpbnQpOwogCi0gICAgUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiByZXNvbHZlQnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjcmlwdElELCBj
b25zdCBTY3JpcHRCcmVha3BvaW50Jik7CisgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVi
dWdnZXI6OkxvY2F0aW9uPiByZXNvbHZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9p
bnRJZGVudGlmaWVyLCBTb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYpOwogICAgIHZv
aWQgY2xlYXIoKTsKICAgICBib29sIGFzc2VydFBhdXNlZChFcnJvclN0cmluZyopOwogICAgIHZv
aWQgY2xlYXJCcmVha0RldGFpbHMoKTsKIAogICAgIFN0cmluZyBzb3VyY2VNYXBVUkxGb3JTY3Jp
cHQoY29uc3QgU2NyaXB0Jik7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTY3JpcHQ+
IFNjcmlwdHNNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4+
IEJyZWFrcG9pbnRJZGVudGlmaWVyVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNNYXA7CisgICAg
dHlwZWRlZiBIYXNoTWFwPFNvdXJjZUlELCBTY3JpcHQ+IFNjcmlwdHNNYXA7CisgICAgdHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPEJyZWFrcG9pbnRJRD4+IEJyZWFrcG9pbnRJZGVudGlm
aWVyVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4+IEJyZWFrcG9pbnRJZGVudGlmaWVyVG9CcmVh
a3BvaW50TWFwOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0
TWFuYWdlcjsKQEAgLTE3Miw3ICsxNzQsNyBAQCBwcml2YXRlOgogICAgIFNjcmlwdHNNYXAgbV9z
Y3JpcHRzOwogICAgIEJyZWFrcG9pbnRJZGVudGlmaWVyVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJ
RHNNYXAgbV9icmVha3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzOwog
ICAgIEJyZWFrcG9pbnRJZGVudGlmaWVyVG9CcmVha3BvaW50TWFwIG1famF2YVNjcmlwdEJyZWFr
cG9pbnRzOwotICAgIFN0cmluZyBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRDsKKyAg
ICBCcmVha3BvaW50SUQgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQ7CiAgICAgSW5z
cGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpSZWFzb246OkVudW0gbV9icmVha1JlYXNvbjsKICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2JyZWFrQXV4RGF0YTsKICAgICBib29sIG1fZW5h
YmxlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlz
dGVuZXIuaAkocmV2aXNpb24gMTU4ODY1KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1Nj
cmlwdERlYnVnTGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMzMsNiArMzMsNyBAQAogI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQogCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKKyNpbmNsdWRlICJTb3VyY2VJ
RC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKQEAgLTY1LDcgKzY2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+U2NyaXB0
RGVidWdMaXN0ZW5lcigpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKGNv
bnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0IFNjcmlwdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUGFyc2VTb3VyY2UoU291cmNlSUQsIGNvbnN0IFNjcmlwdCYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXVzZShKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IFNjcmlwdFZhbHVlJiBjYWxsRnJhbWVzLCBjb25zdCBTY3JpcHRWYWx1ZSYgZXhj
ZXB0aW9uKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbnRpbnVlKCkgPSAwOwpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4ODc2KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMTEtMDcgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgYnJlYWtwb2ludCAoYW5k
IGV4Y2VwdGlvbiBicmVhaykgZnVuY3Rpb25hbGl0eSBpbnRvIEpTQzo6RGVidWdnZXIuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3OTYuCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dl
YlNjcmlwdERlYnVnZ2VyLmg6CisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5t
bToKKyAgICAgICAgKFdlYlNjcmlwdERlYnVnZ2VyOjpXZWJTY3JpcHREZWJ1Z2dlcik6CisgICAg
ICAgIChXZWJTY3JpcHREZWJ1Z2dlcjo6aGFuZGxlUGF1c2UpOgorCiAyMDEzLTExLTA3ICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBDb3NtZXRpYzogcmVuYW1lIHh4
eElkIHRvIHh4eElEIGZvciBTY3JpcHRJZCwgU291cmNlSWQsIGFuZCBCcmVha3BvaW50SWQuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5oCShy
ZXZpc2lvbiAxNTg4NjUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERl
YnVnZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDEzICs1Niw4IEBAIHB1YmxpYzoKIAogcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFyc2VkKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpTb3VyY2VQcm92aWRlciosIGludCBlcnJvckxpbmUsIGNvbnN0IFdURjo6U3RyaW5nJiBlcnJv
ck1zZykgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGxFdmVudChKU0M6OkNhbGxGcmFt
ZSopIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCBhdFN0YXRlbWVudChKU0M6OkNhbGxG
cmFtZSopIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZXR1cm5FdmVudChKU0M6OkNh
bGxGcmFtZSopIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCBleGNlcHRpb24oSlNDOjpD
YWxsRnJhbWUqLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIGJvb2wgaGFzSGFuZGxlcikg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJvZ3JhbShKU0M6OkNhbGxG
cmFtZSopIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShK
U0M6OkNhbGxGcmFtZSopIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFjaEJy
ZWFrcG9pbnQoSlNDOjpDYWxsRnJhbWUqKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlUGF1c2UoSlNDOjpEZWJ1Z2dlcjo6UmVhc29uRm9yUGF1c2UsIEpTQzo6SlNHbG9iYWxP
YmplY3QqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgbmVlZFBhdXNlSGFuZGxpbmcoSlND
OjpKU0dsb2JhbE9iamVjdCopIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIGJvb2wg
bV9jYWxsaW5nRGVsZWdhdGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
U2NyaXB0RGVidWdnZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJTY3JpcHREZWJ1Z2dlci5tbQkocmV2aXNpb24gMTU4ODY1KQorKysgU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNzUs
OCArNzUsOSBAQCBXZWJTY3JpcHREZWJ1Z2dlcjo6V2ViU2NyaXB0RGVidWdnZXIoSlNHCiAgICAg
OiBtX2NhbGxpbmdEZWxlZ2F0ZShmYWxzZSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0KQogeworICAgIHNldFBhdXNlT25FeGNlcHRpb25zU3Rh
dGUoUGF1c2VPbkFsbEV4Y2VwdGlvbnMpOworICAgIGRlYWN0aXZhdGVCcmVha3BvaW50cygpOwog
ICAgIGF0dGFjaChnbG9iYWxPYmplY3QpOwotICAgIHNldE5lZWRzRXhjZXB0aW9uQ2FsbGJhY2tz
KHRydWUpOwogfQogCiAvLyBjYWxsYmFja3MgLSByZWxheSB0byBkZWxlZ2F0ZQpAQCAtMTE3LDI0
ICsxMTgsMjkgQEAgdm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6c291cmNlUGFyc2VkKEV4ZQogICAg
IG1fY2FsbGluZ0RlbGVnYXRlID0gZmFsc2U7CiB9CiAKLXZvaWQgV2ViU2NyaXB0RGVidWdnZXI6
OmV4Y2VwdGlvbihKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0M6OkpTVmFsdWUgZXhjZXB0
aW9uVmFsdWUsIGJvb2wgaGFzSGFuZGxlcikKK3ZvaWQgV2ViU2NyaXB0RGVidWdnZXI6OmhhbmRs
ZVBhdXNlKERlYnVnZ2VyOjpSZWFzb25Gb3JQYXVzZSByZWFzb24sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCiB7CiAgICAgaWYgKG1fY2FsbGluZ0RlbGVnYXRlKQogICAgICAgICByZXR1
cm47CiAKKyAgICBpZiAocmVhc29uICE9IERlYnVnZ2VyOjpQYXVzZWRGb3JFeGNlcHRpb24pCisg
ICAgICAgIHJldHVybjsKKwogICAgIG1fY2FsbGluZ0RlbGVnYXRlID0gdHJ1ZTsKIAotICAgIFdl
YkZyYW1lICp3ZWJGcmFtZSA9IHRvV2ViRnJhbWUoY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2Jq
ZWN0KCkpOworICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IHRvV2ViRnJhbWUoZ2xvYmFsT2JqZWN0
KTsKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3dlYkZyYW1lIHdlYlZpZXddOwotICAgIFJlZlB0
cjxEZWJ1Z2dlckNhbGxGcmFtZT4gZGVidWdnZXJDYWxsRnJhbWUgPSBEZWJ1Z2dlckNhbGxGcmFt
ZTo6Y3JlYXRlKGNhbGxGcmFtZSk7CisgICAgRGVidWdnZXJDYWxsRnJhbWUqIGRlYnVnZ2VyQ2Fs
bEZyYW1lID0gY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lKCk7CisgICAgSlNWYWx1ZSBleGNlcHRp
b25WYWx1ZSA9IGN1cnJlbnRFeGNlcHRpb24oKTsKICAgICBTdHJpbmcgZnVuY3Rpb25OYW1lID0g
ZGVidWdnZXJDYWxsRnJhbWUtPmZ1bmN0aW9uTmFtZSgpOwogICAgIFJldGFpblB0cjxXZWJTY3Jp
cHRDYWxsRnJhbWU+IHdlYkNhbGxGcmFtZSA9IGFkb3B0TlMoW1tXZWJTY3JpcHRDYWxsRnJhbWUg
YWxsb2NdIF9pbml0V2l0aEdsb2JhbE9iamVjdDpjb3JlKHdlYkZyYW1lKS0+c2NyaXB0KCkud2lu
ZG93U2NyaXB0T2JqZWN0KCkgZnVuY3Rpb25OYW1lOmZ1bmN0aW9uTmFtZSBleGNlcHRpb25WYWx1
ZTpleGNlcHRpb25WYWx1ZV0pOwogCiAgICAgV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVu
dGF0aW9uQ2FjaGUqIGNhY2hlID0gV2ViVmlld0dldFNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1l
bnRhdGlvbnMod2ViVmlldyk7CiAgICAgaWYgKGNhY2hlLT5leGNlcHRpb25XYXNSYWlzZWRGdW5j
KSB7Ci0gICAgICAgIGlmIChjYWNoZS0+ZXhjZXB0aW9uV2FzUmFpc2VkRXhwZWN0c0hhc0hhbmRs
ZXJGbGFnKQorICAgICAgICBpZiAoY2FjaGUtPmV4Y2VwdGlvbldhc1JhaXNlZEV4cGVjdHNIYXNI
YW5kbGVyRmxhZykgeworICAgICAgICAgICAgYm9vbCBoYXNIYW5kbGVyID0gaGFzSGFuZGxlckZv
ckV4Y2VwdGlvbkNhbGxiYWNrKCk7CiAgICAgICAgICAgICBDYWxsU2NyaXB0RGVidWdEZWxlZ2F0
ZShjYWNoZS0+ZXhjZXB0aW9uV2FzUmFpc2VkRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZp
ZXc6ZXhjZXB0aW9uV2FzUmFpc2VkOmhhc0hhbmRsZXI6c291cmNlSWQ6bGluZTpmb3JXZWJGcmFt
ZTopLCB3ZWJDYWxsRnJhbWUuZ2V0KCksIGhhc0hhbmRsZXIsIGRlYnVnZ2VyQ2FsbEZyYW1lLT5z
b3VyY2VJRCgpLCBkZWJ1Z2dlckNhbGxGcmFtZS0+bGluZSgpLCB3ZWJGcmFtZSk7Ci0gICAgICAg
IGVsc2UKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBDYWxsU2NyaXB0RGVidWdEZWxlZ2F0
ZShjYWNoZS0+ZXhjZXB0aW9uV2FzUmFpc2VkRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZp
ZXc6ZXhjZXB0aW9uV2FzUmFpc2VkOnNvdXJjZUlkOmxpbmU6Zm9yV2ViRnJhbWU6KSwgd2ViQ2Fs
bEZyYW1lLmdldCgpLCBkZWJ1Z2dlckNhbGxGcmFtZS0+c291cmNlSUQoKSwgZGVidWdnZXJDYWxs
RnJhbWUtPmxpbmUoKSwgd2ViRnJhbWUpOwogICAgIH0KIAo=
</data>
<flag name="review"
          id="239297"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
    <flag name="commit-queue"
          id="239296"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216344</attachid>
            <date>2013-11-07 17:31:44 -0800</date>
            <delta_ts>2013-11-07 19:58:49 -0800</delta_ts>
            <desc>patch 2: updated build files, fixed style issue.</desc>
            <filename>bug-121796b.patch</filename>
            <type>text/plain</type>
            <size>104333</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4ODg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDEzLTExLTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
b3ZlIGJyZWFrcG9pbnQgKGFuZCBleGNlcHRpb24gYnJlYWspIGZ1bmN0aW9uYWxpdHkgaW50byBK
U0M6OkRlYnVnZ2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIxNzk2LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIC0gSW4gU2NyaXB0RGVidWdTZXJ2ZXIgYW5kIEpTQzo6RGVidWdnZXIsIFNvdXJjZUlE
IGFuZCBCcmVha3BvaW50SUQgYXJlCisgICAgICAgICAgbm93IG51bWVyaWMgdG9rZW5zLgorCisg
ICAgICAgIC0gSlNDOjpEZWJ1Z2dlciBub3cgdHJhY2tzIHVzZXIgZGVmaW5lZCBicmVha3BvaW50
cyBpbiBhIEpTQzo6QnJlYWtwb2ludAorICAgICAgICAgIHJlY29yZC4gUHJldmlvdXNseSwgdGhp
cyBpbmZvIGlzIHRyYWNrZWQgaW4gdGhlIFNjcmlwdEJyZWFrcG9pbnQgcmVjb3JkCisgICAgICAg
ICAgaW4gU2NyaXB0RGVidWdTZXJ2ZXIuIFRoZSBvbmx5IGVsZW1lbnQgb2YgU2NyaXB0QnJlYWtw
b2ludCB0aGF0IGlzIG5vdAorICAgICAgICAgIGJlaW5nIHRyYWNrZWQgYnkgSlNDOjpCcmVha3Bv
aW50IGlzIHRoZSBTY3JpcHRCcmVha3BvaW50QWN0aW9uLgorICAgICAgICAgICAgIFRoZSBTY3Jp
cHRCcmVha3BvaW50QWN0aW9uIGlzIHN0aWxsIHRyYWNrZWQgYnkgdGhlIFNjcmlwdERlYnVnU2Vy
dmVyCisgICAgICAgICAgaW4gYSBsaXN0IGtleWVkIG9uIHRoZSBjb3JyZXNwb25kaW5nIEJyZWFr
cG9pbnRJRC4KKyAgICAgICAgICAgICBUaGUgU2NyaXB0QnJlYWtwb2ludCByZWNvcmQgaXMgbm93
IG9ubHkgdXNlZCBhcyBhIG1lYW5zIG9mIHBhc3NpbmcKKyAgICAgICAgICBicmVha3BvaW50IHBh
cmFtYXRlcnMgdG8gdGhlIFNjcmlwdERlYnVnU2VydmVyLgorCisgICAgICAgIC0gU2NyaXB0RGVi
dWdTZXJ2ZXIgbm93IG5vIGxvbmdlciBhY2Nlc3NlcyB0aGUgSlNDOjpDYWxsRnJhbWUqIGRpcmVj
dGx5LgorICAgICAgICAgIEl0IGFsd2F5cyBnb2VzIHRocm91Z2ggdGhlIERlYnVnZ2VyQ2FsbEZy
YW1lLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBk
ZWJ1Z2dlci9CcmVha3BvaW50Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCcmVha3BvaW50OjpC
cmVha3BvaW50KToKKyAgICAgICAgLSBCcmVha3BvaW50IGNsYXNzIHRvIHRyYWNrIGluZm8gZm9y
IGVhY2ggYnJlYWtwb2ludCBpbiBKU0M6OkRlYnVnZ2VyLgorICAgICAgICAqIGRlYnVnZ2VyL0Rl
YnVnZ2VyLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWVTY29wZTo6RGVidWdn
ZXJDYWxsRnJhbWVTY29wZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lU2NvcGU6
On5EZWJ1Z2dlckNhbGxGcmFtZVNjb3BlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OkRlYnVn
Z2VyKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmRldGFjaCk6CisgICAgICAgIChKU0M6OkRl
YnVnZ2VyOjp1cGRhdGVOZWVkRm9yT3BEZWJ1Z0NhbGxiYWNrcyk6CisgICAgICAgIChKU0M6OkRl
YnVnZ2VyOjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnJlbW92ZUJy
ZWFrcG9pbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6aGFzQnJlYWtwb2ludCk6CisgICAg
ICAgIChKU0M6OkRlYnVnZ2VyOjpjbGVhckJyZWFrcG9pbnRzKToKKyAgICAgICAgKEpTQzo6RGVi
dWdnZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6
OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6c2V0
UGF1c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6YnJlYWtQcm9n
cmFtKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmNvbnRpbnVlUHJvZ3JhbSk6CisgICAgICAg
IChKU0M6OkRlYnVnZ2VyOjpzdGVwSW50b1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkRlYnVn
Z2VyOjpzdGVwT3ZlclN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzdGVwT3V0
T2ZGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjp1cGRhdGVDYWxsRnJhbWUpOgor
ICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6dXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZCk6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKToKKyAgICAgICAgKEpTQzo6
RGVidWdnZXI6OmV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjphdFN0YXRlbWVu
dCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpjYWxsRXZlbnQpOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6d2lsbEV4ZWN1
dGVQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmRpZEV4ZWN1dGVQcm9ncmFtKToK
KyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmRpZFJlYWNoQnJlYWtwb2ludCk6CisgICAgICAgIChK
U0M6OkRlYnVnZ2VyOjpjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUpOgorICAgICAgICAqIGRlYnVn
Z2VyL0RlYnVnZ2VyLmg6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3Bw
OgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSUQpOgorICAgICAgICAo
SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSURGb3JDYWxsRnJhbWUpOgorICAgICAgICAq
IGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmg6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXJQcmltaXRpdmVzLmg6IEFkZGVkLgorICAgICAgICAtIGRlZmluZSBTb3VyY2VJRCwgbm9Tb3Vy
Y2VJRCwgQnJlYWtwb2ludElELCBhbmQgbm9CcmVha3BvaW50SUQuCisKIDIwMTMtMTEtMDcgIE1p
Y2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hhbmdlIENhbGxG
cmFtZVJlZ2lzdGVyIHRvIGFyY2hpdGVjdGVkIGZyYW1lIHBvaW50ZXIgcmVnaXN0ZXIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTg4
NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtNTYxLDEyICs1NjEsMTQgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllclN1cHBvcnQuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvQnJlYWtwb2ludC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJBY3RpdmF0aW9uLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyQWN0aXZhdGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJDYWxsRnJhbWUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJDYWxsRnJhbWUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVn
Z2VyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmggXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclByaW1pdGl2ZXMuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL0phdmFTY3JpcHRDb3JlL0FQ
SUNhc3QuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL0phdmFT
Y3JpcHRDb3JlL0FQSVNoaW1zLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5n
SGVhZGVycy9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0LmggXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTg4NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC03ODUsOSArNzg1LDExIEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29tcGlsZXJcTGFiZWxTY29wZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb21waWxlclxSZWdpc3RlcklELmgiIC8+DQogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cY29uZmlnLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVi
dWdnZXJcQnJlYWtwb2ludC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRlYnVn
Z2VyXERlYnVnZ2VyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVidWdnZXJc
RGVidWdnZXJBY3RpdmF0aW9uLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVi
dWdnZXJcRGVidWdnZXJDYWxsRnJhbWUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZWJ1Z2dlclxEZWJ1Z2dlclByaW1pdGl2ZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHQWJzdHJhY3RIZWFwLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCIgLz4NCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCShy
ZXZpc2lvbiAxNTg4NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAg
LTE0NjksNiArMTQ2OSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29tcGls
ZXJcUmVnaXN0ZXJJRC5oIj4NCiAgICAgICA8RmlsdGVyPmJ5dGVjb2RlY29tcGlsZXI8L0ZpbHRl
cj4NCiAgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVidWdn
ZXJcQnJlYWtwb2ludC5oIj4NCisgICAgICA8RmlsdGVyPmRlYnVnZ2VyPC9GaWx0ZXI+DQorICAg
IDwvQ2xJbmNsdWRlPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVn
Z2VyLmgiPg0KICAgICAgIDxGaWx0ZXI+ZGVidWdnZXI8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1
ZGU+DQpAQCAtMTQ3OCw2ICsxNDgxLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRl
YnVnZ2VyXERlYnVnZ2VyQ2FsbEZyYW1lLmgiPg0KICAgICAgIDxGaWx0ZXI+ZGVidWdnZXI8L0Zp
bHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVi
dWdnZXJcRGVidWdnZXJQcmltaXRpdmVzLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGVidWdnZXI8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0RyaXZlci5oIj4NCiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KICAgICA8L0NsSW5j
bHVkZT4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU4ODY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyMjAsNiArMTIyMCw4IEBACiAJCUZFNEEz
MzFGMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRBMzMxRDE1QkQyRTA3MDA2RjU0RjMgLyog
Vk1JbnNwZWN0b3IuY3BwICovOyB9OwogCQlGRTRBMzMyMDE1QkQyRTA3MDA2RjU0RjMgLyogVk1J
bnNwZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFNEEzMzFFMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNjYxNzI4MTc3NEUwMzUwMDQ5
NUIwMCAvKiBWTVN0YWNrQm91bmRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTY2MTcyNzE3NzRFMDM1MDA0OTVCMDAgLyogVk1TdGFja0JvdW5kcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFQTA4
NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJl
YWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFGMTgyQjdB
MDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyog
TExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFRDI4N0IxMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRDk0RjJFMTcxRTNFMjMw
MEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRUQ5NEYyQjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwICov
OyB9OwogCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDk0RjJDMTcxRTNFMjMwMEJF
NzdBNCAvKiBXYXRjaGRvZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNTI5LDYgKzI1MzEsOCBAQAogCQlGRTRBMzMxRDE1QkQyRTA3MDA2RjU0
RjMgLyogVk1JbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVk1JbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMx
RTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVk1JbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkU2NjE3MjcxNzc0RTAzNTAwNDk1QjAwIC8qIFZNU3RhY2tCb3VuZHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVk1TdGFja0JvdW5kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCcmVha3BvaW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1p
dGl2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWdnZXJQcmltaXRp
dmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRDI4N0IxMTVFQzlBNTcwMERB
ODE2MSAvKiBMTEludE9wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBM
TEludE9wY29kZS5oOyBwYXRoID0gbGxpbnQvTExJbnRPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkVEOTRGMkIxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhdGNoZG9nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhdGNoZG9nLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMTYwLDYgKzMxNjQsOCBAQAogCQkxNDgwREI5QTBE
REMyMjMxMDAzQ0ZERjIgLyogZGVidWdnZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCUZFQTA4NjFFMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50
LmggKi8sCisJCQkJRkVBMDg2MUYxODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZl
cy5oICovLAogCQkJCUY2OTJBODU4MDI1NTU5N0QwMUZGNjBGNyAvKiBEZWJ1Z2dlci5jcHAgKi8s
CiAJCQkJRjY5MkE4NTkwMjU1NTk3RDAxRkY2MEY3IC8qIERlYnVnZ2VyLmggKi8sCiAJCQkJQkMz
MTM1NjMwRjMwMkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgKi8sCkBAIC00
MTE5LDcgKzQxMjUsOSBAQAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVDMDI4NUQxNzE3OTY2ODAwMzUxRTM1IC8q
IEFSTXY3RE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MzM1QjgxNjM5QzFFQTAwMTQ0
M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFQTA4
NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0E4QUYzNTE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3QThBRjM3MTdBREI1RjMwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlclZp
ZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJh
eUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3
QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9CcmVha3BvaW50LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCcmVha3BvaW50X2gKKyNkZWZpbmUgQnJlYWtwb2ludF9oCisKKyNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKworI2luY2x1ZGUgIkRlYnVnZ2VyUHJpbWl0aXZl
cy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsK
Kworc3RydWN0IEJyZWFrcG9pbnQgeworICAgIEJyZWFrcG9pbnQoKQorICAgICAgICA6IGlkKG5v
QnJlYWtwb2ludElEKQorICAgICAgICAsIHNvdXJjZUlEKG5vU291cmNlSUQpCisgICAgICAgICwg
bGluZSgwKQorICAgICAgICAsIGNvbHVtbigwKQorICAgICAgICAsIGF1dG9Db250aW51ZShmYWxz
ZSkKKyAgICB7CisgICAgfQorCisgICAgQnJlYWtwb2ludChTb3VyY2VJRCBzb3VyY2VJRCwgdW5z
aWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uLCBTdHJpbmcgY29uZGl0aW9uLCBib29sIGF1dG9D
b250aW51ZSkKKyAgICAgICAgOiBpZChub0JyZWFrcG9pbnRJRCkKKyAgICAgICAgLCBzb3VyY2VJ
RChzb3VyY2VJRCkKKyAgICAgICAgLCBsaW5lKGxpbmUpCisgICAgICAgICwgY29sdW1uKGNvbHVt
bikKKyAgICAgICAgLCBjb25kaXRpb24oY29uZGl0aW9uKQorICAgICAgICAsIGF1dG9Db250aW51
ZShhdXRvQ29udGludWUpCisgICAgeworICAgIH0KKworICAgIEJyZWFrcG9pbnRJRCBpZDsKKyAg
ICBTb3VyY2VJRCBzb3VyY2VJRDsKKyAgICB1bnNpZ25lZCBsaW5lOworICAgIHVuc2lnbmVkIGNv
bHVtbjsKKyAgICBTdHJpbmcgY29uZGl0aW9uOworICAgIGJvb2wgYXV0b0NvbnRpbnVlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKKworI2VuZGlmIC8vIEJyZWFrcG9pbnRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShyZXZpc2lvbiAxNTg4NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKICAqCkBAIC0yMiw5ICsyMiwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAKKyNpbmNsdWRlICJEZWJ1Z2dlckNhbGxGcmFtZS5o
IgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSGVhcEl0ZXJhdGlvblNjb3BlLmgiCiAj
aW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2lu
Y2x1ZGUgIk9wZXJhdGlvbnMuaCIKQEAgLTkxLDExICs5Myw0NCBAQCBpbmxpbmUgdm9pZCBSZWNv
bXBpbGVyOjpvcGVyYXRvcigpKEpTQ2VsCiAKIG5hbWVzcGFjZSBKU0MgewogCi1EZWJ1Z2dlcjo6
RGVidWdnZXIoKQotICAgIDogbV9uZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcyhmYWxzZSkKK2NsYXNz
IERlYnVnZ2VyQ2FsbEZyYW1lU2NvcGUgeworcHVibGljOgorICAgIERlYnVnZ2VyQ2FsbEZyYW1l
U2NvcGUoRGVidWdnZXImIGRlYnVnZ2VyKQorICAgICAgICA6IG1fZGVidWdnZXIoZGVidWdnZXIp
CisgICAgeworICAgICAgICBBU1NFUlQoIW1fZGVidWdnZXIubV9jdXJyZW50RGVidWdnZXJDYWxs
RnJhbWUpOworICAgICAgICBpZiAobV9kZWJ1Z2dlci5tX2N1cnJlbnRDYWxsRnJhbWUpCisgICAg
ICAgICAgICBtX2RlYnVnZ2VyLm1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lID0gRGVidWdnZXJD
YWxsRnJhbWU6OmNyZWF0ZShkZWJ1Z2dlci5tX2N1cnJlbnRDYWxsRnJhbWUpOworICAgIH0KKwor
ICAgIH5EZWJ1Z2dlckNhbGxGcmFtZVNjb3BlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2RlYnVn
Z2VyLm1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBtX2RlYnVnZ2Vy
Lm1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lLT5pbnZhbGlkYXRlKCk7CisgICAgICAgICAgICBt
X2RlYnVnZ2VyLm1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lID0gMDsKKyAgICAgICAgfQorICAg
IH0KKworcHJpdmF0ZToKKyAgICBEZWJ1Z2dlciYgbV9kZWJ1Z2dlcjsKK307CisKKworRGVidWdn
ZXI6OkRlYnVnZ2VyKGJvb2wgaXNJbldvcmtlclRocmVhZCkKKyAgICA6IG1fcGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZShEb250UGF1c2VPbkV4Y2VwdGlvbnMpCisgICAgLCBtX3BhdXNlT25OZXh0U3Rh
dGVtZW50KGZhbHNlKQorICAgICwgbV9pc1BhdXNlZChmYWxzZSkKKyAgICAsIG1fYnJlYWtwb2lu
dHNBY3RpdmF0ZWQodHJ1ZSkKKyAgICAsIG1faGFzSGFuZGxlckZvckV4Y2VwdGlvbkNhbGxiYWNr
KGZhbHNlKQorICAgICwgbV9pc0luV29ya2VyVGhyZWFkKGlzSW5Xb3JrZXJUaHJlYWQpCisgICAg
LCBtX3JlYXNvbkZvclBhdXNlKE5vdFBhdXNlZCkKKyAgICAsIG1fcGF1c2VPbkNhbGxGcmFtZSgw
KQorICAgICwgbV9jdXJyZW50Q2FsbEZyYW1lKDApCisgICAgLCBtX2xhc3RFeGVjdXRlZExpbmUo
VUlOVF9NQVgpCisgICAgLCBtX2xhc3RFeGVjdXRlZFNvdXJjZUlEKG5vU291cmNlSUQpCisgICAg
LCBtX3RvcEJyZWFrcG9pbnRJRChub0JyZWFrcG9pbnRJRCkKICAgICAsIG1fbmVlZHNPcERlYnVn
Q2FsbGJhY2tzKGZhbHNlKQogICAgICwgbV9zaG91bGRQYXVzZShmYWxzZSkKLSAgICAsIG1fbnVt
YmVyT2ZCcmVha3BvaW50cygwKQogewogfQogCkBAIC0xMTUsMTYgKzE1MCwyMCBAQCB2b2lkIERl
YnVnZ2VyOjphdHRhY2goSlNHbG9iYWxPYmplY3QqIGdsCiAKIHZvaWQgRGVidWdnZXI6OmRldGFj
aChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogeworICAgIC8vIElmIHdlJ3JlIGRldGFj
aGluZyBmcm9tIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGdsb2JhbCBvYmplY3QsIG1hbnVhbGx5
IHRlYXIgZG93biBvdXIKKyAgICAvLyBzdGFjaywgc2luY2Ugd2Ugd29uJ3QgZ2V0IGZ1cnRoZXIg
ZGVidWdnZXIgY2FsbGJhY2tzIHRvIGRvIHNvLiBBbHNvLCByZXN1bWUgZXhlY3V0aW9uLAorICAg
IC8vIHNpbmNlIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gc3RheWluZyBwYXVzZWQgb25jZSBhIHdpbmRv
dyBjbG9zZXMuCisgICAgaWYgKG1fY3VycmVudENhbGxGcmFtZSAmJiBtX2N1cnJlbnRDYWxsRnJh
bWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSA9PSBnbG9iYWxPYmplY3QpIHsKKyAgICAgICAgbV9j
dXJyZW50Q2FsbEZyYW1lID0gMDsKKyAgICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gMDsKKyAg
ICAgICAgY29udGludWVQcm9ncmFtKCk7CisgICAgfQorCiAgICAgQVNTRVJUKG1fZ2xvYmFsT2Jq
ZWN0cy5jb250YWlucyhnbG9iYWxPYmplY3QpKTsKICAgICBtX2dsb2JhbE9iamVjdHMucmVtb3Zl
KGdsb2JhbE9iamVjdCk7CiAgICAgZ2xvYmFsT2JqZWN0LT5zZXREZWJ1Z2dlcigwKTsKIH0KIAot
dm9pZCBEZWJ1Z2dlcjo6c2V0TmVlZHNFeGNlcHRpb25DYWxsYmFja3MoYm9vbCB2YWx1ZSkKLXsK
LSAgICBtX25lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzID0gdmFsdWU7Ci19Ci0KIHZvaWQgRGVidWdn
ZXI6OnNldFNob3VsZFBhdXNlKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9zaG91bGRQYXVzZSA9IHZh
bHVlOwpAQCAtMTQ2LDE2ICsxODUsMzczIEBAIHZvaWQgRGVidWdnZXI6OnJlY29tcGlsZUFsbEpT
RnVuY3Rpb25zKFYKICAgICB2bS0+aGVhcC5vYmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2VsbChp
dGVyYXRpb25TY29wZSwgcmVjb21waWxlcik7CiB9CiAKLXZvaWQgRGVidWdnZXI6OnVwZGF0ZU51
bWJlck9mQnJlYWtwb2ludHMoaW50IG51bWJlck9mQnJlYWtwb2ludHMpCit2b2lkIERlYnVnZ2Vy
Ojp1cGRhdGVOZWVkRm9yT3BEZWJ1Z0NhbGxiYWNrcygpCit7CisgICAgc2l6ZV90IG51bWJlck9m
QnJlYWtwb2ludHMgPSBtX2JyZWFrcG9pbnRJRFRvQnJlYWtwb2ludC5zaXplKCk7CisgICAgbV9u
ZWVkc09wRGVidWdDYWxsYmFja3MgPSBtX3Nob3VsZFBhdXNlIHx8IG51bWJlck9mQnJlYWtwb2lu
dHM7Cit9CisKK0JyZWFrcG9pbnRJRCBEZWJ1Z2dlcjo6c2V0QnJlYWtwb2ludChCcmVha3BvaW50
IGJyZWFrcG9pbnQsIHVuc2lnbmVkJiBhY3R1YWxMaW5lLCB1bnNpZ25lZCYgYWN0dWFsQ29sdW1u
KQoreworICAgIFNvdXJjZUlEIHNvdXJjZUlEID0gYnJlYWtwb2ludC5zb3VyY2VJRDsKKyAgICB1
bnNpZ25lZCBsaW5lID0gYnJlYWtwb2ludC5saW5lOworICAgIHVuc2lnbmVkIGNvbHVtbiA9IGJy
ZWFrcG9pbnQuY29sdW1uOworCisgICAgU291cmNlSURUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRv
ciBpdCA9IG1fc291cmNlSURUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSUQpOworICAgIGlmIChp
dCA9PSBtX3NvdXJjZUlEVG9CcmVha3BvaW50cy5lbmQoKSkKKyAgICAgICAgaXQgPSBtX3NvdXJj
ZUlEVG9CcmVha3BvaW50cy5zZXQoc291cmNlSUQsIExpbmVUb0JyZWFrcG9pbnRzTWFwKCkpLml0
ZXJhdG9yOworICAgIExpbmVUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBicmVha3NJdCA9IGl0
LT52YWx1ZS5maW5kKGxpbmUpOworICAgIGlmIChicmVha3NJdCA9PSBpdC0+dmFsdWUuZW5kKCkp
CisgICAgICAgIGJyZWFrc0l0ID0gaXQtPnZhbHVlLnNldChsaW5lLCBCcmVha3BvaW50c0luTGlu
ZSgpKS5pdGVyYXRvcjsKKworICAgIEJyZWFrcG9pbnRzSW5MaW5lJiBicmVha3BvaW50cyA9IGJy
ZWFrc0l0LT52YWx1ZTsKKyAgICB1bnNpZ25lZCBicmVha3BvaW50c0NvdW50ID0gYnJlYWtwb2lu
dHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBicmVha3BvaW50c0NvdW50
OyBpKyspCisgICAgICAgIGlmIChicmVha3BvaW50c1tpXS5jb2x1bW4gPT0gY29sdW1uKSB7Cisg
ICAgICAgICAgICAvLyBUaGUgYnJlYWtwb2ludCBhbHJlYWR5IGV4aXN0cy4gV2UncmUgbm90IGFs
bG93ZWQgdG8gY3JlYXRlIGEgbmV3CisgICAgICAgICAgICAvLyBicmVha3BvaW50IGF0IHRoaXMg
bG9jYXRpb24uIFJhdGhlciB0aGFuIHJldHVybmluZyB0aGUgYnJlYWtwb2ludElECisgICAgICAg
ICAgICAvLyBvZiB0aGUgcHJlLWV4aXN0aW5nIGJyZWFrcG9pbnQsIHdlIG5lZWQgdG8gcmV0dXJu
IG5vQnJlYWtwb2ludElECisgICAgICAgICAgICAvLyB0byBpbmRpY2F0ZSB0aGF0IHdlJ3JlIG5v
dCBjcmVhdGluZyBhIG5ldyBvbmUuCisgICAgICAgICAgICByZXR1cm4gbm9CcmVha3BvaW50SUQ7
CisgICAgICAgIH0KKworICAgIEJyZWFrcG9pbnRJRCBpZCA9ICsrbV90b3BCcmVha3BvaW50SUQ7
CisgICAgUkVMRUFTRV9BU1NFUlQoaWQgIT0gbm9CcmVha3BvaW50SUQpOworCisgICAgYnJlYWtw
b2ludC5pZCA9IGlkOworICAgIGFjdHVhbExpbmUgPSBsaW5lOworICAgIGFjdHVhbENvbHVtbiA9
IGNvbHVtbjsKKworICAgIGJyZWFrcG9pbnRzLmFwcGVuZChicmVha3BvaW50KTsKKyAgICBtX2Jy
ZWFrcG9pbnRJRFRvQnJlYWtwb2ludC5zZXQoaWQsICZicmVha3BvaW50cy5sYXN0KCkpOworCisg
ICAgdXBkYXRlTmVlZEZvck9wRGVidWdDYWxsYmFja3MoKTsKKworICAgIHJldHVybiBpZDsKK30K
Kwordm9pZCBEZWJ1Z2dlcjo6cmVtb3ZlQnJlYWtwb2ludChCcmVha3BvaW50SUQgaWQpCiB7Ci0g
ICAgQVNTRVJUKG51bWJlck9mQnJlYWtwb2ludHMgPj0gMCk7Ci0gICAgbV9udW1iZXJPZkJyZWFr
cG9pbnRzID0gbnVtYmVyT2ZCcmVha3BvaW50czsKKyAgICBBU1NFUlQoaWQgIT0gbm9CcmVha3Bv
aW50SUQpOworCisgICAgQnJlYWtwb2ludElEVG9CcmVha3BvaW50TWFwOjppdGVyYXRvciBpZEl0
ID0gbV9icmVha3BvaW50SURUb0JyZWFrcG9pbnQuZmluZChpZCk7CisgICAgQVNTRVJUKGlkSXQg
IT0gbV9icmVha3BvaW50SURUb0JyZWFrcG9pbnQuZW5kKCkpOworICAgIEJyZWFrcG9pbnQmIGJy
ZWFrcG9pbnQgPSAqaWRJdC0+dmFsdWU7CisKKyAgICBTb3VyY2VJRCBzb3VyY2VJRCA9IGJyZWFr
cG9pbnQuc291cmNlSUQ7CisgICAgQVNTRVJUKHNvdXJjZUlEKTsKKyAgICBTb3VyY2VJRFRvQnJl
YWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJRFRvQnJlYWtwb2ludHMuZmluZChz
b3VyY2VJRCk7CisgICAgQVNTRVJUKGl0ICE9IG1fc291cmNlSURUb0JyZWFrcG9pbnRzLmVuZCgp
KTsKKyAgICBMaW5lVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFs
dWUuZmluZChicmVha3BvaW50LmxpbmUpOworICAgIEFTU0VSVChicmVha3NJdCAhPSBpdC0+dmFs
dWUuZW5kKCkpOworCisgICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrcG9pbnRzID0gYnJlYWtz
SXQtPnZhbHVlOworICAgIHVuc2lnbmVkIGJyZWFrcG9pbnRzQ291bnQgPSBicmVha3BvaW50cy5z
aXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyZWFrcG9pbnRzQ291bnQ7IGkr
KykgeworICAgICAgICBpZiAoYnJlYWtwb2ludHNbaV0uaWQgPT0gYnJlYWtwb2ludC5pZCkgewor
ICAgICAgICAgICAgYnJlYWtwb2ludHMucmVtb3ZlKGkpOworICAgICAgICAgICAgbV9icmVha3Bv
aW50SURUb0JyZWFrcG9pbnQucmVtb3ZlKGlkSXQpOworCisgICAgICAgICAgICBpZiAoYnJlYWtw
b2ludHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgaXQtPnZhbHVlLnJlbW92ZShicmVh
a3NJdCk7CisgICAgICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgICAgIG1fc291cmNlSURUb0JyZWFrcG9pbnRzLnJlbW92ZShpdCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHVwZGF0
ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCk7CiB9CiAKLXZvaWQgRGVidWdnZXI6OnVwZGF0ZU5l
ZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCkKK2Jvb2wgRGVidWdnZXI6Omhhc0JyZWFrcG9pbnQoU291
cmNlSUQgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYgcG9zaXRpb24sIEJyZWFrcG9pbnQg
KmhpdEJyZWFrcG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKCFtX2JyZWFrcG9pbnRzQWN0aXZhdGVk
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJRFRvQnJlYWtwb2ludHMuZmluZChzb3VyY2VJ
RCk7CisgICAgaWYgKGl0ID09IG1fc291cmNlSURUb0JyZWFrcG9pbnRzLmVuZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBsaW5lID0gcG9zaXRpb24ubV9saW5lLnpl
cm9CYXNlZEludCgpOworICAgIHVuc2lnbmVkIGNvbHVtbiA9IHBvc2l0aW9uLm1fY29sdW1uLnpl
cm9CYXNlZEludCgpOworCisgICAgTGluZVRvQnJlYWtwb2ludHNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGJyZWFrc0l0ID0gaXQtPnZhbHVlLmZpbmQobGluZSk7CisgICAgaWYgKGJyZWFrc0l0ID09IGl0
LT52YWx1ZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBoaXQgPSBm
YWxzZTsKKyAgICBjb25zdCBCcmVha3BvaW50c0luTGluZSYgYnJlYWtwb2ludHMgPSBicmVha3NJ
dC0+dmFsdWU7CisgICAgdW5zaWduZWQgYnJlYWtwb2ludHNDb3VudCA9IGJyZWFrcG9pbnRzLnNp
emUoKTsKKyAgICB1bnNpZ25lZCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBicmVha3BvaW50c0Nv
dW50OyBpKyspIHsKKyAgICAgICAgdW5zaWduZWQgYnJlYWtMaW5lID0gYnJlYWtwb2ludHNbaV0u
bGluZTsKKyAgICAgICAgdW5zaWduZWQgYnJlYWtDb2x1bW4gPSBicmVha3BvaW50c1tpXS5jb2x1
bW47CisgICAgICAgIC8vIFNpbmNlIGZyb250ZW5kIHRydW5jYXRlcyB0aGUgaW5kZW50LCB0aGUg
Zmlyc3Qgc3RhdGVtZW50IGluIGEgbGluZSBtdXN0IG1hdGNoIHRoZSBicmVha3BvaW50IChsaW5l
LDApLgorICAgICAgICBpZiAoKGxpbmUgIT0gbV9sYXN0RXhlY3V0ZWRMaW5lICYmIGxpbmUgPT0g
YnJlYWtMaW5lICYmICFicmVha0NvbHVtbikKKyAgICAgICAgICAgIHx8IChsaW5lID09IGJyZWFr
TGluZSAmJiBjb2x1bW4gPT0gYnJlYWtDb2x1bW4pKSB7CisgICAgICAgICAgICBoaXQgPSB0cnVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFoaXQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChoaXRCcmVha3BvaW50KQorICAgICAgICAq
aGl0QnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzW2ldOworCisgICAgaWYgKGJyZWFrcG9pbnRzW2ld
LmNvbmRpdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgSlNWYWx1
ZSBleGNlcHRpb247CisgICAgSlNWYWx1ZSByZXN1bHQgPSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZh
bHVhdGVXaXRoQ2FsbEZyYW1lKG1fY3VycmVudENhbGxGcmFtZSwgYnJlYWtwb2ludHNbaV0uY29u
ZGl0aW9uLCBleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgLy8gQW4g
ZXJyb25lb3VzIGNvbmRpdGlvbiBjb3VudHMgYXMgImZhbHNlIi4KKyAgICAgICAgaGFuZGxlRXhj
ZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKG1fY3VycmVudENhbGxGcmFtZSwgZXhjZXB0aW9u
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnRvQm9v
bGVhbihtX2N1cnJlbnRDYWxsRnJhbWUpOworfQorCit2b2lkIERlYnVnZ2VyOjpjbGVhckJyZWFr
cG9pbnRzKCkKK3sKKyAgICBtX3RvcEJyZWFrcG9pbnRJRCA9IG5vQnJlYWtwb2ludElEOworICAg
IG1fYnJlYWtwb2ludElEVG9CcmVha3BvaW50LmNsZWFyKCk7CisgICAgbV9zb3VyY2VJRFRvQnJl
YWtwb2ludHMuY2xlYXIoKTsKKworICAgIHVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCk7
Cit9CisKK3ZvaWQgRGVidWdnZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZh
dGVkKQoreworICAgIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQgPSBhY3RpdmF0ZWQ7Cit9CisKK3Zv
aWQgRGVidWdnZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZSBwYXVzZSkKK3sKKyAgICBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPSBwYXVzZTsKK30K
Kwordm9pZCBEZWJ1Z2dlcjo6c2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQoYm9vbCBwYXVzZSkKK3sK
KyAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gcGF1c2U7CisgICAgaWYgKHBhdXNlKQorICAg
ICAgICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6YnJlYWtQcm9n
cmFtKCkKK3sKKyAgICBpZiAobV9pc1BhdXNlZCB8fCAhbV9jdXJyZW50Q2FsbEZyYW1lKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKKyAgICBz
ZXRTaG91bGRQYXVzZSh0cnVlKTsKKyAgICBwYXVzZUlmTmVlZGVkKG1fY3VycmVudENhbGxGcmFt
ZSk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OmNvbnRpbnVlUHJvZ3JhbSgpCit7CisgICAgaWYgKCFt
X2lzUGF1c2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50
ID0gZmFsc2U7CisgICAgbm90aWZ5RG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cygpOworfQor
Cit2b2lkIERlYnVnZ2VyOjpzdGVwSW50b1N0YXRlbWVudCgpCit7CisgICAgaWYgKCFtX2lzUGF1
c2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gdHJ1
ZTsKKyAgICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKKyAgICBub3RpZnlEb25lUHJvY2Vzc2luZ0Rl
YnVnZ2VyRXZlbnRzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnN0ZXBPdmVyU3RhdGVtZW50KCkK
K3sKKyAgICBpZiAoIW1faXNQYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGF1c2VP
bkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZTsKKyAgICBub3RpZnlEb25lUHJvY2Vzc2lu
Z0RlYnVnZ2VyRXZlbnRzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnN0ZXBPdXRPZkZ1bmN0aW9u
KCkKK3sKKyAgICBpZiAoIW1faXNQYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGF1
c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZSA/IG1fY3VycmVudENhbGxGcmFtZS0+
Y2FsbGVyRnJhbWVTa2lwcGluZ1ZNRW50cnlTZW50aW5lbCgpIDogMDsKKyAgICBub3RpZnlEb25l
UHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnVwZGF0ZUNh
bGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBtX2N1cnJlbnRDYWxsRnJhbWUg
PSBjYWxsRnJhbWU7CisgICAgU291cmNlSUQgc291cmNlSUQgPSBEZWJ1Z2dlckNhbGxGcmFtZTo6
c291cmNlSURGb3JDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKyAgICBpZiAobV9sYXN0RXhlY3V0ZWRT
b3VyY2VJRCAhPSBzb3VyY2VJRCkgeworICAgICAgICBtX2xhc3RFeGVjdXRlZExpbmUgPSAtMTsK
KyAgICAgICAgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJRCA9IHNvdXJjZUlEOworICAgIH0KK30KKwor
dm9pZCBEZWJ1Z2dlcjo6dXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKK3sKKyAgICB1cGRhdGVDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKyAgICBwYXVz
ZUlmTmVlZGVkKGNhbGxGcmFtZSk7CisgICAgaWYgKCFuZWVkc09wRGVidWdDYWxsYmFja3MoKSkK
KyAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gMDsKK30KKwordm9pZCBEZWJ1Z2dlcjo6cGF1
c2VJZk5lZWRlZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBpZiAobV9pc1BhdXNlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgSlNHbG9iYWxPYmplY3QqIGR5bmFtaWNHbG9iYWxPYmpl
Y3QgPSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKTsKKyAgICBpZiAoIW5lZWRQYXVz
ZUhhbmRsaW5nKGR5bmFtaWNHbG9iYWxPYmplY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBC
cmVha3BvaW50IGJyZWFrcG9pbnQ7CisgICAgYm9vbCBkaWRIaXRCcmVha3BvaW50ID0gZmFsc2U7
CisgICAgYm9vbCBwYXVzZU5vdyA9IG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQ7CisgICAgcGF1c2VO
b3cgfD0gKG1fcGF1c2VPbkNhbGxGcmFtZSA9PSBtX2N1cnJlbnRDYWxsRnJhbWUpOworCisgICAg
aW50cHRyX3Qgc291cmNlSUQgPSBEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSURGb3JDYWxsRnJh
bWUobV9jdXJyZW50Q2FsbEZyYW1lKTsKKyAgICBUZXh0UG9zaXRpb24gcG9zaXRpb24gPSBEZWJ1
Z2dlckNhbGxGcmFtZTo6cG9zaXRpb25Gb3JDYWxsRnJhbWUobV9jdXJyZW50Q2FsbEZyYW1lKTsK
KyAgICBwYXVzZU5vdyB8PSBkaWRIaXRCcmVha3BvaW50ID0gaGFzQnJlYWtwb2ludChzb3VyY2VJ
RCwgcG9zaXRpb24sICZicmVha3BvaW50KTsKKyAgICBtX2xhc3RFeGVjdXRlZExpbmUgPSBwb3Np
dGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50KCk7CisgICAgaWYgKCFwYXVzZU5vdykKKyAgICAgICAg
cmV0dXJuOworCisgICAgRGVidWdnZXJDYWxsRnJhbWVTY29wZSBkZWJ1Z2dlckNhbGxGcmFtZVNj
b3BlKCp0aGlzKTsKKworICAgIGlmIChkaWRIaXRCcmVha3BvaW50KSB7CisgICAgICAgIGhhbmRs
ZUJyZWFrcG9pbnRIaXQoYnJlYWtwb2ludCk7CisgICAgICAgIGlmIChicmVha3BvaW50LmF1dG9D
b250aW51ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3BhdXNlT25DYWxs
RnJhbWUgPSAwOworICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSBmYWxzZTsKKyAgICBtX2lz
UGF1c2VkID0gdHJ1ZTsKKworICAgIGhhbmRsZVBhdXNlKG1fcmVhc29uRm9yUGF1c2UsIGR5bmFt
aWNHbG9iYWxPYmplY3QpOworCisgICAgaWYgKCFtX3BhdXNlT25OZXh0U3RhdGVtZW50ICYmICFt
X3BhdXNlT25DYWxsRnJhbWUpIHsKKyAgICAgICAgc2V0U2hvdWxkUGF1c2UoZmFsc2UpOworICAg
ICAgICBpZiAoIW5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygpKQorICAgICAgICAgICAgbV9jdXJyZW50
Q2FsbEZyYW1lID0gMDsKKyAgICB9CisKKyAgICBtX2lzUGF1c2VkID0gZmFsc2U7Cit9CisKK3Zv
aWQgRGVidWdnZXI6OmV4Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNl
cHRpb24sIGJvb2wgaGFzSGFuZGxlcikKK3sKKyAgICBpZiAobV9pc1BhdXNlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUGF1c2VSZWFzb25EZWNsYXJhdGlvbiByZWFzb24oKnRoaXMsIFBhdXNl
ZEZvckV4Y2VwdGlvbik7CisgICAgaWYgKG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9PSBQYXVz
ZU9uQWxsRXhjZXB0aW9ucyB8fCAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25V
bmNhdWdodEV4Y2VwdGlvbnMgJiYgIWhhc0hhbmRsZXIpKSB7CisgICAgICAgIG1fcGF1c2VPbk5l
eHRTdGF0ZW1lbnQgPSB0cnVlOworICAgICAgICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKKyAgICB9
CisKKyAgICBtX2hhc0hhbmRsZXJGb3JFeGNlcHRpb25DYWxsYmFjayA9IHRydWU7CisgICAgbV9j
dXJyZW50RXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNl
SWZOZWVkZWQoY2FsbEZyYW1lKTsKKyAgICBtX2N1cnJlbnRFeGNlcHRpb24gPSBKU1ZhbHVlKCk7
CisgICAgbV9oYXNIYW5kbGVyRm9yRXhjZXB0aW9uQ2FsbGJhY2sgPSBmYWxzZTsKK30KKwordm9p
ZCBEZWJ1Z2dlcjo6YXRTdGF0ZW1lbnQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgaWYg
KG1faXNQYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIFBhdXNlUmVhc29uRGVjbGFyYXRp
b24gcmVhc29uKCp0aGlzLCBQYXVzZWRBdFN0YXRlbWVudCk7CisgICAgdXBkYXRlQ2FsbEZyYW1l
QW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOworfQorCit2b2lkIERlYnVnZ2VyOjpjYWxsRXZl
bnQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgaWYgKG1faXNQYXVzZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIFBhdXNlUmVhc29uRGVjbGFyYXRpb24gcmVhc29uKCp0aGlzLCBQYXVz
ZWRBZnRlckNhbGwpOworICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZy
YW1lKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6cmV0dXJuRXZlbnQoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCit7CisgICAgaWYgKG1faXNQYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIFBhdXNl
UmVhc29uRGVjbGFyYXRpb24gcmVhc29uKCp0aGlzLCBQYXVzZWRCZWZvcmVSZXR1cm4pOworICAg
IHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKKworICAgIC8vIGRl
dGFjaCBtYXkgaGF2ZSBiZWVuIGNhbGxlZCBkdXJpbmcgcGF1c2VJZk5lZWRlZAorICAgIGlmICgh
bV9jdXJyZW50Q2FsbEZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUcmVhdCBzdGVw
cGluZyBvdmVyIGEgcmV0dXJuIHN0YXRlbWVudCBsaWtlIHN0ZXBwaW5nIG91dC4KKyAgICBpZiAo
bV9jdXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VPbkNhbGxGcmFtZSkKKyAgICAgICAgbV9wYXVz
ZU9uQ2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZVNraXBwaW5nVk1F
bnRyeVNlbnRpbmVsKCk7CisKKyAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxs
RnJhbWUtPmNhbGxlckZyYW1lU2tpcHBpbmdWTUVudHJ5U2VudGluZWwoKTsKK30KKwordm9pZCBE
ZWJ1Z2dlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAg
IGlmIChtX2lzUGF1c2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBQYXVzZVJlYXNvbkRlY2xh
cmF0aW9uIHJlYXNvbigqdGhpcywgUGF1c2VkQXRTdGFydE9mUHJvZ3JhbSk7CisgICAgLy8gRklY
TUU6IFRoaXMgY2hlY2sgZm9yIHdoZXRoZXIgd2UncmUgZGVidWdnaW5nIGEgd29ya2VyIHRocmVh
ZCBpcyBhIHdvcmthcm91bmQKKyAgICAvLyBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMjYzNy4gUmVtb3ZlIGl0IHdoZW4gd2UgcmV3b3JrCisgICAgLy8gdGhl
IGRlYnVnZ2VyIGltcGxlbWVudGF0aW9uIHRvIG5vdCByZXF1aXJlIGNhbGxiYWNrcy4KKyAgICBp
ZiAoIW1faXNJbldvcmtlclRocmVhZCkKKyAgICAgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJ
Zk5lZWRlZChjYWxsRnJhbWUpOworICAgIGVsc2UgaWYgKG5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygp
KQorICAgICAgICB1cGRhdGVDYWxsRnJhbWUoY2FsbEZyYW1lKTsKK30KKwordm9pZCBEZWJ1Z2dl
cjo6ZGlkRXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgaWYgKG1f
aXNQYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIFBhdXNlUmVhc29uRGVjbGFyYXRpb24g
cmVhc29uKCp0aGlzLCBQYXVzZWRBdEVuZE9mUHJvZ3JhbSk7CisgICAgdXBkYXRlQ2FsbEZyYW1l
QW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOworCisgICAgLy8gVHJlYXQgc3RlcHBpbmcgb3Zl
ciB0aGUgZW5kIG9mIGEgcHJvZ3JhbSBsaWtlIHN0ZXBwaW5nIG91dC4KKyAgICBpZiAoIW1fY3Vy
cmVudENhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2N1cnJlbnRDYWxsRnJh
bWUgPT0gbV9wYXVzZU9uQ2FsbEZyYW1lKSB7CisgICAgICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9
IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWVTa2lwcGluZ1ZNRW50cnlTZW50aW5lbCgp
OworICAgICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZVNraXBwaW5nVk1FbnRyeVNlbnRpbmVsKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OmRp
ZFJlYWNoQnJlYWtwb2ludChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBpZiAobV9pc1Bh
dXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGF1c2VSZWFzb25EZWNsYXJhdGlvbiByZWFz
b24oKnRoaXMsIFBhdXNlZEZvckJyZWFrcG9pbnQpOworICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1l
bnQgPSB0cnVlOworICAgIHNldFNob3VsZFBhdXNlKHRydWUpOworICAgIHVwZGF0ZUNhbGxGcmFt
ZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKK30KKworRGVidWdnZXJDYWxsRnJhbWUqIERl
YnVnZ2VyOjpjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUoKSBjb25zdAogewotICAgIG1fbmVlZHNP
cERlYnVnQ2FsbGJhY2tzID0gbV9zaG91bGRQYXVzZSB8fCBtX251bWJlck9mQnJlYWtwb2ludHM7
CisgICAgQVNTRVJUKG1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lKTsKKyAgICByZXR1cm4gbV9j
dXJyZW50RGVidWdnZXJDYWxsRnJhbWUuZ2V0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHJldmlzaW9u
IDE1ODg2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAw
MSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKQEAgLTIyLDYzICsyMiwxNjggQEAKICNpZm5kZWYgRGVidWdnZXJfaAogI2RlZmlu
ZSBEZWJ1Z2dlcl9oCiAKKyNpbmNsdWRlICJCcmVha3BvaW50LmgiCisjaW5jbHVkZSAiRGVidWdn
ZXJQcmltaXRpdmVzLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBEZWJ1Z2dlckNhbGxGcmFtZTsKIGNsYXNzIEV4ZWNTdGF0ZTsKLWNsYXNzIFZN
OwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBKU1ZhbHVlOwogY2xhc3MgU291cmNlUHJv
dmlkZXI7CitjbGFzcyBWTTsKIAogdHlwZWRlZiBFeGVjU3RhdGUgQ2FsbEZyYW1lOwogCiBjbGFz
cyBKU19FWFBPUlRfUFJJVkFURSBEZWJ1Z2dlciB7CiBwdWJsaWM6Ci0gICAgRGVidWdnZXIoKTsK
KyAgICBEZWJ1Z2dlcihib29sIGlzSW5Xb3JrZXJUaHJlYWQgPSBmYWxzZSk7CiAgICAgdmlydHVh
bCB+RGVidWdnZXIoKTsKIAogICAgIGJvb2wgbmVlZHNPcERlYnVnQ2FsbGJhY2tzKCkgY29uc3Qg
eyByZXR1cm4gbV9uZWVkc09wRGVidWdDYWxsYmFja3M7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90
IG5lZWRzT3BEZWJ1Z0NhbGxiYWNrc09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihE
ZWJ1Z2dlciwgbV9uZWVkc09wRGVidWdDYWxsYmFja3MpOyB9CiAKLSAgICBib29sIHNob3VsZFBh
dXNlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQYXVzZTsgfQotICAgIHZvaWQgc2V0U2hvdWxk
UGF1c2UoYm9vbCk7Ci0KLSAgICBib29sIG5lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKCkgY29uc3Qg
eyByZXR1cm4gbV9uZWVkc0V4Y2VwdGlvbkNhbGxiYWNrczsgfQotICAgIHZvaWQgc2V0TmVlZHNF
eGNlcHRpb25DYWxsYmFja3MoYm9vbCk7CisgICAgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSogY3Vy
cmVudERlYnVnZ2VyQ2FsbEZyYW1lKCkgY29uc3Q7CisgICAgYm9vbCBoYXNIYW5kbGVyRm9yRXhj
ZXB0aW9uQ2FsbGJhY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmVhc29uRm9y
UGF1c2UgPT0gUGF1c2VkRm9yRXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1faGFzSGFuZGxl
ckZvckV4Y2VwdGlvbkNhbGxiYWNrOworICAgIH0KKyAgICBKU1ZhbHVlIGN1cnJlbnRFeGNlcHRp
b24oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmVhc29uRm9yUGF1c2UgPT0gUGF1c2VkRm9y
RXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEV4Y2VwdGlvbjsKKyAgICB9CiAK
LSAgICB2b2lkIGluY051bWJlck9mQnJlYWtwb2ludHMoKSB7IHVwZGF0ZU51bWJlck9mQnJlYWtw
b2ludHMobV9udW1iZXJPZkJyZWFrcG9pbnRzICsgMSk7IH0KLSAgICB2b2lkIGRlY051bWJlck9m
QnJlYWtwb2ludHMoKSAgeyB1cGRhdGVOdW1iZXJPZkJyZWFrcG9pbnRzKG1fbnVtYmVyT2ZCcmVh
a3BvaW50cyAtIDEpOyB9Ci0gICAgdm9pZCB1cGRhdGVOdW1iZXJPZkJyZWFrcG9pbnRzKGludCk7
CisgICAgYm9vbCBuZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fcGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZSAhPSBEb250UGF1c2VPbkV4Y2VwdGlvbnM7IH0KIAogICAgIHZv
aWQgYXR0YWNoKEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaChKU0ds
b2JhbE9iamVjdCopOwogCisgICAgQnJlYWtwb2ludElEIHNldEJyZWFrcG9pbnQoQnJlYWtwb2lu
dCwgdW5zaWduZWQmIGFjdHVhbExpbmUsIHVuc2lnbmVkJiBhY3R1YWxDb2x1bW4pOworICAgIHZv
aWQgcmVtb3ZlQnJlYWtwb2ludChCcmVha3BvaW50SUQpOworICAgIHZvaWQgY2xlYXJCcmVha3Bv
aW50cygpOworICAgIHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoYm9vbCk7CisgICAgdm9p
ZCBhY3RpdmF0ZUJyZWFrcG9pbnRzKCkgeyBzZXRCcmVha3BvaW50c0FjdGl2YXRlZCh0cnVlKTsg
fQorICAgIHZvaWQgZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCkgeyBzZXRCcmVha3BvaW50c0FjdGl2
YXRlZChmYWxzZSk7IH0KKworICAgIGVudW0gUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSB7CisgICAg
ICAgIERvbnRQYXVzZU9uRXhjZXB0aW9ucywKKyAgICAgICAgUGF1c2VPbkFsbEV4Y2VwdGlvbnMs
CisgICAgICAgIFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnMKKyAgICB9OworICAgIFBhdXNlT25F
eGNlcHRpb25zU3RhdGUgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZTsgfQorICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKTsKKworICAgIHZvaWQgc2V0UGF1c2VPbk5leHRT
dGF0ZW1lbnQoYm9vbCk7CisgICAgdm9pZCBicmVha1Byb2dyYW0oKTsKKyAgICB2b2lkIGNvbnRp
bnVlUHJvZ3JhbSgpOworICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnQoKTsKKyAgICB2b2lkIHN0
ZXBPdmVyU3RhdGVtZW50KCk7CisgICAgdm9pZCBzdGVwT3V0T2ZGdW5jdGlvbigpOworCisgICAg
Ym9vbCBpc1BhdXNlZCgpIHsgcmV0dXJuIG1faXNQYXVzZWQ7IH0KKwogICAgIHZpcnR1YWwgdm9p
ZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgU291cmNlUHJvdmlkZXIqLCBpbnQgZXJyb3JMaW5l
TnVtYmVyLCBjb25zdCBXVEY6OlN0cmluZyYgZXJyb3JNZXNzYWdlKSA9IDA7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgZXhjZXB0aW9uKENhbGxGcmFtZSosIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIGJv
b2wgaGFzSGFuZGxlcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhdFN0YXRlbWVudChDYWxsRnJh
bWUqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGxFdmVudChDYWxsRnJhbWUqKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJldHVybkV2ZW50KENhbGxGcmFtZSopID0gMDsKLQotICAgIHZpcnR1
YWwgdm9pZCB3aWxsRXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1lKikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGRpZFJlYWNoQnJlYWtwb2ludChDYWxsRnJhbWUqKSA9IDA7CisgICAgdm9pZCBleGNlcHRpb24o
Q2FsbEZyYW1lKiwgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgYm9vbCBoYXNIYW5kbGVyKTsKKyAg
ICB2b2lkIGF0U3RhdGVtZW50KENhbGxGcmFtZSopOworICAgIHZvaWQgY2FsbEV2ZW50KENhbGxG
cmFtZSopOworICAgIHZvaWQgcmV0dXJuRXZlbnQoQ2FsbEZyYW1lKik7CisgICAgdm9pZCB3aWxs
RXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1lKik7CisgICAgdm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShD
YWxsRnJhbWUqKTsKKyAgICB2b2lkIGRpZFJlYWNoQnJlYWtwb2ludChDYWxsRnJhbWUqKTsKIAog
ICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVk0qKTsKIAorcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhKU0dsb2JhbE9iamVjdCopIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUJyZWFrcG9pbnRIaXQoY29uc3QgQnJl
YWtwb2ludCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25JbkJyZWFrcG9p
bnRDb25kaXRpb24oRXhlY1N0YXRlKiwgSlNWYWx1ZSBleGNlcHRpb24pIGNvbnN0IHsgVU5VU0VE
X1BBUkFNKGV4Y2VwdGlvbik7IH0KKworICAgIGVudW0gUmVhc29uRm9yUGF1c2UgeworICAgICAg
ICBOb3RQYXVzZWQsCisgICAgICAgIFBhdXNlZEZvckV4Y2VwdGlvbiwKKyAgICAgICAgUGF1c2Vk
QXRTdGF0ZW1lbnQsCisgICAgICAgIFBhdXNlZEFmdGVyQ2FsbCwKKyAgICAgICAgUGF1c2VkQmVm
b3JlUmV0dXJuLAorICAgICAgICBQYXVzZWRBdFN0YXJ0T2ZQcm9ncmFtLAorICAgICAgICBQYXVz
ZWRBdEVuZE9mUHJvZ3JhbSwKKyAgICAgICAgUGF1c2VkRm9yQnJlYWtwb2ludAorICAgIH07CisK
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGF1c2UoUmVhc29uRm9yUGF1c2UsIEpTR2xvYmFsT2Jq
ZWN0KikgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJF
dmVudHMoKSB7IH0KKwogcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8QnJlYWtwb2ludElE
LCBCcmVha3BvaW50Kj4gQnJlYWtwb2ludElEVG9CcmVha3BvaW50TWFwOworCisgICAgdHlwZWRl
ZiBWZWN0b3I8QnJlYWtwb2ludD4gQnJlYWtwb2ludHNJbkxpbmU7CisgICAgdHlwZWRlZiBIYXNo
TWFwPHVuc2lnbmVkLCBCcmVha3BvaW50c0luTGluZSwgV1RGOjpJbnRIYXNoPGludD4sIFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50Pj4gTGluZVRvQnJlYWtwb2ludHNNYXA7
CisgICAgdHlwZWRlZiBIYXNoTWFwPFNvdXJjZUlELCBMaW5lVG9CcmVha3BvaW50c01hcD4gU291
cmNlSURUb0JyZWFrcG9pbnRzTWFwOworCisgICAgY2xhc3MgUGF1c2VSZWFzb25EZWNsYXJhdGlv
biB7CisgICAgcHVibGljOgorICAgICAgICBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uKERlYnVnZ2Vy
JiBkZWJ1Z2dlciwgUmVhc29uRm9yUGF1c2UgcmVhc29uKQorICAgICAgICAgICAgOiBtX2RlYnVn
Z2VyKGRlYnVnZ2VyKQorICAgICAgICB7CisgICAgICAgICAgICBtX2RlYnVnZ2VyLm1fcmVhc29u
Rm9yUGF1c2UgPSByZWFzb247CisgICAgICAgIH0KKworICAgICAgICB+UGF1c2VSZWFzb25EZWNs
YXJhdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZGVidWdnZXIubV9yZWFzb25Gb3JQ
YXVzZSA9IE5vdFBhdXNlZDsKKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIERlYnVn
Z2VyJiBtX2RlYnVnZ2VyOworICAgIH07CisKKyAgICBib29sIGhhc0JyZWFrcG9pbnQoU291cmNl
SUQsIGNvbnN0IFRleHRQb3NpdGlvbiYsIEJyZWFrcG9pbnQqIGhpdEJyZWFrcG9pbnQpIGNvbnN0
OworCisgICAgYm9vbCBzaG91bGRQYXVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUGF1c2U7
IH0KKyAgICB2b2lkIHNldFNob3VsZFBhdXNlKGJvb2wpOwogICAgIHZvaWQgdXBkYXRlTmVlZEZv
ck9wRGVidWdDYWxsYmFja3MoKTsKIAorICAgIC8vIFRoZXNlIHVwZGF0ZSBmdW5jdGlvbnMgYXJl
IG9ubHkgbmVlZGVkIGJlY2F1c2Ugb3VyIGN1cnJlbnQgYnJlYWtwb2ludHMgYXJlCisgICAgLy8g
a2V5J2VkIG9mZiB0aGUgc291cmNlIHBvc2l0aW9uIGluc3RlYWQgb2YgdGhlIGJ5dGVjb2RlIFBD
LiBUaGlzIGVuc3VyZXMKKyAgICAvLyB0aGF0IHdlIGRvbid0IGJyZWFrIG9uIHRoZSBzYW1lIGxp
bmUgbW9yZSB0aGFuIG9uY2UuIE9uY2Ugd2Ugc3dpdGNoIHRvIGEKKyAgICAvLyBieXRlY29kZSBQ
QyBrZXknZWQgYnJlYWtwb2ludCwgd2Ugd2lsbCBub3QgbmVlZCB0aGVzZSBhbnltb3JlIGFuZCBz
aG91bGQKKyAgICAvLyBiZSBhYmxlIHRvIHJlbW92ZSB0aGVtLgorICAgIHZvaWQgdXBkYXRlQ2Fs
bEZyYW1lKEpTQzo6Q2FsbEZyYW1lKik7CisgICAgdm9pZCB1cGRhdGVDYWxsRnJhbWVBbmRQYXVz
ZUlmTmVlZGVkKEpTQzo6Q2FsbEZyYW1lKik7CisgICAgdm9pZCBwYXVzZUlmTmVlZGVkKEpTQzo6
Q2FsbEZyYW1lKik7CisKICAgICBIYXNoU2V0PEpTR2xvYmFsT2JqZWN0Kj4gbV9nbG9iYWxPYmpl
Y3RzOwogCi0gICAgYm9vbCBtX25lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzOworICAgIFBhdXNlT25F
eGNlcHRpb25zU3RhdGUgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOworICAgIGJvb2wgbV9wYXVz
ZU9uTmV4dFN0YXRlbWVudCA6IDE7CisgICAgYm9vbCBtX2lzUGF1c2VkIDogMTsKKyAgICBib29s
IG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQgOiAxOworICAgIGJvb2wgbV9oYXNIYW5kbGVyRm9yRXhj
ZXB0aW9uQ2FsbGJhY2sgOiAxOworICAgIGJvb2wgbV9pc0luV29ya2VyVGhyZWFkIDogMTsKKwor
ICAgIFJlYXNvbkZvclBhdXNlIG1fcmVhc29uRm9yUGF1c2U7CisgICAgSlNWYWx1ZSBtX2N1cnJl
bnRFeGNlcHRpb247CisgICAgQ2FsbEZyYW1lKiBtX3BhdXNlT25DYWxsRnJhbWU7CisgICAgQ2Fs
bEZyYW1lKiBtX2N1cnJlbnRDYWxsRnJhbWU7CisgICAgdW5zaWduZWQgbV9sYXN0RXhlY3V0ZWRM
aW5lOworICAgIFNvdXJjZUlEIG1fbGFzdEV4ZWN1dGVkU291cmNlSUQ7CisKKyAgICBCcmVha3Bv
aW50SUQgbV90b3BCcmVha3BvaW50SUQ7CisgICAgQnJlYWtwb2ludElEVG9CcmVha3BvaW50TWFw
IG1fYnJlYWtwb2ludElEVG9CcmVha3BvaW50OworICAgIFNvdXJjZUlEVG9CcmVha3BvaW50c01h
cCBtX3NvdXJjZUlEVG9CcmVha3BvaW50czsKKwogICAgIGJvb2wgbV9uZWVkc09wRGVidWdDYWxs
YmFja3M7CiAgICAgYm9vbCBtX3Nob3VsZFBhdXNlOwotICAgIGludCBtX251bWJlck9mQnJlYWtw
b2ludHM7CiAKKyAgICBSZWZQdHI8SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZT4gbV9jdXJyZW50RGVi
dWdnZXJDYWxsRnJhbWU7CisKKyAgICBmcmllbmQgY2xhc3MgRGVidWdnZXJDYWxsRnJhbWVTY29w
ZTsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJh
bWUuY3BwCShyZXZpc2lvbiAxNTg4NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSwxMSArODUsMTEg
QEAgSlNDOjpKU0dsb2JhbE9iamVjdCogRGVidWdnZXJDYWxsRnJhbWU6OgogICAgIHJldHVybiBt
X2NhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOwogfQogCi1pbnRwdHJfdCBEZWJ1Z2dl
ckNhbGxGcmFtZTo6c291cmNlSUQoKSBjb25zdAorU291cmNlSUQgRGVidWdnZXJDYWxsRnJhbWU6
OnNvdXJjZUlEKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICBpZiAoIWlz
VmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBub1NvdXJjZUlEOwog
ICAgIHJldHVybiBzb3VyY2VJREZvckNhbGxGcmFtZShtX2NhbGxGcmFtZSk7CiB9CiAKQEAgLTE4
NSwxMiArMTg1LDEyIEBAIFRleHRQb3NpdGlvbiBEZWJ1Z2dlckNhbGxGcmFtZTo6cG9zaXRpb24K
ICAgICByZXR1cm4gVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChm
dW5jdG9yLmxpbmUoKSksIE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChmdW5jdG9yLmNv
bHVtbigpKSk7CiB9CiAKLWludHB0cl90IERlYnVnZ2VyQ2FsbEZyYW1lOjpzb3VyY2VJREZvckNh
bGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK1NvdXJjZUlEIERlYnVnZ2VyQ2FsbEZyYW1l
Ojpzb3VyY2VJREZvckNhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBBU1NF
UlQoY2FsbEZyYW1lKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7CiAgICAgaWYgKCFjb2RlQmxvY2spCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbm9Tb3VyY2VJRDsKICAgICByZXR1cm4gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+c291cmNlSUQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE1ODg2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxMiArMzAsMTMgQEAKICNkZWZpbmUgRGVidWdnZXJDYWxsRnJhbWVfaAog
CiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiRGVidWdnZXJQcmltaXRpdmVzLmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
LSAgICAKKwogY2xhc3MgRGVidWdnZXJDYWxsRnJhbWUgOiBwdWJsaWMgUmVmQ291bnRlZDxEZWJ1
Z2dlckNhbGxGcmFtZT4gewogcHVibGljOgogICAgIGVudW0gVHlwZSB7IFByb2dyYW1UeXBlLCBG
dW5jdGlvblR5cGUgfTsKQEAgLTUwLDcgKzUxLDcgQEAgcHVibGljOgogICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsRnJhbWU7IH0KICAgICBKU19FWFBPUlRf
UFJJVkFURSBQYXNzUmVmUHRyPERlYnVnZ2VyQ2FsbEZyYW1lPiBjYWxsZXJGcmFtZSgpOwogICAg
IEV4ZWNTdGF0ZSogZXhlYygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1lOyB9Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgaW50cHRyX3Qgc291cmNlSUQoKSBjb25zdDsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBTb3VyY2VJRCBzb3VyY2VJRCgpIGNvbnN0OwogCiAgICAgLy8gbGluZSBhbmQgY29s
dW1uIGFyZSBpbiBiYXNlIDAgZS5nLiB0aGUgZmlyc3QgbGluZSBpcyBsaW5lIDAuCiAgICAgaW50
IGxpbmUoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKTsg
fQpAQCAtNzIsNyArNzMsNyBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgSlNWYWx1ZSBldmFsdWF0ZVdpdGhDYWxsRnJhbWUoQ2FsbEZyYW1lKiwgY29uc3QgU3RyaW5n
JiBzY3JpcHQsIEpTVmFsdWUmIGV4Y2VwdGlvbik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFRleHRQb3NpdGlvbiBwb3NpdGlvbkZvckNhbGxGcmFtZShDYWxsRnJhbWUqKTsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgaW50cHRyX3Qgc291cmNlSURGb3JDYWxsRnJhbWUoQ2Fs
bEZyYW1lKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNvdXJjZUlEIHNvdXJjZUlE
Rm9yQ2FsbEZyYW1lKENhbGxGcmFtZSopOwogICAgIHN0YXRpYyBKU1ZhbHVlIHRoaXNWYWx1ZUZv
ckNhbGxGcmFtZShDYWxsRnJhbWUqKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclByaW1pdGl2ZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJQcmltaXRpdmVzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJQcmltaXRpdmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERlYnVnZ2VyUHJpbWl0aXZlc19oCisj
ZGVmaW5lIERlYnVnZ2VyUHJpbWl0aXZlc19oCisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgaW50cHRyX3QgU291cmNlSUQ7Citz
dGF0aWMgY29uc3QgU291cmNlSUQgbm9Tb3VyY2VJRCA9IDA7CisKK3R5cGVkZWYgaW50MzJfdCBC
cmVha3BvaW50SUQ7CitzdGF0aWMgY29uc3QgQnJlYWtwb2ludElEIG5vQnJlYWtwb2ludElEID0g
MDsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKKworI2VuZGlmIC8vIERlYnVnZ2VyUHJpbWl0aXZlc19oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNTg4ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSw2NCBAQAorMjAxMy0xMS0wNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBh
cHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBicmVha3BvaW50IChhbmQgZXhjZXB0aW9uIGJyZWFr
KSBmdW5jdGlvbmFsaXR5IGludG8gSlNDOjpEZWJ1Z2dlci4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTc5Ni4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgLSBJ
biBTY3JpcHREZWJ1Z1NlcnZlciBhbmQgSlNDOjpEZWJ1Z2dlciwgU291cmNlSUQgYW5kIEJyZWFr
cG9pbnRJRCBhcmUKKyAgICAgICAgICBub3cgbnVtZXJpYyB0b2tlbnMuCisKKyAgICAgICAgLSBK
U0M6OkRlYnVnZ2VyIG5vdyB0cmFja3MgdXNlciBkZWZpbmVkIGJyZWFrcG9pbnRzIGluIGEgSlND
OjpCcmVha3BvaW50CisgICAgICAgICAgcmVjb3JkLiBQcmV2aW91c2x5LCB0aGlzIGluZm8gaXMg
dHJhY2tlZCBpbiB0aGUgU2NyaXB0QnJlYWtwb2ludCByZWNvcmQKKyAgICAgICAgICBpbiBTY3Jp
cHREZWJ1Z1NlcnZlci4gVGhlIG9ubHkgZWxlbWVudCBvZiBTY3JpcHRCcmVha3BvaW50IHRoYXQg
aXMgbm90CisgICAgICAgICAgYmVpbmcgdHJhY2tlZCBieSBKU0M6OkJyZWFrcG9pbnQgaXMgdGhl
IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24uCisgICAgICAgICAgICAgVGhlIFNjcmlwdEJyZWFrcG9p
bnRBY3Rpb24gaXMgc3RpbGwgdHJhY2tlZCBieSB0aGUgU2NyaXB0RGVidWdTZXJ2ZXIKKyAgICAg
ICAgICBpbiBhIGxpc3Qga2V5ZWQgb24gdGhlIGNvcnJlc3BvbmRpbmcgQnJlYWtwb2ludElELgor
ICAgICAgICAgICAgIFRoZSBTY3JpcHRCcmVha3BvaW50IHJlY29yZCBpcyBub3cgb25seSB1c2Vk
IGFzIGEgbWVhbnMgb2YgcGFzc2luZworICAgICAgICAgIGJyZWFrcG9pbnQgcGFyYW1hdGVycyB0
byB0aGUgU2NyaXB0RGVidWdTZXJ2ZXIuCisKKyAgICAgICAgLSBTY3JpcHREZWJ1Z1NlcnZlciBu
b3cgbm8gbG9uZ2VyIGFjY2Vzc2VzIHRoZSBKU0M6OkNhbGxGcmFtZSogZGlyZWN0bHkuCisgICAg
ICAgICAgSXQgYWx3YXlzIGdvZXMgdGhyb3VnaCB0aGUgRGVidWdnZXJDYWxsRnJhbWUuCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2o6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
ai5maWx0ZXJzOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9CcmVha3BvaW50SUQuaDogQWRkZWQuCisgICAgICAgICog
YmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RGVidWdTZXJ2ZXI6OlNjcmlwdERlYnVnU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dERlYnVnU2VydmVyOjpjbGVhckJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dERlYnVnU2VydmVyOjpkaXNwYXRjaERpZENvbnRpbnVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhcnNlU291cmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdERlYnVnU2VydmVyOjpub3RpZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpuZWVkUGF1c2VIYW5kbGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlQnJlYWtwb2lu
dEhpdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlRXhjZXB0
aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVn
U2VydmVyOjpoYW5kbGVQYXVzZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdT
ZXJ2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Tb3VyY2VJRC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6V29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpwYXJzZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2xlYXIpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaDoKKwogMjAxMy0xMS0wNyAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBET01Ub2tlbkxpc3Q6OmFkZCBjYW4gYWRkIGR1
cGxpY2F0ZWQgdmFsdWVzIGlmIGFyZ3VtZW50cyBoYWQgZHVwbGljYXRlZCB2YWx1ZXMKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU4ODY1KQorKysgU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjI0Niw2ICsy
MjQ2LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
ZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvQXJyYXlWYWx1ZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0FycmF5
VmFsdWUuaCBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnJlYWtwb2ludElELmggXAog
CVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgg
XAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhbGxiYWNrRnVuY3Rpb24uY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmggXApAQCAtMjQ0OCw2
ICsyNDQ5LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRXcmFwcGFibGVJbmxpbmVzLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9Tb3VyY2VJRC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGll
bnREYXRhLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlci5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24gMTU4ODY1KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjAz
MDgsNiArMjAzMDgsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYmluZGluZ3NcZ2Vu
ZXJpY1xCaW5kaW5nU2VjdXJpdHkuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJp
bmRpbmdzXGdlbmVyaWNcUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYmluZGluZ3NcanNcQXJyYXlWYWx1ZS5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYmluZGluZ3NcanNcQnJlYWtwb2ludElELmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYmluZGluZ3NcanNcQ2FsbGJhY2tGdW5j
dGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYmluZGluZ3NcanNcRGljdGlv
bmFyeS5oIiAvPgpAQCAtMjAzNTksNiArMjAzNjAsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYmluZGluZ3NcanNcU2NyaXB0VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdFdyYXBwYWJsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYmluZGluZ3NcanNcU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xTb3VyY2VJRC5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYmluZGluZ3NcanNcV2ViQ29yZUpTQ2xpZW50RGF0YS5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYmluZGluZ3NcanNcV29ya2VyU2NyaXB0Q29u
dHJvbGxlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xET01NaW1l
VHlwZS5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTU4ODY1KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTMyOSw2ICsxMTMyOSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxiaW5kaW5nc1xqc1xBcnJheVZhbHVlLmgiPgogICAgICAgPEZpbHRlcj5iaW5kaW5nc1xqczwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYmlu
ZGluZ3NcanNcQnJlYWtwb2ludElELmgiPgorICAgICAgPEZpbHRlcj5iaW5kaW5nc1xqczwvRmls
dGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYmluZGlu
Z3NcanNcQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaCI+CiAgICAgICA8RmlsdGVyPmJpbmRp
bmdzXGpzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC0xMTQ2NCw2ICsxMTQ2Nyw5IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCI+CiAgICAgICA8RmlsdGVyPmJpbmRpbmdzXGpzPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xTb3VyY2VJRC5o
Ij4KKyAgICAgIDxGaWx0ZXI+YmluZGluZ3NcanM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXFdlYkNvcmVKU0NsaWVudERh
dGEuaCI+CiAgICAgICA8RmlsdGVyPmJpbmRpbmdzXGpzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1
ZGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxNTg4NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUzMzMsNyArNTMzMyw2
IEBACiAJCUNENTRERTRCMTc0NjlDNkQwMDVFNUIzNiAvKiBBdWRpb1Nlc3Npb25NYWMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1NERFNDkxNzQ2
OUM2RDAwNUU1QjM2IC8qIEF1ZGlvU2Vzc2lvbk1hYy5jcHAgKi87IH07CiAJCUNENjFGRTY3MTc5
NEFBREIwMDQxMDFFQiAvKiBNZWRpYVNvdXJjZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxQTk0MkUxMTVCNUNFMjIwMEQ1MjVEMSAv
KiBNZWRpYVNvdXJjZVJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJQ0Q2MUZFNjgxNzk0QUFEQjAwNDEw
MUVCIC8qIE1lZGlhU291cmNlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIxQTk0MkUyMTVCNUNFMjIwMEQ1MjVEMSAvKiBNZWRpYVNvdXJj
ZVJlZ2lzdHJ5LmggKi87IH07Ci0KIAkJQ0Q2NDFFQjMxODE4RjVFRDAwRUU0QzQxIC8qIE1lZGlh
U291cmNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0Q2NDFFQjExODE4RjVFRDAwRUU0QzQxIC8qIE1lZGlhU291cmNlUHJpdmF0ZS5oICov
OyB9OwogCQlDRDY0MUVCNDE4MThGNUVEMDBFRTRDNDEgLyogU291cmNlQnVmZmVyUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q2NDFFQjIx
ODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZlclByaXZhdGUuaCAqLzsgfTsKIAkJQ0Q2NDFF
QkYxODE5QjM2MDAwRUU0QzQxIC8qIE1lZGlhVGltZU1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDY0MUVCRDE4MTlCMzU5MDBFRTRDNDEgLyog
TWVkaWFUaW1lTWFjLmNwcCAqLzsgfTsKQEAgLTYyMzksNiArNjIzOCw3IEBACiAJCUZFMTZDRkQ0
MTY5RDFERUQwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMTZDRkQwMTY5RDFERUMwMEQzQTBDNyAvKiBE
YXRhYmFzZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlGRTE2Q0ZENTE2OUQxREVEMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kU3lu
Yy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTE2
Q0ZEMTE2OUQxREVDMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kU3luYy5jcHAgKi87IH07CiAJ
CUZFMTZDRkQ2MTY5RDFERUQwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRTeW5jLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTE2Q0ZEMjE2OUQxREVD
MDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kU3luYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMjEzQjI5MTgyQkU5RjgwMEFEMkQxMiAvKiBT
b3VyY2VJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkUyMTNCMjgxODJCRTlGODAwQUQyRDEyIC8qIFNvdXJjZUlELmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUzMzcxQTIxNjdDMTFENDAwRURCNzUy
IC8qIERhdGFiYXNlQmFzaWNUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUzMzcxQTAxNjdDMTFENDAwRURCNzUyIC8qIERhdGFiYXNlQmFzaWNU
eXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUZFMzZGRDE1MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNkZEMTExNkM3ODI2NDAw
Rjg4N0MxIC8qIENoYW5nZVZlcnNpb25EYXRhLmggKi87IH07CiAJCUZFMzZGRDE2MTZDNzgyNjUw
MEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM2RkQxMjE2Qzc4MjY0MDBGODg3QzEg
LyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuY3BwICovOyB9OwpAQCAtNjI3MCw2ICs2Mjcw
LDcgQEAKIAkJRkVCQzVGMzExNkJEMENDMzAwNjU5QkQzIC8qIERhdGFiYXNlQmFzZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUJDNUYyRjE2QkQw
Q0MzMDA2NTlCRDMgLyogRGF0YWJhc2VCYXNlLmNwcCAqLzsgfTsKIAkJRkVCQzVGMzIxNkJEMEND
MzAwNjU5QkQzIC8qIERhdGFiYXNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkVCQzVGMzAxNkJEMENDMzAwNjU5QkQzIC8qIERhdGFiYXNlQmFz
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZF
RDEzRDNBMENFQTkzNDYwMEQ4OTQ2NiAvKiBFZGl0b3JJT1MubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQxM0QzOTBDRUE5MzQ2MDBEODk0NjYgLyog
RWRpdG9ySU9TLm1tICovOyB9OworCQlGRURCRkYxNjE4MkI3QThEMDAxN0ZBNjQgLyogQnJlYWtw
b2ludElELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RURCRkYxNDE4MkI3QThEMDAxN0ZBNjQgLyogQnJlYWtwb2ludElELmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVERUY4NDExNjc5NzEwODAwMEU0
NDRBIC8qIERhdGFiYXNlU3RyYXRlZ3kuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkVERUY4M0YxNjc5NzEwODAwMEU0NDRBIC8qIERhdGFiYXNlU3Ry
YXRlZ3kuY3BwICovOyB9OwogCQlGRURFRjg0MjE2Nzk3MTA4MDAwRTQ0NEEgLyogRGF0YWJhc2VT
dHJhdGVneS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkVERUY4NDAxNjc5NzEwODAwMEU0NDRBIC8qIERhdGFiYXNlU3RyYXRlZ3kuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUUxODExMzE2QzMxOUU4
MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRTE4MTExMTZDMzE5RTgwMDA4NDg0OSAvKiBT
UUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwICovOyB9OwpAQCAtMTMzODgsNiArMTMzODksNyBAQAog
CQlGRTE2Q0ZEMDE2OUQxREVDMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFiYXNlQmFja2VuZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTE2Q0ZEMTE2OUQxREVDMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNr
ZW5kU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhYmFz
ZUJhY2tlbmRTeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxNkNGRDIx
NjlEMURFQzAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZFN5bmMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VCYWNrZW5kU3luYy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRTIxM0IyODE4MkJFOUY4MDBBRDJEMTIgLyogU291cmNlSUQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlSUQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkUzMzcxQTAxNjdDMTFENDAwRURCNzUyIC8qIERhdGFiYXNlQmFzaWNU
eXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZUJhc2ljVHlw
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzNkZEMTExNkM3ODI2NDAwRjg4
N0MxIC8qIENoYW5nZVZlcnNpb25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENoYW5nZVZlcnNpb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
MzZGRDEyMTZDNzgyNjQwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvblN0YXRl
TWFjaGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzQxOSw2ICsxMzQy
MSw3IEBACiAJCUZFQkM1RjJGMTZCRDBDQzMwMDY1OUJEMyAvKiBEYXRhYmFzZUJhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YWJhc2VCYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVCQzVGMzAxNkJEMENDMzAwNjU5QkQzIC8qIERh
dGFiYXNlQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZUJh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEMTNEMzkwQ0VBOTM0NjAwRDg5
NDY2IC8qIEVkaXRvcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEVkaXRvcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVEQkZGMTQx
ODJCN0E4RDAwMTdGQTY0IC8qIEJyZWFrcG9pbnRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCcmVha3BvaW50SUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkVERUY4M0YxNjc5NzEwODAwMEU0NDRBIC8qIERhdGFiYXNlU3RyYXRlZ3kuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YWJhc2VTdHJhdGVneS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREVGODQwMTY3OTcxMDgwMDBFNDQ0QSAvKiBEYXRh
YmFzZVN0cmF0ZWd5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFiYXNl
U3RyYXRlZ3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVFMTgxMTExNkMzMTlF
ODAwMDg0ODQ5IC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTk0MTcsNiArMTk0MjAsNyBAQAogCQlCQzFBMzc5MzA5N0M2
RkIxMDAxOUYzRDggLyoganMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCUZFMjEzQjI4MTgyQkU5RjgwMEFEMkQxMiAvKiBTb3VyY2VJRC5oICovLAogCQkJ
CUJDQ0U1OEE3MTA2MUU4MkYwMDhGQjM1QSAvKiBDYWxsYmFjayBPYmplY3RzICovLAogCQkJCUJD
Q0U1OEI0MTA2MUU5MjUwMDhGQjM1QSAvKiBDb25zdHJ1Y3RvcnMgKi8sCiAJCQkJQkM0RURFRjcw
QzA4RjQxNDAwN0VERDQ5IC8qIEN1c3RvbSAqLywKQEAgLTE5NDI0LDYgKzE5NDI4LDcgQEAKIAkJ
CQk5M0Y4QjMwNjBBMzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovLAogCQkJ
CTQ5QjM3NjBBMTVDNkM2ODQwMDU5MTMxRCAvKiBBcnJheVZhbHVlLmNwcCAqLywKIAkJCQk0OUIz
NzYwQjE1QzZDNjg0MDA1OTEzMUQgLyogQXJyYXlWYWx1ZS5oICovLAorCQkJCUZFREJGRjE0MTgy
QjdBOEQwMDE3RkE2NCAvKiBCcmVha3BvaW50SUQuaCAqLywKIAkJCQlCQ0Q1MzM2MzBFRDY4NDg5
MDA4ODc0NjggLyogQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaCAqLywKIAkJCQkzMTJENjdC
MDE1MzU2OTFGMDA1NjNEMEQgLyogRGljdGlvbmFyeS5jcHAgKi8sCiAJCQkJMzE2MDIzRUYxNTMy
QzQwQzAwRDUwRkY0IC8qIERpY3Rpb25hcnkuaCAqLywKQEAgLTIxODQ1LDYgKzIxODUwLDcgQEAK
IAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQk5MzJB
RDcwNjE3RUZBMkM0MDAzOEY4RkYgLyogTWFpbkZyYW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RURCRkYxNjE4MkI3QThEMDAxN0ZBNjQgLyogQnJlYWtwb2ludElELmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRTExNUZBQjE2Nzk4OENEMDAyNDkxMzQgLyogQWJzdHJhY3REYXRhYmFzZVNlcnZlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOUE1MjhFODQxN0Q3RjUyRjAwQUE5NTE4IC8qIEZsb2F0aW5n
T2JqZWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU0QUFERUUxNkQyQzM3NDAwMDI2RkZDIC8q
IEFic3RyYWN0U1FMU3RhdGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIxODg0LDYgKzIxODkw
LDcgQEAKIAkJCQlCQ0Y3RTQ5MTEzN0NEN0M3MDAxRERBRTcgLyogQWRqdXN0Vmlld1NpemVPck5v
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODREMEM0MDYxMTE1RjFFQTAwMThBQTM0IC8qIEFmZmlu
ZVRyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAwRDlFMDhE
IC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUyMTNCMjkx
ODJCRTlGODAwQUQyRDEyIC8qIFNvdXJjZUlELmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTA4QzNE
MjE1MkI1OTlBMDAyMUI4QzIgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0U3QjJEQjMxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJ
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwM0UxMkIwMjY3NjAwQzFBMzU5
IC8qIEFuYWx5c2VyTm9kZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9CcmVha3BvaW50SUQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9CcmVha3BvaW50SUQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0JyZWFrcG9pbnRJRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCcmVha3BvaW50SURfaAorI2RlZmluZSBCcmVha3BvaW50SURfaAorCisjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCisKKyNpbmNsdWRlIDxkZWJ1Z2dlci9EZWJ1Z2dlci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgSlNDOjpCcmVha3BvaW50SUQgQnJlYWtwb2lu
dElEOworY29uc3QgQnJlYWtwb2ludElEIG5vQnJlYWtwb2ludElEID0gSlNDOjpub0JyZWFrcG9p
bnRJRDsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCisKKyNlbmRpZiAvLyBCcmVha3BvaW50SURfaApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNp
b24gMTU4ODY1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTUzLDQyICs1MywxMiBAQCB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lU2Nv
cGUgewotcHVibGljOgotICAgIERlYnVnZ2VyQ2FsbEZyYW1lU2NvcGUoU2NyaXB0RGVidWdTZXJ2
ZXImIGRlYnVnZ2VyKQotICAgICAgICA6IG1fZGVidWdnZXIoZGVidWdnZXIpCi0gICAgewotICAg
ICAgICBBU1NFUlQoIW1fZGVidWdnZXIubV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWUpOwotICAg
ICAgICBpZiAobV9kZWJ1Z2dlci5tX2N1cnJlbnRDYWxsRnJhbWUpCi0gICAgICAgICAgICBtX2Rl
YnVnZ2VyLm1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lID0gRGVidWdnZXJDYWxsRnJhbWU6OmNy
ZWF0ZShkZWJ1Z2dlci5tX2N1cnJlbnRDYWxsRnJhbWUpOwotICAgIH0KLQotICAgIH5EZWJ1Z2dl
ckNhbGxGcmFtZVNjb3BlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2RlYnVnZ2VyLm1fY3VycmVu
dERlYnVnZ2VyQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICBtX2RlYnVnZ2VyLm1fY3VycmVudERl
YnVnZ2VyQ2FsbEZyYW1lLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICBtX2RlYnVnZ2VyLm1f
Y3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBTY3JpcHREZWJ1Z1NlcnZlciYgbV9kZWJ1Z2dlcjsKLX07Ci0KLQotU2NyaXB0RGVi
dWdTZXJ2ZXI6OlNjcmlwdERlYnVnU2VydmVyKCkKLSAgICA6IG1fY2FsbGluZ0xpc3RlbmVycyhm
YWxzZSkKLSAgICAsIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShEb250UGF1c2VPbkV4Y2VwdGlv
bnMpCi0gICAgLCBtX3BhdXNlT25OZXh0U3RhdGVtZW50KGZhbHNlKQotICAgICwgbV9wYXVzZWQo
ZmFsc2UpCi0gICAgLCBtX3J1bm5pbmdOZXN0ZWRNZXNzYWdlTG9vcChmYWxzZSkKK1NjcmlwdERl
YnVnU2VydmVyOjpTY3JpcHREZWJ1Z1NlcnZlcihib29sIGlzSW5Xb3JrZXJUaHJlYWQpCisgICAg
OiBEZWJ1Z2dlcihpc0luV29ya2VyVGhyZWFkKQogICAgICwgbV9kb25lUHJvY2Vzc2luZ0RlYnVn
Z2VyRXZlbnRzKHRydWUpCi0gICAgLCBtX2JyZWFrcG9pbnRzQWN0aXZhdGVkKHRydWUpCi0gICAg
LCBtX3BhdXNlT25DYWxsRnJhbWUoMCkKLSAgICAsIG1fY3VycmVudENhbGxGcmFtZSgwKQorICAg
ICwgbV9jYWxsaW5nTGlzdGVuZXJzKGZhbHNlKQorICAgICwgbV9ydW5uaW5nTmVzdGVkTWVzc2Fn
ZUxvb3AoZmFsc2UpCiAgICAgLCBtX3JlY29tcGlsZVRpbWVyKHRoaXMsICZTY3JpcHREZWJ1Z1Nl
cnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMpCi0gICAgLCBtX2xhc3RFeGVjdXRlZExpbmUo
LTEpCi0gICAgLCBtX2xhc3RFeGVjdXRlZFNvdXJjZUlEKC0xKQogewogfQogCkBAIC05NiwxMTcg
KzY2LDMyIEBAIFNjcmlwdERlYnVnU2VydmVyOjp+U2NyaXB0RGVidWdTZXJ2ZXIoKQogewogfQog
Ci1TdHJpbmcgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBz
b3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYgc2NyaXB0QnJlYWtwb2ludCwgaW50KiBh
Y3R1YWxMaW5lTnVtYmVyLCBpbnQqIGFjdHVhbENvbHVtbk51bWJlcikKLXsKLSAgICBpbnRwdHJf
dCBzb3VyY2VJRFZhbHVlID0gc291cmNlSUQudG9JbnRQdHIoKTsKLSAgICBpZiAoIXNvdXJjZUlE
VmFsdWUpCi0gICAgICAgIHJldHVybiAiIjsKLSAgICBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJRFRvQnJlYWtwb2ludHMuZmluZChzb3VyY2VJRFZhbHVl
KTsKLSAgICBpZiAoaXQgPT0gbV9zb3VyY2VJRFRvQnJlYWtwb2ludHMuZW5kKCkpCi0gICAgICAg
IGl0ID0gbV9zb3VyY2VJRFRvQnJlYWtwb2ludHMuc2V0KHNvdXJjZUlEVmFsdWUsIExpbmVUb0Jy
ZWFrcG9pbnRzTWFwKCkpLml0ZXJhdG9yOwotICAgIExpbmVUb0JyZWFrcG9pbnRzTWFwOjppdGVy
YXRvciBicmVha3NJdCA9IGl0LT52YWx1ZS5maW5kKHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJl
cik7Ci0gICAgaWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKLSAgICAgICAgYnJlYWtz
SXQgPSBpdC0+dmFsdWUuc2V0KHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciwgQnJlYWtwb2lu
dHNJbkxpbmUoKSkuaXRlcmF0b3I7Ci0KLSAgICBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVj
dG9yID0gYnJlYWtzSXQtPnZhbHVlOwotICAgIHVuc2lnbmVkIGJyZWFrc0NvdW50ID0gYnJlYWtz
VmVjdG9yLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJlYWtzQ291bnQ7
IGkrKykgewotICAgICAgICBpZiAoYnJlYWtzVmVjdG9yLmF0KGkpLmNvbHVtbk51bWJlciA9PSBz
Y3JpcHRCcmVha3BvaW50LmNvbHVtbk51bWJlcikKLSAgICAgICAgICAgIHJldHVybiAiIjsKLSAg
ICB9Ci0gICAgYnJlYWtzVmVjdG9yLmFwcGVuZChzY3JpcHRCcmVha3BvaW50KTsKLSAgICBpbmNO
dW1iZXJPZkJyZWFrcG9pbnRzKCk7Ci0KLSAgICAqYWN0dWFsTGluZU51bWJlciA9IHNjcmlwdEJy
ZWFrcG9pbnQubGluZU51bWJlcjsKLSAgICAqYWN0dWFsQ29sdW1uTnVtYmVyID0gc2NyaXB0QnJl
YWtwb2ludC5jb2x1bW5OdW1iZXI7Ci0gICAgcmV0dXJuIHNvdXJjZUlEICsgIjoiICsgU3RyaW5n
OjpudW1iZXIoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyKSArICI6IiArIFN0cmluZzo6bnVt
YmVyKHNjcmlwdEJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJRCkKK0Jy
ZWFrcG9pbnRJRCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChTb3VyY2VJRCBzb3Vy
Y2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYgc2NyaXB0QnJlYWtwb2ludCwgdW5zaWduZWQq
IGFjdHVhbExpbmVOdW1iZXIsIHVuc2lnbmVkKiBhY3R1YWxDb2x1bW5OdW1iZXIpCiB7Ci0gICAg
VmVjdG9yPFN0cmluZz4gdG9rZW5zOwotICAgIGJyZWFrcG9pbnRJRC5zcGxpdCgiOiIsIHRva2Vu
cyk7Ci0gICAgaWYgKHRva2Vucy5zaXplKCkgIT0gMykKLSAgICAgICAgcmV0dXJuOwotICAgIGJv
b2wgc3VjY2VzczsKLSAgICBpbnRwdHJfdCBzb3VyY2VJRFZhbHVlID0gdG9rZW5zWzBdLnRvSW50
UHRyKCZzdWNjZXNzKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICB1
bnNpZ25lZCBsaW5lTnVtYmVyID0gdG9rZW5zWzFdLnRvVUludCgmc3VjY2Vzcyk7Ci0gICAgaWYg
KCFzdWNjZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQgY29sdW1uTnVtYmVyID0g
dG9rZW5zWzJdLnRvVUludCgmc3VjY2Vzcyk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFzb3VyY2VJRCkKKyAgICAgICAgcmV0dXJuIG5vQnJlYWtwb2ludElE
OwogCi0gICAgU291cmNlSURUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBpdCA9IG1fc291cmNl
SURUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSURWYWx1ZSk7Ci0gICAgaWYgKGl0ID09IG1fc291
cmNlSURUb0JyZWFrcG9pbnRzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgTGluZVRvQnJl
YWtwb2ludHNNYXA6Oml0ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnZhbHVlLmZpbmQobGluZU51bWJl
cik7Ci0gICAgaWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT52YWx1
ZTsKLSAgICB1bnNpZ25lZCBicmVha3NDb3VudCA9IGJyZWFrc1ZlY3Rvci5zaXplKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyZWFrc0NvdW50OyBpKyspIHsKLSAgICAgICAgaWYg
KGJyZWFrc1ZlY3Rvci5hdChpKS5jb2x1bW5OdW1iZXIgPT0gc3RhdGljX2Nhc3Q8aW50Pihjb2x1
bW5OdW1iZXIpKSB7Ci0gICAgICAgICAgICBicmVha3NWZWN0b3IucmVtb3ZlKGkpOwotICAgICAg
ICAgICAgZGVjTnVtYmVyT2ZCcmVha3BvaW50cygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KKyAgICBKU0M6OkJyZWFrcG9pbnQgYnJlYWtwb2ludChzb3VyY2VJRCwgc2NyaXB0QnJl
YWtwb2ludC5saW5lTnVtYmVyLCBzY3JpcHRCcmVha3BvaW50LmNvbHVtbk51bWJlciwgc2NyaXB0
QnJlYWtwb2ludC5jb25kaXRpb24sIHNjcmlwdEJyZWFrcG9pbnQuYXV0b0NvbnRpbnVlKTsKKyAg
ICBCcmVha3BvaW50SUQgaWQgPSBEZWJ1Z2dlcjo6c2V0QnJlYWtwb2ludChicmVha3BvaW50LCAq
YWN0dWFsTGluZU51bWJlciwgKmFjdHVhbENvbHVtbk51bWJlcik7CisgICAgaWYgKGlkICE9IG5v
QnJlYWtwb2ludElEICYmICFzY3JpcHRCcmVha3BvaW50LmFjdGlvbnMuaXNFbXB0eSgpKSB7Cisj
aWZuZGVmIE5ERUJVRworICAgICAgICBCcmVha3BvaW50SURUb0FjdGlvbnNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9icmVha3BvaW50SURUb0FjdGlvbnMuZmluZChpZCk7CisgICAgICAgIEFTU0VSVChp
dCA9PSBtX2JyZWFrcG9pbnRJRFRvQWN0aW9ucy5lbmQoKSk7CisjZW5kaWYKKyAgICAgICAgY29u
c3QgVmVjdG9yPFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24+ICZhY3Rpb25zID0gc2NyaXB0QnJlYWtw
b2ludC5hY3Rpb25zOworICAgICAgICBtX2JyZWFrcG9pbnRJRFRvQWN0aW9ucy5zZXQoaWQsIGFj
dGlvbnMpOwogICAgIH0KKyAgICByZXR1cm4gaWQ7CiB9CiAKLWJvb2wgU2NyaXB0RGVidWdTZXJ2
ZXI6Omhhc0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYg
cG9zaXRpb24sIFNjcmlwdEJyZWFrcG9pbnQgKmhpdEJyZWFrcG9pbnQpIGNvbnN0Cit2b2lkIFNj
cmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KEJyZWFrcG9pbnRJRCBpZCkKIHsKLSAg
ICBpZiAoIW1fYnJlYWtwb2ludHNBY3RpdmF0ZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBBU1NFUlQoaWQgIT0gbm9CcmVha3BvaW50SUQpOworICAgIEJyZWFrcG9pbnRJRFRvQWN0aW9u
c01hcDo6aXRlcmF0b3IgaXQgPSBtX2JyZWFrcG9pbnRJRFRvQWN0aW9ucy5maW5kKGlkKTsKKyAg
ICBpZiAoaXQgIT0gbV9icmVha3BvaW50SURUb0FjdGlvbnMuZW5kKCkpCisgICAgICAgIG1fYnJl
YWtwb2ludElEVG9BY3Rpb25zLnJlbW92ZShpdCk7CiAKLSAgICBTb3VyY2VJRFRvQnJlYWtwb2lu
dHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJRFRvQnJlYWtwb2ludHMuZmluZChz
b3VyY2VJRCk7Ci0gICAgaWYgKGl0ID09IG1fc291cmNlSURUb0JyZWFrcG9pbnRzLmVuZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgbGluZSA9IHBvc2l0aW9uLm1fbGluZS56
ZXJvQmFzZWRJbnQoKTsKLSAgICBpbnQgY29sdW1uID0gcG9zaXRpb24ubV9jb2x1bW4uemVyb0Jh
c2VkSW50KCk7Ci0gICAgaWYgKGxpbmUgPCAwIHx8IGNvbHVtbiA8IDApCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIExpbmVUb0JyZWFrcG9pbnRzTWFwOjpjb25zdF9pdGVyYXRvciBicmVh
a3NJdCA9IGl0LT52YWx1ZS5maW5kKGxpbmUpOwotICAgIGlmIChicmVha3NJdCA9PSBpdC0+dmFs
dWUuZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaGl0ID0gZmFsc2U7
Ci0gICAgY29uc3QgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrc1ZlY3RvciA9IGJyZWFrc0l0LT52
YWx1ZTsKLSAgICB1bnNpZ25lZCBicmVha3NDb3VudCA9IGJyZWFrc1ZlY3Rvci5zaXplKCk7Ci0g
ICAgdW5zaWduZWQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgYnJlYWtzQ291bnQ7IGkrKykgewot
ICAgICAgICBpbnQgYnJlYWtMaW5lID0gYnJlYWtzVmVjdG9yLmF0KGkpLmxpbmVOdW1iZXI7Ci0g
ICAgICAgIGludCBicmVha0NvbHVtbiA9IGJyZWFrc1ZlY3Rvci5hdChpKS5jb2x1bW5OdW1iZXI7
Ci0gICAgICAgIC8vIFNpbmNlIGZyb250ZW5kIHRydW5jYXRlcyB0aGUgaW5kZW50LCB0aGUgZmly
c3Qgc3RhdGVtZW50IGluIGEgbGluZSBtdXN0IG1hdGNoIHRoZSBicmVha3BvaW50IChsaW5lLDAp
LgotICAgICAgICBpZiAoKGxpbmUgIT0gbV9sYXN0RXhlY3V0ZWRMaW5lICYmIGxpbmUgPT0gYnJl
YWtMaW5lICYmICFicmVha0NvbHVtbikKLSAgICAgICAgICAgIHx8IChsaW5lID09IGJyZWFrTGlu
ZSAmJiBjb2x1bW4gPT0gYnJlYWtDb2x1bW4pKSB7Ci0gICAgICAgICAgICBoaXQgPSB0cnVlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFoaXQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChoaXRCcmVha3BvaW50KQotICAgICAgICAqaGl0
QnJlYWtwb2ludCA9IGJyZWFrc1ZlY3Rvci5hdChpKTsKLQotICAgIC8vIEFuIGVtcHR5IGNvbmRp
dGlvbiBjb3VudHMgYXMgbm8gY29uZGl0aW9uIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gInRydWUi
LgotICAgIGlmIChicmVha3NWZWN0b3IuYXQoaSkuY29uZGl0aW9uLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZVdpdGhDYWxsRnJhbWUobV9jdXJyZW50
Q2FsbEZyYW1lLCBicmVha3NWZWN0b3IuYXQoaSkuY29uZGl0aW9uLCBleGNlcHRpb24pOwotICAg
IGlmIChleGNlcHRpb24pIHsKLSAgICAgICAgLy8gQW4gZXJyb25lb3VzIGNvbmRpdGlvbiBjb3Vu
dHMgYXMgImZhbHNlIi4KLSAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fY3VycmVudENhbGxGcmFt
ZSwgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0LnRvQm9vbGVhbihtX2N1cnJlbnRDYWxsRnJhbWUpOworICAgIERlYnVnZ2VyOjpyZW1v
dmVCcmVha3BvaW50KGlkKTsKIH0KIAogYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVC
cmVha3BvaW50QWN0aW9uKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGJyZWFrcG9pbnRB
Y3Rpb24pIGNvbnN0CkBAIC0yMzQsODUgKzExOSwxMCBAQCBib29sIFNjcmlwdERlYnVnU2VydmVy
OjpldmFsdWF0ZUJyZWFrcG9pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU2NyaXB0RGVi
dWdTZXJ2ZXI6OmV2YWx1YXRlQnJlYWtwb2ludEFjdGlvbnMoY29uc3QgU2NyaXB0QnJlYWtwb2lu
dCYgYnJlYWtwb2ludCkgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJyZWFr
cG9pbnQuYWN0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWV2YWx1YXRlQnJlYWtw
b2ludEFjdGlvbihicmVha3BvaW50LmFjdGlvbnNbaV0pKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIFNjcmlwdERlYnVnU2Vy
dmVyOjpjbGVhckJyZWFrcG9pbnRzKCkKIHsKLSAgICBtX3NvdXJjZUlEVG9CcmVha3BvaW50cy5j
bGVhcigpOwotICAgIHVwZGF0ZU51bWJlck9mQnJlYWtwb2ludHMoMCk7Ci19Ci0KLXZvaWQgU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZhdGVkKQot
ewotICAgIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQgPSBhY3RpdmF0ZWQ7Ci19Ci0KLXZvaWQgU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZSBwYXVzZSkKLXsKLSAgICBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPSBwYXVzZTsK
LSAgICBzZXROZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcyhwYXVzZSAhPSBEb250UGF1c2VPbkV4Y2Vw
dGlvbnMpOwotfQotCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVzZU9uTmV4dFN0YXRl
bWVudChib29sIHBhdXNlKQotewotICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSBwYXVzZTsK
LSAgICBpZiAocGF1c2UpCi0gICAgICAgIHNldFNob3VsZFBhdXNlKHRydWUpOwotfQotCi12b2lk
IFNjcmlwdERlYnVnU2VydmVyOjpicmVha1Byb2dyYW0oKQotewotICAgIGlmIChtX3BhdXNlZCB8
fCAhbV9jdXJyZW50Q2FsbEZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdXNlT25O
ZXh0U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKLSAgICBwYXVz
ZUlmTmVlZGVkKG1fY3VycmVudENhbGxGcmFtZSk7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OmNvbnRpbnVlUHJvZ3JhbSgpCi17Ci0gICAgaWYgKCFtX3BhdXNlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IGZhbHNlOwotICAgIG1fZG9uZVBy
b2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cyA9IHRydWU7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OnN0ZXBJbnRvU3RhdGVtZW50KCkKLXsKLSAgICBpZiAoIW1fcGF1c2VkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICBzZXRTaG91
bGRQYXVzZSh0cnVlKTsKLSAgICBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0cnVl
OwotfQotCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzdGVwT3ZlclN0YXRlbWVudCgpCi17Ci0g
ICAgaWYgKCFtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXVzZU9uQ2FsbEZy
YW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lOwotICAgIG1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2
ZW50cyA9IHRydWU7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBPdXRPZkZ1bmN0
aW9uKCkKLXsKLSAgICBpZiAoIW1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Bh
dXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUgPyBtX2N1cnJlbnRDYWxsRnJhbWUt
PmNhbGxlckZyYW1lU2tpcHBpbmdWTUVudHJ5U2VudGluZWwoKSA6IDA7Ci0gICAgbV9kb25lUHJv
Y2Vzc2luZ0RlYnVnZ2VyRXZlbnRzID0gdHJ1ZTsKKyAgICBEZWJ1Z2dlcjo6Y2xlYXJCcmVha3Bv
aW50cygpOworICAgIG1fYnJlYWtwb2ludElEVG9BY3Rpb25zLmNsZWFyKCk7CiB9CiAKIGJvb2wg
U2NyaXB0RGVidWdTZXJ2ZXI6OmNhblNldFNjcmlwdFNvdXJjZSgpCkBAIC0zMzMsMTUgKzE0Myw5
IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnVwZGF0ZUNhbGxTdGFjaygKICAgICAvLyBGSVhN
RSg0MDMwMCk6IGltcGxlbWVudCB0aGlzLgogfQogCi1EZWJ1Z2dlckNhbGxGcmFtZSogU2NyaXB0
RGVidWdTZXJ2ZXI6OmN1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZSgpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lKTsKLSAgICByZXR1cm4gbV9jdXJyZW50RGVi
dWdnZXJDYWxsRnJhbWUuZ2V0KCk7Ci19Ci0KIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3Bh
dGNoRGlkUGF1c2UoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIpCiB7Ci0gICAgQVNTRVJU
KG1fcGF1c2VkKTsKKyAgICBBU1NFUlQoaXNQYXVzZWQoKSk7CiAgICAgRGVidWdnZXJDYWxsRnJh
bWUqIGRlYnVnZ2VyQ2FsbEZyYW1lID0gY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lKCk7CiAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGRlYnVnZ2VyQ2FsbEZyYW1lLT5zY29wZSgp
LT5nbG9iYWxPYmplY3QoKTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUgPSBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKTsKQEAgLTM2MSwxNiArMTY1LDExIEBAIHZvaWQgU2NyaXB0RGVidWdT
ZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2UKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNo
RGlkQ29udGludWUoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIpCiB7CiAgICAgbGlzdGVu
ZXItPmRpZENvbnRpbnVlKCk7Ci0gICAgaWYgKCFtX3BhdXNlT25OZXh0U3RhdGVtZW50ICYmICFt
X3BhdXNlT25DYWxsRnJhbWUpIHsKLSAgICAgICAgc2V0U2hvdWxkUGF1c2UoZmFsc2UpOwotICAg
ICAgICBpZiAoIW5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygpKQotICAgICAgICAgICAgbV9jdXJyZW50
Q2FsbEZyYW1lID0gMDsKLSAgICB9CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3Bh
dGNoRGlkUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgU291cmNlUHJv
dmlkZXIqIHNvdXJjZVByb3ZpZGVyLCBib29sIGlzQ29udGVudFNjcmlwdCkKIHsKLSAgICBTdHJp
bmcgc291cmNlSUQgPSBTdHJpbmc6Om51bWJlcihzb3VyY2VQcm92aWRlci0+YXNJRCgpKTsKKyAg
ICBTb3VyY2VJRCBzb3VyY2VJRCA9IHNvdXJjZVByb3ZpZGVyLT5hc0lEKCk7CiAKICAgICBTY3Jp
cHREZWJ1Z0xpc3RlbmVyOjpTY3JpcHQgc2NyaXB0OwogICAgIHNjcmlwdC51cmwgPSBzb3VyY2VQ
cm92aWRlci0+dXJsKCk7CkBAIC00MTgsMTkgKzIxNyw2IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2
ZXI6OmlzQ29udGVudFNjcmlwdCgKICAgICByZXR1cm4gJmN1cnJlbnRXb3JsZChleGVjKSAhPSAm
bWFpblRocmVhZE5vcm1hbFdvcmxkKCk7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRl
dGFjaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIC8vIElmIHdlJ3JlIGRl
dGFjaGluZyBmcm9tIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGdsb2JhbCBvYmplY3QsIG1hbnVh
bGx5IHRlYXIgZG93biBvdXIKLSAgICAvLyBzdGFjaywgc2luY2Ugd2Ugd29uJ3QgZ2V0IGZ1cnRo
ZXIgZGVidWdnZXIgY2FsbGJhY2tzIHRvIGRvIHNvLiBBbHNvLCByZXN1bWUgZXhlY3V0aW9uLAot
ICAgIC8vIHNpbmNlIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gc3RheWluZyBwYXVzZWQgb25jZSBhIHdp
bmRvdyBjbG9zZXMuCi0gICAgaWYgKG1fY3VycmVudENhbGxGcmFtZSAmJiBtX2N1cnJlbnRDYWxs
RnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSA9PSBnbG9iYWxPYmplY3QpIHsKLSAgICAgICAg
bV9jdXJyZW50Q2FsbEZyYW1lID0gMDsKLSAgICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gMDsK
LSAgICAgICAgY29udGludWVQcm9ncmFtKCk7Ci0gICAgfQotICAgIERlYnVnZ2VyOjpkZXRhY2go
Z2xvYmFsT2JqZWN0KTsKLX0KLQogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c291cmNlUGFyc2Vk
KEV4ZWNTdGF0ZSogZXhlYywgU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyLCBpbnQgZXJy
b3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKICAgICBpZiAobV9jYWxsaW5n
TGlzdGVuZXJzKQpAQCAtNDc1LDU3ICsyNjEsMzUgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6
ZGlzcGF0Y2hGdW5jdGlvbgogICAgIG1fY2FsbGluZ0xpc3RlbmVycyA9IGZhbHNlOwogfQogCi12
b2lkIFNjcmlwdERlYnVnU2VydmVyOjp1cGRhdGVDYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpub3RpZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2Vy
RXZlbnRzKCkKIHsKLSAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBjYWxsRnJhbWU7Ci0gICAgaW50
cHRyX3Qgc291cmNlSUQgPSBEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSURGb3JDYWxsRnJhbWUo
Y2FsbEZyYW1lKTsKLSAgICBpZiAobV9sYXN0RXhlY3V0ZWRTb3VyY2VJRCAhPSBzb3VyY2VJRCkg
ewotICAgICAgICBtX2xhc3RFeGVjdXRlZExpbmUgPSAtMTsKLSAgICAgICAgbV9sYXN0RXhlY3V0
ZWRTb3VyY2VJRCA9IHNvdXJjZUlEOwotICAgIH0KKyAgICBtX2RvbmVQcm9jZXNzaW5nRGVidWdn
ZXJFdmVudHMgPSB0cnVlOwogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjp1cGRhdGVDYWxs
RnJhbWVBbmRQYXVzZUlmTmVlZGVkKENhbGxGcmFtZSogY2FsbEZyYW1lKQorYm9vbCBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6bmVlZFBhdXNlSGFuZGxpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKLSAgICB1cGRhdGVDYWxsRnJhbWUoY2FsbEZyYW1lKTsKLSAgICBwYXVzZUlmTmVlZGVk
KGNhbGxGcmFtZSk7Ci0gICAgaWYgKCFuZWVkc09wRGVidWdDYWxsYmFja3MoKSkKLSAgICAgICAg
bV9jdXJyZW50Q2FsbEZyYW1lID0gMDsKKyAgICByZXR1cm4gISFnZXRMaXN0ZW5lcnNGb3JHbG9i
YWxPYmplY3QoZ2xvYmFsT2JqZWN0KTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1
c2VJZk5lZWRlZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6
OmhhbmRsZUJyZWFrcG9pbnRIaXQoY29uc3QgSlNDOjpCcmVha3BvaW50JiBicmVha3BvaW50KQog
ewotICAgIGlmIChtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotIAotICAgIEpTR2xvYmFsT2Jq
ZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0
KCk7Ci0gICAgaWYgKCFnZXRMaXN0ZW5lcnNGb3JHbG9iYWxPYmplY3QoZHluYW1pY0dsb2JhbE9i
amVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2lu
dDsKLSAgICBib29sIGRpZEhpdEJyZWFrcG9pbnQgPSBmYWxzZTsKLSAgICBib29sIHBhdXNlTm93
ID0gbV9wYXVzZU9uTmV4dFN0YXRlbWVudDsKLSAgICBwYXVzZU5vdyB8PSAobV9wYXVzZU9uQ2Fs
bEZyYW1lID09IG1fY3VycmVudENhbGxGcmFtZSk7Ci0KLSAgICBpbnRwdHJfdCBzb3VyY2VJRCA9
IERlYnVnZ2VyQ2FsbEZyYW1lOjpzb3VyY2VJREZvckNhbGxGcmFtZShtX2N1cnJlbnRDYWxsRnJh
bWUpOwotICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbiA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpwb3Np
dGlvbkZvckNhbGxGcmFtZShtX2N1cnJlbnRDYWxsRnJhbWUpOwotICAgIHBhdXNlTm93IHw9IGRp
ZEhpdEJyZWFrcG9pbnQgPSBoYXNCcmVha3BvaW50KHNvdXJjZUlELCBwb3NpdGlvbiwgJmJyZWFr
cG9pbnQpOwotICAgIG1fbGFzdEV4ZWN1dGVkTGluZSA9IHBvc2l0aW9uLm1fbGluZS56ZXJvQmFz
ZWRJbnQoKTsKLSAgICBpZiAoIXBhdXNlTm93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBEZWJ1
Z2dlckNhbGxGcmFtZVNjb3BlIGRlYnVnZ2VyQ2FsbEZyYW1lU2NvcGUoKnRoaXMpOwotCi0gICAg
aWYgKGRpZEhpdEJyZWFrcG9pbnQpIHsKLSAgICAgICAgZXZhbHVhdGVCcmVha3BvaW50QWN0aW9u
cyhicmVha3BvaW50KTsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQuYXV0b0NvbnRpbnVlKQotICAg
ICAgICAgICAgcmV0dXJuOworICAgIEJyZWFrcG9pbnRJRFRvQWN0aW9uc01hcDo6aXRlcmF0b3Ig
aXQgPSBtX2JyZWFrcG9pbnRJRFRvQWN0aW9ucy5maW5kKGJyZWFrcG9pbnQuaWQpOworICAgIGlm
IChpdCAhPSBtX2JyZWFrcG9pbnRJRFRvQWN0aW9ucy5lbmQoKSkgeworICAgICAgICBCcmVha3Bv
aW50QWN0aW9ucyYgYWN0aW9ucyA9IGl0LT52YWx1ZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhY3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWV2YWx1YXRl
QnJlYWtwb2ludEFjdGlvbihhY3Rpb25zW2ldKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KICAgICB9Cit9CiAKLSAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSAwOwotICAgIG1f
cGF1c2VPbk5leHRTdGF0ZW1lbnQgPSBmYWxzZTsKLSAgICBtX3BhdXNlZCA9IHRydWU7Cit2b2lk
IFNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24o
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24pIGNvbnN0Cit7Cisg
ICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Cit9CiAKK3ZvaWQgU2NyaXB0RGVi
dWdTZXJ2ZXI6OmhhbmRsZVBhdXNlKERlYnVnZ2VyOjpSZWFzb25Gb3JQYXVzZSwgSlNHbG9iYWxP
YmplY3QqIGR5bmFtaWNHbG9iYWxPYmplY3QpCit7CiAgICAgZGlzcGF0Y2hGdW5jdGlvblRvTGlz
dGVuZXJzKCZTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZSwgZHluYW1pY0dsb2Jh
bE9iamVjdCk7CiAgICAgZGlkUGF1c2UoZHluYW1pY0dsb2JhbE9iamVjdCk7CiAKQEAgLTUzOCw4
NyArMzAyLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2VJZk5lZWRlZChDYQogCiAg
ICAgZGlkQ29udGludWUoZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgZGlzcGF0Y2hGdW5jdGlv
blRvTGlzdGVuZXJzKCZTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRDb250aW51ZSwgZHlu
YW1pY0dsb2JhbE9iamVjdCk7Ci0KLSAgICBtX3BhdXNlZCA9IGZhbHNlOwotfQotCi12b2lkIFNj
cmlwdERlYnVnU2VydmVyOjpjYWxsRXZlbnQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAg
aWYgKCFtX3BhdXNlZCkKLSAgICAgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChj
YWxsRnJhbWUpOwotfQotCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjphdFN0YXRlbWVudChDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBpZiAoIW1fcGF1c2VkKQotICAgICAgICB1cGRhdGVD
YWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7CiB9Ci0KLXZvaWQgU2NyaXB0RGVi
dWdTZXJ2ZXI6OnJldHVybkV2ZW50KENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIGlmICht
X3BhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJ
Zk5lZWRlZChjYWxsRnJhbWUpOwotCi0gICAgLy8gZGV0YWNoIG1heSBoYXZlIGJlZW4gY2FsbGVk
IGR1cmluZyBwYXVzZUlmTmVlZGVkCi0gICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFRyZWF0IHN0ZXBwaW5nIG92ZXIgYSByZXR1cm4gc3RhdGVt
ZW50IGxpa2Ugc3RlcHBpbmcgb3V0LgotICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgPT0gbV9w
YXVzZU9uQ2FsbEZyYW1lKQotICAgICAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRD
YWxsRnJhbWUtPmNhbGxlckZyYW1lU2tpcHBpbmdWTUVudHJ5U2VudGluZWwoKTsKLQotICAgIG1f
Y3VycmVudENhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWVTa2lwcGlu
Z1ZNRW50cnlTZW50aW5lbCgpOwotfQotCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpleGNlcHRp
b24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUsIGJvb2wgaGFzSGFuZGxlcikKLXsKLSAg
ICBpZiAobV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3BhdXNlT25FeGNl
cHRpb25zU3RhdGUgPT0gUGF1c2VPbkFsbEV4Y2VwdGlvbnMgfHwgKG1fcGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZSA9PSBQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zICYmICFoYXNIYW5kbGVyKSkgewot
ICAgICAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICAgICAgc2V0U2hvdWxk
UGF1c2UodHJ1ZSk7Ci0gICAgfQotCi0gICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRl
ZChjYWxsRnJhbWUpOwotfQotCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjp3aWxsRXhlY3V0ZVBy
b2dyYW0oQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgaWYgKCFtX3BhdXNlZCkKLSAgICAg
ICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwotfQotCi12b2lk
IFNjcmlwdERlYnVnU2VydmVyOjpkaWRFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKLXsKLSAgICBpZiAobV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZUNh
bGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKLQotICAgIC8vIFRyZWF0IHN0ZXBw
aW5nIG92ZXIgdGhlIGVuZCBvZiBhIHByb2dyYW0gbGlrZSBzdGVwcGluZyBvdXQuCi0gICAgaWYg
KCFtX2N1cnJlbnRDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9jdXJyZW50
Q2FsbEZyYW1lID09IG1fcGF1c2VPbkNhbGxGcmFtZSkgewotICAgICAgICBtX3BhdXNlT25DYWxs
RnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1lU2tpcHBpbmdWTUVudHJ5U2Vu
dGluZWwoKTsKLSAgICAgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIG1fY3VycmVudENhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFt
ZS0+Y2FsbGVyRnJhbWVTa2lwcGluZ1ZNRW50cnlTZW50aW5lbCgpOwotfQotCi12b2lkIFNjcmlw
dERlYnVnU2VydmVyOjpkaWRSZWFjaEJyZWFrcG9pbnQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17
Ci0gICAgaWYgKG1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdXNlT25OZXh0
U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKLSAgICB1cGRhdGVD
YWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7Ci19Ci0KIHZvaWQgU2NyaXB0RGVi
dWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpCiB7CiAgICAgbV9yZWNvbXBp
bGVUaW1lci5zdGFydE9uZVNob3QoMCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHREZWJ1Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgJKHJldmlzaW9uIDE1ODg2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzIsOCArMzIsMTAg
QEAKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogCi0jaW5jbHVkZSAiU2NyaXB0
RGVidWdMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkJyZWFrcG9pbnRJRC5oIgogI2luY2x1ZGUgIlNj
cmlwdEJyZWFrcG9pbnQuaCIKKyNpbmNsdWRlICJTY3JpcHREZWJ1Z0xpc3RlbmVyLmgiCisjaW5j
bHVkZSAiU291cmNlSUQuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPGRlYnVnZ2Vy
L0RlYnVnZ2VyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTU0LDMwICs1NiwxMiBA
QCBjbGFzcyBTY3JpcHREZWJ1Z0xpc3RlbmVyOwogY2xhc3MgU2NyaXB0T2JqZWN0OwogY2xhc3Mg
U2NyaXB0VmFsdWU7CiAKLWNsYXNzIFNjcmlwdERlYnVnU2VydmVyIDogcHJvdGVjdGVkIEpTQzo6
RGVidWdnZXIgeworY2xhc3MgU2NyaXB0RGVidWdTZXJ2ZXIgOiBwdWJsaWMgSlNDOjpEZWJ1Z2dl
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2NyaXB0RGVidWdTZXJ2ZXIpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBTdHJpbmcgc2V0QnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiwgaW50KiBhY3R1YWxM
aW5lTnVtYmVyLCBpbnQqIGFjdHVhbENvbHVtbk51bWJlcik7Ci0gICAgdm9pZCByZW1vdmVCcmVh
a3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElEKTsKKyAgICBCcmVha3BvaW50SUQgc2V0
QnJlYWtwb2ludChTb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYsIHVuc2lnbmVkKiBh
Y3R1YWxMaW5lTnVtYmVyLCB1bnNpZ25lZCogYWN0dWFsQ29sdW1uTnVtYmVyKTsKKyAgICB2b2lk
IHJlbW92ZUJyZWFrcG9pbnQoQnJlYWtwb2ludElEKTsKICAgICB2b2lkIGNsZWFyQnJlYWtwb2lu
dHMoKTsKLSAgICB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZhdGVkKTsK
LSAgICB2b2lkIGFjdGl2YXRlQnJlYWtwb2ludHMoKSB7IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVk
KHRydWUpOyB9Ci0gICAgdm9pZCBkZWFjdGl2YXRlQnJlYWtwb2ludHMoKSB7IHNldEJyZWFrcG9p
bnRzQWN0aXZhdGVkKGZhbHNlKTsgfQotCi0gICAgZW51bSBQYXVzZU9uRXhjZXB0aW9uc1N0YXRl
IHsKLSAgICAgICAgRG9udFBhdXNlT25FeGNlcHRpb25zLAotICAgICAgICBQYXVzZU9uQWxsRXhj
ZXB0aW9ucywKLSAgICAgICAgUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucwotICAgIH07Ci0gICAg
UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOyB9Ci0gICAgdm9pZCBzZXRQYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNlcHRpb25zU3RhdGUpOwotCi0gICAgdm9pZCBzZXRQYXVz
ZU9uTmV4dFN0YXRlbWVudChib29sIHBhdXNlKTsKLSAgICB2b2lkIGJyZWFrUHJvZ3JhbSgpOwot
ICAgIHZvaWQgY29udGludWVQcm9ncmFtKCk7Ci0gICAgdm9pZCBzdGVwSW50b1N0YXRlbWVudCgp
OwotICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1lbnQoKTsKLSAgICB2b2lkIHN0ZXBPdXRPZkZ1bmN0
aW9uKCk7CiAKICAgICBib29sIGNhblNldFNjcmlwdFNvdXJjZSgpOwogICAgIGJvb2wgc2V0U2Ny
aXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgbmV3Q29udGVu
dCwgYm9vbCBwcmV2aWV3LCBTdHJpbmcqIGVycm9yLCBTY3JpcHRWYWx1ZSogbmV3Q2FsbEZyYW1l
cywgU2NyaXB0T2JqZWN0KiByZXN1bHQpOwpAQCAtOTQsNyArNzgsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIC8vIEZJWE1FKHdlYmtpdC5vcmcvYi84MjIwMyk6IEltcGxlbWVudCBwcmVwcm9jZXNzb3Iu
CiAgICAgfQogCi0gICAgYm9vbCBpc1BhdXNlZCgpIHsgcmV0dXJuIG1fcGF1c2VkOyB9CiAgICAg
Ym9vbCBydW5uaW5nTmVzdGVkTWVzc2FnZUxvb3AoKSB7IHJldHVybiBtX3J1bm5pbmdOZXN0ZWRN
ZXNzYWdlTG9vcDsgfQogCiAgICAgdm9pZCBjb21waWxlU2NyaXB0KEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgU3RyaW5n
KiBzY3JpcHRJRCwgU3RyaW5nKiBleGNlcHRpb25NZXNzYWdlKTsKQEAgLTExMiw3ICs5NSw3IEBA
IHByb3RlY3RlZDoKICAgICB0eXBlZGVmIEhhc2hTZXQ8U2NyaXB0RGVidWdMaXN0ZW5lcio+IExp
c3RlbmVyU2V0OwogICAgIHR5cGVkZWYgdm9pZCAoU2NyaXB0RGVidWdTZXJ2ZXI6OipKYXZhU2Ny
aXB0RXhlY3V0aW9uQ2FsbGJhY2spKFNjcmlwdERlYnVnTGlzdGVuZXIqKTsKIAotICAgIFNjcmlw
dERlYnVnU2VydmVyKCk7CisgICAgU2NyaXB0RGVidWdTZXJ2ZXIoYm9vbCBpc0luV29ya2VyVGhy
ZWFkID0gZmFsc2UpOwogICAgIH5TY3JpcHREZWJ1Z1NlcnZlcigpOwogCiAgICAgdmlydHVhbCBM
aXN0ZW5lclNldCogZ2V0TGlzdGVuZXJzRm9yR2xvYmFsT2JqZWN0KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqKSA9IDA7CkBAIC0xMjMsOSArMTA2LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCBi
b29sIGlzQ29udGVudFNjcmlwdChKU0M6OkV4ZWNTdGF0ZSopOwogCi0gICAgYm9vbCBoYXNCcmVh
a3BvaW50KGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24mLCBTY3JpcHRCcmVh
a3BvaW50KiBoaXRCcmVha3BvaW50KSBjb25zdDsKICAgICBib29sIGV2YWx1YXRlQnJlYWtwb2lu
dEFjdGlvbihjb25zdCBTY3JpcHRCcmVha3BvaW50QWN0aW9uJikgY29uc3Q7Ci0gICAgYm9vbCBl
dmFsdWF0ZUJyZWFrcG9pbnRBY3Rpb25zKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmKSBjb25zdDsK
IAogICAgIHZvaWQgZGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVuZXJzKEphdmFTY3JpcHRFeGVjdXRp
b25DYWxsYmFjaywgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIHZvaWQgZGlzcGF0Y2hGdW5j
dGlvblRvTGlzdGVuZXJzKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIEphdmFTY3JpcHRF
eGVjdXRpb25DYWxsYmFjayBjYWxsYmFjayk7CkBAIC0xMzQsNDggKzExNSwyNSBAQCBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBkaXNwYXRjaERpZFBhcnNlU291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBs
aXN0ZW5lcnMsIEpTQzo6U291cmNlUHJvdmlkZXIqLCBib29sIGlzQ29udGVudFNjcmlwdCk7CiAg
ICAgdm9pZCBkaXNwYXRjaEZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxp
c3RlbmVycywgSlNDOjpTb3VyY2VQcm92aWRlciosIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKTsKIAotICAgIC8vIFRoZXNlIHVwZGF0ZSBmdW5jdGlvbnMgYXJlIG9u
bHkgbmVlZGVkIGJlY2F1c2Ugb3VyIGN1cnJlbnQgYnJlYWtwb2ludHMgYXJlCi0gICAgLy8ga2V5
J2VkIG9mZiB0aGUgc291cmNlIHBvc2l0aW9uIGluc3RlYWQgb2YgdGhlIGJ5dGVjb2RlIFBDLiBU
aGlzIGVuc3VyZXMKLSAgICAvLyB0aGF0IHdlIGRvbid0IGJyZWFrIG9uIHRoZSBzYW1lIGxpbmUg
bW9yZSB0aGFuIG9uY2UuIE9uY2Ugd2Ugc3dpdGNoIHRvIGEKLSAgICAvLyBieXRlY29kZSBQQyBr
ZXknZWQgYnJlYWtwb2ludCwgd2Ugd2lsbCBub3QgbmVlZCB0aGVzZSBhbnltb3JlIGFuZCBzaG91
bGQKLSAgICAvLyBiZSBhYmxlIHRvIHJlbW92ZSB0aGVtLgotICAgIHZvaWQgdXBkYXRlQ2FsbEZy
YW1lKEpTQzo6Q2FsbEZyYW1lKik7Ci0gICAgdm9pZCB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlm
TmVlZGVkKEpTQzo6Q2FsbEZyYW1lKik7Ci0gICAgdm9pZCBwYXVzZUlmTmVlZGVkKEpTQzo6Q2Fs
bEZyYW1lKik7Ci0KLSAgICBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lKiBjdXJyZW50RGVidWdnZXJD
YWxsRnJhbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFyc2VkKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpTb3VyY2VQcm92aWRlciosIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNc2cpIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIGRldGFjaChKU0M6OkpT
R2xvYmFsT2JqZWN0KikgT1ZFUlJJREU7CisgICAgYm9vbCBtX2RvbmVQcm9jZXNzaW5nRGVidWdn
ZXJFdmVudHM7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFyc2VkKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpTb3VyY2VQcm92aWRlciosIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNc2cpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjYWxsRXZlbnQoSlNDOjpDYWxsRnJh
bWUqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgYXRTdGF0ZW1lbnQoSlNDOjpDYWxsRnJh
bWUqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmV0dXJuRXZlbnQoSlNDOjpDYWxsRnJh
bWUqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhjZXB0aW9uKEpTQzo6Q2FsbEZyYW1l
KiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBib29sIGhhc0hhbmRsZXIpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCB3aWxsRXhlY3V0ZVByb2dyYW0oSlNDOjpDYWxsRnJhbWUqKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhlY3V0ZVByb2dyYW0oSlNDOjpDYWxsRnJh
bWUqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhY2hCcmVha3BvaW50KEpTQzo6
Q2FsbEZyYW1lKikgT1ZFUlJJREU7Ci0KLSAgICB0eXBlZGVmIFZlY3RvcjxTY3JpcHRCcmVha3Bv
aW50PiBCcmVha3BvaW50c0luTGluZTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBCcmVha3Bv
aW50c0luTGluZSwgV1RGOjpJbnRIYXNoPGludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhh
c2hUcmFpdHM8aW50Pj4gTGluZVRvQnJlYWtwb2ludHNNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFw
PGludHB0cl90LCBMaW5lVG9CcmVha3BvaW50c01hcD4gU291cmNlSURUb0JyZWFrcG9pbnRzTWFw
OworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFZlY3RvcjxTY3JpcHRCcmVha3BvaW50QWN0aW9uPiBC
cmVha3BvaW50QWN0aW9uczsKKyAgICB0eXBlZGVmIEhhc2hNYXA8QnJlYWtwb2ludElELCBCcmVh
a3BvaW50QWN0aW9ucz4gQnJlYWtwb2ludElEVG9BY3Rpb25zTWFwOworCisgICAgdmlydHVhbCBi
b29sIG5lZWRQYXVzZUhhbmRsaW5nKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlQnJlYWtwb2ludEhpdChjb25zdCBKU0M6OkJyZWFrcG9pbnQm
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXhjZXB0aW9uSW5CcmVha3BvaW50
Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbikgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVBhdXNlKEpTQzo6RGVidWdnZXI6OlJl
YXNvbkZvclBhdXNlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIG5vdGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKSBPVkVSUklERTsKIAog
ICAgIGJvb2wgbV9jYWxsaW5nTGlzdGVuZXJzOwotICAgIFBhdXNlT25FeGNlcHRpb25zU3RhdGUg
bV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOwotICAgIGJvb2wgbV9wYXVzZU9uTmV4dFN0YXRlbWVu
dDsKLSAgICBib29sIG1fcGF1c2VkOwogICAgIGJvb2wgbV9ydW5uaW5nTmVzdGVkTWVzc2FnZUxv
b3A7Ci0gICAgYm9vbCBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHM7Ci0gICAgYm9vbCBt
X2JyZWFrcG9pbnRzQWN0aXZhdGVkOwotICAgIEpTQzo6Q2FsbEZyYW1lKiBtX3BhdXNlT25DYWxs
RnJhbWU7Ci0gICAgSlNDOjpDYWxsRnJhbWUqIG1fY3VycmVudENhbGxGcmFtZTsKLSAgICBSZWZQ
dHI8SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZT4gbV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWU7Ci0g
ICAgU291cmNlSURUb0JyZWFrcG9pbnRzTWFwIG1fc291cmNlSURUb0JyZWFrcG9pbnRzOworICAg
IEJyZWFrcG9pbnRJRFRvQWN0aW9uc01hcCBtX2JyZWFrcG9pbnRJRFRvQWN0aW9uczsKICAgICBU
aW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4gbV9yZWNvbXBpbGVUaW1lcjsKIAotICAgIGludCBtX2xh
c3RFeGVjdXRlZExpbmU7Ci0gICAgaW50cHRyX3QgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJRDsKLQog
ICAgIGZyaWVuZCBjbGFzcyBEZWJ1Z2dlckNhbGxGcmFtZVNjb3BlOwogfTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU291cmNlSUQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9Tb3VyY2VJRC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU291cmNlSUQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgU291cmNlSURfaAorI2RlZmluZSBTb3VyY2VJRF9oCisKKyNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKKworI2luY2x1ZGUgPGRlYnVnZ2VyL0RlYnVnZ2VyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordHlwZWRlZiBKU0M6OlNvdXJjZUlEIFNvdXJjZUlEOworc3RhdGljIGNv
bnN0IFNvdXJjZUlEIG5vU291cmNlSUQgPSBKU0M6Om5vU291cmNlSUQ7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorCisj
ZW5kaWYgLy8gU291cmNlSURfaApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTU4ODY1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKQEAgLTQzLDcgKzQ0LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV29y
a2VyU2NyaXB0RGVidWdTZXJ2ZXI6OldvcmtlclNjcmlwdERlYnVnU2VydmVyKFdvcmtlckdsb2Jh
bFNjb3BlKiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG1vZGUpCi0gICAgOiBTY3JpcHREZWJ1Z1Nl
cnZlcigpCisgICAgOiBTY3JpcHREZWJ1Z1NlcnZlcih0cnVlKQogICAgICwgbV93b3JrZXJHbG9i
YWxTY29wZShjb250ZXh0KQogICAgICwgbV9kZWJ1Z2dlclRhc2tNb2RlKG1vZGUpCiB7CkBAIC02
MCwxMiArNjEsNiBAQCB2b2lkIFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0ZW5lCiAg
ICAgcmVjb21waWxlQWxsSlNGdW5jdGlvbnMoMCk7CiB9CiAKLXZvaWQgV29ya2VyU2NyaXB0RGVi
dWdTZXJ2ZXI6OndpbGxFeGVjdXRlUHJvZ3JhbShKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lKQot
ewotICAgIGlmICghbV9wYXVzZWQpCi0gICAgICAgIHVwZGF0ZUNhbGxGcmFtZShjYWxsRnJhbWUp
OwotfQotCiB2b2lkIFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0
aW9ucyhUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4qKQogewogICAgIEpTQzo6Vk0qIHZtID0gbV93
b3JrZXJHbG9iYWxTY29wZS0+c2NyaXB0KCktPnZtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmgJKHJldmlzaW9u
IDE1ODg2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVn
U2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDYgQEAgcHJpdmF0ZToKIAogICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRTY3JpcHQoSlNDOjpFeGVjU3RhdGUqKSBPVkVSUklERSB7
IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJvZ3JhbShK
U0M6OkNhbGxGcmFtZSopIE9WRVJSSURFOwotCiAgICAgdmlydHVhbCB2b2lkIHJ1bkV2ZW50TG9v
cFdoaWxlUGF1c2VkKCkgT1ZFUlJJREU7CiAKICAgICBXb3JrZXJHbG9iYWxTY29wZSogbV93b3Jr
ZXJHbG9iYWxTY29wZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAJKHJldmlzaW9uIDE1ODg2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01OSw2ICs1
OSw3IEBAIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2UKICAgICAsIG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAgICAsIG1fZnJv
bnRlbmQoMCkKICAgICAsIG1fcGF1c2VkU2NyaXB0U3RhdGUoMCkKKyAgICAsIG1fY29udGludWVU
b0xvY2F0aW9uQnJlYWtwb2ludElEKG5vQnJlYWtwb2ludElEKQogICAgICwgbV9lbmFibGVkKGZh
bHNlKQogICAgICwgbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQoZmFsc2UpCiAgICAgLCBtX2xp
c3RlbmVyKDApCkBAIC0zMDIsMTMgKzMwMywxNiBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNldEJyZWFrcG9pCiAgICAgKm91dEJyZWFrcG9pbnRJZGVudGlmaWVyID0gYnJlYWtwb2lu
dElkZW50aWZpZXI7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlTG9jYXRpb24oRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbiwgU3RyaW5nKiBz
Y3JpcHRJRCwgaW50KiBsaW5lTnVtYmVyLCBpbnQqIGNvbHVtbk51bWJlcikKK3N0YXRpYyBib29s
IHBhcnNlTG9jYXRpb24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBJbnNwZWN0b3JPYmplY3Qq
IGxvY2F0aW9uLCBTb3VyY2VJRCogc291cmNlSUQsIHVuc2lnbmVkKiBsaW5lTnVtYmVyLCB1bnNp
Z25lZCogY29sdW1uTnVtYmVyKQogewotICAgIGlmICghbG9jYXRpb24tPmdldFN0cmluZygic2Ny
aXB0SWQiLCBzY3JpcHRJRCkgfHwgIWxvY2F0aW9uLT5nZXROdW1iZXIoImxpbmVOdW1iZXIiLCBs
aW5lTnVtYmVyKSkgeworICAgIFN0cmluZyBzY3JpcHRJRFN0cjsKKyAgICBpZiAoIWxvY2F0aW9u
LT5nZXRTdHJpbmcoInNjcmlwdElkIiwgJnNjcmlwdElEU3RyKSB8fCAhbG9jYXRpb24tPmdldE51
bWJlcigibGluZU51bWJlciIsIGxpbmVOdW1iZXIpKSB7CiAgICAgICAgIC8vIEZJWE1FOiByZXBs
YWNlIHdpdGggaW5wdXQgdmFsaWRhdGlvbi4KKyAgICAgICAgKnNvdXJjZUlEID0gbm9Tb3VyY2VJ
RDsKICAgICAgICAgKmVycm9yU3RyaW5nID0gInNjcmlwdElkIGFuZCBsaW5lTnVtYmVyIGFyZSBy
ZXF1aXJlZC4iOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgICpzb3VyY2VJRCA9
IHNjcmlwdElEU3RyLnRvSW50UHRyKCk7CiAgICAgKmNvbHVtbk51bWJlciA9IDA7CiAgICAgbG9j
YXRpb24tPmdldE51bWJlcigiY29sdW1uTnVtYmVyIiwgY29sdW1uTnVtYmVyKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTMxNiwxMSArMzIwLDExIEBAIHN0YXRpYyBib29sIHBhcnNlTG9jYXRpb24o
RXJyb3JTdHJpbmcqIGUKIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3Bv
aW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mIGxvY2F0aW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3B0aW9ucywgVHlw
ZUJ1aWxkZXI6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZGVudGlmaWVy
LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4mIGFjdHVhbExvY2F0aW9u
KQogewotICAgIFN0cmluZyBzY3JpcHRJRDsKLSAgICBpbnQgbGluZU51bWJlcjsKLSAgICBpbnQg
Y29sdW1uTnVtYmVyOworICAgIFNvdXJjZUlEIHNvdXJjZUlEOworICAgIHVuc2lnbmVkIGxpbmVO
dW1iZXI7CisgICAgdW5zaWduZWQgY29sdW1uTnVtYmVyOwogCi0gICAgaWYgKCFwYXJzZUxvY2F0
aW9uKGVycm9yU3RyaW5nLCBsb2NhdGlvbiwgJnNjcmlwdElELCAmbGluZU51bWJlciwgJmNvbHVt
bk51bWJlcikpCisgICAgaWYgKCFwYXJzZUxvY2F0aW9uKGVycm9yU3RyaW5nLCBsb2NhdGlvbi5n
ZXQoKSwgJnNvdXJjZUlELCAmbGluZU51bWJlciwgJmNvbHVtbk51bWJlcikpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFN0cmluZyBjb25kaXRpb24gPSBlbXB0eVN0cmluZygpOwpAQCAtMzM2LDEz
ICszNDAsMTQgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaQogICAg
IGlmICghYnJlYWtwb2ludEFjdGlvbnNGcm9tUHJvdG9jb2woZXJyb3JTdHJpbmcsIGFjdGlvbnMs
ICZicmVha3BvaW50QWN0aW9ucykpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBicmVh
a3BvaW50SWRlbnRpZmllciA9IHNjcmlwdElEICsgJzonICsgU3RyaW5nOjpudW1iZXIobGluZU51
bWJlcikgKyAnOicgKyBTdHJpbmc6Om51bWJlcihjb2x1bW5OdW1iZXIpOworICAgIFN0cmluZyBi
cmVha3BvaW50SWRlbnRpZmllciA9IFN0cmluZzo6bnVtYmVyKHNvdXJjZUlEKSArICc6JyArIFN0
cmluZzo6bnVtYmVyKGxpbmVOdW1iZXIpICsgJzonICsgU3RyaW5nOjpudW1iZXIoY29sdW1uTnVt
YmVyKTsKICAgICBpZiAobV9icmVha3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3Bv
aW50SURzLmZpbmQoYnJlYWtwb2ludElkZW50aWZpZXIpICE9IG1fYnJlYWtwb2ludElkZW50aWZp
ZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEcy5lbmQoKSkgewogICAgICAgICAqZXJyb3JTdHJp
bmcgPSAiQnJlYWtwb2ludCBhdCBzcGVjaWZpZWQgbG9jYXRpb24gYWxyZWFkeSBleGlzdHMuIjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KKwogICAgIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2lu
dChsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgYnJlYWtwb2ludEFjdGlvbnMs
IGF1dG9Db250aW51ZSk7Ci0gICAgYWN0dWFsTG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChi
cmVha3BvaW50SWRlbnRpZmllciwgc2NyaXB0SUQsIGJyZWFrcG9pbnQpOworICAgIGFjdHVhbExv
Y2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkZW50aWZpZXIsIHNvdXJjZUlE
LCBicmVha3BvaW50KTsKICAgICBpZiAoYWN0dWFsTG9jYXRpb24pCiAgICAgICAgICpvdXRCcmVh
a3BvaW50SWRlbnRpZmllciA9IGJyZWFrcG9pbnRJZGVudGlmaWVyOwogICAgIGVsc2UKQEAgLTM2
Myw0NSArMzY4LDQ1IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWsK
IAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRp
b24pCiB7Ci0gICAgaWYgKCFtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRC5pc0VtcHR5
KCkpIHsKKyAgICBpZiAobV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQgIT0gbm9CcmVh
a3BvaW50SUQpIHsKICAgICAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVha3BvaW50
KG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElEKTsKLSAgICAgICAgbV9jb250aW51ZVRv
TG9jYXRpb25CcmVha3BvaW50SUQgPSAiIjsKKyAgICAgICAgbV9jb250aW51ZVRvTG9jYXRpb25C
cmVha3BvaW50SUQgPSBub0JyZWFrcG9pbnRJRDsKICAgICB9CiAKLSAgICBTdHJpbmcgc2NyaXB0
SUQ7Ci0gICAgaW50IGxpbmVOdW1iZXI7Ci0gICAgaW50IGNvbHVtbk51bWJlcjsKKyAgICBTb3Vy
Y2VJRCBzb3VyY2VJRDsKKyAgICB1bnNpZ25lZCBsaW5lTnVtYmVyOworICAgIHVuc2lnbmVkIGNv
bHVtbk51bWJlcjsKIAotICAgIGlmICghcGFyc2VMb2NhdGlvbihlcnJvclN0cmluZywgbG9jYXRp
b24sICZzY3JpcHRJRCwgJmxpbmVOdW1iZXIsICZjb2x1bW5OdW1iZXIpKQorICAgIGlmICghcGFy
c2VMb2NhdGlvbihlcnJvclN0cmluZywgbG9jYXRpb24uZ2V0KCksICZzb3VyY2VJRCwgJmxpbmVO
dW1iZXIsICZjb2x1bW5OdW1iZXIpKQogICAgICAgICByZXR1cm47CiAKICAgICBTY3JpcHRCcmVh
a3BvaW50IGJyZWFrcG9pbnQobGluZU51bWJlciwgY29sdW1uTnVtYmVyLCAiIiwgZmFsc2UpOwot
ICAgIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElEID0gc2NyaXB0RGVidWdTZXJ2ZXIo
KS5zZXRCcmVha3BvaW50KHNjcmlwdElELCBicmVha3BvaW50LCAmbGluZU51bWJlciwgJmNvbHVt
bk51bWJlcik7CisgICAgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQgPSBzY3JpcHRE
ZWJ1Z1NlcnZlcigpLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnQsICZsaW5lTnVt
YmVyLCAmY29sdW1uTnVtYmVyKTsKICAgICByZXN1bWUoZXJyb3JTdHJpbmcpOwogfQogCi1QYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnJlc29sdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmIGJyZWFr
cG9pbnQpCitQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtw
b2ludElkZW50aWZpZXIsIFNvdXJjZUlEIHNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVha3BvaW50
JiBicmVha3BvaW50KQogewotICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIHNjcmlwdEl0ZXJhdG9y
ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SUQpOworICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIHNj
cmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc291cmNlSUQpOwogICAgIGlmIChzY3JpcHRJ
dGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFNjcmlw
dCYgc2NyaXB0ID0gc2NyaXB0SXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChicmVha3BvaW50Lmxp
bmVOdW1iZXIgPCBzY3JpcHQuc3RhcnRMaW5lIHx8IHNjcmlwdC5lbmRMaW5lIDwgYnJlYWtwb2lu
dC5saW5lTnVtYmVyKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGludCBhY3R1YWxMaW5lTnVt
YmVyOwotICAgIGludCBhY3R1YWxDb2x1bW5OdW1iZXI7Ci0gICAgU3RyaW5nIGRlYnVnU2VydmVy
QnJlYWtwb2ludElEID0gc2NyaXB0RGVidWdTZXJ2ZXIoKS5zZXRCcmVha3BvaW50KHNjcmlwdElE
LCBicmVha3BvaW50LCAmYWN0dWFsTGluZU51bWJlciwgJmFjdHVhbENvbHVtbk51bWJlcik7Ci0g
ICAgaWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElELmlzRW1wdHkoKSkKKyAgICB1bnNpZ25lZCBh
Y3R1YWxMaW5lTnVtYmVyOworICAgIHVuc2lnbmVkIGFjdHVhbENvbHVtbk51bWJlcjsKKyAgICBC
cmVha3BvaW50SUQgZGVidWdTZXJ2ZXJCcmVha3BvaW50SUQgPSBzY3JpcHREZWJ1Z1NlcnZlcigp
LnNldEJyZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnQsICZhY3R1YWxMaW5lTnVtYmVyLCAm
YWN0dWFsQ29sdW1uTnVtYmVyKTsKKyAgICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SUQgPT0g
bm9CcmVha3BvaW50SUQpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgQnJlYWtwb2ludElkZW50
aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEc01hcDo6aXRlcmF0b3IgZGVidWdTZXJ2ZXJC
cmVha3BvaW50SURzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJZGVudGlmaWVyVG9EZWJ1Z1NlcnZl
ckJyZWFrcG9pbnRJRHMuZmluZChicmVha3BvaW50SWRlbnRpZmllcik7CiAgICAgaWYgKGRlYnVn
U2VydmVyQnJlYWtwb2ludElEc0l0ZXJhdG9yID09IG1fYnJlYWtwb2ludElkZW50aWZpZXJUb0Rl
YnVnU2VydmVyQnJlYWtwb2ludElEcy5lbmQoKSkKLSAgICAgICAgZGVidWdTZXJ2ZXJCcmVha3Bv
aW50SURzSXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJZGVudGlmaWVyVG9EZWJ1Z1NlcnZlckJyZWFr
cG9pbnRJRHMuc2V0KGJyZWFrcG9pbnRJZGVudGlmaWVyLCBWZWN0b3I8U3RyaW5nPigpKS5pdGVy
YXRvcjsKKyAgICAgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SURzSXRlcmF0b3IgPSBtX2JyZWFr
cG9pbnRJZGVudGlmaWVyVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHMuc2V0KGJyZWFrcG9pbnRJ
ZGVudGlmaWVyLCBWZWN0b3I8QnJlYWtwb2ludElEPigpKS5pdGVyYXRvcjsKICAgICBkZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJRHNJdGVyYXRvci0+dmFsdWUuYXBwZW5kKGRlYnVnU2VydmVyQnJlYWtw
b2ludElEKTsKIAogICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBs
b2NhdGlvbiA9IFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCi0gICAg
ICAgIC5zZXRTY3JpcHRJZChzY3JpcHRJRCkKKyAgICAgICAgLnNldFNjcmlwdElkKFN0cmluZzo6
bnVtYmVyKHNvdXJjZUlEKSkKICAgICAgICAgLnNldExpbmVOdW1iZXIoYWN0dWFsTGluZU51bWJl
cik7CiAgICAgbG9jYXRpb24tPnNldENvbHVtbk51bWJlcihhY3R1YWxDb2x1bW5OdW1iZXIpOwog
ICAgIHJldHVybiBsb2NhdGlvbjsKQEAgLTQxNywxNiArNDIyLDE3IEBAIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gc2NyaXAKICAgICByZXR1cm4gdmFsdWUtPmFzT2JqZWN0KCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50KEVycm9y
U3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgY29uc3QgU3RyaW5nJiBxdWVy
eSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBj
b25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxBcnJheTxXZWJDb3JlOjpUeXBlQnVpbGRlcjo6
UGFnZTo6U2VhcmNoTWF0Y2g+PiYgcmVzdWx0cykKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3Jp
cHRJRFN0ciwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxD
YXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxB
cnJheTxXZWJDb3JlOjpUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+PiYgcmVzdWx0cykK
IHsKICAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXggPyAqb3B0aW9uYWxJc1JlZ2V4
IDogZmFsc2U7CiAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vuc2l0aXZl
ID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNlOwogCi0gICAgU2NyaXB0c01hcDo6aXRl
cmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJRCk7CisgICAgU291cmNlSUQgc291cmNl
SUQgPSBzY3JpcHRJRFN0ci50b0ludFB0cigpOworICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9zY3JpcHRzLmZpbmQoc291cmNlSUQpOwogICAgIGlmIChpdCAhPSBtX3NjcmlwdHMuZW5k
KCkpCiAgICAgICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbHM6OnNlYXJjaEluVGV4dEJ5
TGluZXMoaXQtPnZhbHVlLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOwog
ICAgIGVsc2UKLSAgICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJ
RDsKKyAgICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3IgaWQ6ICIgKyBzY3JpcHRJRFN0cjsK
IH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTY3JpcHRTb3VyY2UoRXJyb3JT
dHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmlwdElELCBjb25zdCBTdHJpbmcmIG5ld0Nv
bnRlbnQsIGNvbnN0IGJvb2wqIGNvbnN0IHByZXZpZXcsIFJlZlB0cjxBcnJheTxUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OkNhbGxGcmFtZT4+JiBuZXdDYWxsRnJhbWVzLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYgcmVzdWx0KQpAQCAtNDQxLDEzICs0NDcsMTQgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpzZXRTY3JpcHRTbwogICAgICAgICByZXN1bHQgPSBvYmplY3Q7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiBl
cnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgU3RyaW5nKiBzY3JpcHRTb3VyY2UpCit2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyogZXJy
b3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SURTdHIsIFN0cmluZyogc2NyaXB0U291cmNlKQogewot
ICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SUQpOwor
ICAgIFNvdXJjZUlEIHNvdXJjZUlEID0gc2NyaXB0SURTdHIudG9JbnRQdHIoKTsKKyAgICBTY3Jp
cHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNvdXJjZUlEKTsKICAgICBpZiAo
aXQgIT0gbV9zY3JpcHRzLmVuZCgpKQogICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnZhbHVl
LnNvdXJjZTsKICAgICBlbHNlCi0gICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAi
ICsgc2NyaXB0SUQ7CisgICAgICAgICplcnJvciA9ICJObyBzY3JpcHQgZm9yIGlkOiAiICsgc2Ny
aXB0SURTdHI7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rpb25E
ZXRhaWxzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklk
LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiBkZXRhaWxz
KQpAQCAtNjcwLDcgKzY3Nyw3IEBAIFN0cmluZyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpzb3Vy
Y2VNYXAKIAogLy8gSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIgZnVuY3Rpb25zCiAKLXZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzY3JpcHRJ
RCwgY29uc3QgU2NyaXB0JiBpblNjcmlwdCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlkUGFyc2VTb3VyY2UoU291cmNlSUQgc291cmNlSUQsIGNvbnN0IFNjcmlwdCYgaW5TY3JpcHQp
CiB7CiAgICAgU2NyaXB0IHNjcmlwdCA9IGluU2NyaXB0OwogICAgIGlmICghc2NyaXB0LnN0YXJ0
TGluZSAmJiAhc2NyaXB0LnN0YXJ0Q29sdW1uKQpAQCAtNjgyLDkgKzY4OSwxMCBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291CiAgICAgYm9vbCogaGFzU291cmNlVVJM
UGFyYW0gPSBoYXNTb3VyY2VVUkwgPyAmaGFzU291cmNlVVJMIDogMDsKICAgICBTdHJpbmcqIHNv
dXJjZU1hcFVSTFBhcmFtID0gc2NyaXB0LnNvdXJjZU1hcHBpbmdVUkwuaXNOdWxsKCkgPyAwIDog
JnNjcmlwdC5zb3VyY2VNYXBwaW5nVVJMOwogICAgIGNvbnN0IGJvb2wqIGlzQ29udGVudFNjcmlw
dCA9IHNjcmlwdC5pc0NvbnRlbnRTY3JpcHQgPyAmc2NyaXB0LmlzQ29udGVudFNjcmlwdCA6IDA7
Ci0gICAgbV9mcm9udGVuZC0+c2NyaXB0UGFyc2VkKHNjcmlwdElELCBzY3JpcHRVUkwsIHNjcmlw
dC5zdGFydExpbmUsIHNjcmlwdC5zdGFydENvbHVtbiwgc2NyaXB0LmVuZExpbmUsIHNjcmlwdC5l
bmRDb2x1bW4sIGlzQ29udGVudFNjcmlwdCwgc291cmNlTWFwVVJMUGFyYW0sIGhhc1NvdXJjZVVS
TFBhcmFtKTsKKyAgICBTdHJpbmcgc2NyaXB0SURTdHIgPSBTdHJpbmc6Om51bWJlcihzb3VyY2VJ
RCk7CisgICAgbV9mcm9udGVuZC0+c2NyaXB0UGFyc2VkKHNjcmlwdElEU3RyLCBzY3JpcHRVUkws
IHNjcmlwdC5zdGFydExpbmUsIHNjcmlwdC5zdGFydENvbHVtbiwgc2NyaXB0LmVuZExpbmUsIHNj
cmlwdC5lbmRDb2x1bW4sIGlzQ29udGVudFNjcmlwdCwgc291cmNlTWFwVVJMUGFyYW0sIGhhc1Nv
dXJjZVVSTFBhcmFtKTsKIAotICAgIG1fc2NyaXB0cy5zZXQoc2NyaXB0SUQsIHNjcmlwdCk7Cisg
ICAgbV9zY3JpcHRzLnNldChzb3VyY2VJRCwgc2NyaXB0KTsKIAogICAgIGlmIChzY3JpcHRVUkwu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC03MDksNyArNzE3LDcgQEAgdm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlv
bj4gbG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChpdC0+a2V5LCBzY3JpcHRJRCwgYnJlYWtw
b2ludCk7CisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiBs
b2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGl0LT5rZXksIHNvdXJjZUlELCBicmVha3BvaW50
KTsKICAgICAgICAgaWYgKGxvY2F0aW9uKQogICAgICAgICAgICAgbV9mcm9udGVuZC0+YnJlYWtw
b2ludFJlc29sdmVkKGl0LT5rZXksIGxvY2F0aW9uKTsKICAgICB9CkBAIC03MzgsOSArNzQ2LDkg
QEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShKUwogICAgIG1fZnJvbnRl
bmQtPnBhdXNlZChjdXJyZW50Q2FsbEZyYW1lcygpLCBtX2JyZWFrUmVhc29uLCBtX2JyZWFrQXV4
RGF0YSk7CiAgICAgbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQgPSBmYWxzZTsKIAotICAgIGlm
ICghbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQuaXNFbXB0eSgpKSB7CisgICAgaWYg
KG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElEICE9IG5vQnJlYWtwb2ludElEKSB7CiAg
ICAgICAgIHNjcmlwdERlYnVnU2VydmVyKCkucmVtb3ZlQnJlYWtwb2ludChtX2NvbnRpbnVlVG9M
b2NhdGlvbkJyZWFrcG9pbnRJRCk7Ci0gICAgICAgIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtw
b2ludElEID0gIiI7CisgICAgICAgIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElEID0g
bm9CcmVha3BvaW50SUQ7CiAgICAgfQogICAgIGlmIChtX2xpc3RlbmVyKQogICAgICAgICBtX2xp
c3RlbmVyLT5kaWRQYXVzZSgpOwpAQCAtNzY3LDcgKzc3NSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6Y2xlYXIoKQogICAgIG1fY3VycmVudENhbGxTdGFjayA9IFNjcmlwdFZhbHVl
KCk7CiAgICAgbV9zY3JpcHRzLmNsZWFyKCk7CiAgICAgbV9icmVha3BvaW50SWRlbnRpZmllclRv
RGVidWdTZXJ2ZXJCcmVha3BvaW50SURzLmNsZWFyKCk7Ci0gICAgbV9jb250aW51ZVRvTG9jYXRp
b25CcmVha3BvaW50SUQgPSBTdHJpbmcoKTsKKyAgICBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFr
cG9pbnRJRCA9IG5vQnJlYWtwb2ludElEOwogICAgIGNsZWFyQnJlYWtEZXRhaWxzKCk7CiAgICAg
bV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQgPSBmYWxzZTsKICAgICBFcnJvclN0cmluZyBlcnJv
cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuaAkocmV2aXNpb24gMTU4ODY1KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMSw2ICszMSw3IEBACiAjZGVmaW5lIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnRfaAogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
ICYmIEVOQUJMRShJTlNQRUNUT1IpCisjaW5jbHVkZSAiQnJlYWtwb2ludElELmgiCiAjaW5jbHVk
ZSAiQ29uc29sZUFQSVR5cGVzLmgiCiAjaW5jbHVkZSAiQ29uc29sZVR5cGVzLmgiCiAjaW5jbHVk
ZSAiSW5qZWN0ZWRTY3JpcHQuaCIKQEAgLTM5LDYgKzQwLDcgQEAKICNpbmNsdWRlICJTY3JpcHRC
cmVha3BvaW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0RGVidWdMaXN0ZW5lci5oIgogI2luY2x1ZGUg
IlNjcmlwdFN0YXRlLmgiCisjaW5jbHVkZSAiU291cmNlSUQuaCIKICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KQEAgLTE0OSwyMCArMTUxLDIwIEBAIHByaXZhdGU6CiAKICAgICBQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IGN1cnJl
bnRDYWxsRnJhbWVzKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3VyY2UoY29uc3Qg
U3RyaW5nJiBzY3JpcHRJRCwgY29uc3QgU2NyaXB0JikgT1ZFUlJJREUgRklOQUw7CisgICAgdmly
dHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKFNvdXJjZUlELCBjb25zdCBTY3JpcHQmKSBPVkVSUklE
RSBGSU5BTDsKICAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5l
LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgT1ZFUlJJREUgRklOQUw7CiAKICAgICB2b2lk
IHNldFBhdXNlT25FeGNlcHRpb25zSW1wbChFcnJvclN0cmluZyosIGludCk7CiAKLSAgICBQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IHJlc29sdmVCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NyaXB0
SUQsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmKTsKKyAgICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpEZWJ1Z2dlcjo6TG9jYXRpb24+IHJlc29sdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJl
YWtwb2ludElkZW50aWZpZXIsIFNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVha3BvaW50Jik7CiAg
ICAgdm9pZCBjbGVhcigpOwogICAgIGJvb2wgYXNzZXJ0UGF1c2VkKEVycm9yU3RyaW5nKik7CiAg
ICAgdm9pZCBjbGVhckJyZWFrRGV0YWlscygpOwogCiAgICAgU3RyaW5nIHNvdXJjZU1hcFVSTEZv
clNjcmlwdChjb25zdCBTY3JpcHQmKTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFNj
cmlwdD4gU2NyaXB0c01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8U3Ry
aW5nPj4gQnJlYWtwb2ludElkZW50aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEc01hcDsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8U291cmNlSUQsIFNjcmlwdD4gU2NyaXB0c01hcDsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8QnJlYWtwb2ludElEPj4gQnJlYWtwb2ludElk
ZW50aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEc01hcDsKICAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pj4gQnJlYWtwb2ludElkZW50aWZpZXJU
b0JyZWFrcG9pbnRNYXA7CiAKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyOwpAQCAtMTcyLDcgKzE3NCw3IEBAIHByaXZhdGU6CiAgICAgU2NyaXB0c01h
cCBtX3NjcmlwdHM7CiAgICAgQnJlYWtwb2ludElkZW50aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtw
b2ludElEc01hcCBtX2JyZWFrcG9pbnRJZGVudGlmaWVyVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJ
RHM7CiAgICAgQnJlYWtwb2ludElkZW50aWZpZXJUb0JyZWFrcG9pbnRNYXAgbV9qYXZhU2NyaXB0
QnJlYWtwb2ludHM7Ci0gICAgU3RyaW5nIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElE
OworICAgIEJyZWFrcG9pbnRJRCBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRDsKICAg
ICBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OlJlYXNvbjo6RW51bSBtX2JyZWFrUmVhc29u
OwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fYnJlYWtBdXhEYXRhOwogICAgIGJvb2wg
bV9lbmFibGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlz
dGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0RGVi
dWdMaXN0ZW5lci5oCShyZXZpc2lvbiAxNTg4NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMyw2ICszMyw3IEBACiAjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCiAKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorI2luY2x1ZGUgIlNv
dXJjZUlELmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIApAQCAtNjUsNyArNjYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5T
Y3JpcHREZWJ1Z0xpc3RlbmVyKCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3Vy
Y2UoY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgY29uc3QgU2NyaXB0JikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkaWRQYXJzZVNvdXJjZShTb3VyY2VJRCwgY29uc3QgU2NyaXB0JikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgU2NyaXB0VmFsdWUmIGNhbGxGcmFtZXMsIGNvbnN0IFNjcmlwdFZhbHVl
JiBleGNlcHRpb24pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoKSA9IDA7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTg4ODcpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0xMS0wNyAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBicmVha3BvaW50
IChhbmQgZXhjZXB0aW9uIGJyZWFrKSBmdW5jdGlvbmFsaXR5IGludG8gSlNDOjpEZWJ1Z2dlci4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTc5Ni4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZp
ZXcvV2ViU2NyaXB0RGVidWdnZXIuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVn
Z2VyLm1tOgorICAgICAgICAoV2ViU2NyaXB0RGVidWdnZXI6OldlYlNjcmlwdERlYnVnZ2VyKToK
KyAgICAgICAgKFdlYlNjcmlwdERlYnVnZ2VyOjpoYW5kbGVQYXVzZSk6CisKIDIwMTMtMTEtMDcg
IEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
YSBQTEFURk9STShJT1MpIGZyb20gV2ViS2l0IFByaXZhdGUgSGVhZGVyCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5oCShyZXZpc2lvbiAxNTg4
NjUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDEzICs1Niw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgc291cmNlUGFyc2VkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpTb3VyY2VQcm92
aWRlciosIGludCBlcnJvckxpbmUsIGNvbnN0IFdURjo6U3RyaW5nJiBlcnJvck1zZykgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGxFdmVudChKU0M6OkNhbGxGcmFtZSopIE9WRVJSSURF
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBhdFN0YXRlbWVudChKU0M6OkNhbGxGcmFtZSopIE9WRVJS
SURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZXR1cm5FdmVudChKU0M6OkNhbGxGcmFtZSopIE9W
RVJSSURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCBleGNlcHRpb24oSlNDOjpDYWxsRnJhbWUqLCBK
U0M6OkpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIGJvb2wgaGFzSGFuZGxlcikgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJvZ3JhbShKU0M6OkNhbGxGcmFtZSopIE9WRVJS
SURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShKU0M6OkNhbGxGcmFt
ZSopIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFjaEJyZWFrcG9pbnQoSlND
OjpDYWxsRnJhbWUqKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGF1c2Uo
SlNDOjpEZWJ1Z2dlcjo6UmVhc29uRm9yUGF1c2UsIEpTQzo6SlNHbG9iYWxPYmplY3QqKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIGJvb2wgbmVlZFBhdXNlSGFuZGxpbmcoSlNDOjpKU0dsb2JhbE9i
amVjdCopIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIGJvb2wgbV9jYWxsaW5nRGVs
ZWdhdGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdn
ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHRE
ZWJ1Z2dlci5tbQkocmV2aXNpb24gMTU4ODY1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJTY3JpcHREZWJ1Z2dlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsOSBAQCBX
ZWJTY3JpcHREZWJ1Z2dlcjo6V2ViU2NyaXB0RGVidWdnZXIoSlNHCiAgICAgOiBtX2NhbGxpbmdE
ZWxlZ2F0ZShmYWxzZSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwg
Z2xvYmFsT2JqZWN0KQogeworICAgIHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkFs
bEV4Y2VwdGlvbnMpOworICAgIGRlYWN0aXZhdGVCcmVha3BvaW50cygpOwogICAgIGF0dGFjaChn
bG9iYWxPYmplY3QpOwotICAgIHNldE5lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKHRydWUpOwogfQog
CiAvLyBjYWxsYmFja3MgLSByZWxheSB0byBkZWxlZ2F0ZQpAQCAtMTE3LDI0ICsxMTgsMjkgQEAg
dm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6c291cmNlUGFyc2VkKEV4ZQogICAgIG1fY2FsbGluZ0Rl
bGVnYXRlID0gZmFsc2U7CiB9CiAKLXZvaWQgV2ViU2NyaXB0RGVidWdnZXI6OmV4Y2VwdGlvbihK
U0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIGJv
b2wgaGFzSGFuZGxlcikKK3ZvaWQgV2ViU2NyaXB0RGVidWdnZXI6OmhhbmRsZVBhdXNlKERlYnVn
Z2VyOjpSZWFzb25Gb3JQYXVzZSByZWFzb24sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CiB7CiAgICAgaWYgKG1fY2FsbGluZ0RlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKKyAgICBp
ZiAocmVhc29uICE9IERlYnVnZ2VyOjpQYXVzZWRGb3JFeGNlcHRpb24pCisgICAgICAgIHJldHVy
bjsKKwogICAgIG1fY2FsbGluZ0RlbGVnYXRlID0gdHJ1ZTsKIAotICAgIFdlYkZyYW1lICp3ZWJG
cmFtZSA9IHRvV2ViRnJhbWUoY2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOworICAg
IFdlYkZyYW1lICp3ZWJGcmFtZSA9IHRvV2ViRnJhbWUoZ2xvYmFsT2JqZWN0KTsKICAgICBXZWJW
aWV3ICp3ZWJWaWV3ID0gW3dlYkZyYW1lIHdlYlZpZXddOwotICAgIFJlZlB0cjxEZWJ1Z2dlckNh
bGxGcmFtZT4gZGVidWdnZXJDYWxsRnJhbWUgPSBEZWJ1Z2dlckNhbGxGcmFtZTo6Y3JlYXRlKGNh
bGxGcmFtZSk7CisgICAgRGVidWdnZXJDYWxsRnJhbWUqIGRlYnVnZ2VyQ2FsbEZyYW1lID0gY3Vy
cmVudERlYnVnZ2VyQ2FsbEZyYW1lKCk7CisgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGN1
cnJlbnRFeGNlcHRpb24oKTsKICAgICBTdHJpbmcgZnVuY3Rpb25OYW1lID0gZGVidWdnZXJDYWxs
RnJhbWUtPmZ1bmN0aW9uTmFtZSgpOwogICAgIFJldGFpblB0cjxXZWJTY3JpcHRDYWxsRnJhbWU+
IHdlYkNhbGxGcmFtZSA9IGFkb3B0TlMoW1tXZWJTY3JpcHRDYWxsRnJhbWUgYWxsb2NdIF9pbml0
V2l0aEdsb2JhbE9iamVjdDpjb3JlKHdlYkZyYW1lKS0+c2NyaXB0KCkud2luZG93U2NyaXB0T2Jq
ZWN0KCkgZnVuY3Rpb25OYW1lOmZ1bmN0aW9uTmFtZSBleGNlcHRpb25WYWx1ZTpleGNlcHRpb25W
YWx1ZV0pOwogCiAgICAgV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUq
IGNhY2hlID0gV2ViVmlld0dldFNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMod2Vi
Vmlldyk7CiAgICAgaWYgKGNhY2hlLT5leGNlcHRpb25XYXNSYWlzZWRGdW5jKSB7Ci0gICAgICAg
IGlmIChjYWNoZS0+ZXhjZXB0aW9uV2FzUmFpc2VkRXhwZWN0c0hhc0hhbmRsZXJGbGFnKQorICAg
ICAgICBpZiAoY2FjaGUtPmV4Y2VwdGlvbldhc1JhaXNlZEV4cGVjdHNIYXNIYW5kbGVyRmxhZykg
eworICAgICAgICAgICAgYm9vbCBoYXNIYW5kbGVyID0gaGFzSGFuZGxlckZvckV4Y2VwdGlvbkNh
bGxiYWNrKCk7CiAgICAgICAgICAgICBDYWxsU2NyaXB0RGVidWdEZWxlZ2F0ZShjYWNoZS0+ZXhj
ZXB0aW9uV2FzUmFpc2VkRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZXhjZXB0aW9u
V2FzUmFpc2VkOmhhc0hhbmRsZXI6c291cmNlSWQ6bGluZTpmb3JXZWJGcmFtZTopLCB3ZWJDYWxs
RnJhbWUuZ2V0KCksIGhhc0hhbmRsZXIsIGRlYnVnZ2VyQ2FsbEZyYW1lLT5zb3VyY2VJRCgpLCBk
ZWJ1Z2dlckNhbGxGcmFtZS0+bGluZSgpLCB3ZWJGcmFtZSk7Ci0gICAgICAgIGVsc2UKKyAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICBDYWxsU2NyaXB0RGVidWdEZWxlZ2F0ZShjYWNoZS0+ZXhj
ZXB0aW9uV2FzUmFpc2VkRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZXhjZXB0aW9u
V2FzUmFpc2VkOnNvdXJjZUlkOmxpbmU6Zm9yV2ViRnJhbWU6KSwgd2ViQ2FsbEZyYW1lLmdldCgp
LCBkZWJ1Z2dlckNhbGxGcmFtZS0+c291cmNlSUQoKSwgZGVidWdnZXJDYWxsRnJhbWUtPmxpbmUo
KSwgd2ViRnJhbWUpOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216356</attachid>
            <date>2013-11-07 19:58:49 -0800</date>
            <delta_ts>2013-11-08 11:03:55 -0800</delta_ts>
            <desc>patch 3: fixed some issue revealed by a Windows build.</desc>
            <filename>bug-121796b.patch</filename>
            <type>text/plain</type>
            <size>104344</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4ODk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDEzLTExLTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
b3ZlIGJyZWFrcG9pbnQgKGFuZCBleGNlcHRpb24gYnJlYWspIGZ1bmN0aW9uYWxpdHkgaW50byBK
U0M6OkRlYnVnZ2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIxNzk2LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIC0gSW4gU2NyaXB0RGVidWdTZXJ2ZXIgYW5kIEpTQzo6RGVidWdnZXIsIFNvdXJjZUlE
IGFuZCBCcmVha3BvaW50SUQgYXJlCisgICAgICAgICAgbm93IG51bWVyaWMgdG9rZW5zLgorCisg
ICAgICAgIC0gSlNDOjpEZWJ1Z2dlciBub3cgdHJhY2tzIHVzZXIgZGVmaW5lZCBicmVha3BvaW50
cyBpbiBhIEpTQzo6QnJlYWtwb2ludAorICAgICAgICAgIHJlY29yZC4gUHJldmlvdXNseSwgdGhp
cyBpbmZvIGlzIHRyYWNrZWQgaW4gdGhlIFNjcmlwdEJyZWFrcG9pbnQgcmVjb3JkCisgICAgICAg
ICAgaW4gU2NyaXB0RGVidWdTZXJ2ZXIuIFRoZSBvbmx5IGVsZW1lbnQgb2YgU2NyaXB0QnJlYWtw
b2ludCB0aGF0IGlzIG5vdAorICAgICAgICAgIGJlaW5nIHRyYWNrZWQgYnkgSlNDOjpCcmVha3Bv
aW50IGlzIHRoZSBTY3JpcHRCcmVha3BvaW50QWN0aW9uLgorICAgICAgICAgICAgIFRoZSBTY3Jp
cHRCcmVha3BvaW50QWN0aW9uIGlzIHN0aWxsIHRyYWNrZWQgYnkgdGhlIFNjcmlwdERlYnVnU2Vy
dmVyCisgICAgICAgICAgaW4gYSBsaXN0IGtleWVkIG9uIHRoZSBjb3JyZXNwb25kaW5nIEJyZWFr
cG9pbnRJRC4KKyAgICAgICAgICAgICBUaGUgU2NyaXB0QnJlYWtwb2ludCByZWNvcmQgaXMgbm93
IG9ubHkgdXNlZCBhcyBhIG1lYW5zIG9mIHBhc3NpbmcKKyAgICAgICAgICBicmVha3BvaW50IHBh
cmFtYXRlcnMgdG8gdGhlIFNjcmlwdERlYnVnU2VydmVyLgorCisgICAgICAgIC0gU2NyaXB0RGVi
dWdTZXJ2ZXIgbm93IG5vIGxvbmdlciBhY2Nlc3NlcyB0aGUgSlNDOjpDYWxsRnJhbWUqIGRpcmVj
dGx5LgorICAgICAgICAgIEl0IGFsd2F5cyBnb2VzIHRocm91Z2ggdGhlIERlYnVnZ2VyQ2FsbEZy
YW1lLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBk
ZWJ1Z2dlci9CcmVha3BvaW50Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCcmVha3BvaW50OjpC
cmVha3BvaW50KToKKyAgICAgICAgLSBCcmVha3BvaW50IGNsYXNzIHRvIHRyYWNrIGluZm8gZm9y
IGVhY2ggYnJlYWtwb2ludCBpbiBKU0M6OkRlYnVnZ2VyLgorICAgICAgICAqIGRlYnVnZ2VyL0Rl
YnVnZ2VyLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWVTY29wZTo6RGVidWdn
ZXJDYWxsRnJhbWVTY29wZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lU2NvcGU6
On5EZWJ1Z2dlckNhbGxGcmFtZVNjb3BlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OkRlYnVn
Z2VyKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmRldGFjaCk6CisgICAgICAgIChKU0M6OkRl
YnVnZ2VyOjp1cGRhdGVOZWVkRm9yT3BEZWJ1Z0NhbGxiYWNrcyk6CisgICAgICAgIChKU0M6OkRl
YnVnZ2VyOjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnJlbW92ZUJy
ZWFrcG9pbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6aGFzQnJlYWtwb2ludCk6CisgICAg
ICAgIChKU0M6OkRlYnVnZ2VyOjpjbGVhckJyZWFrcG9pbnRzKToKKyAgICAgICAgKEpTQzo6RGVi
dWdnZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6
OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6c2V0
UGF1c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6YnJlYWtQcm9n
cmFtKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmNvbnRpbnVlUHJvZ3JhbSk6CisgICAgICAg
IChKU0M6OkRlYnVnZ2VyOjpzdGVwSW50b1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkRlYnVn
Z2VyOjpzdGVwT3ZlclN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzdGVwT3V0
T2ZGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjp1cGRhdGVDYWxsRnJhbWUpOgor
ICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6dXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZCk6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKToKKyAgICAgICAgKEpTQzo6
RGVidWdnZXI6OmV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjphdFN0YXRlbWVu
dCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpjYWxsRXZlbnQpOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6d2lsbEV4ZWN1
dGVQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmRpZEV4ZWN1dGVQcm9ncmFtKToK
KyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmRpZFJlYWNoQnJlYWtwb2ludCk6CisgICAgICAgIChK
U0M6OkRlYnVnZ2VyOjpjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUpOgorICAgICAgICAqIGRlYnVn
Z2VyL0RlYnVnZ2VyLmg6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3Bw
OgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSUQpOgorICAgICAgICAo
SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSURGb3JDYWxsRnJhbWUpOgorICAgICAgICAq
IGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmg6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXJQcmltaXRpdmVzLmg6IEFkZGVkLgorICAgICAgICAtIGRlZmluZSBTb3VyY2VJRCwgbm9Tb3Vy
Y2VJRCwgQnJlYWtwb2ludElELCBhbmQgbm9CcmVha3BvaW50SUQuCisKIDIwMTMtMTEtMDcgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGVEwgc2hvdWxkIHN1cHBv
cnQgTmV3QXJyYXkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCShyZXZpc2lvbiAxNTg4OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNTYxLDEyICs1NjEsMTQgQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJy
aWVyU3VwcG9ydC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmll
clN1cHBvcnQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvQnJlYWtwb2ludC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
clByaW1pdGl2ZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L0phdmFTY3JpcHRDb3JlL0FQSUNhc3QuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL0phdmFTY3JpcHRDb3JlL0FQSVNoaW1zLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0LmggXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTg4
OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03ODUsOSArNzg1LDExIEBACiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29tcGlsZXJcTGFiZWxTY29wZS5oIiAvPg0K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb21waWxlclxSZWdpc3RlcklELmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY29uZmlnLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcQnJlYWtwb2ludC5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJBY3RpdmF0aW9uLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJDYWxsRnJhbWUuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlclByaW1pdGl2ZXMuaCIgLz4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RIZWFwLmgiIC8+DQogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCIgLz4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaCIgLz4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNTg4OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NjksNiArMTQ2OSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29tcGlsZXJcUmVnaXN0ZXJJRC5oIj4NCiAgICAgICA8RmlsdGVyPmJ5dGVj
b2RlY29tcGlsZXI8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGVidWdnZXJcQnJlYWtwb2ludC5oIj4NCisgICAgICA8RmlsdGVyPmRlYnVn
Z2VyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyLmgiPg0KICAgICAgIDxGaWx0ZXI+ZGVidWdnZXI8L0ZpbHRl
cj4NCiAgICAgPC9DbEluY2x1ZGU+DQpAQCAtMTQ3OCw2ICsxNDgxLDkgQEAKICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyQ2FsbEZyYW1lLmgiPg0KICAgICAgIDxG
aWx0ZXI+ZGVidWdnZXI8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJQcmltaXRpdmVzLmgiPg0KKyAgICAgIDxG
aWx0ZXI+ZGVidWdnZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0RyaXZlci5oIj4NCiAgICAgICA8RmlsdGVyPmRmZzwvRmls
dGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTU4ODk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyMjAsNiAr
MTIyMCw4IEBACiAJCUZFNEEzMzFGMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRBMzMxRDE1
QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwICovOyB9OwogCQlGRTRBMzMyMDE1QkQy
RTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEEzMzFFMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZF
NjYxNzI4MTc3NEUwMzUwMDQ5NUIwMCAvKiBWTVN0YWNrQm91bmRzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY2MTcyNzE3NzRFMDM1MDA0OTVCMDAg
LyogVk1TdGFja0JvdW5kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRTE4MkI3
QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dl
clByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUQyODdCMjE1
RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDI4N0IxMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9w
Y29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUZFRDk0RjJFMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQjE3MUUzRTIzMDBCRTc3QTQg
LyogV2F0Y2hkb2cuY3BwICovOyB9OwogCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0
Y2hkb2cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
RDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNTI5LDYgKzI1MzEsOCBAQAogCQlGRTRB
MzMxRDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVk1JbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkU2NjE3MjcxNzc0RTAzNTAwNDk1QjAwIC8qIFZNU3RhY2tCb3Vu
ZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1TdGFja0JvdW5kcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyog
QnJlYWtwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCcmVha3BvaW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1
MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGVidWdnZXJQcmltaXRpdmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
RDI4N0IxMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBMTEludE9wY29kZS5oOyBwYXRoID0gbGxpbnQvTExJbnRPcGNvZGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEOTRGMkIxNzFFM0UyMzAwQkU3N0E0
IC8qIFdhdGNoZG9nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
dGNoZG9nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEOTRGMkMxNzFFM0Uy
MzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhdGNoZG9nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMTYwLDYgKzMxNjQs
OCBAQAogCQkxNDgwREI5QTBEREMyMjMxMDAzQ0ZERjIgLyogZGVidWdnZXIgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUZFQTA4NjFFMTgyQjdBMDQwMEY2
RDg1MSAvKiBCcmVha3BvaW50LmggKi8sCisJCQkJRkVBMDg2MUYxODJCN0EwNDAwRjZEODUxIC8q
IERlYnVnZ2VyUHJpbWl0aXZlcy5oICovLAogCQkJCUY2OTJBODU4MDI1NTU5N0QwMUZGNjBGNyAv
KiBEZWJ1Z2dlci5jcHAgKi8sCiAJCQkJRjY5MkE4NTkwMjU1NTk3RDAxRkY2MEY3IC8qIERlYnVn
Z2VyLmggKi8sCiAJCQkJQkMzMTM1NjMwRjMwMkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZh
dGlvbi5jcHAgKi8sCkBAIC00MTE5LDcgKzQxMjUsOSBAQAogCQkJCTg2QUREMTQ1MEZEREVBOTgw
MDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVDMDI4NUQx
NzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4
MzM1QjgxNjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0E4QUYzNTE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dl
clByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM3MTdBREI1RjMwMDVBQjE3
NCAvKiBBcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3
RjM5NTE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9CcmVha3BvaW50LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvQnJlYWtwb2ludC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCcmVha3BvaW50X2gKKyNkZWZpbmUgQnJl
YWtwb2ludF9oCisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKworI2luY2x1ZGUg
IkRlYnVnZ2VyUHJpbWl0aXZlcy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IEJyZWFrcG9pbnQgeworICAgIEJyZWFrcG9pbnQo
KQorICAgICAgICA6IGlkKG5vQnJlYWtwb2ludElEKQorICAgICAgICAsIHNvdXJjZUlEKG5vU291
cmNlSUQpCisgICAgICAgICwgbGluZSgwKQorICAgICAgICAsIGNvbHVtbigwKQorICAgICAgICAs
IGF1dG9Db250aW51ZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgQnJlYWtwb2ludChTb3Vy
Y2VJRCBzb3VyY2VJRCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uLCBTdHJpbmcgY29u
ZGl0aW9uLCBib29sIGF1dG9Db250aW51ZSkKKyAgICAgICAgOiBpZChub0JyZWFrcG9pbnRJRCkK
KyAgICAgICAgLCBzb3VyY2VJRChzb3VyY2VJRCkKKyAgICAgICAgLCBsaW5lKGxpbmUpCisgICAg
ICAgICwgY29sdW1uKGNvbHVtbikKKyAgICAgICAgLCBjb25kaXRpb24oY29uZGl0aW9uKQorICAg
ICAgICAsIGF1dG9Db250aW51ZShhdXRvQ29udGludWUpCisgICAgeworICAgIH0KKworICAgIEJy
ZWFrcG9pbnRJRCBpZDsKKyAgICBTb3VyY2VJRCBzb3VyY2VJRDsKKyAgICB1bnNpZ25lZCBsaW5l
OworICAgIHVuc2lnbmVkIGNvbHVtbjsKKyAgICBTdHJpbmcgY29uZGl0aW9uOworICAgIGJvb2wg
YXV0b0NvbnRpbnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKworI2VuZGlmIC8vIEJyZWFrcG9pbnRfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShyZXZpc2lvbiAx
NTg4OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqCkBAIC0yMiw5ICsyMiwxMSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAKKyNpbmNsdWRlICJE
ZWJ1Z2dlckNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSGVhcEl0
ZXJhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJKU0NK
U1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKQEAgLTkxLDExICs5Myw0NCBA
QCBpbmxpbmUgdm9pZCBSZWNvbXBpbGVyOjpvcGVyYXRvcigpKEpTQ2VsCiAKIG5hbWVzcGFjZSBK
U0MgewogCi1EZWJ1Z2dlcjo6RGVidWdnZXIoKQotICAgIDogbV9uZWVkc0V4Y2VwdGlvbkNhbGxi
YWNrcyhmYWxzZSkKK2NsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lU2NvcGUgeworcHVibGljOgorICAg
IERlYnVnZ2VyQ2FsbEZyYW1lU2NvcGUoRGVidWdnZXImIGRlYnVnZ2VyKQorICAgICAgICA6IG1f
ZGVidWdnZXIoZGVidWdnZXIpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fZGVidWdnZXIubV9j
dXJyZW50RGVidWdnZXJDYWxsRnJhbWUpOworICAgICAgICBpZiAobV9kZWJ1Z2dlci5tX2N1cnJl
bnRDYWxsRnJhbWUpCisgICAgICAgICAgICBtX2RlYnVnZ2VyLm1fY3VycmVudERlYnVnZ2VyQ2Fs
bEZyYW1lID0gRGVidWdnZXJDYWxsRnJhbWU6OmNyZWF0ZShkZWJ1Z2dlci5tX2N1cnJlbnRDYWxs
RnJhbWUpOworICAgIH0KKworICAgIH5EZWJ1Z2dlckNhbGxGcmFtZVNjb3BlKCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX2RlYnVnZ2VyLm1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lKSB7CisgICAg
ICAgICAgICBtX2RlYnVnZ2VyLm1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lLT5pbnZhbGlkYXRl
KCk7CisgICAgICAgICAgICBtX2RlYnVnZ2VyLm1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lID0g
MDsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBEZWJ1Z2dlciYgbV9kZWJ1Z2dl
cjsKK307CisKKworRGVidWdnZXI6OkRlYnVnZ2VyKGJvb2wgaXNJbldvcmtlclRocmVhZCkKKyAg
ICA6IG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShEb250UGF1c2VPbkV4Y2VwdGlvbnMpCisgICAg
LCBtX3BhdXNlT25OZXh0U3RhdGVtZW50KGZhbHNlKQorICAgICwgbV9pc1BhdXNlZChmYWxzZSkK
KyAgICAsIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQodHJ1ZSkKKyAgICAsIG1faGFzSGFuZGxlckZv
ckV4Y2VwdGlvbkNhbGxiYWNrKGZhbHNlKQorICAgICwgbV9pc0luV29ya2VyVGhyZWFkKGlzSW5X
b3JrZXJUaHJlYWQpCisgICAgLCBtX3JlYXNvbkZvclBhdXNlKE5vdFBhdXNlZCkKKyAgICAsIG1f
cGF1c2VPbkNhbGxGcmFtZSgwKQorICAgICwgbV9jdXJyZW50Q2FsbEZyYW1lKDApCisgICAgLCBt
X2xhc3RFeGVjdXRlZExpbmUoVUlOVF9NQVgpCisgICAgLCBtX2xhc3RFeGVjdXRlZFNvdXJjZUlE
KG5vU291cmNlSUQpCisgICAgLCBtX3RvcEJyZWFrcG9pbnRJRChub0JyZWFrcG9pbnRJRCkKICAg
ICAsIG1fbmVlZHNPcERlYnVnQ2FsbGJhY2tzKGZhbHNlKQogICAgICwgbV9zaG91bGRQYXVzZShm
YWxzZSkKLSAgICAsIG1fbnVtYmVyT2ZCcmVha3BvaW50cygwKQogewogfQogCkBAIC0xMTUsMTYg
KzE1MCwyMCBAQCB2b2lkIERlYnVnZ2VyOjphdHRhY2goSlNHbG9iYWxPYmplY3QqIGdsCiAKIHZv
aWQgRGVidWdnZXI6OmRldGFjaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogeworICAg
IC8vIElmIHdlJ3JlIGRldGFjaGluZyBmcm9tIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGdsb2Jh
bCBvYmplY3QsIG1hbnVhbGx5IHRlYXIgZG93biBvdXIKKyAgICAvLyBzdGFjaywgc2luY2Ugd2Ug
d29uJ3QgZ2V0IGZ1cnRoZXIgZGVidWdnZXIgY2FsbGJhY2tzIHRvIGRvIHNvLiBBbHNvLCByZXN1
bWUgZXhlY3V0aW9uLAorICAgIC8vIHNpbmNlIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gc3RheWluZyBw
YXVzZWQgb25jZSBhIHdpbmRvdyBjbG9zZXMuCisgICAgaWYgKG1fY3VycmVudENhbGxGcmFtZSAm
JiBtX2N1cnJlbnRDYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSA9PSBnbG9iYWxPYmpl
Y3QpIHsKKyAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gMDsKKyAgICAgICAgbV9wYXVzZU9u
Q2FsbEZyYW1lID0gMDsKKyAgICAgICAgY29udGludWVQcm9ncmFtKCk7CisgICAgfQorCiAgICAg
QVNTRVJUKG1fZ2xvYmFsT2JqZWN0cy5jb250YWlucyhnbG9iYWxPYmplY3QpKTsKICAgICBtX2ds
b2JhbE9iamVjdHMucmVtb3ZlKGdsb2JhbE9iamVjdCk7CiAgICAgZ2xvYmFsT2JqZWN0LT5zZXRE
ZWJ1Z2dlcigwKTsKIH0KIAotdm9pZCBEZWJ1Z2dlcjo6c2V0TmVlZHNFeGNlcHRpb25DYWxsYmFj
a3MoYm9vbCB2YWx1ZSkKLXsKLSAgICBtX25lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzID0gdmFsdWU7
Ci19Ci0KIHZvaWQgRGVidWdnZXI6OnNldFNob3VsZFBhdXNlKGJvb2wgdmFsdWUpCiB7CiAgICAg
bV9zaG91bGRQYXVzZSA9IHZhbHVlOwpAQCAtMTQ2LDE2ICsxODUsMzczIEBAIHZvaWQgRGVidWdn
ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFYKICAgICB2bS0+aGVhcC5vYmplY3RTcGFjZSgp
LmZvckVhY2hMaXZlQ2VsbChpdGVyYXRpb25TY29wZSwgcmVjb21waWxlcik7CiB9CiAKLXZvaWQg
RGVidWdnZXI6OnVwZGF0ZU51bWJlck9mQnJlYWtwb2ludHMoaW50IG51bWJlck9mQnJlYWtwb2lu
dHMpCit2b2lkIERlYnVnZ2VyOjp1cGRhdGVOZWVkRm9yT3BEZWJ1Z0NhbGxiYWNrcygpCit7Cisg
ICAgc2l6ZV90IG51bWJlck9mQnJlYWtwb2ludHMgPSBtX2JyZWFrcG9pbnRJRFRvQnJlYWtwb2lu
dC5zaXplKCk7CisgICAgbV9uZWVkc09wRGVidWdDYWxsYmFja3MgPSBtX3Nob3VsZFBhdXNlIHx8
IG51bWJlck9mQnJlYWtwb2ludHM7Cit9CisKK0JyZWFrcG9pbnRJRCBEZWJ1Z2dlcjo6c2V0QnJl
YWtwb2ludChCcmVha3BvaW50IGJyZWFrcG9pbnQsIHVuc2lnbmVkJiBhY3R1YWxMaW5lLCB1bnNp
Z25lZCYgYWN0dWFsQ29sdW1uKQoreworICAgIFNvdXJjZUlEIHNvdXJjZUlEID0gYnJlYWtwb2lu
dC5zb3VyY2VJRDsKKyAgICB1bnNpZ25lZCBsaW5lID0gYnJlYWtwb2ludC5saW5lOworICAgIHVu
c2lnbmVkIGNvbHVtbiA9IGJyZWFrcG9pbnQuY29sdW1uOworCisgICAgU291cmNlSURUb0JyZWFr
cG9pbnRzTWFwOjppdGVyYXRvciBpdCA9IG1fc291cmNlSURUb0JyZWFrcG9pbnRzLmZpbmQoc291
cmNlSUQpOworICAgIGlmIChpdCA9PSBtX3NvdXJjZUlEVG9CcmVha3BvaW50cy5lbmQoKSkKKyAg
ICAgICAgaXQgPSBtX3NvdXJjZUlEVG9CcmVha3BvaW50cy5zZXQoc291cmNlSUQsIExpbmVUb0Jy
ZWFrcG9pbnRzTWFwKCkpLml0ZXJhdG9yOworICAgIExpbmVUb0JyZWFrcG9pbnRzTWFwOjppdGVy
YXRvciBicmVha3NJdCA9IGl0LT52YWx1ZS5maW5kKGxpbmUpOworICAgIGlmIChicmVha3NJdCA9
PSBpdC0+dmFsdWUuZW5kKCkpCisgICAgICAgIGJyZWFrc0l0ID0gaXQtPnZhbHVlLnNldChsaW5l
LCBCcmVha3BvaW50c0luTGluZSgpKS5pdGVyYXRvcjsKKworICAgIEJyZWFrcG9pbnRzSW5MaW5l
JiBicmVha3BvaW50cyA9IGJyZWFrc0l0LT52YWx1ZTsKKyAgICB1bnNpZ25lZCBicmVha3BvaW50
c0NvdW50ID0gYnJlYWtwb2ludHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBicmVha3BvaW50c0NvdW50OyBpKyspCisgICAgICAgIGlmIChicmVha3BvaW50c1tpXS5jb2x1
bW4gPT0gY29sdW1uKSB7CisgICAgICAgICAgICAvLyBUaGUgYnJlYWtwb2ludCBhbHJlYWR5IGV4
aXN0cy4gV2UncmUgbm90IGFsbG93ZWQgdG8gY3JlYXRlIGEgbmV3CisgICAgICAgICAgICAvLyBi
cmVha3BvaW50IGF0IHRoaXMgbG9jYXRpb24uIFJhdGhlciB0aGFuIHJldHVybmluZyB0aGUgYnJl
YWtwb2ludElECisgICAgICAgICAgICAvLyBvZiB0aGUgcHJlLWV4aXN0aW5nIGJyZWFrcG9pbnQs
IHdlIG5lZWQgdG8gcmV0dXJuIG5vQnJlYWtwb2ludElECisgICAgICAgICAgICAvLyB0byBpbmRp
Y2F0ZSB0aGF0IHdlJ3JlIG5vdCBjcmVhdGluZyBhIG5ldyBvbmUuCisgICAgICAgICAgICByZXR1
cm4gbm9CcmVha3BvaW50SUQ7CisgICAgICAgIH0KKworICAgIEJyZWFrcG9pbnRJRCBpZCA9ICsr
bV90b3BCcmVha3BvaW50SUQ7CisgICAgUkVMRUFTRV9BU1NFUlQoaWQgIT0gbm9CcmVha3BvaW50
SUQpOworCisgICAgYnJlYWtwb2ludC5pZCA9IGlkOworICAgIGFjdHVhbExpbmUgPSBsaW5lOwor
ICAgIGFjdHVhbENvbHVtbiA9IGNvbHVtbjsKKworICAgIGJyZWFrcG9pbnRzLmFwcGVuZChicmVh
a3BvaW50KTsKKyAgICBtX2JyZWFrcG9pbnRJRFRvQnJlYWtwb2ludC5zZXQoaWQsICZicmVha3Bv
aW50cy5sYXN0KCkpOworCisgICAgdXBkYXRlTmVlZEZvck9wRGVidWdDYWxsYmFja3MoKTsKKwor
ICAgIHJldHVybiBpZDsKK30KKwordm9pZCBEZWJ1Z2dlcjo6cmVtb3ZlQnJlYWtwb2ludChCcmVh
a3BvaW50SUQgaWQpCiB7Ci0gICAgQVNTRVJUKG51bWJlck9mQnJlYWtwb2ludHMgPj0gMCk7Ci0g
ICAgbV9udW1iZXJPZkJyZWFrcG9pbnRzID0gbnVtYmVyT2ZCcmVha3BvaW50czsKKyAgICBBU1NF
UlQoaWQgIT0gbm9CcmVha3BvaW50SUQpOworCisgICAgQnJlYWtwb2ludElEVG9CcmVha3BvaW50
TWFwOjppdGVyYXRvciBpZEl0ID0gbV9icmVha3BvaW50SURUb0JyZWFrcG9pbnQuZmluZChpZCk7
CisgICAgQVNTRVJUKGlkSXQgIT0gbV9icmVha3BvaW50SURUb0JyZWFrcG9pbnQuZW5kKCkpOwor
ICAgIEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQgPSAqaWRJdC0+dmFsdWU7CisKKyAgICBTb3VyY2VJ
RCBzb3VyY2VJRCA9IGJyZWFrcG9pbnQuc291cmNlSUQ7CisgICAgQVNTRVJUKHNvdXJjZUlEKTsK
KyAgICBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJRFRv
QnJlYWtwb2ludHMuZmluZChzb3VyY2VJRCk7CisgICAgQVNTRVJUKGl0ICE9IG1fc291cmNlSURU
b0JyZWFrcG9pbnRzLmVuZCgpKTsKKyAgICBMaW5lVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3Ig
YnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChicmVha3BvaW50LmxpbmUpOworICAgIEFTU0VSVChi
cmVha3NJdCAhPSBpdC0+dmFsdWUuZW5kKCkpOworCisgICAgQnJlYWtwb2ludHNJbkxpbmUmIGJy
ZWFrcG9pbnRzID0gYnJlYWtzSXQtPnZhbHVlOworICAgIHVuc2lnbmVkIGJyZWFrcG9pbnRzQ291
bnQgPSBicmVha3BvaW50cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJy
ZWFrcG9pbnRzQ291bnQ7IGkrKykgeworICAgICAgICBpZiAoYnJlYWtwb2ludHNbaV0uaWQgPT0g
YnJlYWtwb2ludC5pZCkgeworICAgICAgICAgICAgYnJlYWtwb2ludHMucmVtb3ZlKGkpOworICAg
ICAgICAgICAgbV9icmVha3BvaW50SURUb0JyZWFrcG9pbnQucmVtb3ZlKGlkSXQpOworCisgICAg
ICAgICAgICBpZiAoYnJlYWtwb2ludHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgaXQt
PnZhbHVlLnJlbW92ZShicmVha3NJdCk7CisgICAgICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIG1fc291cmNlSURUb0JyZWFrcG9pbnRzLnJl
bW92ZShpdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKwogICAgIHVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCk7CiB9CiAKLXZvaWQg
RGVidWdnZXI6OnVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCkKK2Jvb2wgRGVidWdnZXI6
Omhhc0JyZWFrcG9pbnQoU291cmNlSUQgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYgcG9z
aXRpb24sIEJyZWFrcG9pbnQgKmhpdEJyZWFrcG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Jy
ZWFrcG9pbnRzQWN0aXZhdGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTb3VyY2VJ
RFRvQnJlYWtwb2ludHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zb3VyY2VJRFRvQnJlYWtw
b2ludHMuZmluZChzb3VyY2VJRCk7CisgICAgaWYgKGl0ID09IG1fc291cmNlSURUb0JyZWFrcG9p
bnRzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBsaW5lID0g
cG9zaXRpb24ubV9saW5lLnplcm9CYXNlZEludCgpOworICAgIHVuc2lnbmVkIGNvbHVtbiA9IHBv
c2l0aW9uLm1fY29sdW1uLnplcm9CYXNlZEludCgpOworCisgICAgTGluZVRvQnJlYWtwb2ludHNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnZhbHVlLmZpbmQobGluZSk7CisgICAg
aWYgKGJyZWFrc0l0ID09IGl0LT52YWx1ZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYm9vbCBoaXQgPSBmYWxzZTsKKyAgICBjb25zdCBCcmVha3BvaW50c0luTGluZSYgYnJl
YWtwb2ludHMgPSBicmVha3NJdC0+dmFsdWU7CisgICAgdW5zaWduZWQgYnJlYWtwb2ludHNDb3Vu
dCA9IGJyZWFrcG9pbnRzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBpOworICAgIGZvciAoaSA9IDA7
IGkgPCBicmVha3BvaW50c0NvdW50OyBpKyspIHsKKyAgICAgICAgdW5zaWduZWQgYnJlYWtMaW5l
ID0gYnJlYWtwb2ludHNbaV0ubGluZTsKKyAgICAgICAgdW5zaWduZWQgYnJlYWtDb2x1bW4gPSBi
cmVha3BvaW50c1tpXS5jb2x1bW47CisgICAgICAgIC8vIFNpbmNlIGZyb250ZW5kIHRydW5jYXRl
cyB0aGUgaW5kZW50LCB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIGEgbGluZSBtdXN0IG1hdGNoIHRo
ZSBicmVha3BvaW50IChsaW5lLDApLgorICAgICAgICBpZiAoKGxpbmUgIT0gbV9sYXN0RXhlY3V0
ZWRMaW5lICYmIGxpbmUgPT0gYnJlYWtMaW5lICYmICFicmVha0NvbHVtbikKKyAgICAgICAgICAg
IHx8IChsaW5lID09IGJyZWFrTGluZSAmJiBjb2x1bW4gPT0gYnJlYWtDb2x1bW4pKSB7CisgICAg
ICAgICAgICBoaXQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKCFoaXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChoaXRCcmVh
a3BvaW50KQorICAgICAgICAqaGl0QnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzW2ldOworCisgICAg
aWYgKGJyZWFrcG9pbnRzW2ldLmNvbmRpdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgSlNWYWx1ZSByZXN1bHQgPSBEZWJ1
Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGVXaXRoQ2FsbEZyYW1lKG1fY3VycmVudENhbGxGcmFtZSwg
YnJlYWtwb2ludHNbaV0uY29uZGl0aW9uLCBleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24p
IHsKKyAgICAgICAgLy8gQW4gZXJyb25lb3VzIGNvbmRpdGlvbiBjb3VudHMgYXMgImZhbHNlIi4K
KyAgICAgICAgaGFuZGxlRXhjZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKG1fY3VycmVudENh
bGxGcmFtZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0LnRvQm9vbGVhbihtX2N1cnJlbnRDYWxsRnJhbWUpOworfQorCit2b2lkIERl
YnVnZ2VyOjpjbGVhckJyZWFrcG9pbnRzKCkKK3sKKyAgICBtX3RvcEJyZWFrcG9pbnRJRCA9IG5v
QnJlYWtwb2ludElEOworICAgIG1fYnJlYWtwb2ludElEVG9CcmVha3BvaW50LmNsZWFyKCk7Cisg
ICAgbV9zb3VyY2VJRFRvQnJlYWtwb2ludHMuY2xlYXIoKTsKKworICAgIHVwZGF0ZU5lZWRGb3JP
cERlYnVnQ2FsbGJhY2tzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnNldEJyZWFrcG9pbnRzQWN0
aXZhdGVkKGJvb2wgYWN0aXZhdGVkKQoreworICAgIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQgPSBh
Y3RpdmF0ZWQ7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUo
UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZSkKK3sKKyAgICBtX3BhdXNlT25FeGNlcHRpb25z
U3RhdGUgPSBwYXVzZTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6c2V0UGF1c2VPbk5leHRTdGF0ZW1l
bnQoYm9vbCBwYXVzZSkKK3sKKyAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gcGF1c2U7Cisg
ICAgaWYgKHBhdXNlKQorICAgICAgICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKK30KKwordm9pZCBE
ZWJ1Z2dlcjo6YnJlYWtQcm9ncmFtKCkKK3sKKyAgICBpZiAobV9pc1BhdXNlZCB8fCAhbV9jdXJy
ZW50Q2FsbEZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhdXNlT25OZXh0U3RhdGVt
ZW50ID0gdHJ1ZTsKKyAgICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKKyAgICBwYXVzZUlmTmVlZGVk
KG1fY3VycmVudENhbGxGcmFtZSk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OmNvbnRpbnVlUHJvZ3Jh
bSgpCit7CisgICAgaWYgKCFtX2lzUGF1c2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Bh
dXNlT25OZXh0U3RhdGVtZW50ID0gZmFsc2U7CisgICAgbm90aWZ5RG9uZVByb2Nlc3NpbmdEZWJ1
Z2dlckV2ZW50cygpOworfQorCit2b2lkIERlYnVnZ2VyOjpzdGVwSW50b1N0YXRlbWVudCgpCit7
CisgICAgaWYgKCFtX2lzUGF1c2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhdXNlT25O
ZXh0U3RhdGVtZW50ID0gdHJ1ZTsKKyAgICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKKyAgICBub3Rp
ZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnN0
ZXBPdmVyU3RhdGVtZW50KCkKK3sKKyAgICBpZiAoIW1faXNQYXVzZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZTsKKyAgICBu
b3RpZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6
OnN0ZXBPdXRPZkZ1bmN0aW9uKCkKK3sKKyAgICBpZiAoIW1faXNQYXVzZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZSA/IG1f
Y3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWVTa2lwcGluZ1ZNRW50cnlTZW50aW5lbCgpIDog
MDsKKyAgICBub3RpZnlEb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCk7Cit9CisKK3ZvaWQg
RGVidWdnZXI6OnVwZGF0ZUNhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBt
X2N1cnJlbnRDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CisgICAgU291cmNlSUQgc291cmNlSUQgPSBE
ZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSURGb3JDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKyAgICBp
ZiAobV9sYXN0RXhlY3V0ZWRTb3VyY2VJRCAhPSBzb3VyY2VJRCkgeworICAgICAgICBtX2xhc3RF
eGVjdXRlZExpbmUgPSBVSU5UX01BWDsKKyAgICAgICAgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJRCA9
IHNvdXJjZUlEOworICAgIH0KK30KKwordm9pZCBEZWJ1Z2dlcjo6dXBkYXRlQ2FsbEZyYW1lQW5k
UGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICB1cGRhdGVDYWxsRnJh
bWUoY2FsbEZyYW1lKTsKKyAgICBwYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7CisgICAgaWYgKCFu
ZWVkc09wRGVidWdDYWxsYmFja3MoKSkKKyAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gMDsK
K30KKwordm9pZCBEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
K3sKKyAgICBpZiAobV9pc1BhdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNHbG9iYWxP
YmplY3QqIGR5bmFtaWNHbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKTsKKyAgICBpZiAoIW5lZWRQYXVzZUhhbmRsaW5nKGR5bmFtaWNHbG9iYWxPYmplY3QpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBCcmVha3BvaW50IGJyZWFrcG9pbnQ7CisgICAgYm9vbCBk
aWRIaXRCcmVha3BvaW50ID0gZmFsc2U7CisgICAgYm9vbCBwYXVzZU5vdyA9IG1fcGF1c2VPbk5l
eHRTdGF0ZW1lbnQ7CisgICAgcGF1c2VOb3cgfD0gKG1fcGF1c2VPbkNhbGxGcmFtZSA9PSBtX2N1
cnJlbnRDYWxsRnJhbWUpOworCisgICAgaW50cHRyX3Qgc291cmNlSUQgPSBEZWJ1Z2dlckNhbGxG
cmFtZTo6c291cmNlSURGb3JDYWxsRnJhbWUobV9jdXJyZW50Q2FsbEZyYW1lKTsKKyAgICBUZXh0
UG9zaXRpb24gcG9zaXRpb24gPSBEZWJ1Z2dlckNhbGxGcmFtZTo6cG9zaXRpb25Gb3JDYWxsRnJh
bWUobV9jdXJyZW50Q2FsbEZyYW1lKTsKKyAgICBwYXVzZU5vdyB8PSBkaWRIaXRCcmVha3BvaW50
ID0gaGFzQnJlYWtwb2ludChzb3VyY2VJRCwgcG9zaXRpb24sICZicmVha3BvaW50KTsKKyAgICBt
X2xhc3RFeGVjdXRlZExpbmUgPSBwb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50KCk7CisgICAg
aWYgKCFwYXVzZU5vdykKKyAgICAgICAgcmV0dXJuOworCisgICAgRGVidWdnZXJDYWxsRnJhbWVT
Y29wZSBkZWJ1Z2dlckNhbGxGcmFtZVNjb3BlKCp0aGlzKTsKKworICAgIGlmIChkaWRIaXRCcmVh
a3BvaW50KSB7CisgICAgICAgIGhhbmRsZUJyZWFrcG9pbnRIaXQoYnJlYWtwb2ludCk7CisgICAg
ICAgIGlmIChicmVha3BvaW50LmF1dG9Db250aW51ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSAwOworICAgIG1fcGF1c2VPbk5leHRTdGF0
ZW1lbnQgPSBmYWxzZTsKKyAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKKworICAgIGhhbmRsZVBhdXNl
KG1fcmVhc29uRm9yUGF1c2UsIGR5bmFtaWNHbG9iYWxPYmplY3QpOworCisgICAgaWYgKCFtX3Bh
dXNlT25OZXh0U3RhdGVtZW50ICYmICFtX3BhdXNlT25DYWxsRnJhbWUpIHsKKyAgICAgICAgc2V0
U2hvdWxkUGF1c2UoZmFsc2UpOworICAgICAgICBpZiAoIW5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygp
KQorICAgICAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gMDsKKyAgICB9CisKKyAgICBtX2lz
UGF1c2VkID0gZmFsc2U7Cit9CisKK3ZvaWQgRGVidWdnZXI6OmV4Y2VwdGlvbihDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNlcHRpb24sIGJvb2wgaGFzSGFuZGxlcikKK3sKKyAgICBp
ZiAobV9pc1BhdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGF1c2VSZWFzb25EZWNsYXJh
dGlvbiByZWFzb24oKnRoaXMsIFBhdXNlZEZvckV4Y2VwdGlvbik7CisgICAgaWYgKG1fcGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSA9PSBQYXVzZU9uQWxsRXhjZXB0aW9ucyB8fCAobV9wYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlID09IFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnMgJiYgIWhhc0hhbmRsZXIp
KSB7CisgICAgICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOworICAgICAgICBzZXRT
aG91bGRQYXVzZSh0cnVlKTsKKyAgICB9CisKKyAgICBtX2hhc0hhbmRsZXJGb3JFeGNlcHRpb25D
YWxsYmFjayA9IHRydWU7CisgICAgbV9jdXJyZW50RXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAg
IHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKKyAgICBtX2N1cnJl
bnRFeGNlcHRpb24gPSBKU1ZhbHVlKCk7CisgICAgbV9oYXNIYW5kbGVyRm9yRXhjZXB0aW9uQ2Fs
bGJhY2sgPSBmYWxzZTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6YXRTdGF0ZW1lbnQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCit7CisgICAgaWYgKG1faXNQYXVzZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFBhdXNlUmVhc29uRGVjbGFyYXRpb24gcmVhc29uKCp0aGlzLCBQYXVzZWRBdFN0YXRlbWVu
dCk7CisgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOworfQor
Cit2b2lkIERlYnVnZ2VyOjpjYWxsRXZlbnQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAg
aWYgKG1faXNQYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIFBhdXNlUmVhc29uRGVjbGFy
YXRpb24gcmVhc29uKCp0aGlzLCBQYXVzZWRBZnRlckNhbGwpOworICAgIHVwZGF0ZUNhbGxGcmFt
ZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6cmV0dXJu
RXZlbnQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgaWYgKG1faXNQYXVzZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIFBhdXNlUmVhc29uRGVjbGFyYXRpb24gcmVhc29uKCp0aGlzLCBQ
YXVzZWRCZWZvcmVSZXR1cm4pOworICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQo
Y2FsbEZyYW1lKTsKKworICAgIC8vIGRldGFjaCBtYXkgaGF2ZSBiZWVuIGNhbGxlZCBkdXJpbmcg
cGF1c2VJZk5lZWRlZAorICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBUcmVhdCBzdGVwcGluZyBvdmVyIGEgcmV0dXJuIHN0YXRlbWVudCBsaWtl
IHN0ZXBwaW5nIG91dC4KKyAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VPbkNh
bGxGcmFtZSkKKyAgICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1l
LT5jYWxsZXJGcmFtZVNraXBwaW5nVk1FbnRyeVNlbnRpbmVsKCk7CisKKyAgICBtX2N1cnJlbnRD
YWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlckZyYW1lU2tpcHBpbmdWTUVudHJ5
U2VudGluZWwoKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKENhbGxG
cmFtZSogY2FsbEZyYW1lKQoreworICAgIGlmIChtX2lzUGF1c2VkKQorICAgICAgICByZXR1cm47
CisKKyAgICBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHJlYXNvbigqdGhpcywgUGF1c2VkQXRTdGFy
dE9mUHJvZ3JhbSk7CisgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgZm9yIHdoZXRoZXIgd2UncmUg
ZGVidWdnaW5nIGEgd29ya2VyIHRocmVhZCBpcyBhIHdvcmthcm91bmQKKyAgICAvLyBmb3IgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjYzNy4gUmVtb3ZlIGl0IHdo
ZW4gd2UgcmV3b3JrCisgICAgLy8gdGhlIGRlYnVnZ2VyIGltcGxlbWVudGF0aW9uIHRvIG5vdCBy
ZXF1aXJlIGNhbGxiYWNrcy4KKyAgICBpZiAoIW1faXNJbldvcmtlclRocmVhZCkKKyAgICAgICAg
dXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOworICAgIGVsc2UgaWYg
KG5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygpKQorICAgICAgICB1cGRhdGVDYWxsRnJhbWUoY2FsbEZy
YW1lKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6ZGlkRXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCit7CisgICAgaWYgKG1faXNQYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IFBhdXNlUmVhc29uRGVjbGFyYXRpb24gcmVhc29uKCp0aGlzLCBQYXVzZWRBdEVuZE9mUHJvZ3Jh
bSk7CisgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOworCisg
ICAgLy8gVHJlYXQgc3RlcHBpbmcgb3ZlciB0aGUgZW5kIG9mIGEgcHJvZ3JhbSBsaWtlIHN0ZXBw
aW5nIG91dC4KKyAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgPT0gbV9wYXVzZU9uQ2FsbEZyYW1lKSB7CisgICAg
ICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWVT
a2lwcGluZ1ZNRW50cnlTZW50aW5lbCgpOworICAgICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFt
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0g
bV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZVNraXBwaW5nVk1FbnRyeVNlbnRpbmVsKCk7
Cit9CisKK3ZvaWQgRGVidWdnZXI6OmRpZFJlYWNoQnJlYWtwb2ludChDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKK3sKKyAgICBpZiAobV9pc1BhdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGF1
c2VSZWFzb25EZWNsYXJhdGlvbiByZWFzb24oKnRoaXMsIFBhdXNlZEZvckJyZWFrcG9pbnQpOwor
ICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOworICAgIHNldFNob3VsZFBhdXNlKHRy
dWUpOworICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKK30K
KworRGVidWdnZXJDYWxsRnJhbWUqIERlYnVnZ2VyOjpjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUo
KSBjb25zdAogewotICAgIG1fbmVlZHNPcERlYnVnQ2FsbGJhY2tzID0gbV9zaG91bGRQYXVzZSB8
fCBtX251bWJlck9mQnJlYWtwb2ludHM7CisgICAgQVNTRVJUKG1fY3VycmVudERlYnVnZ2VyQ2Fs
bEZyYW1lKTsKKyAgICByZXR1cm4gbV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWUuZ2V0KCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyLmgJKHJldmlzaW9uIDE1ODg5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoK
ICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICog
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDYzICsyMiwxNjkgQEAKICNp
Zm5kZWYgRGVidWdnZXJfaAogI2RlZmluZSBEZWJ1Z2dlcl9oCiAKKyNpbmNsdWRlICJCcmVha3Bv
aW50LmgiCisjaW5jbHVkZSAiRGVidWdnZXJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJEZWJ1Z2dl
clByaW1pdGl2ZXMuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0
aW9uLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBEZWJ1Z2dlckNhbGxGcmFtZTsKIGNs
YXNzIEV4ZWNTdGF0ZTsKLWNsYXNzIFZNOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBK
U1ZhbHVlOwogY2xhc3MgU291cmNlUHJvdmlkZXI7CitjbGFzcyBWTTsKIAogdHlwZWRlZiBFeGVj
U3RhdGUgQ2FsbEZyYW1lOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBEZWJ1Z2dlciB7CiBw
dWJsaWM6Ci0gICAgRGVidWdnZXIoKTsKKyAgICBEZWJ1Z2dlcihib29sIGlzSW5Xb3JrZXJUaHJl
YWQgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB+RGVidWdnZXIoKTsKIAogICAgIGJvb2wgbmVlZHNP
cERlYnVnQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc09wRGVidWdDYWxsYmFja3M7
IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG5lZWRzT3BEZWJ1Z0NhbGxiYWNrc09mZnNldCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEZWJ1Z2dlciwgbV9uZWVkc09wRGVidWdDYWxsYmFja3Mp
OyB9CiAKLSAgICBib29sIHNob3VsZFBhdXNlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQYXVz
ZTsgfQotICAgIHZvaWQgc2V0U2hvdWxkUGF1c2UoYm9vbCk7Ci0KLSAgICBib29sIG5lZWRzRXhj
ZXB0aW9uQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0V4Y2VwdGlvbkNhbGxiYWNr
czsgfQotICAgIHZvaWQgc2V0TmVlZHNFeGNlcHRpb25DYWxsYmFja3MoYm9vbCk7CisgICAgSlND
OjpEZWJ1Z2dlckNhbGxGcmFtZSogY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lKCkgY29uc3Q7Cisg
ICAgYm9vbCBoYXNIYW5kbGVyRm9yRXhjZXB0aW9uQ2FsbGJhY2soKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fcmVhc29uRm9yUGF1c2UgPT0gUGF1c2VkRm9yRXhjZXB0aW9uKTsKKyAg
ICAgICAgcmV0dXJuIG1faGFzSGFuZGxlckZvckV4Y2VwdGlvbkNhbGxiYWNrOworICAgIH0KKyAg
ICBKU1ZhbHVlIGN1cnJlbnRFeGNlcHRpb24oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmVh
c29uRm9yUGF1c2UgPT0gUGF1c2VkRm9yRXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudEV4Y2VwdGlvbjsKKyAgICB9CiAKLSAgICB2b2lkIGluY051bWJlck9mQnJlYWtwb2ludHMo
KSB7IHVwZGF0ZU51bWJlck9mQnJlYWtwb2ludHMobV9udW1iZXJPZkJyZWFrcG9pbnRzICsgMSk7
IH0KLSAgICB2b2lkIGRlY051bWJlck9mQnJlYWtwb2ludHMoKSAgeyB1cGRhdGVOdW1iZXJPZkJy
ZWFrcG9pbnRzKG1fbnVtYmVyT2ZCcmVha3BvaW50cyAtIDEpOyB9Ci0gICAgdm9pZCB1cGRhdGVO
dW1iZXJPZkJyZWFrcG9pbnRzKGludCk7CisgICAgYm9vbCBuZWVkc0V4Y2VwdGlvbkNhbGxiYWNr
cygpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSAhPSBEb250UGF1c2VP
bkV4Y2VwdGlvbnM7IH0KIAogICAgIHZvaWQgYXR0YWNoKEpTR2xvYmFsT2JqZWN0Kik7CiAgICAg
dmlydHVhbCB2b2lkIGRldGFjaChKU0dsb2JhbE9iamVjdCopOwogCisgICAgQnJlYWtwb2ludElE
IHNldEJyZWFrcG9pbnQoQnJlYWtwb2ludCwgdW5zaWduZWQmIGFjdHVhbExpbmUsIHVuc2lnbmVk
JiBhY3R1YWxDb2x1bW4pOworICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChCcmVha3BvaW50SUQp
OworICAgIHZvaWQgY2xlYXJCcmVha3BvaW50cygpOworICAgIHZvaWQgc2V0QnJlYWtwb2ludHNB
Y3RpdmF0ZWQoYm9vbCk7CisgICAgdm9pZCBhY3RpdmF0ZUJyZWFrcG9pbnRzKCkgeyBzZXRCcmVh
a3BvaW50c0FjdGl2YXRlZCh0cnVlKTsgfQorICAgIHZvaWQgZGVhY3RpdmF0ZUJyZWFrcG9pbnRz
KCkgeyBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChmYWxzZSk7IH0KKworICAgIGVudW0gUGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSB7CisgICAgICAgIERvbnRQYXVzZU9uRXhjZXB0aW9ucywKKyAgICAg
ICAgUGF1c2VPbkFsbEV4Y2VwdGlvbnMsCisgICAgICAgIFBhdXNlT25VbmNhdWdodEV4Y2VwdGlv
bnMKKyAgICB9OworICAgIFBhdXNlT25FeGNlcHRpb25zU3RhdGUgcGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZTsgfQorICAgIHZv
aWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKTsKKwor
ICAgIHZvaWQgc2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQoYm9vbCk7CisgICAgdm9pZCBicmVha1By
b2dyYW0oKTsKKyAgICB2b2lkIGNvbnRpbnVlUHJvZ3JhbSgpOworICAgIHZvaWQgc3RlcEludG9T
dGF0ZW1lbnQoKTsKKyAgICB2b2lkIHN0ZXBPdmVyU3RhdGVtZW50KCk7CisgICAgdm9pZCBzdGVw
T3V0T2ZGdW5jdGlvbigpOworCisgICAgYm9vbCBpc1BhdXNlZCgpIHsgcmV0dXJuIG1faXNQYXVz
ZWQ7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgU291cmNl
UHJvdmlkZXIqLCBpbnQgZXJyb3JMaW5lTnVtYmVyLCBjb25zdCBXVEY6OlN0cmluZyYgZXJyb3JN
ZXNzYWdlKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZXhjZXB0aW9uKENhbGxGcmFtZSosIEpT
VmFsdWUgZXhjZXB0aW9uVmFsdWUsIGJvb2wgaGFzSGFuZGxlcikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBhdFN0YXRlbWVudChDYWxsRnJhbWUqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGxF
dmVudChDYWxsRnJhbWUqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJldHVybkV2ZW50KENhbGxG
cmFtZSopID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCB3aWxsRXhlY3V0ZVByb2dyYW0oQ2FsbEZy
YW1lKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUq
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlYWNoQnJlYWtwb2ludChDYWxsRnJhbWUqKSA9
IDA7CisgICAgdm9pZCBleGNlcHRpb24oQ2FsbEZyYW1lKiwgSlNWYWx1ZSBleGNlcHRpb25WYWx1
ZSwgYm9vbCBoYXNIYW5kbGVyKTsKKyAgICB2b2lkIGF0U3RhdGVtZW50KENhbGxGcmFtZSopOwor
ICAgIHZvaWQgY2FsbEV2ZW50KENhbGxGcmFtZSopOworICAgIHZvaWQgcmV0dXJuRXZlbnQoQ2Fs
bEZyYW1lKik7CisgICAgdm9pZCB3aWxsRXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1lKik7CisgICAg
dm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqKTsKKyAgICB2b2lkIGRpZFJlYWNoQnJl
YWtwb2ludChDYWxsRnJhbWUqKTsKIAogICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnMo
Vk0qKTsKIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhK
U0dsb2JhbE9iamVjdCopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZUJyZWFrcG9pbnRIaXQoY29uc3QgQnJlYWtwb2ludCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24oRXhlY1N0YXRlKiwgSlNWYWx1ZSBl
eGNlcHRpb24pIGNvbnN0IHsgVU5VU0VEX1BBUkFNKGV4Y2VwdGlvbik7IH0KKworICAgIGVudW0g
UmVhc29uRm9yUGF1c2UgeworICAgICAgICBOb3RQYXVzZWQsCisgICAgICAgIFBhdXNlZEZvckV4
Y2VwdGlvbiwKKyAgICAgICAgUGF1c2VkQXRTdGF0ZW1lbnQsCisgICAgICAgIFBhdXNlZEFmdGVy
Q2FsbCwKKyAgICAgICAgUGF1c2VkQmVmb3JlUmV0dXJuLAorICAgICAgICBQYXVzZWRBdFN0YXJ0
T2ZQcm9ncmFtLAorICAgICAgICBQYXVzZWRBdEVuZE9mUHJvZ3JhbSwKKyAgICAgICAgUGF1c2Vk
Rm9yQnJlYWtwb2ludAorICAgIH07CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGF1c2UoUmVh
c29uRm9yUGF1c2UsIEpTR2xvYmFsT2JqZWN0KikgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlm
eURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMoKSB7IH0KKwogcHJpdmF0ZToKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8QnJlYWtwb2ludElELCBCcmVha3BvaW50Kj4gQnJlYWtwb2ludElEVG9CcmVh
a3BvaW50TWFwOworCisgICAgdHlwZWRlZiBWZWN0b3I8QnJlYWtwb2ludD4gQnJlYWtwb2ludHNJ
bkxpbmU7CisgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBCcmVha3BvaW50c0luTGluZSwg
V1RGOjpJbnRIYXNoPGludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50
Pj4gTGluZVRvQnJlYWtwb2ludHNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFNvdXJjZUlELCBM
aW5lVG9CcmVha3BvaW50c01hcD4gU291cmNlSURUb0JyZWFrcG9pbnRzTWFwOworCisgICAgY2xh
c3MgUGF1c2VSZWFzb25EZWNsYXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBQYXVzZVJl
YXNvbkRlY2xhcmF0aW9uKERlYnVnZ2VyJiBkZWJ1Z2dlciwgUmVhc29uRm9yUGF1c2UgcmVhc29u
KQorICAgICAgICAgICAgOiBtX2RlYnVnZ2VyKGRlYnVnZ2VyKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2RlYnVnZ2VyLm1fcmVhc29uRm9yUGF1c2UgPSByZWFzb247CisgICAgICAgIH0KKwor
ICAgICAgICB+UGF1c2VSZWFzb25EZWNsYXJhdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fZGVidWdnZXIubV9yZWFzb25Gb3JQYXVzZSA9IE5vdFBhdXNlZDsKKyAgICAgICAgfQorICAg
IHByaXZhdGU6CisgICAgICAgIERlYnVnZ2VyJiBtX2RlYnVnZ2VyOworICAgIH07CisKKyAgICBi
b29sIGhhc0JyZWFrcG9pbnQoU291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYsIEJyZWFrcG9p
bnQqIGhpdEJyZWFrcG9pbnQpIGNvbnN0OworCisgICAgYm9vbCBzaG91bGRQYXVzZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hvdWxkUGF1c2U7IH0KKyAgICB2b2lkIHNldFNob3VsZFBhdXNlKGJvb2wp
OwogICAgIHZvaWQgdXBkYXRlTmVlZEZvck9wRGVidWdDYWxsYmFja3MoKTsKIAorICAgIC8vIFRo
ZXNlIHVwZGF0ZSBmdW5jdGlvbnMgYXJlIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb3VyIGN1cnJlbnQg
YnJlYWtwb2ludHMgYXJlCisgICAgLy8ga2V5J2VkIG9mZiB0aGUgc291cmNlIHBvc2l0aW9uIGlu
c3RlYWQgb2YgdGhlIGJ5dGVjb2RlIFBDLiBUaGlzIGVuc3VyZXMKKyAgICAvLyB0aGF0IHdlIGRv
bid0IGJyZWFrIG9uIHRoZSBzYW1lIGxpbmUgbW9yZSB0aGFuIG9uY2UuIE9uY2Ugd2Ugc3dpdGNo
IHRvIGEKKyAgICAvLyBieXRlY29kZSBQQyBrZXknZWQgYnJlYWtwb2ludCwgd2Ugd2lsbCBub3Qg
bmVlZCB0aGVzZSBhbnltb3JlIGFuZCBzaG91bGQKKyAgICAvLyBiZSBhYmxlIHRvIHJlbW92ZSB0
aGVtLgorICAgIHZvaWQgdXBkYXRlQ2FsbEZyYW1lKEpTQzo6Q2FsbEZyYW1lKik7CisgICAgdm9p
ZCB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKEpTQzo6Q2FsbEZyYW1lKik7CisgICAg
dm9pZCBwYXVzZUlmTmVlZGVkKEpTQzo6Q2FsbEZyYW1lKik7CisKICAgICBIYXNoU2V0PEpTR2xv
YmFsT2JqZWN0Kj4gbV9nbG9iYWxPYmplY3RzOwogCi0gICAgYm9vbCBtX25lZWRzRXhjZXB0aW9u
Q2FsbGJhY2tzOworICAgIFBhdXNlT25FeGNlcHRpb25zU3RhdGUgbV9wYXVzZU9uRXhjZXB0aW9u
c1N0YXRlOworICAgIGJvb2wgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA6IDE7CisgICAgYm9vbCBt
X2lzUGF1c2VkIDogMTsKKyAgICBib29sIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQgOiAxOworICAg
IGJvb2wgbV9oYXNIYW5kbGVyRm9yRXhjZXB0aW9uQ2FsbGJhY2sgOiAxOworICAgIGJvb2wgbV9p
c0luV29ya2VyVGhyZWFkIDogMTsKKworICAgIFJlYXNvbkZvclBhdXNlIG1fcmVhc29uRm9yUGF1
c2U7CisgICAgSlNWYWx1ZSBtX2N1cnJlbnRFeGNlcHRpb247CisgICAgQ2FsbEZyYW1lKiBtX3Bh
dXNlT25DYWxsRnJhbWU7CisgICAgQ2FsbEZyYW1lKiBtX2N1cnJlbnRDYWxsRnJhbWU7CisgICAg
dW5zaWduZWQgbV9sYXN0RXhlY3V0ZWRMaW5lOworICAgIFNvdXJjZUlEIG1fbGFzdEV4ZWN1dGVk
U291cmNlSUQ7CisKKyAgICBCcmVha3BvaW50SUQgbV90b3BCcmVha3BvaW50SUQ7CisgICAgQnJl
YWtwb2ludElEVG9CcmVha3BvaW50TWFwIG1fYnJlYWtwb2ludElEVG9CcmVha3BvaW50OworICAg
IFNvdXJjZUlEVG9CcmVha3BvaW50c01hcCBtX3NvdXJjZUlEVG9CcmVha3BvaW50czsKKwogICAg
IGJvb2wgbV9uZWVkc09wRGVidWdDYWxsYmFja3M7CiAgICAgYm9vbCBtX3Nob3VsZFBhdXNlOwot
ICAgIGludCBtX251bWJlck9mQnJlYWtwb2ludHM7CiAKKyAgICBSZWZQdHI8SlNDOjpEZWJ1Z2dl
ckNhbGxGcmFtZT4gbV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWU7CisKKyAgICBmcmllbmQgY2xh
c3MgRGVidWdnZXJDYWxsRnJhbWVTY29wZTsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAxNTg4OTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NSwxMSArODUsMTEgQEAgSlNDOjpKU0dsb2JhbE9iamVjdCogRGVidWdnZXJD
YWxsRnJhbWU6OgogICAgIHJldHVybiBtX2NhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgp
OwogfQogCi1pbnRwdHJfdCBEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSUQoKSBjb25zdAorU291
cmNlSUQgRGVidWdnZXJDYWxsRnJhbWU6OnNvdXJjZUlEKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
aXNWYWxpZCgpKTsKICAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiBub1NvdXJjZUlEOwogICAgIHJldHVybiBzb3VyY2VJREZvckNhbGxGcmFtZSht
X2NhbGxGcmFtZSk7CiB9CiAKQEAgLTE4NSwxMiArMTg1LDEyIEBAIFRleHRQb3NpdGlvbiBEZWJ1
Z2dlckNhbGxGcmFtZTo6cG9zaXRpb24KICAgICByZXR1cm4gVGV4dFBvc2l0aW9uKE9yZGluYWxO
dW1iZXI6OmZyb21PbmVCYXNlZEludChmdW5jdG9yLmxpbmUoKSksIE9yZGluYWxOdW1iZXI6OmZy
b21PbmVCYXNlZEludChmdW5jdG9yLmNvbHVtbigpKSk7CiB9CiAKLWludHB0cl90IERlYnVnZ2Vy
Q2FsbEZyYW1lOjpzb3VyY2VJREZvckNhbGxGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK1Nv
dXJjZUlEIERlYnVnZ2VyQ2FsbEZyYW1lOjpzb3VyY2VJREZvckNhbGxGcmFtZShDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgaWYgKCFjb2RlQmxvY2spCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbm9Tb3VyY2VJRDsKICAgICByZXR1cm4g
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNlSUQoKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJ
KHJldmlzaW9uIDE1ODg5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTMgQEAKICNkZWZp
bmUgRGVidWdnZXJDYWxsRnJhbWVfaAogCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVk
ZSAiRGVidWdnZXJQcmltaXRpdmVzLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlv
bi5oPgogCiBuYW1lc3BhY2UgSlNDIHsKLSAgICAKKwogY2xhc3MgRGVidWdnZXJDYWxsRnJhbWUg
OiBwdWJsaWMgUmVmQ291bnRlZDxEZWJ1Z2dlckNhbGxGcmFtZT4gewogcHVibGljOgogICAgIGVu
dW0gVHlwZSB7IFByb2dyYW1UeXBlLCBGdW5jdGlvblR5cGUgfTsKQEAgLTUwLDcgKzUxLDcgQEAg
cHVibGljOgogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxs
RnJhbWU7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSBQYXNzUmVmUHRyPERlYnVnZ2VyQ2FsbEZy
YW1lPiBjYWxsZXJGcmFtZSgpOwogICAgIEV4ZWNTdGF0ZSogZXhlYygpIGNvbnN0IHsgcmV0dXJu
IG1fY2FsbEZyYW1lOyB9Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50cHRyX3Qgc291cmNlSUQo
KSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTb3VyY2VJRCBzb3VyY2VJRCgpIGNvbnN0
OwogCiAgICAgLy8gbGluZSBhbmQgY29sdW1uIGFyZSBpbiBiYXNlIDAgZS5nLiB0aGUgZmlyc3Qg
bGluZSBpcyBsaW5lIDAuCiAgICAgaW50IGxpbmUoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9u
Lm1fbGluZS56ZXJvQmFzZWRJbnQoKTsgfQpAQCAtNzIsNyArNzMsNyBAQCBwdWJsaWM6CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNWYWx1ZSBldmFsdWF0ZVdpdGhDYWxsRnJhbWUo
Q2FsbEZyYW1lKiwgY29uc3QgU3RyaW5nJiBzY3JpcHQsIEpTVmFsdWUmIGV4Y2VwdGlvbik7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRleHRQb3NpdGlvbiBwb3NpdGlvbkZvckNhbGxG
cmFtZShDYWxsRnJhbWUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgaW50cHRyX3Qg
c291cmNlSURGb3JDYWxsRnJhbWUoQ2FsbEZyYW1lKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFNvdXJjZUlEIHNvdXJjZUlERm9yQ2FsbEZyYW1lKENhbGxGcmFtZSopOwogICAgIHN0
YXRpYyBKU1ZhbHVlIHRoaXNWYWx1ZUZvckNhbGxGcmFtZShDYWxsRnJhbWUqKTsKIAogcHJpdmF0
ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclByaW1pdGl2
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJQcmltaXRpdmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXJQcmltaXRpdmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERlYnVnZ2VyUHJpbWl0aXZlc19oCisjZGVmaW5lIERlYnVnZ2VyUHJpbWl0aXZlc19oCisKKyNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVk
ZWYgaW50cHRyX3QgU291cmNlSUQ7CitzdGF0aWMgY29uc3QgU291cmNlSUQgbm9Tb3VyY2VJRCA9
IDA7CisKK3R5cGVkZWYgaW50MzJfdCBCcmVha3BvaW50SUQ7CitzdGF0aWMgY29uc3QgQnJlYWtw
b2ludElEIG5vQnJlYWtwb2ludElEID0gMDsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKworI2VuZGlmIC8vIERlYnVnZ2VyUHJp
bWl0aXZlc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTg4OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NCBAQAorMjAxMy0xMS0w
NyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBicmVha3Bv
aW50IChhbmQgZXhjZXB0aW9uIGJyZWFrKSBmdW5jdGlvbmFsaXR5IGludG8gSlNDOjpEZWJ1Z2dl
ci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTc5
Ni4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuCisKKyAgICAgICAgLSBJbiBTY3JpcHREZWJ1Z1NlcnZlciBhbmQgSlNDOjpEZWJ1
Z2dlciwgU291cmNlSUQgYW5kIEJyZWFrcG9pbnRJRCBhcmUKKyAgICAgICAgICBub3cgbnVtZXJp
YyB0b2tlbnMuCisKKyAgICAgICAgLSBKU0M6OkRlYnVnZ2VyIG5vdyB0cmFja3MgdXNlciBkZWZp
bmVkIGJyZWFrcG9pbnRzIGluIGEgSlNDOjpCcmVha3BvaW50CisgICAgICAgICAgcmVjb3JkLiBQ
cmV2aW91c2x5LCB0aGlzIGluZm8gaXMgdHJhY2tlZCBpbiB0aGUgU2NyaXB0QnJlYWtwb2ludCBy
ZWNvcmQKKyAgICAgICAgICBpbiBTY3JpcHREZWJ1Z1NlcnZlci4gVGhlIG9ubHkgZWxlbWVudCBv
ZiBTY3JpcHRCcmVha3BvaW50IHRoYXQgaXMgbm90CisgICAgICAgICAgYmVpbmcgdHJhY2tlZCBi
eSBKU0M6OkJyZWFrcG9pbnQgaXMgdGhlIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24uCisgICAgICAg
ICAgICAgVGhlIFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24gaXMgc3RpbGwgdHJhY2tlZCBieSB0aGUg
U2NyaXB0RGVidWdTZXJ2ZXIKKyAgICAgICAgICBpbiBhIGxpc3Qga2V5ZWQgb24gdGhlIGNvcnJl
c3BvbmRpbmcgQnJlYWtwb2ludElELgorICAgICAgICAgICAgIFRoZSBTY3JpcHRCcmVha3BvaW50
IHJlY29yZCBpcyBub3cgb25seSB1c2VkIGFzIGEgbWVhbnMgb2YgcGFzc2luZworICAgICAgICAg
IGJyZWFrcG9pbnQgcGFyYW1hdGVycyB0byB0aGUgU2NyaXB0RGVidWdTZXJ2ZXIuCisKKyAgICAg
ICAgLSBTY3JpcHREZWJ1Z1NlcnZlciBub3cgbm8gbG9uZ2VyIGFjY2Vzc2VzIHRoZSBKU0M6OkNh
bGxGcmFtZSogZGlyZWN0bHkuCisgICAgICAgICAgSXQgYWx3YXlzIGdvZXMgdGhyb3VnaCB0aGUg
RGVidWdnZXJDYWxsRnJhbWUuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2o6CisgICAgICAgICogV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9CcmVha3BvaW50
SUQuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OlNjcmlwdERlYnVnU2VydmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpjbGVhckJyZWFrcG9pbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhdXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZENvbnRpbnVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhcnNl
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpub3RpZnlEb25l
UHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVn
U2VydmVyOjpuZWVkUGF1c2VIYW5kbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6aGFuZGxlQnJlYWtwb2ludEhpdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcjo6aGFuZGxlRXhjZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVQYXVzZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
b3VyY2VJRC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1
Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6
V29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNj
cmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29s
dmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNlYXJjaEluQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpnZXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZGlkUGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6Y2xlYXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaDoKKwogMjAx
My0xMS0wNyAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgSW5s
aW5lRmxvd0JveCBhbHdheXMgaGFzIGEgUmVuZGVyQm94TW9kZWxPYmplY3QsIHRha2UgYWR2YW50
YWdlLgpJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTg4OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjQ2LDYgKzIyNDYsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvQXJyYXlWYWx1ZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CcmVha3Bv
aW50SUQuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNl
UHJvdmlkZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FsbGJhY2tGdW5jdGlv
bi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhbGxiYWNrRnVuY3Rpb24uaCBc
CkBAIC0yNDQ4LDYgKzI0NDksNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZUlubGluZXMuaCBcCiAJU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggXAorCVNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NvdXJjZUlELmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVKU0NsaWVudERhdGEuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTg4OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDMwOCw2ICsyMDMwOCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
aW5kaW5nc1xnZW5lcmljXEJpbmRpbmdTZWN1cml0eS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYmluZGluZ3NcZ2VuZXJpY1xSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xBcnJheVZhbHVlLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xCcmVha3BvaW50SUQuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXENhY2hlZFNjcmlwdFNvdXJj
ZVByb3ZpZGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xD
YWxsYmFja0Z1bmN0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxiaW5kaW5n
c1xqc1xEaWN0aW9uYXJ5LmgiIC8+CkBAIC0yMDM1OSw2ICsyMDM2MCw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRWYWx1ZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cYmluZGluZ3NcanNcU2NyaXB0V3JhcHBhYmxlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xTZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXFNvdXJjZUlELmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xXZWJDb3JlSlNDbGll
bnREYXRhLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xXb3Jr
ZXJTY3JpcHRDb250cm9sbGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVn
aW5zXERPTU1pbWVUeXBlLmgiIC8+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNTg4OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRl
cnMJKHdvcmtpbmcgY29weSkKQEAgLTExMzI5LDYgKzExMzI5LDkgQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXEFycmF5VmFsdWUuaCI+CiAgICAgICA8RmlsdGVyPmJp
bmRpbmdzXGpzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxiaW5kaW5nc1xqc1xCcmVha3BvaW50SUQuaCI+CisgICAgICA8RmlsdGVyPmJpbmRp
bmdzXGpzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxiaW5kaW5nc1xqc1xDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oIj4KICAgICAgIDxG
aWx0ZXI+YmluZGluZ3NcanM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTExNDY0LDYg
KzExNDY3LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oIj4KICAgICAgIDxGaWx0ZXI+YmluZGluZ3NcanM8L0ZpbHRlcj4K
ICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpz
XFNvdXJjZUlELmgiPgorICAgICAgPEZpbHRlcj5iaW5kaW5nc1xqczwvRmlsdGVyPgorICAgIDwv
Q2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYmluZGluZ3NcanNcV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oIj4KICAgICAgIDxGaWx0ZXI+YmluZGluZ3NcanM8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1ODg5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTMz
Myw3ICs1MzMzLDYgQEAKIAkJQ0Q1NERFNEIxNzQ2OUM2RDAwNUU1QjM2IC8qIEF1ZGlvU2Vzc2lv
bk1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RDU0REU0OTE3NDY5QzZEMDA1RTVCMzYgLyogQXVkaW9TZXNzaW9uTWFjLmNwcCAqLzsgfTsKIAkJ
Q0Q2MUZFNjcxNzk0QUFEQjAwNDEwMUVCIC8qIE1lZGlhU291cmNlUmVnaXN0cnkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFBOTQyRTExNUI1Q0Uy
MjAwRDUyNUQxIC8qIE1lZGlhU291cmNlUmVnaXN0cnkuY3BwICovOyB9OwogCQlDRDYxRkU2ODE3
OTRBQURCMDA0MTAxRUIgLyogTWVkaWFTb3VyY2VSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFBOTQyRTIxNUI1Q0UyMjAwRDUyNUQxIC8q
IE1lZGlhU291cmNlUmVnaXN0cnkuaCAqLzsgfTsKLQogCQlDRDY0MUVCMzE4MThGNUVEMDBFRTRD
NDEgLyogTWVkaWFTb3VyY2VQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDRDY0MUVCMTE4MThGNUVEMDBFRTRDNDEgLyogTWVkaWFTb3VyY2VQ
cml2YXRlLmggKi87IH07CiAJCUNENjQxRUI0MTgxOEY1RUQwMEVFNEM0MSAvKiBTb3VyY2VCdWZm
ZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRDY0MUVCMjE4MThGNUVEMDBFRTRDNDEgLyogU291cmNlQnVmZmVyUHJpdmF0ZS5oICovOyB9
OwogCQlDRDY0MUVCRjE4MTlCMzYwMDBFRTRDNDEgLyogTWVkaWFUaW1lTWFjLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENjQxRUJEMTgxOUIzNTkw
MEVFNEM0MSAvKiBNZWRpYVRpbWVNYWMuY3BwICovOyB9OwpAQCAtNjIzOSw2ICs2MjM4LDcgQEAK
IAkJRkUxNkNGRDQxNjlEMURFRDAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxNkNGRDAxNjlEMURFQzAw
RDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUZFMTZDRkQ1MTY5RDFERUQwMEQzQTBDNyAvKiBEYXRhYmFz
ZUJhY2tlbmRTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFMTZDRkQxMTY5RDFERUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRTeW5jLmNw
cCAqLzsgfTsKIAkJRkUxNkNGRDYxNjlEMURFRDAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZFN5
bmMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMTZD
RkQyMTY5RDFERUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRTeW5jLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUyMTNCMjkxODJCRTlGODAw
QUQyRDEyIC8qIFNvdXJjZUlELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTIxM0IyODE4MkJFOUY4MDBBRDJEMTIgLyogU291cmNlSUQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTMzNzFBMjE2N0Mx
MUQ0MDBFREI3NTIgLyogRGF0YWJhc2VCYXNpY1R5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMzNzFBMDE2N0MxMUQ0MDBFREI3NTIgLyogRGF0
YWJhc2VCYXNpY1R5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRkUzNkZEMTUxNkM3ODI2NTAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25EYXRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM2RkQx
MTE2Qzc4MjY0MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEuaCAqLzsgfTsKIAkJRkUzNkZE
MTYxNkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzZGRDEyMTZDNzgy
NjQwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5jcHAgKi87IH07CkBAIC02
MjcwLDYgKzYyNzAsNyBAQAogCQlGRUJDNUYzMTE2QkQwQ0MzMDA2NTlCRDMgLyogRGF0YWJhc2VC
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
QkM1RjJGMTZCRDBDQzMwMDY1OUJEMyAvKiBEYXRhYmFzZUJhc2UuY3BwICovOyB9OwogCQlGRUJD
NUYzMjE2QkQwQ0MzMDA2NTlCRDMgLyogRGF0YWJhc2VCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUJDNUYzMDE2QkQwQ0MzMDA2NTlCRDMgLyog
RGF0YWJhc2VCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRkVEMTNEM0EwQ0VBOTM0NjAwRDg5NDY2IC8qIEVkaXRvcklPUy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDEzRDM5MENFQTkzNDYw
MEQ4OTQ2NiAvKiBFZGl0b3JJT1MubW0gKi87IH07CisJCUZFREJGRjE2MTgyQjdBOEQwMDE3RkE2
NCAvKiBCcmVha3BvaW50SUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFREJGRjE0MTgyQjdBOEQwMDE3RkE2NCAvKiBCcmVha3BvaW50SUQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRURFRjg0MTE2
Nzk3MTA4MDAwRTQ0NEEgLyogRGF0YWJhc2VTdHJhdGVneS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRURFRjgzRjE2Nzk3MTA4MDAwRTQ0NEEgLyog
RGF0YWJhc2VTdHJhdGVneS5jcHAgKi87IH07CiAJCUZFREVGODQyMTY3OTcxMDgwMDBFNDQ0QSAv
KiBEYXRhYmFzZVN0cmF0ZWd5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRURFRjg0MDE2Nzk3MTA4MDAwRTQ0NEEgLyogRGF0YWJhc2VTdHJhdGVneS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRTE4
MTEzMTZDMzE5RTgwMDA4NDg0OSAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVFMTgxMTExNkMzMTlFODAw
MDg0ODQ5IC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHAgKi87IH07CkBAIC0xMzM4OCw2ICsx
MzM4OSw3IEBACiAJCUZFMTZDRkQwMTY5RDFERUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VCYWNrZW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTZDRkQxMTY5RDFERUMwMEQzQTBDNyAvKiBE
YXRhYmFzZUJhY2tlbmRTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERhdGFiYXNlQmFja2VuZFN5bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTE2Q0ZEMjE2OUQxREVDMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kU3luYy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZUJhY2tlbmRTeW5jLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMjEzQjI4MTgyQkU5RjgwMEFEMkQxMiAvKiBTb3Vy
Y2VJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VJRC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTMzNzFBMDE2N0MxMUQ0MDBFREI3NTIgLyogRGF0
YWJhc2VCYXNpY1R5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFi
YXNlQmFzaWNUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTM2RkQxMTE2
Qzc4MjY0MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ2hhbmdlVmVyc2lvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUzNkZEMTIxNkM3ODI2NDAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGVN
YWNoaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFRyYW5z
YWN0aW9uU3RhdGVNYWNoaW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEz
NDE5LDYgKzEzNDIxLDcgQEAKIAkJRkVCQzVGMkYxNkJEMENDMzAwNjU5QkQzIC8qIERhdGFiYXNl
QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhYmFzZUJh
c2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUJDNUYzMDE2QkQwQ0MzMDA2
NTlCRDMgLyogRGF0YWJhc2VCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERhdGFiYXNlQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUQxM0QzOTBD
RUE5MzQ2MDBEODk0NjYgLyogRWRpdG9ySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gRWRpdG9ySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRURCRkYxNDE4MkI3QThEMDAxN0ZBNjQgLyogQnJlYWtwb2ludElELmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJyZWFrcG9pbnRJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRURFRjgzRjE2Nzk3MTA4MDAwRTQ0NEEgLyogRGF0YWJhc2VTdHJhdGVneS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhYmFzZVN0cmF0ZWd5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVERUY4NDAxNjc5NzEwODAwMEU0
NDRBIC8qIERhdGFiYXNlU3RyYXRlZ3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGF0YWJhc2VTdHJhdGVneS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUUx
ODExMTE2QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTQxNyw2ICsxOTQyMCw3IEBACiAJCUJD
MUEzNzkzMDk3QzZGQjEwMDE5RjNEOCAvKiBqcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJRkUyMTNCMjgxODJCRTlGODAwQUQyRDEyIC8qIFNvdXJjZUlE
LmggKi8sCiAJCQkJQkNDRTU4QTcxMDYxRTgyRjAwOEZCMzVBIC8qIENhbGxiYWNrIE9iamVjdHMg
Ki8sCiAJCQkJQkNDRTU4QjQxMDYxRTkyNTAwOEZCMzVBIC8qIENvbnN0cnVjdG9ycyAqLywKIAkJ
CQlCQzRFREVGNzBDMDhGNDE0MDA3RURENDkgLyogQ3VzdG9tICovLApAQCAtMTk0MjQsNiArMTk0
MjgsNyBAQAogCQkJCTkzRjhCMzA2MEEzMDBGRUEwMEY2MUFCOCAvKiBDb2RlR2VuZXJhdG9ySlMu
cG0gKi8sCiAJCQkJNDlCMzc2MEExNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuY3BwICov
LAogCQkJCTQ5QjM3NjBCMTVDNkM2ODQwMDU5MTMxRCAvKiBBcnJheVZhbHVlLmggKi8sCisJCQkJ
RkVEQkZGMTQxODJCN0E4RDAwMTdGQTY0IC8qIEJyZWFrcG9pbnRJRC5oICovLAogCQkJCUJDRDUz
MzYzMEVENjg0ODkwMDg4NzQ2OCAvKiBDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oICovLAog
CQkJCTMxMkQ2N0IwMTUzNTY5MUYwMDU2M0QwRCAvKiBEaWN0aW9uYXJ5LmNwcCAqLywKIAkJCQkz
MTYwMjNFRjE1MzJDNDBDMDBENTBGRjQgLyogRGljdGlvbmFyeS5oICovLApAQCAtMjE4NDUsNiAr
MjE4NTAsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0g
KAogCQkJCTkzMkFENzA2MTdFRkEyQzQwMDM4RjhGRiAvKiBNYWluRnJhbWUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUZFREJGRjE2MTgyQjdBOEQwMDE3RkE2NCAvKiBCcmVha3BvaW50SUQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZFMTE1RkFCMTY3OTg4Q0QwMDI0OTEzNCAvKiBBYnN0cmFjdERhdGFi
YXNlU2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QTUyOEU4NDE3RDdGNTJGMDBBQTk1MTgg
LyogRmxvYXRpbmdPYmplY3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRBQURFRTE2RDJDMzc0
MDAwMjZGRkMgLyogQWJzdHJhY3RTUUxTdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjE4
ODQsNiArMjE4OTAsNyBAQAogCQkJCUJDRjdFNDkxMTM3Q0Q3QzcwMDFEREFFNyAvKiBBZGp1c3RW
aWV3U2l6ZU9yTm90LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEQwQzQwNjExMTVGMUVBMDAxOEFB
MzQgLyogQWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRURBMTJENzE1MkNB
MUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGRTIxM0IyOTE4MkJFOUY4MDBBRDJEMTIgLyogU291cmNlSUQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUNFMDhDM0QyMTUyQjU5OUEwMDIxQjhDMiAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTdCMkRCMzE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJu
YXRpdmVUZXh0VUlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjAzRTEyQjAy
Njc2MDBDMUEzNTkgLyogQW5hbHlzZXJOb2RlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0JyZWFrcG9pbnRJRC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0JyZWFrcG9pbnRJRC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnJlYWtwb2ludElELmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEJyZWFrcG9pbnRJRF9oCisjZGVmaW5lIEJyZWFrcG9pbnRJRF9oCisKKyNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKworI2luY2x1ZGUgPGRlYnVnZ2VyL0RlYnVn
Z2VyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBKU0M6OkJyZWFrcG9pbnRJ
RCBCcmVha3BvaW50SUQ7Citjb25zdCBCcmVha3BvaW50SUQgbm9CcmVha3BvaW50SUQgPSBKU0M6
Om5vQnJlYWtwb2ludElEOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKworI2VuZGlmIC8vIEJyZWFrcG9pbnRJRF9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwCShyZXZpc2lvbiAxNTg4OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTMsNDIgKzUzLDEyIEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRGVidWdnZXJD
YWxsRnJhbWVTY29wZSB7Ci1wdWJsaWM6Ci0gICAgRGVidWdnZXJDYWxsRnJhbWVTY29wZShTY3Jp
cHREZWJ1Z1NlcnZlciYgZGVidWdnZXIpCi0gICAgICAgIDogbV9kZWJ1Z2dlcihkZWJ1Z2dlcikK
LSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9kZWJ1Z2dlci5tX2N1cnJlbnREZWJ1Z2dlckNhbGxG
cmFtZSk7Ci0gICAgICAgIGlmIChtX2RlYnVnZ2VyLm1fY3VycmVudENhbGxGcmFtZSkKLSAgICAg
ICAgICAgIG1fZGVidWdnZXIubV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWUgPSBEZWJ1Z2dlckNh
bGxGcmFtZTo6Y3JlYXRlKGRlYnVnZ2VyLm1fY3VycmVudENhbGxGcmFtZSk7Ci0gICAgfQotCi0g
ICAgfkRlYnVnZ2VyQ2FsbEZyYW1lU2NvcGUoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZGVidWdn
ZXIubV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgIG1fZGVidWdnZXIu
bV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWUtPmludmFsaWRhdGUoKTsKLSAgICAgICAgICAgIG1f
ZGVidWdnZXIubV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWUgPSAwOwotICAgICAgICB9Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIFNjcmlwdERlYnVnU2VydmVyJiBtX2RlYnVnZ2VyOwotfTsKLQot
Ci1TY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0RGVidWdTZXJ2ZXIoKQotICAgIDogbV9jYWxsaW5n
TGlzdGVuZXJzKGZhbHNlKQotICAgICwgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKERvbnRQYXVz
ZU9uRXhjZXB0aW9ucykKLSAgICAsIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQoZmFsc2UpCi0gICAg
LCBtX3BhdXNlZChmYWxzZSkKLSAgICAsIG1fcnVubmluZ05lc3RlZE1lc3NhZ2VMb29wKGZhbHNl
KQorU2NyaXB0RGVidWdTZXJ2ZXI6OlNjcmlwdERlYnVnU2VydmVyKGJvb2wgaXNJbldvcmtlclRo
cmVhZCkKKyAgICA6IERlYnVnZ2VyKGlzSW5Xb3JrZXJUaHJlYWQpCiAgICAgLCBtX2RvbmVQcm9j
ZXNzaW5nRGVidWdnZXJFdmVudHModHJ1ZSkKLSAgICAsIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQo
dHJ1ZSkKLSAgICAsIG1fcGF1c2VPbkNhbGxGcmFtZSgwKQotICAgICwgbV9jdXJyZW50Q2FsbEZy
YW1lKDApCisgICAgLCBtX2NhbGxpbmdMaXN0ZW5lcnMoZmFsc2UpCisgICAgLCBtX3J1bm5pbmdO
ZXN0ZWRNZXNzYWdlTG9vcChmYWxzZSkKICAgICAsIG1fcmVjb21waWxlVGltZXIodGhpcywgJlNj
cmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucykKLSAgICAsIG1fbGFzdEV4
ZWN1dGVkTGluZSgtMSkKLSAgICAsIG1fbGFzdEV4ZWN1dGVkU291cmNlSUQoLTEpCiB7CiB9CiAK
QEAgLTk2LDExNyArNjYsMzIgQEAgU2NyaXB0RGVidWdTZXJ2ZXI6On5TY3JpcHREZWJ1Z1NlcnZl
cigpCiB7CiB9CiAKLVN0cmluZyBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBzY3JpcHRCcmVha3Bv
aW50LCBpbnQqIGFjdHVhbExpbmVOdW1iZXIsIGludCogYWN0dWFsQ29sdW1uTnVtYmVyKQotewot
ICAgIGludHB0cl90IHNvdXJjZUlEVmFsdWUgPSBzb3VyY2VJRC50b0ludFB0cigpOwotICAgIGlm
ICghc291cmNlSURWYWx1ZSkKLSAgICAgICAgcmV0dXJuICIiOwotICAgIFNvdXJjZUlEVG9CcmVh
a3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlEVG9CcmVha3BvaW50cy5maW5kKHNv
dXJjZUlEVmFsdWUpOwotICAgIGlmIChpdCA9PSBtX3NvdXJjZUlEVG9CcmVha3BvaW50cy5lbmQo
KSkKLSAgICAgICAgaXQgPSBtX3NvdXJjZUlEVG9CcmVha3BvaW50cy5zZXQoc291cmNlSURWYWx1
ZSwgTGluZVRvQnJlYWtwb2ludHNNYXAoKSkuaXRlcmF0b3I7Ci0gICAgTGluZVRvQnJlYWtwb2lu
dHNNYXA6Oml0ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnZhbHVlLmZpbmQoc2NyaXB0QnJlYWtwb2lu
dC5saW5lTnVtYmVyKTsKLSAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnZhbHVlLmVuZCgpKQotICAg
ICAgICBicmVha3NJdCA9IGl0LT52YWx1ZS5zZXQoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVy
LCBCcmVha3BvaW50c0luTGluZSgpKS5pdGVyYXRvcjsKLQotICAgIEJyZWFrcG9pbnRzSW5MaW5l
JiBicmVha3NWZWN0b3IgPSBicmVha3NJdC0+dmFsdWU7Ci0gICAgdW5zaWduZWQgYnJlYWtzQ291
bnQgPSBicmVha3NWZWN0b3Iuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
cmVha3NDb3VudDsgaSsrKSB7Ci0gICAgICAgIGlmIChicmVha3NWZWN0b3IuYXQoaSkuY29sdW1u
TnVtYmVyID09IHNjcmlwdEJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKQotICAgICAgICAgICAgcmV0
dXJuICIiOwotICAgIH0KLSAgICBicmVha3NWZWN0b3IuYXBwZW5kKHNjcmlwdEJyZWFrcG9pbnQp
OwotICAgIGluY051bWJlck9mQnJlYWtwb2ludHMoKTsKLQotICAgICphY3R1YWxMaW5lTnVtYmVy
ID0gc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyOwotICAgICphY3R1YWxDb2x1bW5OdW1iZXIg
PSBzY3JpcHRCcmVha3BvaW50LmNvbHVtbk51bWJlcjsKLSAgICByZXR1cm4gc291cmNlSUQgKyAi
OiIgKyBTdHJpbmc6Om51bWJlcihzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIpICsgIjoiICsg
U3RyaW5nOjpudW1iZXIoc2NyaXB0QnJlYWtwb2ludC5jb2x1bW5OdW1iZXIpOwotfQotCi12b2lk
IFNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtw
b2ludElEKQorQnJlYWtwb2ludElEIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KFNv
dXJjZUlEIHNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBzY3JpcHRCcmVha3BvaW50
LCB1bnNpZ25lZCogYWN0dWFsTGluZU51bWJlciwgdW5zaWduZWQqIGFjdHVhbENvbHVtbk51bWJl
cikKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiB0b2tlbnM7Ci0gICAgYnJlYWtwb2ludElELnNwbGl0
KCI6IiwgdG9rZW5zKTsKLSAgICBpZiAodG9rZW5zLnNpemUoKSAhPSAzKQotICAgICAgICByZXR1
cm47Ci0gICAgYm9vbCBzdWNjZXNzOwotICAgIGludHB0cl90IHNvdXJjZUlEVmFsdWUgPSB0b2tl
bnNbMF0udG9JbnRQdHIoJnN1Y2Nlc3MpOwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0
dXJuOwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIgPSB0b2tlbnNbMV0udG9VSW50KCZzdWNjZXNz
KTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBjb2x1
bW5OdW1iZXIgPSB0b2tlbnNbMl0udG9VSW50KCZzdWNjZXNzKTsKLSAgICBpZiAoIXN1Y2Nlc3Mp
Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIXNvdXJjZUlEKQorICAgICAgICByZXR1cm4gbm9C
cmVha3BvaW50SUQ7CiAKLSAgICBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9zb3VyY2VJRFRvQnJlYWtwb2ludHMuZmluZChzb3VyY2VJRFZhbHVlKTsKLSAgICBpZiAo
aXQgPT0gbV9zb3VyY2VJRFRvQnJlYWtwb2ludHMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBMaW5lVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmlu
ZChsaW5lTnVtYmVyKTsKLSAgICBpZiAoYnJlYWtzSXQgPT0gaXQtPnZhbHVlLmVuZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVjdG9yID0gYnJl
YWtzSXQtPnZhbHVlOwotICAgIHVuc2lnbmVkIGJyZWFrc0NvdW50ID0gYnJlYWtzVmVjdG9yLnNp
emUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJlYWtzQ291bnQ7IGkrKykgewot
ICAgICAgICBpZiAoYnJlYWtzVmVjdG9yLmF0KGkpLmNvbHVtbk51bWJlciA9PSBzdGF0aWNfY2Fz
dDxpbnQ+KGNvbHVtbk51bWJlcikpIHsKLSAgICAgICAgICAgIGJyZWFrc1ZlY3Rvci5yZW1vdmUo
aSk7Ci0gICAgICAgICAgICBkZWNOdW1iZXJPZkJyZWFrcG9pbnRzKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQorICAgIEpTQzo6QnJlYWtwb2ludCBicmVha3BvaW50KHNvdXJjZUlE
LCBzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIsIHNjcmlwdEJyZWFrcG9pbnQuY29sdW1uTnVt
YmVyLCBzY3JpcHRCcmVha3BvaW50LmNvbmRpdGlvbiwgc2NyaXB0QnJlYWtwb2ludC5hdXRvQ29u
dGludWUpOworICAgIEJyZWFrcG9pbnRJRCBpZCA9IERlYnVnZ2VyOjpzZXRCcmVha3BvaW50KGJy
ZWFrcG9pbnQsICphY3R1YWxMaW5lTnVtYmVyLCAqYWN0dWFsQ29sdW1uTnVtYmVyKTsKKyAgICBp
ZiAoaWQgIT0gbm9CcmVha3BvaW50SUQgJiYgIXNjcmlwdEJyZWFrcG9pbnQuYWN0aW9ucy5pc0Vt
cHR5KCkpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIEJyZWFrcG9pbnRJRFRvQWN0aW9uc01h
cDo6aXRlcmF0b3IgaXQgPSBtX2JyZWFrcG9pbnRJRFRvQWN0aW9ucy5maW5kKGlkKTsKKyAgICAg
ICAgQVNTRVJUKGl0ID09IG1fYnJlYWtwb2ludElEVG9BY3Rpb25zLmVuZCgpKTsKKyNlbmRpZgor
ICAgICAgICBjb25zdCBWZWN0b3I8U2NyaXB0QnJlYWtwb2ludEFjdGlvbj4gJmFjdGlvbnMgPSBz
Y3JpcHRCcmVha3BvaW50LmFjdGlvbnM7CisgICAgICAgIG1fYnJlYWtwb2ludElEVG9BY3Rpb25z
LnNldChpZCwgYWN0aW9ucyk7CiAgICAgfQorICAgIHJldHVybiBpZDsKIH0KIAotYm9vbCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6aGFzQnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJRCwgY29uc3QgVGV4
dFBvc2l0aW9uJiBwb3NpdGlvbiwgU2NyaXB0QnJlYWtwb2ludCAqaGl0QnJlYWtwb2ludCkgY29u
c3QKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoQnJlYWtwb2ludElE
IGlkKQogewotICAgIGlmICghbV9icmVha3BvaW50c0FjdGl2YXRlZCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIEFTU0VSVChpZCAhPSBub0JyZWFrcG9pbnRJRCk7CisgICAgQnJlYWtwb2lu
dElEVG9BY3Rpb25zTWFwOjppdGVyYXRvciBpdCA9IG1fYnJlYWtwb2ludElEVG9BY3Rpb25zLmZp
bmQoaWQpOworICAgIGlmIChpdCAhPSBtX2JyZWFrcG9pbnRJRFRvQWN0aW9ucy5lbmQoKSkKKyAg
ICAgICAgbV9icmVha3BvaW50SURUb0FjdGlvbnMucmVtb3ZlKGl0KTsKIAotICAgIFNvdXJjZUlE
VG9CcmVha3BvaW50c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlEVG9CcmVha3Bv
aW50cy5maW5kKHNvdXJjZUlEKTsKLSAgICBpZiAoaXQgPT0gbV9zb3VyY2VJRFRvQnJlYWtwb2lu
dHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBsaW5lID0gcG9zaXRp
b24ubV9saW5lLnplcm9CYXNlZEludCgpOwotICAgIGludCBjb2x1bW4gPSBwb3NpdGlvbi5tX2Nv
bHVtbi56ZXJvQmFzZWRJbnQoKTsKLSAgICBpZiAobGluZSA8IDAgfHwgY29sdW1uIDwgMCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTGluZVRvQnJlYWtwb2ludHNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnZhbHVlLmZpbmQobGluZSk7Ci0gICAgaWYgKGJyZWFrc0l0
ID09IGl0LT52YWx1ZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBo
aXQgPSBmYWxzZTsKLSAgICBjb25zdCBCcmVha3BvaW50c0luTGluZSYgYnJlYWtzVmVjdG9yID0g
YnJlYWtzSXQtPnZhbHVlOwotICAgIHVuc2lnbmVkIGJyZWFrc0NvdW50ID0gYnJlYWtzVmVjdG9y
LnNpemUoKTsKLSAgICB1bnNpZ25lZCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBicmVha3NDb3Vu
dDsgaSsrKSB7Ci0gICAgICAgIGludCBicmVha0xpbmUgPSBicmVha3NWZWN0b3IuYXQoaSkubGlu
ZU51bWJlcjsKLSAgICAgICAgaW50IGJyZWFrQ29sdW1uID0gYnJlYWtzVmVjdG9yLmF0KGkpLmNv
bHVtbk51bWJlcjsKLSAgICAgICAgLy8gU2luY2UgZnJvbnRlbmQgdHJ1bmNhdGVzIHRoZSBpbmRl
bnQsIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gYSBsaW5lIG11c3QgbWF0Y2ggdGhlIGJyZWFrcG9p
bnQgKGxpbmUsMCkuCi0gICAgICAgIGlmICgobGluZSAhPSBtX2xhc3RFeGVjdXRlZExpbmUgJiYg
bGluZSA9PSBicmVha0xpbmUgJiYgIWJyZWFrQ29sdW1uKQotICAgICAgICAgICAgfHwgKGxpbmUg
PT0gYnJlYWtMaW5lICYmIGNvbHVtbiA9PSBicmVha0NvbHVtbikpIHsKLSAgICAgICAgICAgIGhp
dCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAo
IWhpdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGhpdEJyZWFrcG9pbnQpCi0g
ICAgICAgICpoaXRCcmVha3BvaW50ID0gYnJlYWtzVmVjdG9yLmF0KGkpOwotCi0gICAgLy8gQW4g
ZW1wdHkgY29uZGl0aW9uIGNvdW50cyBhcyBubyBjb25kaXRpb24gd2hpY2ggaXMgZXF1aXZhbGVu
dCB0byAidHJ1ZSIuCi0gICAgaWYgKGJyZWFrc1ZlY3Rvci5hdChpKS5jb25kaXRpb24uaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlV2l0aENhbGxGcmFt
ZShtX2N1cnJlbnRDYWxsRnJhbWUsIGJyZWFrc1ZlY3Rvci5hdChpKS5jb25kaXRpb24sIGV4Y2Vw
dGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbikgewotICAgICAgICAvLyBBbiBlcnJvbmVvdXMgY29u
ZGl0aW9uIGNvdW50cyBhcyAiZmFsc2UiLgotICAgICAgICByZXBvcnRFeGNlcHRpb24obV9jdXJy
ZW50Q2FsbEZyYW1lLCBleGNlcHRpb24pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHJldHVybiByZXN1bHQudG9Cb29sZWFuKG1fY3VycmVudENhbGxGcmFtZSk7CisgICAgRGVi
dWdnZXI6OnJlbW92ZUJyZWFrcG9pbnQoaWQpOwogfQogCiBib29sIFNjcmlwdERlYnVnU2VydmVy
OjpldmFsdWF0ZUJyZWFrcG9pbnRBY3Rpb24oY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYg
YnJlYWtwb2ludEFjdGlvbikgY29uc3QKQEAgLTIzNCw4NSArMTE5LDEwIEBAIGJvb2wgU2NyaXB0
RGVidWdTZXJ2ZXI6OmV2YWx1YXRlQnJlYWtwb2kKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3BvaW50QWN0aW9ucyhjb25zdCBTY3Jp
cHRCcmVha3BvaW50JiBicmVha3BvaW50KSBjb25zdAotewotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYnJlYWtwb2ludC5hY3Rpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghZXZh
bHVhdGVCcmVha3BvaW50QWN0aW9uKGJyZWFrcG9pbnQuYWN0aW9uc1tpXSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgU2Ny
aXB0RGVidWdTZXJ2ZXI6OmNsZWFyQnJlYWtwb2ludHMoKQogewotICAgIG1fc291cmNlSURUb0Jy
ZWFrcG9pbnRzLmNsZWFyKCk7Ci0gICAgdXBkYXRlTnVtYmVyT2ZCcmVha3BvaW50cygwKTsKLX0K
LQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoYm9vbCBh
Y3RpdmF0ZWQpCi17Ci0gICAgbV9icmVha3BvaW50c0FjdGl2YXRlZCA9IGFjdGl2YXRlZDsKLX0K
LQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShQYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlKQotewotICAgIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSA9IHBhdXNlOwotICAgIHNldE5lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKHBhdXNlICE9IERvbnRQ
YXVzZU9uRXhjZXB0aW9ucyk7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNl
T25OZXh0U3RhdGVtZW50KGJvb2wgcGF1c2UpCi17Ci0gICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVu
dCA9IHBhdXNlOwotICAgIGlmIChwYXVzZSkKLSAgICAgICAgc2V0U2hvdWxkUGF1c2UodHJ1ZSk7
Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmJyZWFrUHJvZ3JhbSgpCi17Ci0gICAgaWYg
KG1fcGF1c2VkIHx8ICFtX2N1cnJlbnRDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOwotICAgIHNldFNob3VsZFBhdXNlKHRydWUp
OwotICAgIHBhdXNlSWZOZWVkZWQobV9jdXJyZW50Q2FsbEZyYW1lKTsKLX0KLQotdm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6Y29udGludWVQcm9ncmFtKCkKLXsKLSAgICBpZiAoIW1fcGF1c2VkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gZmFsc2U7Ci0g
ICAgbV9kb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzID0gdHJ1ZTsKLX0KLQotdm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6c3RlcEludG9TdGF0ZW1lbnQoKQotewotICAgIGlmICghbV9wYXVzZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOwot
ICAgIHNldFNob3VsZFBhdXNlKHRydWUpOwotICAgIG1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2
ZW50cyA9IHRydWU7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBPdmVyU3RhdGVt
ZW50KCkKLXsKLSAgICBpZiAoIW1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Bh
dXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWU7Ci0gICAgbV9kb25lUHJvY2Vzc2lu
Z0RlYnVnZ2VyRXZlbnRzID0gdHJ1ZTsKLX0KLQotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3Rl
cE91dE9mRnVuY3Rpb24oKQotewotICAgIGlmICghbV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZSA/IG1fY3VycmVu
dENhbGxGcmFtZS0+Y2FsbGVyRnJhbWVTa2lwcGluZ1ZNRW50cnlTZW50aW5lbCgpIDogMDsKLSAg
ICBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0cnVlOworICAgIERlYnVnZ2VyOjpj
bGVhckJyZWFrcG9pbnRzKCk7CisgICAgbV9icmVha3BvaW50SURUb0FjdGlvbnMuY2xlYXIoKTsK
IH0KIAogYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y2FuU2V0U2NyaXB0U291cmNlKCkKQEAgLTMz
MywxNSArMTQzLDkgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6dXBkYXRlQ2FsbFN0YWNrKAog
ICAgIC8vIEZJWE1FKDQwMzAwKTogaW1wbGVtZW50IHRoaXMuCiB9CiAKLURlYnVnZ2VyQ2FsbEZy
YW1lKiBTY3JpcHREZWJ1Z1NlcnZlcjo6Y3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lKCkgY29uc3QK
LXsKLSAgICBBU1NFUlQobV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWUpOwotICAgIHJldHVybiBt
X2N1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZS5nZXQoKTsKLX0KLQogdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZShTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lcikKIHsK
LSAgICBBU1NFUlQobV9wYXVzZWQpOworICAgIEFTU0VSVChpc1BhdXNlZCgpKTsKICAgICBEZWJ1
Z2dlckNhbGxGcmFtZSogZGVidWdnZXJDYWxsRnJhbWUgPSBjdXJyZW50RGVidWdnZXJDYWxsRnJh
bWUoKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZGVidWdnZXJDYWxsRnJh
bWUtPnNjb3BlKCktPmdsb2JhbE9iamVjdCgpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpAQCAtMzYxLDE2ICsxNjUsMTEgQEAgdm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZQogdm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6ZGlzcGF0Y2hEaWRDb250aW51ZShTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lcikKIHsK
ICAgICBsaXN0ZW5lci0+ZGlkQ29udGludWUoKTsKLSAgICBpZiAoIW1fcGF1c2VPbk5leHRTdGF0
ZW1lbnQgJiYgIW1fcGF1c2VPbkNhbGxGcmFtZSkgewotICAgICAgICBzZXRTaG91bGRQYXVzZShm
YWxzZSk7Ci0gICAgICAgIGlmICghbmVlZHNPcERlYnVnQ2FsbGJhY2tzKCkpCi0gICAgICAgICAg
ICBtX2N1cnJlbnRDYWxsRnJhbWUgPSAwOwotICAgIH0KIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6ZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZShjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJz
LCBTb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIsIGJvb2wgaXNDb250ZW50U2NyaXB0KQog
ewotICAgIFN0cmluZyBzb3VyY2VJRCA9IFN0cmluZzo6bnVtYmVyKHNvdXJjZVByb3ZpZGVyLT5h
c0lEKCkpOworICAgIFNvdXJjZUlEIHNvdXJjZUlEID0gc291cmNlUHJvdmlkZXItPmFzSUQoKTsK
IAogICAgIFNjcmlwdERlYnVnTGlzdGVuZXI6OlNjcmlwdCBzY3JpcHQ7CiAgICAgc2NyaXB0LnVy
bCA9IHNvdXJjZVByb3ZpZGVyLT51cmwoKTsKQEAgLTQxOCwxOSArMjE3LDYgQEAgYm9vbCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6aXNDb250ZW50U2NyaXB0KAogICAgIHJldHVybiAmY3VycmVudFdvcmxk
KGV4ZWMpICE9ICZtYWluVGhyZWFkTm9ybWFsV29ybGQoKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGV0YWNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgLy8g
SWYgd2UncmUgZGV0YWNoaW5nIGZyb20gdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgZ2xvYmFsIG9i
amVjdCwgbWFudWFsbHkgdGVhciBkb3duIG91cgotICAgIC8vIHN0YWNrLCBzaW5jZSB3ZSB3b24n
dCBnZXQgZnVydGhlciBkZWJ1Z2dlciBjYWxsYmFja3MgdG8gZG8gc28uIEFsc28sIHJlc3VtZSBl
eGVjdXRpb24sCi0gICAgLy8gc2luY2UgdGhlcmUncyBubyBwb2ludCBpbiBzdGF5aW5nIHBhdXNl
ZCBvbmNlIGEgd2luZG93IGNsb3Nlcy4KLSAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lICYmIG1f
Y3VycmVudENhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpID09IGdsb2JhbE9iamVjdCkg
ewotICAgICAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSAwOwotICAgICAgICBtX3BhdXNlT25DYWxs
RnJhbWUgPSAwOwotICAgICAgICBjb250aW51ZVByb2dyYW0oKTsKLSAgICB9Ci0gICAgRGVidWdn
ZXI6OmRldGFjaChnbG9iYWxPYmplY3QpOwotfQotCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpz
b3VyY2VQYXJzZWQoRXhlY1N0YXRlKiBleGVjLCBTb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlk
ZXIsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewogICAgIGlm
IChtX2NhbGxpbmdMaXN0ZW5lcnMpCkBAIC00NzUsNTcgKzI2MSwzNSBAQCB2b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpkaXNwYXRjaEZ1bmN0aW9uCiAgICAgbV9jYWxsaW5nTGlzdGVuZXJzID0gZmFs
c2U7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnVwZGF0ZUNhbGxGcmFtZShDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6Om5vdGlmeURvbmVQcm9jZXNz
aW5nRGVidWdnZXJFdmVudHMoKQogewotICAgIG1fY3VycmVudENhbGxGcmFtZSA9IGNhbGxGcmFt
ZTsKLSAgICBpbnRwdHJfdCBzb3VyY2VJRCA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpzb3VyY2VJREZv
ckNhbGxGcmFtZShjYWxsRnJhbWUpOwotICAgIGlmIChtX2xhc3RFeGVjdXRlZFNvdXJjZUlEICE9
IHNvdXJjZUlEKSB7Ci0gICAgICAgIG1fbGFzdEV4ZWN1dGVkTGluZSA9IC0xOwotICAgICAgICBt
X2xhc3RFeGVjdXRlZFNvdXJjZUlEID0gc291cmNlSUQ7Ci0gICAgfQorICAgIG1fZG9uZVByb2Nl
c3NpbmdEZWJ1Z2dlckV2ZW50cyA9IHRydWU7CiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6
OnVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiti
b29sIFNjcmlwdERlYnVnU2VydmVyOjpuZWVkUGF1c2VIYW5kbGluZyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQogewotICAgIHVwZGF0ZUNhbGxGcmFtZShjYWxsRnJhbWUpOwotICAgIHBh
dXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKLSAgICBpZiAoIW5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygp
KQotICAgICAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSAwOworICAgIHJldHVybiAhIWdldExpc3Rl
bmVyc0Zvckdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpOwogfQogCi12b2lkIFNjcmlwdERlYnVn
U2VydmVyOjpwYXVzZUlmTmVlZGVkKENhbGxGcmFtZSogY2FsbEZyYW1lKQordm9pZCBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6aGFuZGxlQnJlYWtwb2ludEhpdChjb25zdCBKU0M6OkJyZWFrcG9pbnQmIGJy
ZWFrcG9pbnQpCiB7Ci0gICAgaWYgKG1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0gCi0gICAg
SlNHbG9iYWxPYmplY3QqIGR5bmFtaWNHbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPmR5bmFtaWNH
bG9iYWxPYmplY3QoKTsKLSAgICBpZiAoIWdldExpc3RlbmVyc0Zvckdsb2JhbE9iamVjdChkeW5h
bWljR2xvYmFsT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2NyaXB0QnJlYWtwb2lu
dCBicmVha3BvaW50OwotICAgIGJvb2wgZGlkSGl0QnJlYWtwb2ludCA9IGZhbHNlOwotICAgIGJv
b2wgcGF1c2VOb3cgPSBtX3BhdXNlT25OZXh0U3RhdGVtZW50OwotICAgIHBhdXNlTm93IHw9ICht
X3BhdXNlT25DYWxsRnJhbWUgPT0gbV9jdXJyZW50Q2FsbEZyYW1lKTsKLQotICAgIGludHB0cl90
IHNvdXJjZUlEID0gRGVidWdnZXJDYWxsRnJhbWU6OnNvdXJjZUlERm9yQ2FsbEZyYW1lKG1fY3Vy
cmVudENhbGxGcmFtZSk7Ci0gICAgVGV4dFBvc2l0aW9uIHBvc2l0aW9uID0gRGVidWdnZXJDYWxs
RnJhbWU6OnBvc2l0aW9uRm9yQ2FsbEZyYW1lKG1fY3VycmVudENhbGxGcmFtZSk7Ci0gICAgcGF1
c2VOb3cgfD0gZGlkSGl0QnJlYWtwb2ludCA9IGhhc0JyZWFrcG9pbnQoc291cmNlSUQsIHBvc2l0
aW9uLCAmYnJlYWtwb2ludCk7Ci0gICAgbV9sYXN0RXhlY3V0ZWRMaW5lID0gcG9zaXRpb24ubV9s
aW5lLnplcm9CYXNlZEludCgpOwotICAgIGlmICghcGF1c2VOb3cpCi0gICAgICAgIHJldHVybjsK
LQotICAgIERlYnVnZ2VyQ2FsbEZyYW1lU2NvcGUgZGVidWdnZXJDYWxsRnJhbWVTY29wZSgqdGhp
cyk7Ci0KLSAgICBpZiAoZGlkSGl0QnJlYWtwb2ludCkgewotICAgICAgICBldmFsdWF0ZUJyZWFr
cG9pbnRBY3Rpb25zKGJyZWFrcG9pbnQpOwotICAgICAgICBpZiAoYnJlYWtwb2ludC5hdXRvQ29u
dGludWUpCi0gICAgICAgICAgICByZXR1cm47CisgICAgQnJlYWtwb2ludElEVG9BY3Rpb25zTWFw
OjppdGVyYXRvciBpdCA9IG1fYnJlYWtwb2ludElEVG9BY3Rpb25zLmZpbmQoYnJlYWtwb2ludC5p
ZCk7CisgICAgaWYgKGl0ICE9IG1fYnJlYWtwb2ludElEVG9BY3Rpb25zLmVuZCgpKSB7CisgICAg
ICAgIEJyZWFrcG9pbnRBY3Rpb25zJiBhY3Rpb25zID0gaXQtPnZhbHVlOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGFjdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlm
ICghZXZhbHVhdGVCcmVha3BvaW50QWN0aW9uKGFjdGlvbnNbaV0pKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQogICAgIH0KK30KIAotICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9
IDA7Ci0gICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IGZhbHNlOwotICAgIG1fcGF1c2VkID0g
dHJ1ZTsKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2lu
dENvbmRpdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbikg
Y29uc3QKK3sKKyAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKK30KIAordm9p
ZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlUGF1c2UoRGVidWdnZXI6OlJlYXNvbkZvclBhdXNl
LCBKU0dsb2JhbE9iamVjdCogZHluYW1pY0dsb2JhbE9iamVjdCkKK3sKICAgICBkaXNwYXRjaEZ1
bmN0aW9uVG9MaXN0ZW5lcnMoJlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhdXNlLCBk
eW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICBkaWRQYXVzZShkeW5hbWljR2xvYmFsT2JqZWN0KTsK
IApAQCAtNTM4LDg3ICszMDIsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpwYXVzZUlmTmVl
ZGVkKENhCiAKICAgICBkaWRDb250aW51ZShkeW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICBkaXNw
YXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoJlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZENv
bnRpbnVlLCBkeW5hbWljR2xvYmFsT2JqZWN0KTsKLQotICAgIG1fcGF1c2VkID0gZmFsc2U7Ci19
Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNhbGxFdmVudChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKLXsKLSAgICBpZiAoIW1fcGF1c2VkKQotICAgICAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVz
ZUlmTmVlZGVkKGNhbGxGcmFtZSk7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmF0U3Rh
dGVtZW50KENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIGlmICghbV9wYXVzZWQpCi0gICAg
ICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKIH0KLQotdm9p
ZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmV0dXJuRXZlbnQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17
Ci0gICAgaWYgKG1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1cGRhdGVDYWxsRnJh
bWVBbmRQYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7Ci0KLSAgICAvLyBkZXRhY2ggbWF5IGhhdmUg
YmVlbiBjYWxsZWQgZHVyaW5nIHBhdXNlSWZOZWVkZWQKLSAgICBpZiAoIW1fY3VycmVudENhbGxG
cmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVHJlYXQgc3RlcHBpbmcgb3ZlciBhIHJl
dHVybiBzdGF0ZW1lbnQgbGlrZSBzdGVwcGluZyBvdXQuCi0gICAgaWYgKG1fY3VycmVudENhbGxG
cmFtZSA9PSBtX3BhdXNlT25DYWxsRnJhbWUpCi0gICAgICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9
IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWVTa2lwcGluZ1ZNRW50cnlTZW50aW5lbCgp
OwotCi0gICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXJG
cmFtZVNraXBwaW5nVk1FbnRyeVNlbnRpbmVsKCk7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OmV4Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSwgYm9vbCBoYXNIYW5k
bGVyKQotewotICAgIGlmIChtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9PSBQYXVzZU9uQWxsRXhjZXB0aW9ucyB8fCAobV9wYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnMgJiYgIWhhc0hh
bmRsZXIpKSB7Ci0gICAgICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOwotICAgICAg
ICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKLSAgICB9Ci0KLSAgICB1cGRhdGVDYWxsRnJhbWVBbmRQ
YXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6Ondp
bGxFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBpZiAoIW1fcGF1
c2VkKQotICAgICAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7
Ci19Ci0KLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpZEV4ZWN1dGVQcm9ncmFtKENhbGxGcmFt
ZSogY2FsbEZyYW1lKQotewotICAgIGlmIChtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwotCi0gICAgLy8g
VHJlYXQgc3RlcHBpbmcgb3ZlciB0aGUgZW5kIG9mIGEgcHJvZ3JhbSBsaWtlIHN0ZXBwaW5nIG91
dC4KLSAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
IChtX2N1cnJlbnRDYWxsRnJhbWUgPT0gbV9wYXVzZU9uQ2FsbEZyYW1lKSB7Ci0gICAgICAgIG1f
cGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyRnJhbWVTa2lwcGlu
Z1ZNRW50cnlTZW50aW5lbCgpOwotICAgICAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gbV9jdXJy
ZW50Q2FsbEZyYW1lLT5jYWxsZXJGcmFtZVNraXBwaW5nVk1FbnRyeVNlbnRpbmVsKCk7Ci19Ci0K
LXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlYWNoQnJlYWtwb2ludChDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKLXsKLSAgICBpZiAobV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
cGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOwotICAgIHNldFNob3VsZFBhdXNlKHRydWUpOwot
ICAgIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKLX0KLQogdm9p
ZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCkKIHsKICAg
ICBtX3JlY29tcGlsZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaAkocmV2aXNpb24gMTU4ODk2KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMC0yMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0z
Miw4ICszMiwxMCBAQAogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAKLSNpbmNs
dWRlICJTY3JpcHREZWJ1Z0xpc3RlbmVyLmgiCisjaW5jbHVkZSAiQnJlYWtwb2ludElELmgiCiAj
aW5jbHVkZSAiU2NyaXB0QnJlYWtwb2ludC5oIgorI2luY2x1ZGUgIlNjcmlwdERlYnVnTGlzdGVu
ZXIuaCIKKyNpbmNsdWRlICJTb3VyY2VJRC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVk
ZSA8ZGVidWdnZXIvRGVidWdnZXIuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtNTQs
MzAgKzU2LDEyIEBAIGNsYXNzIFNjcmlwdERlYnVnTGlzdGVuZXI7CiBjbGFzcyBTY3JpcHRPYmpl
Y3Q7CiBjbGFzcyBTY3JpcHRWYWx1ZTsKIAotY2xhc3MgU2NyaXB0RGVidWdTZXJ2ZXIgOiBwcm90
ZWN0ZWQgSlNDOjpEZWJ1Z2dlciB7CitjbGFzcyBTY3JpcHREZWJ1Z1NlcnZlciA6IHB1YmxpYyBK
U0M6OkRlYnVnZ2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY3JpcHREZWJ1Z1NlcnZl
cik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFN0cmluZyBzZXRCcmVh
a3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmLCBp
bnQqIGFjdHVhbExpbmVOdW1iZXIsIGludCogYWN0dWFsQ29sdW1uTnVtYmVyKTsKLSAgICB2b2lk
IHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SUQpOworICAgIEJyZWFr
cG9pbnRJRCBzZXRCcmVha3BvaW50KFNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVha3BvaW50Jiwg
dW5zaWduZWQqIGFjdHVhbExpbmVOdW1iZXIsIHVuc2lnbmVkKiBhY3R1YWxDb2x1bW5OdW1iZXIp
OworICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChCcmVha3BvaW50SUQpOwogICAgIHZvaWQgY2xl
YXJCcmVha3BvaW50cygpOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoYm9vbCBh
Y3RpdmF0ZWQpOwotICAgIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50cygpIHsgc2V0QnJlYWtwb2lu
dHNBY3RpdmF0ZWQodHJ1ZSk7IH0KLSAgICB2b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50cygpIHsg
c2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoZmFsc2UpOyB9Ci0KLSAgICBlbnVtIFBhdXNlT25FeGNl
cHRpb25zU3RhdGUgewotICAgICAgICBEb250UGF1c2VPbkV4Y2VwdGlvbnMsCi0gICAgICAgIFBh
dXNlT25BbGxFeGNlcHRpb25zLAotICAgICAgICBQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zCi0g
ICAgfTsKLSAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlT25FeGNlcHRpb25zU3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGU7IH0KLSAgICB2b2lkIHNl
dFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk7Ci0KLSAgICB2
b2lkIHNldFBhdXNlT25OZXh0U3RhdGVtZW50KGJvb2wgcGF1c2UpOwotICAgIHZvaWQgYnJlYWtQ
cm9ncmFtKCk7Ci0gICAgdm9pZCBjb250aW51ZVByb2dyYW0oKTsKLSAgICB2b2lkIHN0ZXBJbnRv
U3RhdGVtZW50KCk7Ci0gICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVudCgpOwotICAgIHZvaWQgc3Rl
cE91dE9mRnVuY3Rpb24oKTsKIAogICAgIGJvb2wgY2FuU2V0U2NyaXB0U291cmNlKCk7CiAgICAg
Ym9vbCBzZXRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5n
JiBuZXdDb250ZW50LCBib29sIHByZXZpZXcsIFN0cmluZyogZXJyb3IsIFNjcmlwdFZhbHVlKiBu
ZXdDYWxsRnJhbWVzLCBTY3JpcHRPYmplY3QqIHJlc3VsdCk7CkBAIC05NCw3ICs3OCw2IEBAIHB1
YmxpYzoKICAgICAgICAgLy8gRklYTUUod2Via2l0Lm9yZy9iLzgyMjAzKTogSW1wbGVtZW50IHBy
ZXByb2Nlc3Nvci4KICAgICB9CiAKLSAgICBib29sIGlzUGF1c2VkKCkgeyByZXR1cm4gbV9wYXVz
ZWQ7IH0KICAgICBib29sIHJ1bm5pbmdOZXN0ZWRNZXNzYWdlTG9vcCgpIHsgcmV0dXJuIG1fcnVu
bmluZ05lc3RlZE1lc3NhZ2VMb29wOyB9CiAKICAgICB2b2lkIGNvbXBpbGVTY3JpcHQoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgc291cmNl
VVJMLCBTdHJpbmcqIHNjcmlwdElELCBTdHJpbmcqIGV4Y2VwdGlvbk1lc3NhZ2UpOwpAQCAtMTEy
LDcgKzk1LDcgQEAgcHJvdGVjdGVkOgogICAgIHR5cGVkZWYgSGFzaFNldDxTY3JpcHREZWJ1Z0xp
c3RlbmVyKj4gTGlzdGVuZXJTZXQ7CiAgICAgdHlwZWRlZiB2b2lkIChTY3JpcHREZWJ1Z1NlcnZl
cjo6KkphdmFTY3JpcHRFeGVjdXRpb25DYWxsYmFjaykoU2NyaXB0RGVidWdMaXN0ZW5lciopOwog
Ci0gICAgU2NyaXB0RGVidWdTZXJ2ZXIoKTsKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcihib29sIGlz
SW5Xb3JrZXJUaHJlYWQgPSBmYWxzZSk7CiAgICAgflNjcmlwdERlYnVnU2VydmVyKCk7CiAKICAg
ICB2aXJ0dWFsIExpc3RlbmVyU2V0KiBnZXRMaXN0ZW5lcnNGb3JHbG9iYWxPYmplY3QoSlNDOjpK
U0dsb2JhbE9iamVjdCopID0gMDsKQEAgLTEyMyw5ICsxMDYsNyBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50U2NyaXB0KEpTQzo6RXhlY1N0YXRlKik7CiAKLSAgICBi
b29sIGhhc0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYs
IFNjcmlwdEJyZWFrcG9pbnQqIGhpdEJyZWFrcG9pbnQpIGNvbnN0OwogICAgIGJvb2wgZXZhbHVh
dGVCcmVha3BvaW50QWN0aW9uKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mKSBjb25zdDsK
LSAgICBib29sIGV2YWx1YXRlQnJlYWtwb2ludEFjdGlvbnMoY29uc3QgU2NyaXB0QnJlYWtwb2lu
dCYpIGNvbnN0OwogCiAgICAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoSmF2YVNj
cmlwdEV4ZWN1dGlvbkNhbGxiYWNrLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgdm9pZCBk
aXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywg
SmF2YVNjcmlwdEV4ZWN1dGlvbkNhbGxiYWNrIGNhbGxiYWNrKTsKQEAgLTEzNCw0OCArMTE1LDI1
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGRpc3BhdGNoRGlkUGFyc2VTb3VyY2UoY29uc3QgTGlz
dGVuZXJTZXQmIGxpc3RlbmVycywgSlNDOjpTb3VyY2VQcm92aWRlciosIGJvb2wgaXNDb250ZW50
U2NyaXB0KTsKICAgICB2b2lkIGRpc3BhdGNoRmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBMaXN0
ZW5lclNldCYgbGlzdGVuZXJzLCBKU0M6OlNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZSwg
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCi0gICAgLy8gVGhlc2UgdXBkYXRlIGZ1bmN0
aW9ucyBhcmUgb25seSBuZWVkZWQgYmVjYXVzZSBvdXIgY3VycmVudCBicmVha3BvaW50cyBhcmUK
LSAgICAvLyBrZXknZWQgb2ZmIHRoZSBzb3VyY2UgcG9zaXRpb24gaW5zdGVhZCBvZiB0aGUgYnl0
ZWNvZGUgUEMuIFRoaXMgZW5zdXJlcwotICAgIC8vIHRoYXQgd2UgZG9uJ3QgYnJlYWsgb24gdGhl
IHNhbWUgbGluZSBtb3JlIHRoYW4gb25jZS4gT25jZSB3ZSBzd2l0Y2ggdG8gYQotICAgIC8vIGJ5
dGVjb2RlIFBDIGtleSdlZCBicmVha3BvaW50LCB3ZSB3aWxsIG5vdCBuZWVkIHRoZXNlIGFueW1v
cmUgYW5kIHNob3VsZAotICAgIC8vIGJlIGFibGUgdG8gcmVtb3ZlIHRoZW0uCi0gICAgdm9pZCB1
cGRhdGVDYWxsRnJhbWUoSlNDOjpDYWxsRnJhbWUqKTsKLSAgICB2b2lkIHVwZGF0ZUNhbGxGcmFt
ZUFuZFBhdXNlSWZOZWVkZWQoSlNDOjpDYWxsRnJhbWUqKTsKLSAgICB2b2lkIHBhdXNlSWZOZWVk
ZWQoSlNDOjpDYWxsRnJhbWUqKTsKLQotICAgIEpTQzo6RGVidWdnZXJDYWxsRnJhbWUqIGN1cnJl
bnREZWJ1Z2dlckNhbGxGcmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VQYXJz
ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZSwg
Y29uc3QgU3RyaW5nJiBlcnJvck1zZykgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGV0
YWNoKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBPVkVSUklERTsKKyAgICBib29sIG1fZG9uZVByb2Nl
c3NpbmdEZWJ1Z2dlckV2ZW50czsKIAotICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VQYXJzZWQoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OlNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZSwgY29uc3Qg
U3RyaW5nJiBlcnJvck1zZykgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGxFdmVudChK
U0M6OkNhbGxGcmFtZSopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBhdFN0YXRlbWVudChK
U0M6OkNhbGxGcmFtZSopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZXR1cm5FdmVudChK
U0M6OkNhbGxGcmFtZSopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBleGNlcHRpb24oSlND
OjpDYWxsRnJhbWUqLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIGJvb2wgaGFzSGFuZGxl
cikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxFeGVjdXRlUHJvZ3JhbShKU0M6OkNh
bGxGcmFtZSopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShK
U0M6OkNhbGxGcmFtZSopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFjaEJyZWFr
cG9pbnQoSlNDOjpDYWxsRnJhbWUqKSBPVkVSUklERTsKLQotICAgIHR5cGVkZWYgVmVjdG9yPFNj
cmlwdEJyZWFrcG9pbnQ+IEJyZWFrcG9pbnRzSW5MaW5lOwotICAgIHR5cGVkZWYgSGFzaE1hcDxp
bnQsIEJyZWFrcG9pbnRzSW5MaW5lLCBXVEY6OkludEhhc2g8aW50PiwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ+PiBMaW5lVG9CcmVha3BvaW50c01hcDsKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8aW50cHRyX3QsIExpbmVUb0JyZWFrcG9pbnRzTWFwPiBTb3VyY2VJRFRvQnJl
YWtwb2ludHNNYXA7Citwcml2YXRlOgorICAgIHR5cGVkZWYgVmVjdG9yPFNjcmlwdEJyZWFrcG9p
bnRBY3Rpb24+IEJyZWFrcG9pbnRBY3Rpb25zOworICAgIHR5cGVkZWYgSGFzaE1hcDxCcmVha3Bv
aW50SUQsIEJyZWFrcG9pbnRBY3Rpb25zPiBCcmVha3BvaW50SURUb0FjdGlvbnNNYXA7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgbmVlZFBhdXNlSGFuZGxpbmcoSlNDOjpKU0dsb2JhbE9iamVjdCopIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCcmVha3BvaW50SGl0KGNvbnN0IEpTQzo6
QnJlYWtwb2ludCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25J
bkJyZWFrcG9pbnRDb25kaXRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhjZXB0
aW9uKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGF1c2UoSlNDOjpE
ZWJ1Z2dlcjo6UmVhc29uRm9yUGF1c2UsIEpTQzo6SlNHbG9iYWxPYmplY3QqKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cygpIE9W
RVJSSURFOwogCiAgICAgYm9vbCBtX2NhbGxpbmdMaXN0ZW5lcnM7Ci0gICAgUGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGU7Ci0gICAgYm9vbCBtX3BhdXNlT25O
ZXh0U3RhdGVtZW50OwotICAgIGJvb2wgbV9wYXVzZWQ7CiAgICAgYm9vbCBtX3J1bm5pbmdOZXN0
ZWRNZXNzYWdlTG9vcDsKLSAgICBib29sIG1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50czsK
LSAgICBib29sIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQ7Ci0gICAgSlNDOjpDYWxsRnJhbWUqIG1f
cGF1c2VPbkNhbGxGcmFtZTsKLSAgICBKU0M6OkNhbGxGcmFtZSogbV9jdXJyZW50Q2FsbEZyYW1l
OwotICAgIFJlZlB0cjxKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lPiBtX2N1cnJlbnREZWJ1Z2dlckNh
bGxGcmFtZTsKLSAgICBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXAgbV9zb3VyY2VJRFRvQnJlYWtw
b2ludHM7CisgICAgQnJlYWtwb2ludElEVG9BY3Rpb25zTWFwIG1fYnJlYWtwb2ludElEVG9BY3Rp
b25zOwogICAgIFRpbWVyPFNjcmlwdERlYnVnU2VydmVyPiBtX3JlY29tcGlsZVRpbWVyOwogCi0g
ICAgaW50IG1fbGFzdEV4ZWN1dGVkTGluZTsKLSAgICBpbnRwdHJfdCBtX2xhc3RFeGVjdXRlZFNv
dXJjZUlEOwotCiAgICAgZnJpZW5kIGNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lU2NvcGU7CiB9Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Tb3VyY2VJRC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NvdXJjZUlELmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Tb3VyY2VJRC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBTb3VyY2VJRF9oCisjZGVmaW5lIFNvdXJjZUlEX2gKKworI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQorCisjaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEpTQzo6U291cmNlSUQgU291cmNlSUQ7
CitzdGF0aWMgY29uc3QgU291cmNlSUQgbm9Tb3VyY2VJRCA9IEpTQzo6bm9Tb3VyY2VJRDsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCisKKyNlbmRpZiAvLyBTb3VyY2VJRF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lv
biAxNTg4OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1
Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKGMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNDMsNyArNDQsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlcjo6V29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIo
V29ya2VyR2xvYmFsU2NvcGUqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbW9kZSkKLSAgICA6IFNj
cmlwdERlYnVnU2VydmVyKCkKKyAgICA6IFNjcmlwdERlYnVnU2VydmVyKHRydWUpCiAgICAgLCBt
X3dvcmtlckdsb2JhbFNjb3BlKGNvbnRleHQpCiAgICAgLCBtX2RlYnVnZ2VyVGFza01vZGUobW9k
ZSkKIHsKQEAgLTYwLDEyICs2MSw2IEBAIHZvaWQgV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6OmFk
ZExpc3RlbmUKICAgICByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucygwKTsKIH0KIAotdm9pZCBXb3Jr
ZXJTY3JpcHREZWJ1Z1NlcnZlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKEpTQzo6Q2FsbEZyYW1lKiBj
YWxsRnJhbWUpCi17Ci0gICAgaWYgKCFtX3BhdXNlZCkKLSAgICAgICAgdXBkYXRlQ2FsbEZyYW1l
KGNhbGxGcmFtZSk7Ci19Ci0KIHZvaWQgV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGls
ZUFsbEpTRnVuY3Rpb25zKFRpbWVyPFNjcmlwdERlYnVnU2VydmVyPiopCiB7CiAgICAgSlNDOjpW
TSogdm0gPSBtX3dvcmtlckdsb2JhbFNjb3BlLT5zY3JpcHQoKS0+dm0oKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIu
aAkocmV2aXNpb24gMTU4ODk2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2Vy
U2NyaXB0RGVidWdTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksNiBAQCBwcml2
YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudFNjcmlwdChKU0M6OkV4ZWNTdGF0ZSop
IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1
dGVQcm9ncmFtKEpTQzo6Q2FsbEZyYW1lKikgT1ZFUlJJREU7Ci0KICAgICB2aXJ0dWFsIHZvaWQg
cnVuRXZlbnRMb29wV2hpbGVQYXVzZWQoKSBPVkVSUklERTsKIAogICAgIFdvcmtlckdsb2JhbFNj
b3BlKiBtX3dvcmtlckdsb2JhbFNjb3BlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAkocmV2aXNpb24gMTU4ODk2KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEw
LTIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTU5LDYgKzU5LDcgQEAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdn
ZQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQog
ICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9wYXVzZWRTY3JpcHRTdGF0ZSgwKQorICAgICwg
bV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQobm9CcmVha3BvaW50SUQpCiAgICAgLCBt
X2VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZChmYWxzZSkK
ICAgICAsIG1fbGlzdGVuZXIoMCkKQEAgLTMwMiwxMyArMzAzLDE2IEBAIHZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2kKICAgICAqb3V0QnJlYWtwb2ludElkZW50aWZpZXIg
PSBicmVha3BvaW50SWRlbnRpZmllcjsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VMb2NhdGlvbihF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2F0aW9u
LCBTdHJpbmcqIHNjcmlwdElELCBpbnQqIGxpbmVOdW1iZXIsIGludCogY29sdW1uTnVtYmVyKQor
c3RhdGljIGJvb2wgcGFyc2VMb2NhdGlvbihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIEluc3Bl
Y3Rvck9iamVjdCogbG9jYXRpb24sIFNvdXJjZUlEKiBzb3VyY2VJRCwgdW5zaWduZWQqIGxpbmVO
dW1iZXIsIHVuc2lnbmVkKiBjb2x1bW5OdW1iZXIpCiB7Ci0gICAgaWYgKCFsb2NhdGlvbi0+Z2V0
U3RyaW5nKCJzY3JpcHRJZCIsIHNjcmlwdElEKSB8fCAhbG9jYXRpb24tPmdldE51bWJlcigibGlu
ZU51bWJlciIsIGxpbmVOdW1iZXIpKSB7CisgICAgU3RyaW5nIHNjcmlwdElEU3RyOworICAgIGlm
ICghbG9jYXRpb24tPmdldFN0cmluZygic2NyaXB0SWQiLCAmc2NyaXB0SURTdHIpIHx8ICFsb2Nh
dGlvbi0+Z2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgbGluZU51bWJlcikpIHsKICAgICAgICAgLy8g
RklYTUU6IHJlcGxhY2Ugd2l0aCBpbnB1dCB2YWxpZGF0aW9uLgorICAgICAgICAqc291cmNlSUQg
PSBub1NvdXJjZUlEOwogICAgICAgICAqZXJyb3JTdHJpbmcgPSAic2NyaXB0SWQgYW5kIGxpbmVO
dW1iZXIgYXJlIHJlcXVpcmVkLiI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAg
KnNvdXJjZUlEID0gc2NyaXB0SURTdHIudG9JbnRQdHIoKTsKICAgICAqY29sdW1uTnVtYmVyID0g
MDsKICAgICBsb2NhdGlvbi0+Z2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCBjb2x1bW5OdW1iZXIp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtMzE2LDExICszMjAsMTEgQEAgc3RhdGljIGJvb2wgcGFy
c2VMb2NhdGlvbihFcnJvclN0cmluZyogZQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBv
cHRpb25zLCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2lu
dElkZW50aWZpZXIsIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0
dWFsTG9jYXRpb24pCiB7Ci0gICAgU3RyaW5nIHNjcmlwdElEOwotICAgIGludCBsaW5lTnVtYmVy
OwotICAgIGludCBjb2x1bW5OdW1iZXI7CisgICAgU291cmNlSUQgc291cmNlSUQ7CisgICAgdW5z
aWduZWQgbGluZU51bWJlcjsKKyAgICB1bnNpZ25lZCBjb2x1bW5OdW1iZXI7CiAKLSAgICBpZiAo
IXBhcnNlTG9jYXRpb24oZXJyb3JTdHJpbmcsIGxvY2F0aW9uLCAmc2NyaXB0SUQsICZsaW5lTnVt
YmVyLCAmY29sdW1uTnVtYmVyKSkKKyAgICBpZiAoIXBhcnNlTG9jYXRpb24oZXJyb3JTdHJpbmcs
IGxvY2F0aW9uLmdldCgpLCAmc291cmNlSUQsICZsaW5lTnVtYmVyLCAmY29sdW1uTnVtYmVyKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGNvbmRpdGlvbiA9IGVtcHR5U3RyaW5nKCk7
CkBAIC0zMzYsMTMgKzM0MCwxNCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJy
ZWFrcG9pCiAgICAgaWYgKCFicmVha3BvaW50QWN0aW9uc0Zyb21Qcm90b2NvbChlcnJvclN0cmlu
ZywgYWN0aW9ucywgJmJyZWFrcG9pbnRBY3Rpb25zKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
U3RyaW5nIGJyZWFrcG9pbnRJZGVudGlmaWVyID0gc2NyaXB0SUQgKyAnOicgKyBTdHJpbmc6Om51
bWJlcihsaW5lTnVtYmVyKSArICc6JyArIFN0cmluZzo6bnVtYmVyKGNvbHVtbk51bWJlcik7Cisg
ICAgU3RyaW5nIGJyZWFrcG9pbnRJZGVudGlmaWVyID0gU3RyaW5nOjpudW1iZXIoc291cmNlSUQp
ICsgJzonICsgU3RyaW5nOjpudW1iZXIobGluZU51bWJlcikgKyAnOicgKyBTdHJpbmc6Om51bWJl
cihjb2x1bW5OdW1iZXIpOwogICAgIGlmIChtX2JyZWFrcG9pbnRJZGVudGlmaWVyVG9EZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJRHMuZmluZChicmVha3BvaW50SWRlbnRpZmllcikgIT0gbV9icmVha3Bv
aW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzLmVuZCgpKSB7CiAgICAgICAg
ICplcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGF0IHNwZWNpZmllZCBsb2NhdGlvbiBhbHJlYWR5
IGV4aXN0cy4iOwogICAgICAgICByZXR1cm47CiAgICAgfQorCiAgICAgU2NyaXB0QnJlYWtwb2lu
dCBicmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY29uZGl0aW9uLCBicmVha3Bv
aW50QWN0aW9ucywgYXV0b0NvbnRpbnVlKTsKLSAgICBhY3R1YWxMb2NhdGlvbiA9IHJlc29sdmVC
cmVha3BvaW50KGJyZWFrcG9pbnRJZGVudGlmaWVyLCBzY3JpcHRJRCwgYnJlYWtwb2ludCk7Cisg
ICAgYWN0dWFsTG9jYXRpb24gPSByZXNvbHZlQnJlYWtwb2ludChicmVha3BvaW50SWRlbnRpZmll
ciwgc291cmNlSUQsIGJyZWFrcG9pbnQpOwogICAgIGlmIChhY3R1YWxMb2NhdGlvbikKICAgICAg
ICAgKm91dEJyZWFrcG9pbnRJZGVudGlmaWVyID0gYnJlYWtwb2ludElkZW50aWZpZXI7CiAgICAg
ZWxzZQpAQCAtMzYzLDQ1ICszNjgsNDUgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpy
ZW1vdmVCcmVhawogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2Nh
dGlvbihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiBsb2NhdGlvbikKIHsKLSAgICBpZiAoIW1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2lu
dElELmlzRW1wdHkoKSkgeworICAgIGlmIChtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJ
RCAhPSBub0JyZWFrcG9pbnRJRCkgewogICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLnJlbW92
ZUJyZWFrcG9pbnQobV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQpOwotICAgICAgICBt
X2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRCA9ICIiOworICAgICAgICBtX2NvbnRpbnVl
VG9Mb2NhdGlvbkJyZWFrcG9pbnRJRCA9IG5vQnJlYWtwb2ludElEOwogICAgIH0KIAotICAgIFN0
cmluZyBzY3JpcHRJRDsKLSAgICBpbnQgbGluZU51bWJlcjsKLSAgICBpbnQgY29sdW1uTnVtYmVy
OworICAgIFNvdXJjZUlEIHNvdXJjZUlEOworICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7CisgICAg
dW5zaWduZWQgY29sdW1uTnVtYmVyOwogCi0gICAgaWYgKCFwYXJzZUxvY2F0aW9uKGVycm9yU3Ry
aW5nLCBsb2NhdGlvbiwgJnNjcmlwdElELCAmbGluZU51bWJlciwgJmNvbHVtbk51bWJlcikpCisg
ICAgaWYgKCFwYXJzZUxvY2F0aW9uKGVycm9yU3RyaW5nLCBsb2NhdGlvbi5nZXQoKSwgJnNvdXJj
ZUlELCAmbGluZU51bWJlciwgJmNvbHVtbk51bWJlcikpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludChsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsICIi
LCBmYWxzZSk7Ci0gICAgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQgPSBzY3JpcHRE
ZWJ1Z1NlcnZlcigpLnNldEJyZWFrcG9pbnQoc2NyaXB0SUQsIGJyZWFrcG9pbnQsICZsaW5lTnVt
YmVyLCAmY29sdW1uTnVtYmVyKTsKKyAgICBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJ
RCA9IHNjcmlwdERlYnVnU2VydmVyKCkuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgYnJlYWtwb2lu
dCwgJmxpbmVOdW1iZXIsICZjb2x1bW5OdW1iZXIpOwogICAgIHJlc3VtZShlcnJvclN0cmluZyk7
CiB9CiAKLVBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3Bv
aW50SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgY29uc3QgU2NyaXB0QnJlYWtw
b2ludCYgYnJlYWtwb2ludCkKK1Bhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2Nh
dGlvbj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2ZUJyZWFrcG9pbnQoY29uc3QgU3Ry
aW5nJiBicmVha3BvaW50SWRlbnRpZmllciwgU291cmNlSUQgc291cmNlSUQsIGNvbnN0IFNjcmlw
dEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQpCiB7Ci0gICAgU2NyaXB0c01hcDo6aXRlcmF0b3Igc2Ny
aXB0SXRlcmF0b3IgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJRCk7CisgICAgU2NyaXB0c01hcDo6
aXRlcmF0b3Igc2NyaXB0SXRlcmF0b3IgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7CiAgICAg
aWYgKHNjcmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgU2NyaXB0JiBzY3JpcHQgPSBzY3JpcHRJdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKGJy
ZWFrcG9pbnQubGluZU51bWJlciA8IHNjcmlwdC5zdGFydExpbmUgfHwgc2NyaXB0LmVuZExpbmUg
PCBicmVha3BvaW50LmxpbmVOdW1iZXIpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IGFj
dHVhbExpbmVOdW1iZXI7Ci0gICAgaW50IGFjdHVhbENvbHVtbk51bWJlcjsKLSAgICBTdHJpbmcg
ZGVidWdTZXJ2ZXJCcmVha3BvaW50SUQgPSBzY3JpcHREZWJ1Z1NlcnZlcigpLnNldEJyZWFrcG9p
bnQoc2NyaXB0SUQsIGJyZWFrcG9pbnQsICZhY3R1YWxMaW5lTnVtYmVyLCAmYWN0dWFsQ29sdW1u
TnVtYmVyKTsKLSAgICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SUQuaXNFbXB0eSgpKQorICAg
IHVuc2lnbmVkIGFjdHVhbExpbmVOdW1iZXI7CisgICAgdW5zaWduZWQgYWN0dWFsQ29sdW1uTnVt
YmVyOworICAgIEJyZWFrcG9pbnRJRCBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRCA9IHNjcmlwdERl
YnVnU2VydmVyKCkuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgYnJlYWtwb2ludCwgJmFjdHVhbExp
bmVOdW1iZXIsICZhY3R1YWxDb2x1bW5OdW1iZXIpOworICAgIGlmIChkZWJ1Z1NlcnZlckJyZWFr
cG9pbnRJRCA9PSBub0JyZWFrcG9pbnRJRCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBCcmVh
a3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzTWFwOjppdGVyYXRvciBk
ZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNJdGVyYXRvciA9IG1fYnJlYWtwb2ludElkZW50aWZpZXJU
b0RlYnVnU2VydmVyQnJlYWtwb2ludElEcy5maW5kKGJyZWFrcG9pbnRJZGVudGlmaWVyKTsKICAg
ICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SURzSXRlcmF0b3IgPT0gbV9icmVha3BvaW50SWRl
bnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzLmVuZCgpKQotICAgICAgICBkZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJRHNJdGVyYXRvciA9IG1fYnJlYWtwb2ludElkZW50aWZpZXJUb0RlYnVn
U2VydmVyQnJlYWtwb2ludElEcy5zZXQoYnJlYWtwb2ludElkZW50aWZpZXIsIFZlY3RvcjxTdHJp
bmc+KCkpLml0ZXJhdG9yOworICAgICAgICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNJdGVyYXRv
ciA9IG1fYnJlYWtwb2ludElkZW50aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEcy5zZXQo
YnJlYWtwb2ludElkZW50aWZpZXIsIFZlY3RvcjxCcmVha3BvaW50SUQ+KCkpLml0ZXJhdG9yOwog
ICAgIGRlYnVnU2VydmVyQnJlYWtwb2ludElEc0l0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZGVidWdT
ZXJ2ZXJCcmVha3BvaW50SUQpOwogCiAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
TG9jYXRpb24+IGxvY2F0aW9uID0gVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbjo6Y3Jl
YXRlKCkKLSAgICAgICAgLnNldFNjcmlwdElkKHNjcmlwdElEKQorICAgICAgICAuc2V0U2NyaXB0
SWQoU3RyaW5nOjpudW1iZXIoc291cmNlSUQpKQogICAgICAgICAuc2V0TGluZU51bWJlcihhY3R1
YWxMaW5lTnVtYmVyKTsKICAgICBsb2NhdGlvbi0+c2V0Q29sdW1uTnVtYmVyKGFjdHVhbENvbHVt
bk51bWJlcik7CiAgICAgcmV0dXJuIGxvY2F0aW9uOwpAQCAtNDE3LDE2ICs0MjIsMTcgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzY3JpcAogICAgIHJldHVybiB2YWx1ZS0+
YXNPYmplY3QoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNv
bnRlbnQoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmlwdElELCBjb25zdCBT
dHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNv
bnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEFycmF5PFdlYkNvcmU6OlR5
cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRzKQordm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBT
dHJpbmcmIHNjcmlwdElEU3RyLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBjb25z
dCBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdl
eCwgUmVmUHRyPEFycmF5PFdlYkNvcmU6OlR5cGVCdWlsZGVyOjpQYWdlOjpTZWFyY2hNYXRjaD4+
JiByZXN1bHRzKQogewogICAgIGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCA/ICpvcHRp
b25hbElzUmVnZXggOiBmYWxzZTsKICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENh
c2VTZW5zaXRpdmUgPyAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7CiAKLSAgICBTY3Jp
cHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElEKTsKKyAgICBTb3Vy
Y2VJRCBzb3VyY2VJRCA9IHNjcmlwdElEU3RyLnRvSW50UHRyKCk7CisgICAgU2NyaXB0c01hcDo6
aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7CiAgICAgaWYgKGl0ICE9IG1f
c2NyaXB0cy5lbmQoKSkKICAgICAgICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGlsczo6c2Vh
cmNoSW5UZXh0QnlMaW5lcyhpdC0+dmFsdWUuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2ZSwg
aXNSZWdleCk7CiAgICAgZWxzZQotICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZvciBpZDog
IiArIHNjcmlwdElEOworICAgICAgICAqZXJyb3IgPSAiTm8gc2NyaXB0IGZvciBpZDogIiArIHNj
cmlwdElEU3RyOwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFNjcmlwdFNv
dXJjZShFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0IFN0
cmluZyYgbmV3Q29udGVudCwgY29uc3QgYm9vbCogY29uc3QgcHJldmlldywgUmVmUHRyPEFycmF5
PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4mIG5ld0NhbGxGcmFtZXMsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCkBAIC00NDEsMTMgKzQ0NywxNCBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFNjcmlwdFNvCiAgICAgICAgIHJlc3VsdCA9IG9iamVj
dDsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoRXJy
b3JTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmlwdElELCBTdHJpbmcqIHNjcmlwdFNv
dXJjZSkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0U291cmNlKEVycm9y
U3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRFN0ciwgU3RyaW5nKiBzY3JpcHRT
b3VyY2UpCiB7Ci0gICAgU2NyaXB0c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuZmluZChz
Y3JpcHRJRCk7CisgICAgU291cmNlSUQgc291cmNlSUQgPSBzY3JpcHRJRFN0ci50b0ludFB0cigp
OworICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzLmZpbmQoc291cmNlSUQp
OwogICAgIGlmIChpdCAhPSBtX3NjcmlwdHMuZW5kKCkpCiAgICAgICAgICpzY3JpcHRTb3VyY2Ug
PSBpdC0+dmFsdWUuc291cmNlOwogICAgIGVsc2UKLSAgICAgICAgKmVycm9yID0gIk5vIHNjcmlw
dCBmb3IgaWQ6ICIgKyBzY3JpcHRJRDsKKyAgICAgICAgKmVycm9yID0gIk5vIHNjcmlwdCBmb3Ig
aWQ6ICIgKyBzY3JpcHRJRFN0cjsKIH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpn
ZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGZ1bmN0aW9uSWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWls
cz4mIGRldGFpbHMpCkBAIC02NzAsNyArNjc3LDcgQEAgU3RyaW5nIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNvdXJjZU1hcAogCiAvLyBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lciBmdW5jdGlvbnMK
IAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJp
bmcmIHNjcmlwdElELCBjb25zdCBTY3JpcHQmIGluU2NyaXB0KQordm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShTb3VyY2VJRCBzb3VyY2VJRCwgY29uc3QgU2NyaXB0
JiBpblNjcmlwdCkKIHsKICAgICBTY3JpcHQgc2NyaXB0ID0gaW5TY3JpcHQ7CiAgICAgaWYgKCFz
Y3JpcHQuc3RhcnRMaW5lICYmICFzY3JpcHQuc3RhcnRDb2x1bW4pCkBAIC02ODIsOSArNjg5LDEw
IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3UKICAgICBib29sKiBo
YXNTb3VyY2VVUkxQYXJhbSA9IGhhc1NvdXJjZVVSTCA/ICZoYXNTb3VyY2VVUkwgOiAwOwogICAg
IFN0cmluZyogc291cmNlTWFwVVJMUGFyYW0gPSBzY3JpcHQuc291cmNlTWFwcGluZ1VSTC5pc051
bGwoKSA/IDAgOiAmc2NyaXB0LnNvdXJjZU1hcHBpbmdVUkw7CiAgICAgY29uc3QgYm9vbCogaXND
b250ZW50U2NyaXB0ID0gc2NyaXB0LmlzQ29udGVudFNjcmlwdCA/ICZzY3JpcHQuaXNDb250ZW50
U2NyaXB0IDogMDsKLSAgICBtX2Zyb250ZW5kLT5zY3JpcHRQYXJzZWQoc2NyaXB0SUQsIHNjcmlw
dFVSTCwgc2NyaXB0LnN0YXJ0TGluZSwgc2NyaXB0LnN0YXJ0Q29sdW1uLCBzY3JpcHQuZW5kTGlu
ZSwgc2NyaXB0LmVuZENvbHVtbiwgaXNDb250ZW50U2NyaXB0LCBzb3VyY2VNYXBVUkxQYXJhbSwg
aGFzU291cmNlVVJMUGFyYW0pOworICAgIFN0cmluZyBzY3JpcHRJRFN0ciA9IFN0cmluZzo6bnVt
YmVyKHNvdXJjZUlEKTsKKyAgICBtX2Zyb250ZW5kLT5zY3JpcHRQYXJzZWQoc2NyaXB0SURTdHIs
IHNjcmlwdFVSTCwgc2NyaXB0LnN0YXJ0TGluZSwgc2NyaXB0LnN0YXJ0Q29sdW1uLCBzY3JpcHQu
ZW5kTGluZSwgc2NyaXB0LmVuZENvbHVtbiwgaXNDb250ZW50U2NyaXB0LCBzb3VyY2VNYXBVUkxQ
YXJhbSwgaGFzU291cmNlVVJMUGFyYW0pOwogCi0gICAgbV9zY3JpcHRzLnNldChzY3JpcHRJRCwg
c2NyaXB0KTsKKyAgICBtX3NjcmlwdHMuc2V0KHNvdXJjZUlELCBzY3JpcHQpOwogCiAgICAgaWYg
KHNjcmlwdFVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTcwOSw3ICs3MTcsNyBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdn
ZXI6OkxvY2F0aW9uPiBsb2NhdGlvbiA9IHJlc29sdmVCcmVha3BvaW50KGl0LT5rZXksIHNjcmlw
dElELCBicmVha3BvaW50KTsKKyAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
TG9jYXRpb24+IGxvY2F0aW9uID0gcmVzb2x2ZUJyZWFrcG9pbnQoaXQtPmtleSwgc291cmNlSUQs
IGJyZWFrcG9pbnQpOwogICAgICAgICBpZiAobG9jYXRpb24pCiAgICAgICAgICAgICBtX2Zyb250
ZW5kLT5icmVha3BvaW50UmVzb2x2ZWQoaXQtPmtleSwgbG9jYXRpb24pOwogICAgIH0KQEAgLTcz
OCw5ICs3NDYsOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKEpTCiAg
ICAgbV9mcm9udGVuZC0+cGF1c2VkKGN1cnJlbnRDYWxsRnJhbWVzKCksIG1fYnJlYWtSZWFzb24s
IG1fYnJlYWtBdXhEYXRhKTsKICAgICBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCA9IGZhbHNl
OwogCi0gICAgaWYgKCFtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRC5pc0VtcHR5KCkp
IHsKKyAgICBpZiAobV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQgIT0gbm9CcmVha3Bv
aW50SUQpIHsKICAgICAgICAgc2NyaXB0RGVidWdTZXJ2ZXIoKS5yZW1vdmVCcmVha3BvaW50KG1f
Y29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElEKTsKLSAgICAgICAgbV9jb250aW51ZVRvTG9j
YXRpb25CcmVha3BvaW50SUQgPSAiIjsKKyAgICAgICAgbV9jb250aW51ZVRvTG9jYXRpb25CcmVh
a3BvaW50SUQgPSBub0JyZWFrcG9pbnRJRDsKICAgICB9CiAgICAgaWYgKG1fbGlzdGVuZXIpCiAg
ICAgICAgIG1fbGlzdGVuZXItPmRpZFBhdXNlKCk7CkBAIC03NjcsNyArNzc1LDcgQEAgdm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVhcigpCiAgICAgbV9jdXJyZW50Q2FsbFN0YWNrID0g
U2NyaXB0VmFsdWUoKTsKICAgICBtX3NjcmlwdHMuY2xlYXIoKTsKICAgICBtX2JyZWFrcG9pbnRJ
ZGVudGlmaWVyVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHMuY2xlYXIoKTsKLSAgICBtX2NvbnRp
bnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRCA9IFN0cmluZygpOworICAgIG1fY29udGludWVUb0xv
Y2F0aW9uQnJlYWtwb2ludElEID0gbm9CcmVha3BvaW50SUQ7CiAgICAgY2xlYXJCcmVha0RldGFp
bHMoKTsKICAgICBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCA9IGZhbHNlOwogICAgIEVycm9y
U3RyaW5nIGVycm9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oCShyZXZpc2lvbiAxNTg4OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMxLDYgKzMxLDcgQEAK
ICNkZWZpbmUgSW5zcGVjdG9yRGVidWdnZXJBZ2VudF9oCiAKICNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikgJiYgRU5BQkxFKElOU1BFQ1RPUikKKyNpbmNsdWRlICJCcmVha3BvaW50SUQu
aCIKICNpbmNsdWRlICJDb25zb2xlQVBJVHlwZXMuaCIKICNpbmNsdWRlICJDb25zb2xlVHlwZXMu
aCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgpAQCAtMzksNiArNDAsNyBAQAogI2luY2x1
ZGUgIlNjcmlwdEJyZWFrcG9pbnQuaCIKICNpbmNsdWRlICJTY3JpcHREZWJ1Z0xpc3RlbmVyLmgi
CiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKKyNpbmNsdWRlICJTb3VyY2VJRC5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgpAQCAtMTQ5LDIwICsxNTEsMjAgQEAgcHJpdmF0ZToKIAogICAgIFBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZy
YW1lPj4gY3VycmVudENhbGxGcmFtZXMoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNv
dXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElELCBjb25zdCBTY3JpcHQmKSBPVkVSUklERSBGSU5B
TDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3VyY2UoU291cmNlSUQsIGNvbnN0IFNjcmlw
dCYpIE9WRVJSSURFIEZJTkFMOwogICAgIHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNl
KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGlu
dCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBPVkVSUklERSBGSU5BTDsK
IAogICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnNJbXBsKEVycm9yU3RyaW5nKiwgaW50KTsK
IAotICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gcmVzb2x2
ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBzY3JpcHRJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYpOworICAgIFBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gcmVzb2x2ZUJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBicmVha3BvaW50SWRlbnRpZmllciwgU291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWFr
cG9pbnQmKTsKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgYm9vbCBhc3NlcnRQYXVzZWQoRXJyb3JT
dHJpbmcqKTsKICAgICB2b2lkIGNsZWFyQnJlYWtEZXRhaWxzKCk7CiAKICAgICBTdHJpbmcgc291
cmNlTWFwVVJMRm9yU2NyaXB0KGNvbnN0IFNjcmlwdCYpOwogCi0gICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgU2NyaXB0PiBTY3JpcHRzTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFZlY3RvcjxTdHJpbmc+PiBCcmVha3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3Bv
aW50SURzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTb3VyY2VJRCwgU2NyaXB0PiBTY3JpcHRz
TWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxCcmVha3BvaW50SUQ+PiBC
cmVha3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzTWFwOwogICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+PiBCcmVha3BvaW50
SWRlbnRpZmllclRvQnJlYWtwb2ludE1hcDsKIAogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciog
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CkBAIC0xNzIsNyArMTc0LDcgQEAgcHJpdmF0ZToKICAg
ICBTY3JpcHRzTWFwIG1fc2NyaXB0czsKICAgICBCcmVha3BvaW50SWRlbnRpZmllclRvRGVidWdT
ZXJ2ZXJCcmVha3BvaW50SURzTWFwIG1fYnJlYWtwb2ludElkZW50aWZpZXJUb0RlYnVnU2VydmVy
QnJlYWtwb2ludElEczsKICAgICBCcmVha3BvaW50SWRlbnRpZmllclRvQnJlYWtwb2ludE1hcCBt
X2phdmFTY3JpcHRCcmVha3BvaW50czsKLSAgICBTdHJpbmcgbV9jb250aW51ZVRvTG9jYXRpb25C
cmVha3BvaW50SUQ7CisgICAgQnJlYWtwb2ludElEIG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtw
b2ludElEOwogICAgIEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6UmVhc29uOjpFbnVtIG1f
YnJlYWtSZWFzb247CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9icmVha0F1eERhdGE7
CiAgICAgYm9vbCBtX2VuYWJsZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2Ny
aXB0RGVidWdMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgJKHJldmlzaW9uIDE1ODg5NikKKysrIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMzLDYgKzMzLDcgQEAKICNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKIAogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCisj
aW5jbHVkZSAiU291cmNlSUQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC02NSw3ICs2Niw3IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgflNjcmlwdERlYnVnTGlzdGVuZXIoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBk
aWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNjcmlwdElELCBjb25zdCBTY3JpcHQmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKFNvdXJjZUlELCBjb25zdCBTY3JpcHQm
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwg
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1
c2UoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYgY2FsbEZyYW1lcywgY29uc3Qg
U2NyaXB0VmFsdWUmIGV4Y2VwdGlvbikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb250aW51
ZSgpID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1ODg5NikKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisy
MDEzLTExLTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBNb3Zl
IGJyZWFrcG9pbnQgKGFuZCBleGNlcHRpb24gYnJlYWspIGZ1bmN0aW9uYWxpdHkgaW50byBKU0M6
OkRlYnVnZ2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTIxNzk2LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5oOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
U2NyaXB0RGVidWdnZXIubW06CisgICAgICAgIChXZWJTY3JpcHREZWJ1Z2dlcjo6V2ViU2NyaXB0
RGVidWdnZXIpOgorICAgICAgICAoV2ViU2NyaXB0RGVidWdnZXI6OmhhbmRsZVBhdXNlKToKKwog
MjAxMy0xMS0wNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBhIFBMQVRGT1JNKElPUykgZnJvbSBXZWJLaXQgUHJpdmF0ZSBIZWFkZXIKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmgJKHJl
dmlzaW9uIDE1ODg5NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVi
dWdnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTMgKzU2LDggQEAgcHVibGljOgogCiBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlNvdXJjZVByb3ZpZGVyKiwgaW50IGVycm9yTGluZSwgY29uc3QgV1RGOjpTdHJpbmcmIGVycm9y
TXNnKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsbEV2ZW50KEpTQzo6Q2FsbEZyYW1l
KikgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGF0U3RhdGVtZW50KEpTQzo6Q2FsbEZy
YW1lKikgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHJldHVybkV2ZW50KEpTQzo6Q2Fs
bEZyYW1lKikgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihKU0M6OkNh
bGxGcmFtZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgYm9vbCBoYXNIYW5kbGVyKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKEpTQzo6Q2FsbEZy
YW1lKikgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKEpT
Qzo6Q2FsbEZyYW1lKikgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlYWNoQnJl
YWtwb2ludChKU0M6OkNhbGxGcmFtZSopIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVQYXVzZShKU0M6OkRlYnVnZ2VyOjpSZWFzb25Gb3JQYXVzZSwgSlNDOjpKU0dsb2JhbE9i
amVjdCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhKU0M6
OkpTR2xvYmFsT2JqZWN0KikgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgYm9vbCBt
X2NhbGxpbmdEZWxlZ2F0ZTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJT
Y3JpcHREZWJ1Z2dlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlNjcmlwdERlYnVnZ2VyLm1tCShyZXZpc2lvbiAxNTg4OTYpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NSw4
ICs3NSw5IEBAIFdlYlNjcmlwdERlYnVnZ2VyOjpXZWJTY3JpcHREZWJ1Z2dlcihKU0cKICAgICA6
IG1fY2FsbGluZ0RlbGVnYXRlKGZhbHNlKQogICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBnbG9iYWxPYmplY3QpCiB7CisgICAgc2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZShQYXVzZU9uQWxsRXhjZXB0aW9ucyk7CisgICAgZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CiAg
ICAgYXR0YWNoKGdsb2JhbE9iamVjdCk7Ci0gICAgc2V0TmVlZHNFeGNlcHRpb25DYWxsYmFja3Mo
dHJ1ZSk7CiB9CiAKIC8vIGNhbGxiYWNrcyAtIHJlbGF5IHRvIGRlbGVnYXRlCkBAIC0xMTcsMjQg
KzExOCwyOSBAQCB2b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjpzb3VyY2VQYXJzZWQoRXhlCiAgICAg
bV9jYWxsaW5nRGVsZWdhdGUgPSBmYWxzZTsKIH0KIAotdm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6
ZXhjZXB0aW9uKEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTQzo6SlNWYWx1ZSBleGNlcHRp
b25WYWx1ZSwgYm9vbCBoYXNIYW5kbGVyKQordm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6aGFuZGxl
UGF1c2UoRGVidWdnZXI6OlJlYXNvbkZvclBhdXNlIHJlYXNvbiwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKIHsKICAgICBpZiAobV9jYWxsaW5nRGVsZWdhdGUpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIGlmIChyZWFzb24gIT0gRGVidWdnZXI6OlBhdXNlZEZvckV4Y2VwdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgbV9jYWxsaW5nRGVsZWdhdGUgPSB0cnVlOwogCi0gICAgV2Vi
RnJhbWUgKndlYkZyYW1lID0gdG9XZWJGcmFtZShjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKSk7CisgICAgV2ViRnJhbWUgKndlYkZyYW1lID0gdG9XZWJGcmFtZShnbG9iYWxPYmplY3Qp
OwogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbd2ViRnJhbWUgd2ViVmlld107Ci0gICAgUmVmUHRy
PERlYnVnZ2VyQ2FsbEZyYW1lPiBkZWJ1Z2dlckNhbGxGcmFtZSA9IERlYnVnZ2VyQ2FsbEZyYW1l
OjpjcmVhdGUoY2FsbEZyYW1lKTsKKyAgICBEZWJ1Z2dlckNhbGxGcmFtZSogZGVidWdnZXJDYWxs
RnJhbWUgPSBjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUoKTsKKyAgICBKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlID0gY3VycmVudEV4Y2VwdGlvbigpOwogICAgIFN0cmluZyBmdW5jdGlvbk5hbWUgPSBk
ZWJ1Z2dlckNhbGxGcmFtZS0+ZnVuY3Rpb25OYW1lKCk7CiAgICAgUmV0YWluUHRyPFdlYlNjcmlw
dENhbGxGcmFtZT4gd2ViQ2FsbEZyYW1lID0gYWRvcHROUyhbW1dlYlNjcmlwdENhbGxGcmFtZSBh
bGxvY10gX2luaXRXaXRoR2xvYmFsT2JqZWN0OmNvcmUod2ViRnJhbWUpLT5zY3JpcHQoKS53aW5k
b3dTY3JpcHRPYmplY3QoKSBmdW5jdGlvbk5hbWU6ZnVuY3Rpb25OYW1lIGV4Y2VwdGlvblZhbHVl
OmV4Y2VwdGlvblZhbHVlXSk7CiAKICAgICBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50
YXRpb25DYWNoZSogY2FjaGUgPSBXZWJWaWV3R2V0U2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVu
dGF0aW9ucyh3ZWJWaWV3KTsKICAgICBpZiAoY2FjaGUtPmV4Y2VwdGlvbldhc1JhaXNlZEZ1bmMp
IHsKLSAgICAgICAgaWYgKGNhY2hlLT5leGNlcHRpb25XYXNSYWlzZWRFeHBlY3RzSGFzSGFuZGxl
ckZsYWcpCisgICAgICAgIGlmIChjYWNoZS0+ZXhjZXB0aW9uV2FzUmFpc2VkRXhwZWN0c0hhc0hh
bmRsZXJGbGFnKSB7CisgICAgICAgICAgICBib29sIGhhc0hhbmRsZXIgPSBoYXNIYW5kbGVyRm9y
RXhjZXB0aW9uQ2FsbGJhY2soKTsKICAgICAgICAgICAgIENhbGxTY3JpcHREZWJ1Z0RlbGVnYXRl
KGNhY2hlLT5leGNlcHRpb25XYXNSYWlzZWRGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmll
dzpleGNlcHRpb25XYXNSYWlzZWQ6aGFzSGFuZGxlcjpzb3VyY2VJZDpsaW5lOmZvcldlYkZyYW1l
OiksIHdlYkNhbGxGcmFtZS5nZXQoKSwgaGFzSGFuZGxlciwgZGVidWdnZXJDYWxsRnJhbWUtPnNv
dXJjZUlEKCksIGRlYnVnZ2VyQ2FsbEZyYW1lLT5saW5lKCksIHdlYkZyYW1lKTsKLSAgICAgICAg
ZWxzZQorICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIENhbGxTY3JpcHREZWJ1Z0RlbGVnYXRl
KGNhY2hlLT5leGNlcHRpb25XYXNSYWlzZWRGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmll
dzpleGNlcHRpb25XYXNSYWlzZWQ6c291cmNlSWQ6bGluZTpmb3JXZWJGcmFtZTopLCB3ZWJDYWxs
RnJhbWUuZ2V0KCksIGRlYnVnZ2VyQ2FsbEZyYW1lLT5zb3VyY2VJRCgpLCBkZWJ1Z2dlckNhbGxG
cmFtZS0+bGluZSgpLCB3ZWJGcmFtZSk7CiAgICAgfQogCg==
</data>
<flag name="review"
          id="239316"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>