<?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>28799</bug_id>
          
          <creation_ts>2009-08-27 23:51:25 -0700</creation_ts>
          <short_desc>REGRESSION(r47686-r47783): Debugger no longer works on reload</short_desc>
          <delta_ts>2010-03-09 11:27:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://testsuites.opera.com/JSON/correctness/004.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>aroben</cc>
    
    <cc>barraclough</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>143313</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-27 23:51:25 -0700</bug_when>
    <thetext>The debugger no longer hits break points when a page is reloaded.

Steps to repro:
1. go to http://testsuites.opera.com/JSON/correctness/004.html
2. enable the debugger
3. set a breakpoint somewhere in the code of 004.js
4. reload the page

Result:
The existance of the breakpoints has no effect

Expected:
I expect us to have reached the breakpoint, the scope chain should be populated, etc

Obvious inspector patches that could have caused this:
r47717, r47724 -- seems to involve the debugger, handling displaying of scopes, etc
r47703 -- seems very likely to be at fault, seems like a massive change to the debugger
r47696, r47695 -- formatting issues, seem unlikely to be at fault

There are changes in JSC in this range as well, but they seem unlikely to have caused this kind of bustage, so i believe this is likely to be due to r47703</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143335</commentid>
    <comment_count>1</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-28 03:18:45 -0700</bug_when>
    <thetext>This repeats for me on Safari 4.0.3 (5531.9). Why REGRESSION(r47686-r47783)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143338</commentid>
    <comment_count>2</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-28 05:45:19 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; This repeats for me on Safari 4.0.3 (5531.9). Why REGRESSION(r47686-r47783)?

A simpler scenario does not work as of r47738 though (Oliver, you were reviewing it).

1. Open some page
2. Set a breakpoint in code that should execute in some event handler
3. Make execution hit the breakpoint (via clicking a button or something)

Expected: call frame and source line are highlighted
Actual: nothing is highlighted. Continue the execution, open inspector on
inspector, observe javascript error.


I&apos;ve been reporting this as a follow up to https://bugs.webkit.org/show_bug.cgi?id=28691. The problem is that as of this change, when clicking a button, debugger stops on a breakpoint before the inline script snippet is reported as parsed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143398</commentid>
    <comment_count>3</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-28 10:07:14 -0700</bug_when>
    <thetext>My bug explicitly did not state that source code was highlighted -- i am aware of the existing bug where source is not displayed -- the issue is that now you don&apos;t get a source list (in the past you did -- some sources were even available *boggle*), and you do not hit the breakpoint; JS runs to completion, the engine is never paused, and the scope information is never displayed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143406</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-28 10:57:17 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; My bug explicitly did not state that source code was highlighted -- i am aware
&gt; of the existing bug where source is not displayed -- the issue is that now you
&gt; don&apos;t get a source list (in the past you did -- some sources were even
&gt; available *boggle*), and you do not hit the breakpoint; JS runs to completion,
&gt; the engine is never paused, and the scope information is never displayed.

I don&apos;t understand something. I am seeing the same on Safari 4.0.3. So I think it regressed earlier than 47686. Is that right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143408</commentid>
    <comment_count>5</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-28 11:04:38 -0700</bug_when>
    <thetext>Ah ha, there had been a progression from 4.0.3 -&gt; r47686 which has since regressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143440</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-28 13:20:07 -0700</bug_when>
    <thetext>I am seeing no debugger object available in the Parser::parse. I think the problem is that in r47738 that I am blaming exec-&gt;dynamicGlobalObject()-&gt;debugger() was replaced with exec-&gt;lexicalGlobalObject()-&gt;debugger(). Not sure what it is, could this be a problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143448</commentid>
    <comment_count>7</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-28 13:45:03 -0700</bug_when>
    <thetext>It could well be. :-/

Previously the code was using the DGO to get the debugger when parsing, but the LGO during bytecode generation.  Since I was unifying the two stages to occur at the same time, this appeared to be incorrect.

I discussed this change with ggaren, and we decided to unify on using the LGO, which sounded more correct (our logic being that you care whether *this* frame is being debugged, not a caller frame).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143452</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-08-28 13:56:21 -0700</bug_when>
    <thetext>I think we need to investigate why exec-&gt;lexicalGlobalObject()-&gt;debugger() is null even though the debugger is attached to the page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143732</commentid>
    <comment_count>9</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-31 14:52:33 -0700</bug_when>
    <thetext>A big problem is that the debugger is broken prior to r44738 -- r47703 goes form a completely functional debugger (more so than i recall) to completely broken -- crashes at 
#0  0x00000001008ab224 in JSC::JSCell::isObject (this=0x0) at JSCell.h:140
#1  0x000000010088aac1 in JSC::asObject (value={m_ptr = 0x0}) at JSObject.h:255
#2  0x0000000100802425 in JSC::asFunction (value={m_ptr = 0x0}) at JSFunction.h:124
#3  0x000000010084cc7a in JSC::DebuggerCallFrame::calculatedFunctionName (this=0x11abe1508) at /Volumes/BigData/git/WebKit/OpenSource/JavaScriptCore/debugger/DebuggerCallFrame.cpp:55
#4  0x00000001011bb42f in WebCore::JavaScriptCallFrame::functionName (this=0x11abe1500) at /Volumes/BigData/git/WebKit/OpenSource/WebCore/inspector/JavaScriptCallFrame.cpp:78
#5  0x00000001012bf67c in WebCore::jsJavaScriptCallFrameFunctionName (exec=0x119115048, slot=@0x7fff5fbfadf0) at /Volumes/BigData/git/WebKit/OpenSource/WebKitBuild/Debug/DerivedSources/WebCore/JSJavaScriptCallFrame.cpp:153
#6  0x00000001011d146a in JSC::PropertySlot::getValue (this=0x7fff5fbfadf0, exec=0x119115048, propertyName=@0x1065a5bc0) at PropertySlot.h:62
#7  0x00000001012e144a in WebCore::JSQuarantinedObjectWrapper::getOwnPropertySlot (this=0x112be0900, exec=0x112c24260, identifier=@0x1065a5bc0, slot=@0x7fff5fbfaf30) at /Volumes/BigData/git/WebKit/OpenSource/WebCore/bindings/js/JSQuarantinedObjectWrapper.cpp:113
#8  0x000000010080c10b in JSC::JSCell::fastGetOwnPropertySlot (this=0x112be0900, exec=0x112c24260, propertyName=@0x1065a5bc0, slot=@0x7fff5fbfaf30) at JSObject.h:355
#9  0x00000001008344a8 in JSC::JSValue::get (this=0x7fff5fbfaf90, exec=0x112c24260, propertyName=@0x1065a5bc0, slot=@0x7fff5fbfaf30) at JSObject.h:580
#10 0x0000000100889ce7 in cti_op_get_by_id (args=0x7fff5fbfafd0) at /Volumes/BigData/git/WebKit/OpenSource/JavaScriptCore/jit/JITStubs.cpp:1197
#11 0x0000000100880d8f in WTF::doubleHash (key=Could not find the frame base for &quot;WTF::doubleHash(unsigned int)&quot;.
) at HashTable.h:437
#12 0x0000000100866670 in JSC::JITCode::execute (this=0x11abe47e8, registerFile=0x106522c60, callFrame=0x112c24168, globalData=0x10595f400, exception=0x105960690) at JITCode.h:79
#13 0x0000000100853e42 in JSC::Interpreter::execute (this=0x106522c50, functionExecutable=0x11abe47d0, callFrame=0x1065e9da8, function=0x1124871c0, thisObj=0x111cd3240, args=@0x7fff5fbfb360, scopeChain=0x11abe3c20, exception=0x105960690) at /Volumes/BigData/git/WebKit/OpenSource/JavaScriptCore/interpreter/Interpreter.cpp:721
#14 0x00000001007b8cca in JSC::JSFunction::call (this=0x1124871c0, exec=0x1065e9da8, thisValue={m_ptr = 0x111cd3240}, args=@0x7fff5fbfb360) at JSFunction.cpp:120
#15 0x00000001007b8d7e in JSC::call (exec=0x1065e9da8, functionObject={m_ptr = 0x1124871c0}, callType=JSC::CallTypeJS, callData=@0x7fff5fbfb370, thisValue={m_ptr = 0x111cd3240}, args=@0x7fff5fbfb360) at CallData.cpp:39
#16 0x000000010155f9cd in WebCore::ScheduledAction::executeFunctionInContext (this=0x11abe3c90, globalObject=0x111cd32c0, thisValue={m_ptr = 0x111cd3240}) at /Volumes/BigData/git/WebKit/OpenSource/WebCore/bindings/js/ScheduledAction.cpp:105
#17 0x000000010155fcdf in WebCore::ScheduledAction::execute (this=0x11abe3c90, document=0x10592d600) at /Volumes/BigData/git/WebKit/OpenSource/WebCore/bindings/js/ScheduledAction.cpp:125
#18 0x000000010155fd9c in WebCore::ScheduledAction::execute (this=0x11abe3c90, context=0x10592d658) at /Volumes/BigData/git/WebKit/OpenSource/WebCore/bindings/js/ScheduledAction.cpp:76
#19 0x0000000100fefd56 in WebCore::DOMTimer::fired (this=0x11abe3cc0) at /Volumes/BigData/git/WebKit/OpenSource/WebCore/page/DOMTimer.cpp:124
#20 0x0000000101699206 in WebCore::ThreadTimers::fireTimers (this=0x104d34f10, fireTime=1251515228.074461, firingTimers=@0x7fff5fbfb540) at /Volumes/BigData/git/WebKit/OpenSource/WebCore/platform/ThreadTimers.cpp:111
#21 0x00000001016993e8 in WebCore::ThreadTimers::sharedTimerFiredInternal (this=0x104d34f10) at /Volumes/BigData/git/WebKit/OpenSource/WebCore/platform/ThreadTimers.cpp:141
#22 0x000000010169942d in WebCore::ThreadTimers::sharedTimerFired () at /Volumes/BigData/git/WebKit/OpenSource/WebCore/platform/ThreadTimers.cpp:122
#23 0x0000000101591168 in WebCore::timerFired () at /Volumes/BigData/git/WebKit/OpenSource/WebCore/platform/mac/SharedTimerMac.mm:86
#24 0x00007fff8482ea78 in __CFRunLoopRun ()
#25 0x00007fff8482d03f in CFRunLoopRunSpecific ()
#26 0x00007fff8383fc4e in RunCurrentEventLoopInMode ()
#27 0x00007fff8383fa53 in ReceiveNextEventCommon ()
#28 0x00007fff8383f90c in BlockUntilNextEventMatchingListInMode ()
#29 0x00007fff879f8570 in _DPSNextEvent ()
#30 0x00007fff879f7ed9 in -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] ()
#31 0x000000010000bcf0 in ?? ()
#32 0x0000000101034cd8 in WebCore::EventLoop::cycle (this=0x7fff5fbfc7de) at /Volumes/BigData/git/WebKit/OpenSource/WebCore/platform/mac/EventLoopMac.mm:35
#33 0x00000001011bbf0b in WebCore::JavaScriptDebugServer::pauseIfNeeded (this=0x104d35bd0, page=0x106152530) at /Volumes/BigData/git/WebKit/OpenSource/WebCore/inspector/JavaScriptDebugServer.cpp:440
#34 0x00000001011bc6bf in WebCore::JavaScriptDebugServer::atStatement (this=0x104d35bd0, debuggerCallFrame=@0x7fff5fbfc880, sourceID=4743601408, lineNumber=7) at /Volumes/BigData/git/WebKit/OpenSource/WebCore/inspector/JavaScriptDebugServer.cpp:468
#35 0x00000001008518f5 in JSC::Interpreter::debug (this=0x106522c50, callFrame=0x112c240a8, debugHookID=JSC::WillExecuteStatement, firstLine=7, lastLine=9) at /Volumes/BigData/git/WebKit/OpenSource/JavaScriptCore/interpreter/Interpreter.cpp:911
#36 0x0000000100881973 in cti_op_debug (args=0x7fff5fbfc930) at /Volumes/BigData/git/WebKit/OpenSource/JavaScriptCore/jit/JITStubs.cpp:3010
#37 0x0000000100880d8f in WTF::doubleHash (key=Could not find the frame base for &quot;WTF::doubleHash(unsigned int)&quot;.
) at HashTable.h:437
#38 0x0000000100866670 in JSC::JITCode::execute (this=0x7fff5fbfcb68, registerFile=0x106522c60, callFrame=0x112c24048, globalData=0x10595f400, exception=0x7fff5fbfcc10) at JITCode.h:79
#39 0x000000010085422f in JSC::Interpreter::execute (this=0x106522c50, program=0x7fff5fbfcb50, callFrame=0x119115048, scopeChain=0x119115370, thisObj=0x111cd0000, exception=0x7fff5fbfcc10) at /Volumes/BigData/git/WebKit/OpenSource/JavaScriptCore/interpreter/Interpreter.cpp:655
#40 0x00000001007e981a in JSC::evaluate (exec=0x119115048, scopeChain=@0x119115000, source=@0x7fff5fbfd238, thisValue={m_ptr = 0x111cd0000}) at Completion.cpp:64
#41 0x00000001015636d7 in WebCore::ScriptController::evaluate (this=0x1050524a8, sourceCode=@0x7fff5fbfd230) at /Volumes/BigData/git/WebKit/OpenSource/WebCore/bindings/js/ScriptController.cpp:114
#42 0x0000000101079598 in WebCore::FrameLoader::executeScript (this=0x105052050, sourceCode=@0x7fff5fbfd230) at /Volumes/BigData/git/WebKit/OpenSource/WebCore/loader/FrameLoader.cpp:769
....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143972</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-09-01 12:08:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/7187624&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144508</commentid>
    <comment_count>11</comment_count>
      <attachid>38987</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-09-03 07:13:49 -0700</bug_when>
    <thetext>Created attachment 38987
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144533</commentid>
    <comment_count>12</comment_count>
      <attachid>38987</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-09-03 09:20:56 -0700</bug_when>
    <thetext>Comment on attachment 38987
patch


&gt; -            else if (!foundLocalScope &amp;&amp; !localScope)
&gt; +            else if (!foundLocalScope)

What does this fix/change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144535</commentid>
    <comment_count>13</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-09-03 09:46:56 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 38987 [details])
&gt; 
&gt; &gt; -            else if (!foundLocalScope &amp;&amp; !localScope)
&gt; &gt; +            else if (!foundLocalScope)
&gt; 
&gt; What does this fix/change?

localScope is not defined here at all - it belongs to the UI part of this functionality. Fix actually makes refresh work fine. Function name fix was not enough...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144536</commentid>
    <comment_count>14</comment_count>
      <attachid>38987</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-09-03 09:50:01 -0700</bug_when>
    <thetext>Comment on attachment 38987
patch

r=me

yay \o/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144538</commentid>
    <comment_count>15</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-09-03 09:55:16 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/inspector/front-end/InjectedScript.js
Committed r48024</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144540</commentid>
    <comment_count>16</comment_count>
      <attachid>38987</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-03 09:59:52 -0700</bug_when>
    <thetext>Comment on attachment 38987
patch

Rejecting patch 38987 from commit-queue.  This patch will require manual commit.

Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;]&quot;  exit_code: 1  cwd: None</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144618</commentid>
    <comment_count>17</comment_count>
      <attachid>38987</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-03 15:58:18 -0700</bug_when>
    <thetext>Comment on attachment 38987
patch

commit-queue race condition.  ChangeLog was out of date by the time the queue went to land it. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144619</commentid>
    <comment_count>18</comment_count>
      <attachid>38987</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-03 15:58:50 -0700</bug_when>
    <thetext>Comment on attachment 38987
patch

Actually, nevermind.  svn-apply could have trouble with this ChangeLog, so I would prefer someone land this manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144620</commentid>
    <comment_count>19</comment_count>
      <attachid>38987</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-03 15:59:32 -0700</bug_when>
    <thetext>Comment on attachment 38987
patch

Looks like this was already landed anyway. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173960</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-12-21 06:58:37 -0800</bug_when>
    <thetext>The bug still reproduces for me in ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175430</commentid>
    <comment_count>21</comment_count>
      <attachid>38987</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-28 22:59:25 -0800</bug_when>
    <thetext>Comment on attachment 38987
patch

Obsoleting this patch since it appears it was already landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192074</commentid>
    <comment_count>22</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-02-19 14:58:52 -0800</bug_when>
    <thetext>We should look at fixing this soonish.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192172</commentid>
    <comment_count>23</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-20 07:30:44 -0800</bug_when>
    <thetext>Getting back to a general issue where breakpoints are not hit in case they happen on load and/or in DOM0 handlers, I think the reason is that interaction between inspector controller and inspector front-end is now asynchronous.

Old control flow:
- Script is being parsed
- It is synchronously being pushed to the front-end
- All breakpoints are being synchronously set on source
- Execution continues, breakpoints are being hit

New control flow:
- Script is being parsed
- It is being asynchronously pushed to the front-end
- It continues execution, no breakpoints were set to hit
- Front-end sets breakpoints

There are two ways of fixing this:
1) Bring back synchronous operation
2) Store breakpoint in the inspector controller (InspectorBackend) and set them synchronously upon source parse.

I like 2 more because it reflects the remote debugging paradigm better. I am starting to work on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192261</commentid>
    <comment_count>24</comment_count>
      <attachid>49150</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-21 06:50:06 -0800</bug_when>
    <thetext>Created attachment 49150
[PATCH] Proposed change.

Sorry about the big change, but it mostly contains mechanical changes described in the change log. It is just that I needed to persist breakpoints in InspectorController and decided to reuse JavaScriptDebugServer&apos;s BreakpointInfo. Then I saw that we have too much unnecessary complexity around if(USE_JSC) vs JavaScriptDebugServer in InspectorController/Backend/Frontend and moved server content to bindings.

This change does not fix the bug on its own. It makes debugger stop on breakpoints while loading page, but it does not show the source. Reason is that resource loading is not yet finished and it is still &apos;Other&apos; viewer that has no source frame. I will follow up with another change within the same bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192262</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-21 06:51:25 -0800</bug_when>
    <thetext>Attachment 49150 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/inspector/InspectorController.cpp:101:  &quot;ScriptDebugServer.h&quot; already included at WebCore/inspector/InspectorController.cpp:75  [build/include] [4]
Skipping input &apos;WebCore/inspector/JavaScriptDebugServer.cpp&apos;: Can&apos;t open for reading
Skipping input &apos;WebCore/inspector/JavaScriptDebugServer.h&apos;: Can&apos;t open for reading
Skipping input &apos;WebCore/inspector/JavaScriptDebugListener.h&apos;: Can&apos;t open for reading
WebCore/bindings/js/ScriptDebugServer.cpp:48:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 38 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>192263</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-21 06:59:30 -0800</bug_when>
    <thetext>Attachment 49150 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/293056</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192273</commentid>
    <comment_count>27</comment_count>
      <attachid>49150</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-02-21 11:24:48 -0800</bug_when>
    <thetext>Comment on attachment 49150
[PATCH] Proposed change.

Some general comments:

1) It would be nice if common parts of ScriptDebugger.h were shared. This goes for other bindings/{js, v8} Script* files too. We should use an approach like the other platform files. Share a common header with common implementation and have platform specific implementations. That would be more maintainable than complete file forks.

2) JavaScriptDebugServer should have no dependancy on Inspector. So InspectorBreakpoint should be ScriptBreakpoint.

3) Like we talked about on IRC, I would like to see the Script* files moved to inspector/, and adopt the platform approch I mentioned in point 1.

This patch looks fine as long as you rename InspectorBreakpoint before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192289</commentid>
    <comment_count>28</comment_count>
      <attachid>49164</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-21 12:59:57 -0800</bug_when>
    <thetext>Created attachment 49164
[PATCH] Patch I&apos;m going to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192367</commentid>
    <comment_count>29</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-22 00:00:14 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	R	WebCore/inspector/JavaScriptDebugListener.h =&gt; WebCore/inspector/ScriptBreakpoint.h
	D	WebCore/inspector/JavaScriptDebugServer.cpp
	D	WebCore/inspector/JavaScriptDebugServer.h
	M	WebCore/ChangeLog
	M	WebCore/GNUmakefile.am
	M	WebCore/WebCore.base.exp
	M	WebCore/WebCore.gypi
	M	WebCore/WebCore.order
	M	WebCore/WebCore.pro
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	WebCore/bindings/js/JSInjectedScriptHostCustom.cpp
	M	WebCore/bindings/js/ScriptDebugServer.cpp
	M	WebCore/bindings/js/ScriptDebugServer.h
	M	WebCore/bindings/v8/ScriptDebugServer.cpp
	M	WebCore/bindings/v8/ScriptDebugServer.h
	M	WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp
	M	WebCore/inspector/InjectedScriptHost.cpp
	M	WebCore/inspector/InjectedScriptHost.h
	M	WebCore/inspector/InjectedScriptHost.idl
	M	WebCore/inspector/InspectorBackend.cpp
	M	WebCore/inspector/InspectorBackend.h
	M	WebCore/inspector/InspectorBackend.idl
	M	WebCore/inspector/InspectorController.cpp
	M	WebCore/inspector/InspectorController.h
	M	WebCore/inspector/InspectorFrontend.cpp
	M	WebCore/inspector/InspectorFrontend.h
	M	WebCore/inspector/front-end/Breakpoint.js
	M	WebCore/inspector/front-end/BreakpointsSidebarPane.js
	M	WebCore/inspector/front-end/InspectorBackendStub.js
	M	WebCore/inspector/front-end/ScriptsPanel.js
	M	WebCore/inspector/front-end/inspector.js
	M	WebCore/page/Page.cpp
	M	WebCore/platform/android/TemporaryLinkStubs.cpp
	M	WebKit/chromium/ChangeLog
	M	WebKit/chromium/src/js/DebuggerAgent.js
	M	WebKit/chromium/src/js/InspectorControllerImpl.js
Committed r55071</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192368</commentid>
    <comment_count>30</comment_count>
      <attachid>49164</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-22 00:01:09 -0800</bug_when>
    <thetext>Comment on attachment 49164
[PATCH] Patch I&apos;m going to land.

Backend part landed, front-end to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192398</commentid>
    <comment_count>31</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-22 03:18:28 -0800</bug_when>
    <thetext>Actually, it is now in the state it used to be in 4.0.4, so should not qualify as regression. Furthermore, it works fine on cached resources (will stop on breakpoint and show the source), but fails to work when scripts is parsed and stopped prior to the resource finished event.

I was thinking of a change that prevents scripts from being bound to resources prior to the resource&apos;s finished event and it works fine for secondary resources (external scripts). For main resource it would show multiple chunks of script tags first, and, once resource is loaded, it should replace chunks with the resource itself. Besides merging script entries upon resource finished event, there is a problem with chunks having 1-based lines numbering. It all breaks breakpoints.

I am thinking of closing this bug and opening another one that is not a regression that will address the problem above. It might need some non-trivial front-end work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192402</commentid>
    <comment_count>32</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-22 03:19:38 -0800</bug_when>
    <thetext>New bug filed: https://bugs.webkit.org/show_bug.cgi?id=35232</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197690</commentid>
    <comment_count>33</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-09 11:27:01 -0800</bug_when>
    <thetext>*** Bug 31043 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38987</attachid>
            <date>2009-09-03 07:13:49 -0700</date>
            <delta_ts>2009-12-28 22:59:25 -0800</delta_ts>
            <desc>patch</desc>
            <filename>func_name</filename>
            <type>text/plain</type>
            <size>2404</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTVmNDE5ZC4uMTNiNGIwOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwxOCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IFRp
bW90aHkgSGF0Y2hlci4KIAorICAgICAgICBXZWJJbnNwZWN0b3I6IERvIG5vdCBxdWVyeSBub24t
ZnVuY3Rpb24gY2FsbCBmcmFtZXMgZm9yIGZ1bmN0aW9uIG5hbWUuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4Nzk5CisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzOgorICAgICAgICAoSW5qZWN0ZWRTY3Jp
cHQuQ2FsbEZyYW1lUHJveHkpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQuQ2FsbEZyYW1lUHJv
eHkucHJvdG90eXBlLl93cmFwU2NvcGVDaGFpbik6CisKKzIwMDktMDktMDMgIFBhdmVsIEZlbGRt
YW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3Ro
eSBIYXRjaGVyLgorCiAgICAgICAgIENyYXNoIGFmdGVyIHR5cGluZyAiY2xlYXIiIGFuZCBwcmVz
c2luZyByZXR1cm4gaW4gaW5zcGVjdG9yIGNvbnNvbGUuCiAKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4Njg0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKaW5kZXggYTRmYTI4NC4uYThkZWFmZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwpAQCAtOTU4LDcg
Kzk1OCw3IEBAIEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5ID0gZnVuY3Rpb24oaWQsIGNh
bGxGcmFtZSkKIHsKICAgICB0aGlzLmlkID0gaWQ7CiAgICAgdGhpcy50eXBlID0gY2FsbEZyYW1l
LnR5cGU7Ci0gICAgdGhpcy5mdW5jdGlvbk5hbWUgPSBjYWxsRnJhbWUuZnVuY3Rpb25OYW1lOwor
ICAgIHRoaXMuZnVuY3Rpb25OYW1lID0gKHRoaXMudHlwZSA9PT0gImZ1bmN0aW9uIiA/IGNhbGxG
cmFtZS5mdW5jdGlvbk5hbWUgOiAiIik7CiAgICAgdGhpcy5zb3VyY2VJRCA9IGNhbGxGcmFtZS5z
b3VyY2VJRDsKICAgICB0aGlzLmxpbmUgPSBjYWxsRnJhbWUubGluZTsKICAgICB0aGlzLnNjb3Bl
Q2hhaW4gPSB0aGlzLl93cmFwU2NvcGVDaGFpbihjYWxsRnJhbWUpOwpAQCAtOTczLDYgKzk3Myw3
IEBAIEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5LnByb3RvdHlwZSA9IHsKICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzY29wZUNoYWluLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAg
ICB2YXIgc2NvcGVPYmplY3QgPSBzY29wZUNoYWluW2ldOwogICAgICAgICAgICAgdmFyIHNjb3Bl
T2JqZWN0UHJveHkgPSBJbmplY3RlZFNjcmlwdC5jcmVhdGVQcm94eU9iamVjdChzY29wZU9iamVj
dCwgeyBjYWxsRnJhbWU6IHRoaXMuaWQsIGNoYWluSW5kZXg6IGkgfSk7CisKICAgICAgICAgICAg
IGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2NvcGVPYmplY3QpID09PSAiW29i
amVjdCBKU0FjdGl2YXRpb25dIikgewogICAgICAgICAgICAgICAgIGlmICghZm91bmRMb2NhbFNj
b3BlKQogICAgICAgICAgICAgICAgICAgICBzY29wZU9iamVjdFByb3h5LnRoaXNPYmplY3QgPSBJ
bmplY3RlZFNjcmlwdC5jcmVhdGVQcm94eU9iamVjdChjYWxsRnJhbWUudGhpc09iamVjdCwgeyBj
YWxsRnJhbWU6IHRoaXMuaWQsIHRoaXNPYmplY3Q6IHRydWUgfSk7CkBAIC05ODQsNyArOTg1LDcg
QEAgSW5qZWN0ZWRTY3JpcHQuQ2FsbEZyYW1lUHJveHkucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgICAgIHNjb3BlT2JqZWN0UHJveHkuaXNFbGVtZW50ID0gdHJ1ZTsKICAgICAgICAgICAgIGVs
c2UgaWYgKGZvdW5kTG9jYWxTY29wZSAmJiBzY29wZU9iamVjdCBpbnN0YW5jZW9mIEluamVjdGVk
U2NyaXB0Ll93aW5kb3coKS5Eb2N1bWVudCkKICAgICAgICAgICAgICAgICBzY29wZU9iamVjdFBy
b3h5LmlzRG9jdW1lbnQgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAoIWZvdW5kTG9jYWxT
Y29wZSAmJiAhbG9jYWxTY29wZSkKKyAgICAgICAgICAgIGVsc2UgaWYgKCFmb3VuZExvY2FsU2Nv
cGUpCiAgICAgICAgICAgICAgICAgc2NvcGVPYmplY3RQcm94eS5pc1dpdGhCbG9jayA9IHRydWU7
CiAgICAgICAgICAgICBzY29wZU9iamVjdFByb3h5LnByb3BlcnRpZXMgPSBbXTsKICAgICAgICAg
ICAgIHRyeSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49150</attachid>
            <date>2010-02-21 06:50:06 -0800</date>
            <delta_ts>2010-02-21 14:26:30 -0800</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>sticky_breakpoints</filename>
            <type>text/plain</type>
            <size>133107</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmM4MzZhOC4uZDNlYWMyZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzcgQEAKKzIwMTAtMDItMjEgIFBhdmVsIEZlbGRt
YW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjogc3RvcCBvbiBpbmxpbmUgYnJlYWtw
b2ludHMgb24gcmVsb2FkLgorICAgICAgICAtIEluc3BlY3RvckJyZWFrcG9pbnQgc3RydWN0IGhh
cyBiZWVuIGludHJvZHVjZWQgYW5kIHJldXNlZCBpbiBJbnNwZWN0b3JDb250cm9sbGVyCisgICAg
ICAgICAgYW5kIGRlYnVnIHNlcnZlci4KKyAgICAgICAgLSBKYXZhU2NyaXB0RGVidWdTZXJ2ZXIg
d2FzIG1vdmVkIHRvIGJpbmRpbmdzL2pzIGFuZCByZW5hbWVkIHRvIFNjcmlwdERlYnVnU2VydmVy
CisgICAgICAgICAgVGhlcmUgd2VyZSBubyBjaGFuZ2VzIHRvIHNlbWFudGljcywgb25seSBzb21l
IG1lY2hhbmljYWwgY2hhbmdlczoKKyAgICAgICAgICAgIC0gYWRkQnJlYWtwb2ludCBhbmQgdXBk
YXRlQnJlYWtwb2ludCB3ZXJlIG1lcmdlZCBpbnRvIHNldEJyZWFrcG9pbnQKKyAgICAgICAgICAg
IC0gU2NyaXB0RGVidWdTZXJ2ZXIgbm93IG9wZXJhdGVzIEluc3BlY3RvckJyZWFrcG9pbnQgaW5z
dGFuY2VzIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgQnJlYWtwb2ludEluZm8uCisgICAgICAg
ICAgICAtIEl0IG5vIGxvbmdlciBhbGxvY2F0ZXMgbWFwcyBhbmQgYnJlYWtwb2ludCBpbmZvIGlu
IGhlYXAgLSBhbGwgZG9uZSBvbiBzdGFjay4KKyAgICAgICAgICAgIC0gSmF2YVNjcmlwdERlYnVn
TGlzdGVuZXIgaXMgbm93IFNjcmlwdERlYnVnU2VydmVyOjpMaXN0ZW5lcgorICAgICAgICAgICAg
LSBMaXN0ZW5lciBtZXRob2RzIG5vIGxvbmdlciBoYXZlIEV4ZWNTdGF0ZSAod2FzIHVudXNlZCku
CisgICAgICAgICAgICAtIGFkZExpc3RlbmVyL3JlbW92ZUxpc3RlbmVyIHBhaXIgd3V0aCBubyBw
YWdlIGFyZ3VtZW50IHJlbW92ZWQgKHdhcyB1bnVzZWQpLgorICAgICAgICAtIEluc3BlY3RvckNv
bnRyb2xsZXIgbm93IGJpbmRzIHNvdXJjZUlEIHRvIHVybCBhbmQgbWFpbnRhaW5zIGEgbWFwIG9m
ICdzdGlja3knCisgICAgICAgICAgYnJlYWtwb2ludHMuIFdoZW5ldmVyIHNjcmlwdCBpcyBsb2Fk
ZWQgYW5kIHRoZXJlIGlzIGEgc3RpY2t5IGJyZWFrcG9pbnQgdXJsIG1hdGNoaW5nLAorICAgICAg
ICAgIGJyZWFrcG9pbnQgaXMgYmVpbmcgJ3Jlc3RvcmVkJyBzeW5jaHJvbm91c2x5IGluIGRlYnVn
IHNlcnZlciBhbmQgcHVzaGVkIHRvIGZyb250ZW5kLgorICAgICAgICAgIEZyb250LWVuZCBubyBs
b25nZXIgc3RvcmVzIG1hcCBvZiBzdGlja3kgYnJlYWtwb2ludHMuCisgICAgICAgICAgICAtIHNl
dEJyZWFrcG9pbnQvcmVtb3ZlQnJlYWtwb2ludC9kaWRQYXJzZVNvdXJjZSB0cmlvIGhhbmRsZSB0
aGlzIGxvZ2ljLgorICAgICAgICAtIEEgYnVuY2ggb2YgaWYoVVNFX0pTQy9WOC9vdGhlcikgZm9y
a3MgcmVtb3ZlZC4KKyAgICAgICAgLSBJbnNwZWN0b3JGcm9udGVuZCBub3cgb3BlcmF0ZXMgcHJp
bWl0aXZlIHR5cGVzIG9ubHksIGdvdCByaWQgb2YgVVNFX0pTQyBhcyB3ZWxsLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODc5OQorCisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBXZWJD
b3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmN1cnJlbnRDYWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmlzQWN0aXZhdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6OnNoYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
U2NyaXB0RGVidWdTZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6
On5TY3JpcHREZWJ1Z1NlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZl
cjo6YWRkTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJl
bW92ZUxpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpwYWdl
Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzTGlzdGVu
ZXJzSW50ZXJlc3RlZEluUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZl
cjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
aGFzQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xl
YXJCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1Nl
cnZlcjo6cGF1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVy
Ojpjb250aW51ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6
OnN0ZXBJbnRvU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVy
OjpzdGVwT3ZlclN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZl
cjo6c3RlcE91dE9mRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2
ZXI6OmN1cnJlbnRDYWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2
ZXI6OmN1cnJlbnRDYWxsRnJhbWVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hGYWlsZWRUb1BhcnNlU291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OnRvUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGV0
YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzb3VyY2VQYXJzZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRnVuY3Rpb25U
b0xpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0SmF2
YVNjcmlwdFBhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1
c2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y2FsbEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjphdFN0YXRlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmV0dXJuRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmV4Y2VwdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaWRFeGVjdXRlUHJvZ3JhbSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkUmVhY2hCcmVha3BvaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nv
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpT
RnVuY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaWRBZGRM
aXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkUmVtb3Zl
TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlbW92
ZUxhc3RMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpMaXN0ZW5lcjo6fkxpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjopOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlT25FeGNlcHRpb25zU3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0xpc3RlbmVycyk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzR2xvYmFsTGlzdGVuZXJzKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3Jp
cHREZWJ1Z1NlcnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6Okxp
c3RlbmVyOjp+TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6
OmFkZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpyZW1v
dmVMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJl
YWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJl
YWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVh
a3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVzZU9uRXhjZXB0aW9u
c1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpwYXVzZVByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmNvbnRpbnVlUHJvZ3Jh
bSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcEludG9TdGF0ZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBPdmVyU3RhdGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzdGVwT3V0T2ZGdW5j
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxs
SlNGdW5jdGlvbnNTb29uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpy
ZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1Nl
cnZlcjo6Y3VycmVudENhbGxGcmFtZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERl
YnVnU2VydmVyOjpwYWdlQ3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1Nl
cnZlcjo6U2NyaXB0RGVidWdTZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6On5TY3JpcHREZWJ1Z1NlcnZlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4SW5q
ZWN0ZWRTY3JpcHRIb3N0OjpjdXJyZW50Q2FsbEZyYW1lQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6VjhJbmplY3RlZFNjcmlwdEhvc3Q6OmlzQWN0aXZhdGlvbkNhbGxiYWNrKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0SG9zdC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6c2V0QnJlYWtwb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OnBhdXNlSW5EZWJ1Z2dlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpzdGVwT3ZlclN0YXRlbWVudEluRGVidWdnZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6c3RlcEludG9TdGF0ZW1lbnRJ
bkRlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OnN0ZXBPdXRP
ZkZ1bmN0aW9uSW5EZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5k
OjpwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJh
Y2tlbmQ6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
aWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCcmVha3BvaW50Lmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJlYWtwb2ludDo6SW5zcGVjdG9yQnJlYWtwb2lu
dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRXaW5kb3dWaXNpYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdE9iamVjdFJlYWR5
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNsb3NlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUHJvZmlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFVzZXJJbml0aWF0
ZWRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5h
YmxlUHJvZmlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlz
YWJsZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVu
YWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OmRpc2FibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpyZXN1bWVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6ZGlkUGFyc2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6ZmFpbGVkVG9QYXJzZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjpkaWRQYXVzZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OnBhcnNlZFNjcmlwdFNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6cmVzdG9yZWRCcmVha3Bv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpmYWlsZWRUb1BhcnNl
U2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpyZXN1
bWVkU2NyaXB0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmg6IFJlbW92ZWQuCisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50LmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLnNldCBjb25kaXRpb24pOgorICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZS5hZGRCcmVha3BvaW50
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlw
ZS5fYnJlYWtwb2ludEVuYWJsZUNoYW5nZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanM6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3Bl
Y3RvckJhY2tlbmRTdHViLnByb3RvdHlwZS5hZGRCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5zb3VyY2VGcmFtZUZvclJlc291cmNlKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TY3JpcHRzUGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5l
bC5wcm90b3R5cGUuYWRkU2NyaXB0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFu
ZWwucHJvdG90eXBlLmFkZEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlw
dHNQYW5lbC5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fc2hvd1NjcmlwdE9yUmVzb3VyY2UpOgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLnJlc3RvcmVkQnJlYWtwb2ludCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcDoKKwogMjAxMC0wMi0yMCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxk
bWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIu
CmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQppbmRleCBiNzNkOGQwLi5iMzU0ZDI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEyMDYsNiArMTIwNiw3IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwIFwKIAlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmggXAorCVdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJyZWFrcG9pbnQuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJh
c2VSZXNvdXJjZS5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVz
b3VyY2UuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIFwKQEAg
LTEyMjUsOSArMTIyNiw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2Ny
aXB0Q2FsbEZyYW1lLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFt
ZS5oIFwKLQlXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdMaXN0ZW5lci5oIFwKLQlX
ZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIFwKLQlXZWJDb3JlL2lu
c3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNv
cmRGYWN0b3J5LmggXAogCVdlYkNvcmUvbG9hZGVyL0NhY2hlLmNwcCBcCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAgYi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKaW5kZXgg
MmFmZGQzNC4uYTA3YWVlNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cApAQCAtNDE5LDggKzQxOSw2IEBAIF9fWk43V2Vi
Q29yZTE5VGV4dFJlc291cmNlRGVjb2RlckQxRXYKIF9fWk43V2ViQ29yZTE5YXBwbGljYXRpb25J
c1NhZmFyaUV2CiBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlMjRzZXRFeHBlY3Rl
ZENvbnRlbnRMZW5ndGhFeAogX19aTjdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNlQmFzZUMyRXYK
LV9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERlYnVnU2VydmVyMjNyZWNvbXBpbGVBbGxKU0Z1bmN0
aW9uc0VQTlNfNVRpbWVySVMwX0VFCi1fX1pON1dlYkNvcmUyMUphdmFTY3JpcHREZWJ1Z1NlcnZl
cjZzaGFyZWRFdgogX19aTjdXZWJDb3JlMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnQyNGRpc2FtYmln
dWF0ZUtleURvd25FdmVudEVOUzBfNFR5cGVFYgogX19aTjdXZWJDb3JlMjFQbGF0Zm9ybUtleWJv
YXJkRXZlbnRDMUVQN05TRXZlbnQKIF9fWk43V2ViQ29yZTIxU1ZHRG9jdW1lbnRFeHRlbnNpb25z
MjFzYW1wbGVBbmltYXRpb25BdFRpbWVFUktOU182U3RyaW5nRVBOU18xNFNWR1NNSUxFbGVtZW50
RWQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggYjgzMTZjZi4uODNmOWQ3NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE1OTYsNiArMTU5Niw3IEBACiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oJywKICAgICAgICAgICAgICdp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JCcmVh
a3BvaW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCcsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwJywKQEAgLTE2
MTQsOSArMTYxNSw2IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5l
QWdlbnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuY3Bw
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oJywKLSAgICAg
ICAgICAgICdpbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIuaCcsCi0gICAgICAgICAg
ICAnaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAnLAotICAgICAgICAgICAgJ2lu
c3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9UaW1l
bGluZVJlY29yZEZhY3RvcnkuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGUuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5vcmRlciBiL1dl
YkNvcmUvV2ViQ29yZS5vcmRlcgppbmRleCAzMTQ0ZWMxLi5hOGQyMGZkIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUub3JkZXIKKysrIGIvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCkBAIC0yMTUs
MTEgKzIxNSw2IEBAIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlNFBhZ2VFUzNfTlNfMTdJ
ZGVudGl0eUV4dHJhY3RvcklTM19FRU5TXzdQdHJIYXNoSVMzCiBfX1pOM1dURjlIYXNoVGFibGVJ
UE43V2ViQ29yZTRQYWdlRVMzX05TXzE3SWRlbnRpdHlFeHRyYWN0b3JJUzNfRUVOU183UHRySGFz
aElTM19FRU5TXzEwSGFzaFRyYWl0c0lTM19FRVM5X0U2cmVoYXNoRWkKIF9fWk4zV1RGOUhhc2hU
YWJsZUlQTjdXZWJDb3JlNFBhZ2VFUzNfTlNfMTdJZGVudGl0eUV4dHJhY3RvcklTM19FRU5TXzdQ
dHJIYXNoSVMzX0VFTlNfMTBIYXNoVHJhaXRzSVMzX0VFUzlfRTEzYWxsb2NhdGVUYWJsZUVpCiBf
X1pOM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTRQYWdlRVMzX05TXzE3SWRlbnRpdHlFeHRyYWN0
b3JJUzNfRUVOU183UHRySGFzaElTM19FRU5TXzEwSGFzaFRyYWl0c0lTM19FRVM5X0UxNWRlYWxs
b2NhdGVUYWJsZUVQCi1fX1pON1dlYkNvcmUyMUphdmFTY3JpcHREZWJ1Z1NlcnZlcjZzaGFyZWRF
dgotX19aTjdXZWJDb3JlMjFKYXZhU2NyaXB0RGVidWdTZXJ2ZXJDMUV2Ci1fX1pON1dlYkNvcmUy
MUphdmFTY3JpcHREZWJ1Z1NlcnZlckMyRXYKLV9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERlYnVn
U2VydmVyMTFwYWdlQ3JlYXRlZEVQTlNfNFBhZ2VFCi1fX1pON1dlYkNvcmUyMUphdmFTY3JpcHRE
ZWJ1Z1NlcnZlcjI4aGFzTGlzdGVuZXJzSW50ZXJlc3RlZEluUGFnZUVQTlNfNFBhZ2VFCiBfX1pO
SzNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmU0UGFnZUVTdDRwYWlySVMzX1BOU183SGFzaFNldElQ
TlMxXzIzSmF2YVNjcmlwdERlYnVnTGlzdGVuZXJFTlNfN1B0ckhhc2hJUzdfRUVOU18xMEhhc2hU
cmFpdHNJUzdfCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MyN3NldExvY2FsU3RvcmFnZURhdGFiYXNl
UGF0aEVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmU1RnJhbWVDMUVQTlNfNFBhZ2VFUE5TXzIx
SFRNTEZyYW1lT3duZXJFbGVtZW50RVBOU18xN0ZyYW1lTG9hZGVyQ2xpZW50RQpAQCAtMTk4MTMs
NyArMTk4MDgsNiBAQCBfX1pOM1dURjZWZWN0b3JJTjNKU0MxNlByb3RlY3RlZEpTVmFsdWVFTG0w
RUUxNXJlc2VydmVDYXBhY2l0eUVtCiBfX1pOM1dURjZWZWN0b3JJTjNKU0MxNlByb3RlY3RlZEpT
VmFsdWVFTG0wRUU2c2hyaW5rRW0KIF9fWk43V2ViQ29yZTEzSFRNTFRva2VuaXplcjlwYXJzZVRl
eHRFUk5TXzE1U2VnbWVudGVkU3RyaW5nRU5TMF81U3RhdGVFCiBfX1pON1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXIxNGVuYWJsZVByb2ZpbGVyRWIKLV9fWk43V2ViQ29yZTIxSmF2YVNjcmlw
dERlYnVnU2VydmVyMjdyZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb25FdgogX19aTjdXZWJDb3Jl
MzNqc0NvbnNvbGVQcm90b3R5cGVGdW5jdGlvblByb2ZpbGVFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMw
XzhKU09iamVjdEVOUzBfN0pTVmFsdWVFUktOUzBfN0FyZ0xpc3RFCiBfX1pON1dlYkNvcmU3Q29u
c29sZTdwcm9maWxlRVJLTjNKU0M3VVN0cmluZ0VQTlNfMTVTY3JpcHRDYWxsU3RhY2tFCiBfX1pO
N1dlYkNvcmUzNmpzQ29uc29sZVByb3RvdHlwZUZ1bmN0aW9uUHJvZmlsZUVuZEVQTjNKU0M5RXhl
Y1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUVSS05TMF83QXJnTGlzdEUKQEAgLTE5
ODQ5LDggKzE5ODQzLDYgQEAgX19aTjdXZWJDb3JlTDZnZXRVUkxFUEsxNU9wYXF1ZUpTQ29udGV4
dFAxM09wYXF1ZUpTVmFsdWVQMTRPcGFxdWVKU1N0cmluZ1BQS1MzXwogX19aTjdXZWJDb3JlTDEz
Z2V0TGluZU51bWJlckVQSzE1T3BhcXVlSlNDb250ZXh0UDEzT3BhcXVlSlNWYWx1ZVAxNE9wYXF1
ZUpTU3RyaW5nUFBLUzNfCiBfX1pON1dlYkNvcmVMMTFnZXRDaGlsZHJlbkVQSzE1T3BhcXVlSlND
b250ZXh0UDEzT3BhcXVlSlNWYWx1ZVAxNE9wYXF1ZUpTU3RyaW5nUFBLUzNfCiBfX1pOSzNXVEY3
SGFzaE1hcEl4TlNfNlJlZlB0cklON1dlYkNvcmUxN0luc3BlY3RvclJlc291cmNlRUVFTlNfN0lu
dEhhc2hJeUVFTlNfMTBIYXNoVHJhaXRzSXhFRU5TN19JUzRfRUVFM2dldEVSS3gKLV9fWk43V2Vi
Q29yZTVUaW1lcklOU18yMUphdmFTY3JpcHREZWJ1Z1NlcnZlckVFNWZpcmVkRXYKLV9fWk43V2Vi
Q29yZTIxSmF2YVNjcmlwdERlYnVnU2VydmVyMjNyZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc0VQTlNf
NVRpbWVySVMwX0VFCiBfX1pOSzNKU0MyMUNvbGxlY3RvckhlYXBJdGVyYXRvcklMTlNfOEhlYXBU
eXBlRTBFRWRlRXYKIF9fWk4zSlNDMjFDb2xsZWN0b3JIZWFwSXRlcmF0b3JJTE5TXzhIZWFwVHlw
ZUUwRUVwcEV2CiBfX1pOM1dURjZWZWN0b3JJTjNKU0MxMlByb3RlY3RlZFB0cklOUzFfMTBKU0Z1
bmN0aW9uRUVFTG0wRUUxNGV4cGFuZENhcGFjaXR5RW0KQEAgLTIzODc0LDE5ICsyMzg2NiwxNSBA
QCBfX1pON1dlYkNvcmUxM1RleHRUb2tlbml6ZXJDMkVQTlNfMjJIVE1MVmlld1NvdXJjZURvY3Vt
ZW50RQogX19aTjdXZWJDb3JlMjJIVE1MVmlld1NvdXJjZURvY3VtZW50MTdhZGRWaWV3U291cmNl
VGV4dEVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmU1MmpzSW5zcGVjdG9yQ29udHJvbGxlclBy
b3RvdHlwZUZ1bmN0aW9uRW5hYmxlRGVidWdnZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09i
amVjdEVOUzBfN0pTVmFsdWVFUktOUzBfN0FyZ0xpc3RFCiBfX1pON1dlYkNvcmUxOUluc3BlY3Rv
ckNvbnRyb2xsZXIxNGVuYWJsZURlYnVnZ2VyRXYKLV9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERl
YnVnU2VydmVyMTFhZGRMaXN0ZW5lckVQTlNfMjNKYXZhU2NyaXB0RGVidWdMaXN0ZW5lckVQTlNf
NFBhZ2VFCiBfX1pOM1dURjdIYXNoTWFwSVBON1dlYkNvcmU0UGFnZUVQTlNfN0hhc2hTZXRJUE5T
MV8yM0phdmFTY3JpcHREZWJ1Z0xpc3RlbmVyRU5TXzdQdHJIYXNoSVM2X0VFTlNfMTBIYXNoVHJh
aXRzSVM2X0VFRUVOUzdfSVMzX0VFCiBfX1pOM1dURjdIYXNoU2V0SVBON1dlYkNvcmUyM0phdmFT
Y3JpcHREZWJ1Z0xpc3RlbmVyRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTBIYXNoVHJhaXRzSVMzX0VF
RTNhZGRFUktTM18KIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlMjNKYXZhU2NyaXB0RGVi
dWdMaXN0ZW5lckVTM19OU18xN0lkZW50aXR5RXh0cmFjdG9ySVMzX0VFTlNfN1B0ckhhc2hJUzNf
RUVOU18xMEhhc2hUcmFpdHNJUzNfRUVTOV8KLV9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERlYnVn
U2VydmVyMTRkaWRBZGRMaXN0ZW5lckVQTlNfNFBhZ2VFCiBfX1pON1dlYkNvcmU0UGFnZTExc2V0
RGVidWdnZXJFUE4zSlNDOERlYnVnZ2VyRQotX19aTjdXZWJDb3JlMjFKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXIxNmNsZWFyQnJlYWtwb2ludHNFdgogX19aTjNXVEYyMGRlbGV0ZUFsbFBhaXJTZWNvbmRz
SVBOU183SGFzaFNldElqTlNfN0ludEhhc2hJakVFTlNfMTBIYXNoVHJhaXRzSWpFRUVFS05TXzdI
YXNoTWFwSWxTN19OUzJfSW1FRU5TNF9JbEVFTlM0X0lTN19FRUVFRQogX19aTks3V2ViQ29yZTI1
SlNDYW52YXNHcmFkaWVudFByb3RvdHlwZTljbGFzc0luZm9FdgogX19aTks3V2ViQ29yZTMwSlNJ
bnNwZWN0b3JDb250cm9sbGVyUHJvdG90eXBlOWNsYXNzSW5mb0V2CiBfX1pOM1dURjdIYXNoTWFw
SVBOM0pTQzE0U291cmNlUHJvdmlkZXJFUE5TMV85RXhlY1N0YXRlRU5TXzdQdHJIYXNoSVMzX0VF
TlNfMTBIYXNoVHJhaXRzSVMzX0VFTlM4X0lTNV9FRUUzYWRkRVJLUzNfUktTNV8KIF9fWk4zV1RG
OUhhc2hUYWJsZUlQTjNKU0MxNFNvdXJjZVByb3ZpZGVyRVN0NHBhaXJJUzNfUE5TMV85RXhlY1N0
YXRlRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTN19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTRQ
YWlySGEKLV9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERlYnVnU2VydmVyMTJzb3VyY2VQYXJzZWRF
UE4zSlNDOUV4ZWNTdGF0ZUVSS05TMV8xMFNvdXJjZUNvZGVFaVJLTlMxXzdVU3RyaW5nRQogX19a
TjdXZWJDb3JlTDZ0b1BhZ2VFUE4zSlNDMTRKU0dsb2JhbE9iamVjdEUKIF9fWk5LM1dURjdIYXNo
TWFwSVBON1dlYkNvcmU0UGFnZUVQTlNfN0hhc2hTZXRJUE5TMV8yM0phdmFTY3JpcHREZWJ1Z0xp
c3RlbmVyRU5TXzdQdHJIYXNoSVM2X0VFTlNfMTBIYXNoVHJhaXRzSVM2X0VFRUVOUzdfSVMzX0UK
IF9fWk43V2ViQ29yZUwyMmRpc3BhdGNoRGlkUGFyc2VTb3VyY2VFUktOM1dURjdIYXNoU2V0SVBO
U18yM0phdmFTY3JpcHREZWJ1Z0xpc3RlbmVyRU5TMF83UHRySGFzaElTM19FRU5TMF8xMEhhc2hU
cmFpdHNJUzNfRUVFRVAKQEAgLTIzOTAwLDMyICsyMzg4OCwyMCBAQCBfX1pON1dlYkNvcmUyMUpT
SW5zcGVjdG9yQ29udHJvbGxlcjE2YWRkU291cmNlVG9GcmFtZUVQTjNKU0M5RXhlY1N0YXRlRVJL
TlMxXzdBcgogX19aTjdXZWJDb3JlMzJqc0NvbnNvbGVQcm90b3R5cGVGdW5jdGlvbkFzc2VydEVQ
TjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUVSS05TMF83QXJnTGlz
dEUKIF9fWk43V2ViQ29yZTdDb25zb2xlMTVhc3NlcnRDb25kaXRpb25FYlBOU18xNVNjcmlwdENh
bGxTdGFja0UKIF9fWk4zV1RGNlZlY3RvcklQTjdXZWJDb3JlMjNKYXZhU2NyaXB0RGVidWdMaXN0
ZW5lckVMbTBFRTZzaHJpbmtFbQotX19aTjdXZWJDb3JlMjFKYXZhU2NyaXB0RGVidWdTZXJ2ZXI5
Y2FsbEV2ZW50RVJLTjNKU0MxN0RlYnVnZ2VyQ2FsbEZyYW1lRWxpCiBfX1pON1dlYkNvcmUxOUph
dmFTY3JpcHRDYWxsRnJhbWVDMUVSS04zSlNDMTdEZWJ1Z2dlckNhbGxGcmFtZUVOM1dURjEwUGFz
c1JlZlB0cklTMF9FRWxpCiBfX1pON1dlYkNvcmUxOUphdmFTY3JpcHRDYWxsRnJhbWVDMkVSS04z
SlNDMTdEZWJ1Z2dlckNhbGxGcmFtZUVOM1dURjEwUGFzc1JlZlB0cklTMF9FRWxpCi1fX1pON1dl
YkNvcmUyMUphdmFTY3JpcHREZWJ1Z1NlcnZlcjEzcGF1c2VJZk5lZWRlZEVQTlNfNFBhZ2VFCi1f
X1pOSzdXZWJDb3JlMjFKYXZhU2NyaXB0RGVidWdTZXJ2ZXIxM2hhc0JyZWFrcG9pbnRFbGoKIF9f
Wk5LM1dURjdIYXNoTWFwSWxQTlNfN0hhc2hTZXRJak5TXzdJbnRIYXNoSWpFRU5TXzEwSGFzaFRy
YWl0c0lqRUVFRU5TMl9JbUVFTlM0X0lsRUVOUzRfSVM3X0VFRTNnZXRFUktsCi1fX1pON1dlYkNv
cmUyMUphdmFTY3JpcHREZWJ1Z1NlcnZlcjExYXRTdGF0ZW1lbnRFUktOM0pTQzE3RGVidWdnZXJD
YWxsRnJhbWVFbGkKLV9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERlYnVnU2VydmVyMTFyZXR1cm5F
dmVudEVSS04zSlNDMTdEZWJ1Z2dlckNhbGxGcmFtZUVsaQogX19aTjdXZWJDb3JlMTlKYXZhU2Ny
aXB0Q2FsbEZyYW1lNmNhbGxlckV2CiBfX1pOM1dURjEwUmVmQ291bnRlZElON1dlYkNvcmUxOUph
dmFTY3JpcHRDYWxsRnJhbWVFRTVkZXJlZkV2Ci1fX1pON1dlYkNvcmUyMUphdmFTY3JpcHREZWJ1
Z1NlcnZlcjE4d2lsbEV4ZWN1dGVQcm9ncmFtRVJLTjNKU0MxN0RlYnVnZ2VyQ2FsbEZyYW1lRWxp
Ci1fX1pON1dlYkNvcmUyMUphdmFTY3JpcHREZWJ1Z1NlcnZlcjE3ZGlkRXhlY3V0ZVByb2dyYW1F
UktOM0pTQzE3RGVidWdnZXJDYWxsRnJhbWVFbGkKIF9fWk43V2ViQ29yZTQ2anNJbnNwZWN0b3JD
b250cm9sbGVyUHJvdG90eXBlRnVuY3Rpb25Qcm9maWxlc0VQTjNKU0M5RXhlY1N0YXRlRVBOUzBf
OEpTT2JqZWN0RU5TMF83SlNWYWx1ZUVSS05TMF83QXJnTGlzdEUKIF9fWk43V2ViQ29yZTIxSlNJ
bnNwZWN0b3JDb250cm9sbGVyOHByb2ZpbGVzRVBOM0pTQzlFeGVjU3RhdGVFUktOUzFfN0FyZ0xp
c3RFCiBfX1pON1dlYkNvcmU1MmpzSW5zcGVjdG9yQ29udHJvbGxlclByb3RvdHlwZUZ1bmN0aW9u
RW5hYmxlUHJvZmlsZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFs
dWVFUktOUzBfN0FyZ0xpc3RFCiBfX1pOSzdXZWJDb3JlMzJKU0hUTUxPcHRpb25zQ29sbGVjdGlv
blByb3RvdHlwZTljbGFzc0luZm9FdgotX19aTjdXZWJDb3JlMjFKYXZhU2NyaXB0RGVidWdTZXJ2
ZXIxNWNvbnRpbnVlUHJvZ3JhbUV2Ci1fX1pON1dlYkNvcmUyMUphdmFTY3JpcHREZWJ1Z1NlcnZl
cjlleGNlcHRpb25FUktOM0pTQzE3RGVidWdnZXJDYWxsRnJhbWVFbGkKIF9fWk43V2ViQ29yZTUy
anNJbnNwZWN0b3JDb250cm9sbGVyUHJvdG90eXBlRnVuY3Rpb25TdGFydFByb2ZpbGluZ0VQTjNK
U0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUVSS05TMF83QXJnTGlzdEUK
IF9fWk43V2ViQ29yZTUxanNJbnNwZWN0b3JDb250cm9sbGVyUHJvdG90eXBlRnVuY3Rpb25TdG9w
UHJvZmlsaW5nRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdKU1ZhbHVlRVJL
TlMwXzdBcmdMaXN0RQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjZzdG9wVXNl
ckluaXRpYXRlZFByb2ZpbGluZ0V2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIx
NWRpc2FibGVEZWJ1Z2dlckV2Ci1fX1pON1dlYkNvcmUyMUphdmFTY3JpcHREZWJ1Z1NlcnZlcjE0
cmVtb3ZlTGlzdGVuZXJFUE5TXzIzSmF2YVNjcmlwdERlYnVnTGlzdGVuZXJFUE5TXzRQYWdlRQog
X19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmU0UGFnZUVTdDRwYWlySVMzX1BOU183SGFzaFNl
dElQTlMxXzIzSmF2YVNjcmlwdERlYnVnTGlzdGVuZXJFTlNfN1B0ckhhc2hJUzdfRUVOU18xMEhh
c2hUcmFpdHNJUzdfRQotX19aTjdXZWJDb3JlMjFKYXZhU2NyaXB0RGVidWdTZXJ2ZXIxN2RpZFJl
bW92ZUxpc3RlbmVyRVBOU180UGFnZUUKLV9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERlYnVnU2Vy
dmVyMjFkaWRSZW1vdmVMYXN0TGlzdGVuZXJFdgogX19aTjdXZWJDb3JlNUZyYW1lMTdzZXRJc0Rp
c2Nvbm5lY3RlZEViCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMWNsb3NlV2lu
ZG93RXYKIF9fWk43V2ViQ29yZUwxOWdldFVuaXF1ZUlkQ2FsbGJhY2tFUEsxNU9wYXF1ZUpTQ29u
dGV4dFAxM09wYXF1ZUpTVmFsdWVQMTRPcGFxdWVKU1N0cmluZ1BQS1MzXwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNGNiNDc5NC4u
MmU4ZTQ3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dl
YkNvcmUucHJvCkBAIC0xMzc0LDcgKzEzNzQsNiBAQCBIRUFERVJTICs9IFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yUmVzb3VyY2UuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5l
QWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuaCBcCi0gICAgaW5z
cGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5oIFwKICAgICBpbnNwZWN0b3IvVGltZWxpbmVS
ZWNvcmRGYWN0b3J5LmggXAogICAgIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3Jv
dXAuaCBcCiAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmggXApAQCAt
MjYzMCw3ICsyNjI5LDYgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0pBVkFTQ1JJUFRfREVC
VUdHRVI9MSkgewogICAgIFNPVVJDRVMgKz0gXAogICAgICAgICBiaW5kaW5ncy9qcy9KU0phdmFT
Y3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwIFwKICAgICAgICAgaW5zcGVjdG9yL0phdmFTY3JpcHRD
YWxsRnJhbWUuY3BwIFwKLSAgICAgICAgaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5j
cHAgXAogfQogCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TPTEpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGM3N2M0YTUu
LjQ5NDgyZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDI2MTMs
NiArNDI2MTMsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckJyZWFrcG9pbnQuaCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNw
ZWN0b3JDbGllbnQuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC00MjY4OSwxOCArNDI2OTMs
NiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlxpbnNwZWN0b3JcSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIuaCINCi0JCQkJPg0KLQkJCTwvRmls
ZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxKYXZhU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEphdmFTY3JpcHREZWJ1Z1NlcnZlci5oIg0KLQkJCQk+
DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzZGFhYzFmLi45MDQxMmJh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTMzLDkg
KzUzMyw2IEBACiAJCTFDODFCOTVDMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDODFCOTU4
MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQzgxQkEwOTBFOTczNDgzMDAyNjZFMDcg
LyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQzgxQkEwMzBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENh
bGxGcmFtZS5jcHAgKi87IH07CiAJCTFDODFCQTBBMEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQzgxQkEwNDBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oICov
OyB9OwotCQkxQzgxQkEwQzBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdERlYnVnTGlzdGVu
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDODFC
QTA2MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFDODFCQTBEMEU5NzM0
ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM4MUJBMDcwRTk3MzQ4MzAwMjY2RTA3IC8q
IEphdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAgKi87IH07Ci0JCTFDODFCQTBFMEU5NzM0ODMwMDI2
NkUwNyAvKiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDODFCQTA4MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2Ny
aXB0RGVidWdTZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxQ0ExOUUwNTBEQzI1NTk1MDA2NUE5OTQgLyogRXZlbnRMb29wTWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNBMTlFMDMwREMy
NTU5NTAwNjVBOTk0IC8qIEV2ZW50TG9vcE1hYy5tbSAqLzsgfTsKIAkJMUNBMTlFMTYwREMyNTVD
QTAwNjVBOTk0IC8qIEV2ZW50TG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUNBMTlFMTUwREMyNTVDQTAwNjVBOTk0IC8qIEV2ZW50TG9vcC5oICov
OyB9OwogCQkxQ0FGMzQ4MTBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0FGMzQ3RTBBNkM0
MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEyOTgsNiArMTI5NSw3IEBACiAJCTdBREU3MjI2
MTBDQkJCOUIwMDZCM0IzQSAvKiBDb250ZXh0TWVudVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QURFNzIyNTEwQ0JCQjlCMDA2QjNCM0Eg
LyogQ29udGV4dE1lbnVQcm92aWRlci5oICovOyB9OwogCQk3QUVEM0UwNTBGQkIxRUFBMDBEMkIw
M0MgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0FFRDNFMDMwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3RvckZy
b250ZW5kLmNwcCAqLzsgfTsKIAkJN0FFRDNFMDYwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3Rv
ckZyb250ZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QUVEM0UwNDBGQkIxRUFBMDBEMkIwM0MgLyogSW5zcGVjdG9yRnJvbnRlbmQuaCAqLzsgfTsK
KwkJN0FGRDQ2MjkxMTMwNjBFNzAwMzVCODgzIC8qIEluc3BlY3RvckJyZWFrcG9pbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkQ0NjI3MTEzMDYw
RTcwMDM1Qjg4MyAvKiBJbnNwZWN0b3JCcmVha3BvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODQyMjQxODMxMDdFNzdGNDAwNzY2QTg3IC8q
IEpTU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE4MTEwN0U3N0Y0MDA3NjZBODcgLyogSlNTVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmNwcCAqLzsgfTsKIAkJODQyMjQxODQxMDdFNzdGNDAwNzY2QTg3IC8q
IEpTU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODQyMjQxODIxMDdFNzdGNDAwNzY2QTg3IC8qIEpTU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudC5oICovOyB9OwogCQk4NDIyNDE4QzEwN0U3ODZGMDA3NjZBODcgLyogRE9N
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQyMjQxODkxMDdFNzg2RjAwNzY2QTg3IC8qIERPTVNWR0ZFTW9ycGhv
bG9neUVsZW1lbnQuaCAqLzsgfTsKQEAgLTU4NTUsOSArNTg1Myw2IEBACiAJCTFDODFCQTAzMEU5
NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQzgxQkEwNDBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlw
dENhbGxGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0
Q2FsbEZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCQTA1MEU5NzM0
ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBKYXZhU2NyaXB0Q2FsbEZyYW1lLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMUM4MUJBMDYwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDODFCQTA3MEU5NzM0ODMwMDI2NkUw
NyAvKiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMUM4MUJBMDgwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHREZWJ1Z1Nl
cnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM5MDRERjkwQkE5RDJDODAw
ODFFOUQwIC8qIFZlcnNpb24ueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRo
ID0gVmVyc2lvbi54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMTlF
MDMwREMyNTU5NTAwNjVBOTk0IC8qIEV2ZW50TG9vcE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEV2ZW50TG9vcE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUNBMTlFMTUwREMyNTVDQTAwNjVBOTk0IC8qIEV2ZW50TG9vcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudExvb3AuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTY3MjAsNiArNjcxNSw3IEBACiAJCTdBREU3MjI1MTBDQkJCOUIwMDZC
M0IzQSAvKiBDb250ZXh0TWVudVByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvbnRleHRNZW51UHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0FFRDNFMDMwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3RvckZyb250ZW5kLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckZyb250ZW5kLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FFRDNFMDQwRkJCMUVBQTAwRDJCMDNDIC8q
IEluc3BlY3RvckZyb250ZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
c3BlY3RvckZyb250ZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBRkQ0NjI3
MTEzMDYwRTcwMDM1Qjg4MyAvKiBJbnNwZWN0b3JCcmVha3BvaW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckJyZWFrcG9pbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODQyMjQxODExMDdFNzdGNDAwNzY2QTg3IC8qIEpTU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NW
R0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NDIyNDE4MjEwN0U3N0Y0MDA3NjZBODcgLyogSlNTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDIyNDE4OTEwN0U3ODZGMDA3NjZBODcg
LyogRE9NU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBET01TVkdGRU1vcnBob2xvZ3lFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMDYyNCw2ICsxMDYyMCw3IEBACiAJCQkJN0E3NEVDQjgxMDE4MzlBNTAwQkY5
MzlFIC8qIEluc3BlY3RvckJhY2tlbmQuY3BwICovLAogCQkJCTdBNzRFQ0I5MTAxODM5QTYwMEJG
OTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmggKi8sCiAJCQkJN0E3NEVDQjYxMDE4Mzk5QTAwQkY5
MzlFIC8qIEluc3BlY3RvckJhY2tlbmQuaWRsICovLAorCQkJCTdBRkQ0NjI3MTEzMDYwRTcwMDM1
Qjg4MyAvKiBJbnNwZWN0b3JCcmVha3BvaW50LmggKi8sCiAJCQkJMUM4MUI5NTgwRTk3MzMwODAw
MjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oICovLAogCQkJCTFDODFCOTU3MEU5NzMzMDgwMDI2
NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmNwcCAqLywKIAkJCQkxQzgxQjk1NjBFOTczMzA4
MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5oICovLApAQCAtMTA2NDUsOSArMTA2NDIs
NiBAQAogCQkJCTFDODFCQTAzMEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1l
LmNwcCAqLywKIAkJCQkxQzgxQkEwNDBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxG
cmFtZS5oICovLAogCQkJCTFDODFCQTA1MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2Fs
bEZyYW1lLmlkbCAqLywKLQkJCQkxQzgxQkEwNjBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlw
dERlYnVnTGlzdGVuZXIuaCAqLywKLQkJCQkxQzgxQkEwNzBFOTczNDgzMDAyNjZFMDcgLyogSmF2
YVNjcmlwdERlYnVnU2VydmVyLmNwcCAqLywKLQkJCQkxQzgxQkEwODBFOTczNDgzMDAyNjZFMDcg
LyogSmF2YVNjcmlwdERlYnVnU2VydmVyLmggKi8sCiAJCQkJQkNDNjRGNUYwRENGQjg0RTAwODFF
RjNCIC8qIGxvY2FsaXplZFN0cmluZ3MuanMgKi8sCiAJCQkJNzU1M0NGRTcxMDhGNDczRjAwRUEy
ODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAgKi8sCiAJCQkJNzU1M0NGRTYxMDhGNDcz
RjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oICovLApAQCAtMTczMTAsOCArMTcz
MDQsNiBAQAogCQkJCTU5RTU2MEE3MTEwNTMzNjYwMEFBMTI1OCAvKiBKYXZhQ2xhc3NKU0MuaCBp
biBIZWFkZXJzICovLAogCQkJCTU5QTlFN0IyMTEwNDc1OTQwMERGQjRDMSAvKiBKYXZhSW5zdGFu
Y2VKU0MuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFCQTBBMEU5NzM0ODMwMDI2NkUwNyAvKiBK
YXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQzgxQkEwQzBFOTczNDgz
MDAyNjZFMDcgLyogSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTFDODFCQTBFMEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTU5QkMzOTNGMTEwNTRBMTMwMEZEODVEQiAvKiBKYXZhU3RyaW5nSlND
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQwNDBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pz
b2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1OTEzOTUzQjExMDc1ODQ1MDA4M0VDNTUgLyog
Sk5JQnJpZGdlLmggaW4gSGVhZGVycyAqLywKQEAgLTE4NTQwLDYgKzE4NTMyLDcgQEAKIAkJCQk5
MzFCQ0M2MTExMjRERkNCMDBCRTcwREQgLyogTWVkaWFDYW5TdGFydExpc3RlbmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5RjJBMzIyQzExMjVBMEEyMDAzQzMwNTYgLyogSmF2YVNjcmlwdFByb2Zp
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlGMkEzMjJFMTEyNUEwQTIwMDNDMzA1NiAvKiBKYXZh
U2NyaXB0UHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdBRkQ0NjI5MTEzMDYwRTcw
MDM1Qjg4MyAvKiBJbnNwZWN0b3JCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE5NTA0
LDcgKzE5NDk3LDYgQEAKIAkJCQk1OUU1NjBBOTExMDUzMzZGMDBBQTEyNTggLyogSmF2YUNsYXNz
SlNDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU5QTlFN0IwMTEwNDc1ODgwMERGQjRDMSAvKiBK
YXZhSW5zdGFuY2VKU0MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM4MUJBMDkwRTk3MzQ4MzAw
MjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUM4
MUJBMEQwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQTU2OUQwMzBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUE1NjlEMDUwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9vYmpj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTkxMzk1M0QxMTA3NTg0RTAwODNFQzU1IC8qIEpOSUJy
aWRnZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lu
amVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKaW5kZXggM2RiODk0ZC4uOTQ3Njc0YSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAK
QEAgLTY3LDggKzY3LDggQEAKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogI2lu
Y2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKLSNpbmNsdWRlICJKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXIuaCIKICNpbmNsdWRlICJKU0phdmFTY3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJT
Y3JpcHREZWJ1Z1NlcnZlci5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC0x
MTgsMTAgKzExOCw5IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlRm9y
SWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotCiBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0
OjpjdXJyZW50Q2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7Ci0g
ICAgSmF2YVNjcmlwdENhbGxGcmFtZSogY2FsbEZyYW1lID0gaW1wbCgpLT5jdXJyZW50Q2FsbEZy
YW1lKCk7CisgICAgSmF2YVNjcmlwdENhbGxGcmFtZSogY2FsbEZyYW1lID0gU2NyaXB0RGVidWdT
ZXJ2ZXI6OnNoYXJlZCgpLmN1cnJlbnRDYWxsRnJhbWUoKTsKICAgICBpZiAoIWNhbGxGcmFtZSB8
fCAhY2FsbEZyYW1lLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CkBAIC0xMzQsNyArMTMzLDYgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6aXNBY3Rp
dmF0aW9uKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFyZ3MuYXQoMCkuZ2V0T2JqZWN0KCk7CiAgICAgcmV0dXJuIGpzQm9vbGVhbihvYmpl
Y3QgJiYgb2JqZWN0LT5pc0FjdGl2YXRpb25PYmplY3QoKSk7CiB9Ci0KICNlbmRpZgogCiBKU1Zh
bHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojpub2RlRm9ySWQoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNw
cAppbmRleCA5ODY5Nzc1Li5mYjVkOGJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERl
YnVnU2VydmVyLmNwcApAQCAtMSw0NyArMSw1ODQgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCiAKLSNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNF
KEpTQykKIAotI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCisjaW5jbHVkZSAiRE9NV2lu
ZG93LmgiCisjaW5jbHVkZSAiRXZlbnRMb29wLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JCcmVha3BvaW50LmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKKyNpbmNs
dWRlICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlICJTY3JvbGxW
aWV3LmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5o
IgorI2luY2x1ZGUgPGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmg+CisjaW5jbHVkZSA8cGFy
c2VyL1NvdXJjZUNvZGUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCi0jaW5jbHVkZSAiSmF2YVNjcmlwdERlYnVnU2VydmVy
LmgiCit1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCkKK1NjcmlwdERlYnVn
U2VydmVyJiBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFNjcmlwdERlYnVnU2VydmVyLCBzZXJ2ZXIsICgpKTsKKyAgICByZXR1cm4gc2VydmVy
OworfQorCitTY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0RGVidWdTZXJ2ZXIoKQorICAgIDogbV9j
YWxsaW5nTGlzdGVuZXJzKGZhbHNlKQorICAgICwgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKERv
bnRQYXVzZU9uRXhjZXB0aW9ucykKKyAgICAsIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQoZmFsc2Up
CisgICAgLCBtX3BhdXNlZChmYWxzZSkKKyAgICAsIG1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2
ZW50cyh0cnVlKQorICAgICwgbV9wYXVzZU9uQ2FsbEZyYW1lKDApCisgICAgLCBtX3JlY29tcGls
ZVRpbWVyKHRoaXMsICZTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMp
Cit7Cit9CisKK1NjcmlwdERlYnVnU2VydmVyOjp+U2NyaXB0RGVidWdTZXJ2ZXIoKQoreworICAg
IGRlbGV0ZUFsbFZhbHVlcyhtX3BhZ2VMaXN0ZW5lcnNNYXApOworfQorCit2b2lkIFNjcmlwdERl
YnVnU2VydmVyOjphZGRMaXN0ZW5lcihMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBhZ2UpCit7
CisgICAgQVNTRVJUX0FSRyhsaXN0ZW5lciwgbGlzdGVuZXIpOworICAgIEFTU0VSVF9BUkcocGFn
ZSwgcGFnZSk7CisKKyAgICBwYWlyPFBhZ2VMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yLCBib29sPiBy
ZXN1bHQgPSBtX3BhZ2VMaXN0ZW5lcnNNYXAuYWRkKHBhZ2UsIDApOworICAgIGlmIChyZXN1bHQu
c2Vjb25kKQorICAgICAgICByZXN1bHQuZmlyc3QtPnNlY29uZCA9IG5ldyBMaXN0ZW5lclNldDsK
KworICAgIExpc3RlbmVyU2V0KiBsaXN0ZW5lcnMgPSByZXN1bHQuZmlyc3QtPnNlY29uZDsKKyAg
ICBsaXN0ZW5lcnMtPmFkZChsaXN0ZW5lcik7CisKKyAgICBkaWRBZGRMaXN0ZW5lcihwYWdlKTsK
K30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoTGlzdGVuZXIqIGxp
c3RlbmVyLCBQYWdlKiBwYWdlKQoreworICAgIEFTU0VSVF9BUkcobGlzdGVuZXIsIGxpc3RlbmVy
KTsKKyAgICBBU1NFUlRfQVJHKHBhZ2UsIHBhZ2UpOworCisgICAgUGFnZUxpc3RlbmVyc01hcDo6
aXRlcmF0b3IgaXQgPSBtX3BhZ2VMaXN0ZW5lcnNNYXAuZmluZChwYWdlKTsKKyAgICBpZiAoaXQg
PT0gbV9wYWdlTGlzdGVuZXJzTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBMaXN0
ZW5lclNldCogbGlzdGVuZXJzID0gaXQtPnNlY29uZDsKKyAgICBsaXN0ZW5lcnMtPnJlbW92ZShs
aXN0ZW5lcik7CisgICAgaWYgKGxpc3RlbmVycy0+aXNFbXB0eSgpKSB7CisgICAgICAgIG1fcGFn
ZUxpc3RlbmVyc01hcC5yZW1vdmUoaXQpOworICAgICAgICBkZWxldGUgbGlzdGVuZXJzOworICAg
IH0KKworICAgIGRpZFJlbW92ZUxpc3RlbmVyKHBhZ2UpOworICAgIGlmICghaGFzTGlzdGVuZXJz
KCkpCisgICAgICAgIGRpZFJlbW92ZUxhc3RMaXN0ZW5lcigpOworfQorCit2b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpwYWdlQ3JlYXRlZChQYWdlKiBwYWdlKQoreworICAgIEFTU0VSVF9BUkcocGFn
ZSwgcGFnZSk7CisKKyAgICBpZiAoIWhhc0xpc3RlbmVyc0ludGVyZXN0ZWRJblBhZ2UocGFnZSkp
CisgICAgICAgIHJldHVybjsKKyAgICBwYWdlLT5zZXREZWJ1Z2dlcih0aGlzKTsKK30KKworYm9v
bCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzTGlzdGVuZXJzSW50ZXJlc3RlZEluUGFnZShQYWdlKiBw
YWdlKQoreworICAgIEFTU0VSVF9BUkcocGFnZSwgcGFnZSk7CisKKyAgICBpZiAoaGFzR2xvYmFs
TGlzdGVuZXJzKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIG1fcGFnZUxp
c3RlbmVyc01hcC5jb250YWlucyhwYWdlKTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCBJbnNwZWN0b3JCcmVha3BvaW50IGJyZWFrcG9pbnQpCit7CisgICAgaW50cHRyX3Qgc291cmNl
SURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7CisgICAgQnJlYWtwb2ludHNNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9icmVha3BvaW50cy5maW5kKHNvdXJjZUlEVmFsdWUpOworICAgIGlmIChpdCA9
PSBtX2JyZWFrcG9pbnRzLmVuZCgpKQorICAgICAgICBpdCA9IG1fYnJlYWtwb2ludHMuc2V0KHNv
dXJjZUlEVmFsdWUsIFNvdXJjZUJyZWFrcG9pbnRzKCkpLmZpcnN0OworICAgIGl0LT5zZWNvbmQu
c2V0KGxpbmVOdW1iZXIsIGJyZWFrcG9pbnQpOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVy
OjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVO
dW1iZXIpCit7CisgICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRy
KCk7CisgICAgQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9icmVha3BvaW50cy5maW5k
KHNvdXJjZUlEVmFsdWUpOworICAgIGlmIChpdCAhPSBtX2JyZWFrcG9pbnRzLmVuZCgpKQorICAg
ICAgICBpdC0+c2Vjb25kLnJlbW92ZShsaW5lTnVtYmVyKTsKK30KKworYm9vbCBTY3JpcHREZWJ1
Z1NlcnZlcjo6aGFzQnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51
bWJlcikgY29uc3QKK3sKKyAgICBCcmVha3BvaW50c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2JyZWFrcG9pbnRzLmZpbmQoc291cmNlSUQpOworICAgIGlmIChpdCA9PSBtX2JyZWFrcG9pbnRz
LmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU291cmNlQnJlYWtwb2ludHM6OmNv
bnN0X2l0ZXJhdG9yIGJyZWFrSXQgPSBpdC0+c2Vjb25kLmZpbmQobGluZU51bWJlcik7CisgICAg
aWYgKGJyZWFrSXQgPT0gaXQtPnNlY29uZC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gQW4gZW1wdHkgY29uZGl0aW9uIGNvdW50cyBhcyBubyBjb25kaXRpb24gd2hpY2gg
aXMgZXF1aXZhbGVudCB0byAidHJ1ZSIuCisgICAgaWYgKCFicmVha0l0LT5zZWNvbmQuZW5hYmxl
ZCB8fCBicmVha0l0LT5zZWNvbmQuY29uZGl0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IG1f
Y3VycmVudENhbGxGcmFtZS0+ZXZhbHVhdGUoYnJlYWtJdC0+c2Vjb25kLmNvbmRpdGlvbiwgZXhj
ZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgIC8vIEFuIGVycm9uZW91cyBj
b25kaXRpb24gY291bnRzIGFzICJmYWxzZSIuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdC50b0Jvb2xlYW4obV9jdXJyZW50Q2FsbEZyYW1lLT5zY29wZUNo
YWluKCktPmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKK30KKwordm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50cygpCit7CisgICAgbV9icmVha3BvaW50cy5jbGVhcigp
OworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRl
KFBhdXNlT25FeGNlcHRpb25zU3RhdGUgcGF1c2UpCit7CisgICAgbV9wYXVzZU9uRXhjZXB0aW9u
c1N0YXRlID0gcGF1c2U7Cit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlUHJvZ3Jh
bSgpCiB7Ci0gICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVBbGxK
U0Z1bmN0aW9ucygpOworICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOworfQorCit2
b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjb250aW51ZVByb2dyYW0oKQoreworICAgIGlmICghbV9w
YXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSBm
YWxzZTsKKyAgICBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0cnVlOworfQorCit2
b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzdGVwSW50b1N0YXRlbWVudCgpCit7CisgICAgaWYgKCFt
X3BhdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9
IHRydWU7CisgICAgbV9kb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzID0gdHJ1ZTsKK30KKwor
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcE92ZXJTdGF0ZW1lbnQoKQoreworICAgIGlmICgh
bV9wYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1f
Y3VycmVudENhbGxGcmFtZS5nZXQoKTsKKyAgICBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVu
dHMgPSB0cnVlOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzdGVwT3V0T2ZGdW5jdGlv
bigpCit7CisgICAgaWYgKCFtX3BhdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXVz
ZU9uQ2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lID8gbV9jdXJyZW50Q2FsbEZyYW1lLT5j
YWxsZXIoKSA6IDA7CisgICAgbV9kb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzID0gdHJ1ZTsK
K30KKworSmF2YVNjcmlwdENhbGxGcmFtZSogU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxs
RnJhbWUoKQoreworICAgIGlmICghbV9wYXVzZWQpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBtX2N1cnJlbnRDYWxsRnJhbWUuZ2V0KCk7Cit9CisKK1NjcmlwdFN0YXRlKiBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6Y3VycmVudENhbGxGcmFtZVN0YXRlKCkKK3sKKyAgICBpZiAoIW1fcGF1c2Vk
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9jdXJyZW50Q2FsbEZyYW1lLT5zY29w
ZUNoYWluKCktPmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOyAgICAgICAgCit9CisKK3ZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJT
ZXQmIGxpc3RlbmVycywgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UpCit7CisgICAgU3Ry
aW5nIHNvdXJjZUlEID0gSlNDOjpVU3RyaW5nKEpTQzo6VVN0cmluZzo6ZnJvbShzb3VyY2UucHJv
dmlkZXIoKS0+YXNJRCgpKSk7CisgICAgU3RyaW5nIHVybCA9IHNvdXJjZS5wcm92aWRlcigpLT51
cmwoKTsKKyAgICBTdHJpbmcgZGF0YSA9IEpTQzo6VVN0cmluZyhzb3VyY2UuZGF0YSgpLCBzb3Vy
Y2UubGVuZ3RoKCkpOworICAgIGludCBmaXJzdExpbmUgPSBzb3VyY2UuZmlyc3RMaW5lKCk7CisK
KyAgICBWZWN0b3I8TGlzdGVuZXIqPiBjb3B5OworICAgIGNvcHlUb1ZlY3RvcihsaXN0ZW5lcnMs
IGNvcHkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29weS5zaXplKCk7ICsraSkKKyAg
ICAgICAgY29weVtpXS0+ZGlkUGFyc2VTb3VyY2Uoc291cmNlSUQsIHVybCwgZGF0YSwgZmlyc3RM
aW5lKTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hGYWlsZWRUb1BhcnNl
U291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAg
U3RyaW5nIHVybCA9IHNvdXJjZS5wcm92aWRlcigpLT51cmwoKTsKKyAgICBTdHJpbmcgZGF0YSA9
IEpTQzo6VVN0cmluZyhzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOworICAgIGludCBm
aXJzdExpbmUgPSBzb3VyY2UuZmlyc3RMaW5lKCk7CisKKyAgICBWZWN0b3I8TGlzdGVuZXIqPiBj
b3B5OworICAgIGNvcHlUb1ZlY3RvcihsaXN0ZW5lcnMsIGNvcHkpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY29weS5zaXplKCk7ICsraSkKKyAgICAgICAgY29weVtpXS0+ZmFpbGVkVG9Q
YXJzZVNvdXJjZSh1cmwsIGRhdGEsIGZpcnN0TGluZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2Up
OworfQorCitzdGF0aWMgUGFnZSogdG9QYWdlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgQVNTRVJUX0FSRyhnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCk7CisKKyAgICBK
U0RPTVdpbmRvdyogd2luZG93ID0gYXNKU0RPTVdpbmRvdyhnbG9iYWxPYmplY3QpOworICAgIEZy
YW1lKiBmcmFtZSA9IHdpbmRvdy0+aW1wbCgpLT5mcmFtZSgpOworICAgIHJldHVybiBmcmFtZSA/
IGZyYW1lLT5wYWdlKCkgOiAwOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkZXRhY2go
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICAvLyBJZiB3ZSdyZSBkZXRhY2hp
bmcgZnJvbSB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBnbG9iYWwgb2JqZWN0LCBtYW51YWxseSB0
ZWFyIGRvd24gb3VyCisgICAgLy8gc3RhY2ssIHNpbmNlIHdlIHdvbid0IGdldCBmdXJ0aGVyIGRl
YnVnZ2VyIGNhbGxiYWNrcyB0byBkbyBzby4gQWxzbywgcmVzdW1lIGV4ZWN1dGlvbiwKKyAgICAv
LyBzaW5jZSB0aGVyZSdzIG5vIHBvaW50IGluIHN0YXlpbmcgcGF1c2VkIG9uY2UgYSB3aW5kb3cg
Y2xvc2VzLgorICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUgJiYgbV9jdXJyZW50Q2FsbEZyYW1l
LT5keW5hbWljR2xvYmFsT2JqZWN0KCkgPT0gZ2xvYmFsT2JqZWN0KSB7CisgICAgICAgIG1fY3Vy
cmVudENhbGxGcmFtZSA9IDA7CisgICAgICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IDA7CisgICAg
ICAgIGNvbnRpbnVlUHJvZ3JhbSgpOworICAgIH0KKyAgICBEZWJ1Z2dlcjo6ZGV0YWNoKGdsb2Jh
bE9iamVjdCk7Cit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNvdXJjZVBhcnNlZChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9yTGluZSwgY29u
c3QgVVN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIGlmIChtX2NhbGxpbmdMaXN0ZW5lcnMp
CisgICAgICAgIHJldHVybjsKKworICAgIFBhZ2UqIHBhZ2UgPSB0b1BhZ2UoZXhlYy0+ZHluYW1p
Y0dsb2JhbE9iamVjdCgpKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY2FsbGluZ0xpc3RlbmVycyA9IHRydWU7CisKKyAgICBib29sIGlzRXJyb3IgPSBlcnJvckxp
bmUgIT0gLTE7CisKKyAgICBpZiAoaGFzR2xvYmFsTGlzdGVuZXJzKCkpIHsKKyAgICAgICAgaWYg
KGlzRXJyb3IpCisgICAgICAgICAgICBkaXNwYXRjaEZhaWxlZFRvUGFyc2VTb3VyY2UobV9saXN0
ZW5lcnMsIHNvdXJjZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2UpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBkaXNwYXRjaERpZFBhcnNlU291cmNlKG1fbGlzdGVuZXJzLCBzb3VyY2UpOwor
ICAgIH0KKworICAgIGlmIChMaXN0ZW5lclNldCogcGFnZUxpc3RlbmVycyA9IG1fcGFnZUxpc3Rl
bmVyc01hcC5nZXQocGFnZSkpIHsKKyAgICAgICAgQVNTRVJUKCFwYWdlTGlzdGVuZXJzLT5pc0Vt
cHR5KCkpOworICAgICAgICBpZiAoaXNFcnJvcikKKyAgICAgICAgICAgIGRpc3BhdGNoRmFpbGVk
VG9QYXJzZVNvdXJjZSgqcGFnZUxpc3RlbmVycywgc291cmNlLCBlcnJvckxpbmUsIGVycm9yTWVz
c2FnZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRpc3BhdGNoRGlkUGFyc2VTb3VyY2Uo
KnBhZ2VMaXN0ZW5lcnMsIHNvdXJjZSk7CisgICAgfQorCisgICAgbV9jYWxsaW5nTGlzdGVuZXJz
ID0gZmFsc2U7Cit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRnVuY3Rpb25U
b0xpc3RlbmVycyhjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBKYXZhU2NyaXB0RXhlY3V0
aW9uQ2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgVmVjdG9yPExpc3RlbmVyKj4gY29weTsKKyAg
ICBjb3B5VG9WZWN0b3IobGlzdGVuZXJzLCBjb3B5KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvcHkuc2l6ZSgpOyArK2kpCisgICAgICAgIChjb3B5W2ldLT4qY2FsbGJhY2spKCk7Cit9
CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycyhK
YXZhU2NyaXB0RXhlY3V0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIFBhZ2UqIHBhZ2UpCit7CisgICAg
aWYgKG1fY2FsbGluZ0xpc3RlbmVycykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jYWxsaW5n
TGlzdGVuZXJzID0gdHJ1ZTsKKworICAgIEFTU0VSVChoYXNMaXN0ZW5lcnMoKSk7CisKKyAgICBk
aXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMobV9saXN0ZW5lcnMsIGNhbGxiYWNrKTsKKworICAg
IGlmIChMaXN0ZW5lclNldCogcGFnZUxpc3RlbmVycyA9IG1fcGFnZUxpc3RlbmVyc01hcC5nZXQo
cGFnZSkpIHsKKyAgICAgICAgQVNTRVJUKCFwYWdlTGlzdGVuZXJzLT5pc0VtcHR5KCkpOworICAg
ICAgICBkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoKnBhZ2VMaXN0ZW5lcnMsIGNhbGxiYWNr
KTsKKyAgICB9CisKKyAgICBtX2NhbGxpbmdMaXN0ZW5lcnMgPSBmYWxzZTsKK30KKwordm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlwdFBhdXNlZChjb25zdCBQYWdlR3JvdXAmIHBh
Z2VHcm91cCwgYm9vbCBwYXVzZWQpCit7CisgICAgc2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNl
ZChwYXVzZWQpOworCisgICAgY29uc3QgSGFzaFNldDxQYWdlKj4mIHBhZ2VzID0gcGFnZUdyb3Vw
LnBhZ2VzKCk7CisKKyAgICBIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFn
ZXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBw
YWdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHNldEphdmFTY3JpcHRQYXVz
ZWQoKml0LCBwYXVzZWQpOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRKYXZhU2Ny
aXB0UGF1c2VkKFBhZ2UqIHBhZ2UsIGJvb2wgcGF1c2VkKQoreworICAgIEFTU0VSVF9BUkcocGFn
ZSwgcGFnZSk7CisKKyAgICBwYWdlLT5zZXREZWZlcnNMb2FkaW5nKHBhdXNlZCk7CisKKyAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkKKyAgICAgICAgc2V0SmF2YVNjcmlwdFBhdXNlZChm
cmFtZSwgcGF1c2VkKTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlw
dFBhdXNlZChGcmFtZSogZnJhbWUsIGJvb2wgcGF1c2VkKQoreworICAgIEFTU0VSVF9BUkcoZnJh
bWUsIGZyYW1lKTsKKworICAgIGlmICghZnJhbWUtPnNjcmlwdCgpLT5jYW5FeGVjdXRlU2NyaXB0
cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBmcmFtZS0+c2NyaXB0KCktPnNldFBhdXNlZChw
YXVzZWQpOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Cisg
ICAgaWYgKHBhdXNlZCkKKyAgICAgICAgZG9jdW1lbnQtPnN1c3BlbmRBY3RpdmVET01PYmplY3Rz
KCk7CisgICAgZWxzZQorICAgICAgICBkb2N1bWVudC0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0cygp
OworCisgICAgc2V0SmF2YVNjcmlwdFBhdXNlZChmcmFtZS0+dmlldygpLCBwYXVzZWQpOworfQor
CisjaWYgUExBVEZPUk0oTUFDKQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRKYXZhU2Ny
aXB0UGF1c2VkKEZyYW1lVmlldyosIGJvb2wpCit7Cit9CisKKyNlbHNlCisKK3ZvaWQgU2NyaXB0
RGVidWdTZXJ2ZXI6OnNldEphdmFTY3JpcHRQYXVzZWQoRnJhbWVWaWV3KiB2aWV3LCBib29sIHBh
dXNlZCkKK3sKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEhh
c2hTZXQ8UmVmUHRyPFdpZGdldD4gPiogY2hpbGRyZW4gPSB2aWV3LT5jaGlsZHJlbigpOworICAg
IEFTU0VSVChjaGlsZHJlbik7CisKKyAgICBIYXNoU2V0PFJlZlB0cjxXaWRnZXQ+ID46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGNoaWxkcmVuLT5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRy
PFdpZGdldD4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gKCppdCkuZ2V0KCk7CisgICAg
ICAgIGlmICghd2lkZ2V0LT5pc1BsdWdpblZpZXcoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KS0+c2V0SmF2YVNjcmlwdFBh
dXNlZChwYXVzZWQpOworICAgIH0KK30KKworI2VuZGlmCisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OnBhdXNlSWZOZWVkZWQoUGFnZSogcGFnZSkKK3sKKyAgICBpZiAobV9wYXVzZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghcGFnZSB8fCAhaGFzTGlzdGVuZXJzSW50ZXJlc3RlZElu
UGFnZShwYWdlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBwYXVzZU5vdyA9IG1fcGF1
c2VPbk5leHRTdGF0ZW1lbnQ7CisgICAgcGF1c2VOb3cgfD0gKG1fcGF1c2VPbkNhbGxGcmFtZSA9
PSBtX2N1cnJlbnRDYWxsRnJhbWUpOworICAgIHBhdXNlTm93IHw9IChtX2N1cnJlbnRDYWxsRnJh
bWUtPmxpbmUoKSA+IDAgJiYgaGFzQnJlYWtwb2ludChtX2N1cnJlbnRDYWxsRnJhbWUtPnNvdXJj
ZUlEKCksIG1fY3VycmVudENhbGxGcmFtZS0+bGluZSgpKSk7CisgICAgaWYgKCFwYXVzZU5vdykK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gMDsKKyAgICBtX3Bh
dXNlT25OZXh0U3RhdGVtZW50ID0gZmFsc2U7CisgICAgbV9wYXVzZWQgPSB0cnVlOworCisgICAg
ZGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVuZXJzKCZMaXN0ZW5lcjo6ZGlkUGF1c2UsIHBhZ2UpOwor
CisgICAgc2V0SmF2YVNjcmlwdFBhdXNlZChwYWdlLT5ncm91cCgpLCB0cnVlKTsKKworICAgIFRp
bWVyQmFzZTo6ZmlyZVRpbWVyc0luTmVzdGVkRXZlbnRMb29wKCk7CisKKyAgICBFdmVudExvb3Ag
bG9vcDsKKyAgICBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSBmYWxzZTsKKyAgICB3
aGlsZSAoIW1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cyAmJiAhbG9vcC5lbmRlZCgpKQor
ICAgICAgICBsb29wLmN5Y2xlKCk7CisKKyAgICBzZXRKYXZhU2NyaXB0UGF1c2VkKHBhZ2UtPmdy
b3VwKCksIGZhbHNlKTsKKworICAgIG1fcGF1c2VkID0gZmFsc2U7CisKKyAgICBkaXNwYXRjaEZ1
bmN0aW9uVG9MaXN0ZW5lcnMoJkxpc3RlbmVyOjpkaWRDb250aW51ZSwgcGFnZSk7Cit9CisKK3Zv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNhbGxFdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYg
ZGVidWdnZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikKK3sK
KyAgICBpZiAobV9wYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVudENhbGxG
cmFtZSA9IEphdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZShkZWJ1Z2dlckNhbGxGcmFtZSwgbV9j
dXJyZW50Q2FsbEZyYW1lLCBzb3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgcGF1c2VJZk5lZWRl
ZCh0b1BhZ2UoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKSk7Cit9CisK
K3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmF0U3RhdGVtZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZy
YW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVy
KQoreworICAgIGlmIChtX3BhdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1f
Y3VycmVudENhbGxGcmFtZSk7CisgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fY3VycmVudENhbGxGcmFtZS0+dXBkYXRlKGRlYnVnZ2VyQ2FsbEZy
YW1lLCBzb3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgcGF1c2VJZk5lZWRlZCh0b1BhZ2UoZGVi
dWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKSk7Cit9CisKK3ZvaWQgU2NyaXB0
RGVidWdTZXJ2ZXI6OnJldHVybkV2ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dl
ckNhbGxGcmFtZSwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKQoreworICAgIGlm
IChtX3BhdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY3VycmVudENhbGxG
cmFtZSk7CisgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fY3VycmVudENhbGxGcmFtZS0+dXBkYXRlKGRlYnVnZ2VyQ2FsbEZyYW1lLCBzb3VyY2VJ
RCwgbGluZU51bWJlcik7CisgICAgcGF1c2VJZk5lZWRlZCh0b1BhZ2UoZGVidWdnZXJDYWxsRnJh
bWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKSk7CisKKyAgICAvLyBUcmVhdCBzdGVwcGluZyBvdmVy
IGEgcmV0dXJuIHN0YXRlbWVudCBsaWtlIHN0ZXBwaW5nIG91dC4KKyAgICBpZiAobV9jdXJyZW50
Q2FsbEZyYW1lID09IG1fcGF1c2VPbkNhbGxGcmFtZSkKKyAgICAgICAgbV9wYXVzZU9uQ2FsbEZy
YW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXIoKTsKKyAgICBtX2N1cnJlbnRDYWxsRnJh
bWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlcigpOworfQorCit2b2lkIFNjcmlwdERlYnVn
U2VydmVyOjpleGNlcHRpb24oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZy
YW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIsIGJvb2wgaGFzSGFuZGxlcikK
K3sKKyAgICBpZiAobV9wYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2N1
cnJlbnRDYWxsRnJhbWUpOworICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25BbGxF
eGNlcHRpb25zIHx8IChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0
RXhjZXB0aW9ucyAmJiAhaGFzSGFuZGxlcikpCisgICAgICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1l
bnQgPSB0cnVlOworCisgICAgbV9jdXJyZW50Q2FsbEZyYW1lLT51cGRhdGUoZGVidWdnZXJDYWxs
RnJhbWUsIHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKKyAgICBwYXVzZUlmTmVlZGVkKHRvUGFnZShk
ZWJ1Z2dlckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpKTsKK30KKwordm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1l
JiBkZWJ1Z2dlckNhbGxGcmFtZSwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKQor
eworICAgIGlmIChtX3BhdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50Q2Fs
bEZyYW1lID0gSmF2YVNjcmlwdENhbGxGcmFtZTo6Y3JlYXRlKGRlYnVnZ2VyQ2FsbEZyYW1lLCBt
X2N1cnJlbnRDYWxsRnJhbWUsIHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKKyAgICBwYXVzZUlmTmVl
ZGVkKHRvUGFnZShkZWJ1Z2dlckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpKTsKK30K
Kwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkRXhlY3V0ZVByb2dyYW0oY29uc3QgRGVidWdn
ZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxp
bmVOdW1iZXIpCit7CisgICAgaWYgKG1fcGF1c2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQobV9jdXJyZW50Q2FsbEZyYW1lKTsKKyAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50Q2FsbEZyYW1lLT51cGRhdGUoZGVidWdn
ZXJDYWxsRnJhbWUsIHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKKyAgICBwYXVzZUlmTmVlZGVkKHRv
UGFnZShkZWJ1Z2dlckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpKTsKKworICAgIC8v
IFRyZWF0IHN0ZXBwaW5nIG92ZXIgdGhlIGVuZCBvZiBhIHByb2dyYW0gbGlrZSBzdGVwcGluZyBv
dXQuCisgICAgaWYgKG1fY3VycmVudENhbGxGcmFtZSA9PSBtX3BhdXNlT25DYWxsRnJhbWUpCisg
ICAgICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyKCk7
CisgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXIoKTsK
K30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0IERl
YnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgaW50cHRyX3Qgc291cmNlSUQsIGlu
dCBsaW5lTnVtYmVyKQoreworICAgIGlmIChtX3BhdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUKG1fY3VycmVudENhbGxGcmFtZSk7CisgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJh
bWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVl
OworICAgIG1fY3VycmVudENhbGxGcmFtZS0+dXBkYXRlKGRlYnVnZ2VyQ2FsbEZyYW1lLCBzb3Vy
Y2VJRCwgbGluZU51bWJlcik7CisgICAgcGF1c2VJZk5lZWRlZCh0b1BhZ2UoZGVidWdnZXJDYWxs
RnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKSk7CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpCiB7Ci0gICAgSmF2YVNjcmlwdERlYnVn
U2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKKyAgICBtX3Jl
Y29tcGlsZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVGltZXI8U2NyaXB0RGVidWdTZXJ2ZXI+KikKK3sK
KyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIERlYnVnZ2VyOjpy
ZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaWRBZGRMaXN0ZW5lcihQYWdlKiBwYWdl
KQoreworICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOworCisgICAgaWYgKHBhZ2Up
CisgICAgICAgIHBhZ2UtPnNldERlYnVnZ2VyKHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgUGFn
ZTo6c2V0RGVidWdnZXJGb3JBbGxQYWdlcyh0aGlzKTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6ZGlkUmVtb3ZlTGlzdGVuZXIoUGFnZSogcGFnZSkKK3sKKyAgICBpZiAoaGFzR2xvYmFs
TGlzdGVuZXJzKCkgfHwgKHBhZ2UgJiYgaGFzTGlzdGVuZXJzSW50ZXJlc3RlZEluUGFnZShwYWdl
KSkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigp
OworCisgICAgaWYgKHBhZ2UpCisgICAgICAgIHBhZ2UtPnNldERlYnVnZ2VyKDApOworICAgIGVs
c2UKKyAgICAgICAgUGFnZTo6c2V0RGVidWdnZXJGb3JBbGxQYWdlcygwKTsKK30KKwordm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6ZGlkUmVtb3ZlTGFzdExpc3RlbmVyKCkKK3sKKyAgICBtX2RvbmVQ
cm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgKaW5kZXggMDI3ZmZhNS4u
YmFiNWNlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZl
ci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaApAQCAtMSwy
NyArMSwzMCBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCiAjaWZuZGVmIFNjcmlwdERlYnVnU2VydmVyX2gKQEAgLTI5LDE0ICsz
MiwxMjkgQEAKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogCi0jaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSAiSW5zcGVjdG9yQnJlYWtwb2ludC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKKyNpbmNs
dWRlICJUaW1lci5oIgorCisjaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXIuaD4KKyNpbmNsdWRl
IDxydW50aW1lL1VTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCituYW1lc3BhY2UgSlND
IHsKK2NsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7Cit9CiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcmlwdERlYnVnU2VydmVyIDogcHVibGljIE5v
bmNvcHlhYmxlIHsKK2NsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVWaWV3OworY2xhc3MgUGFnZTsK
K2NsYXNzIFBhZ2VHcm91cDsKK2NsYXNzIEphdmFTY3JpcHRDYWxsRnJhbWU7CisKK2NsYXNzIEZy
YW1lOworY2xhc3MgUGFnZTsKK2NsYXNzIFN0cmluZzsKKworY2xhc3MgU2NyaXB0RGVidWdTZXJ2
ZXIgOiBKU0M6OkRlYnVnZ2VyLCBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAgIHN0
YXRpYyB2b2lkIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCk7Ci0gICAgc3RhdGljIHZvaWQgcmVj
b21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCk7CisgICAgY2xhc3MgTGlzdGVuZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgdmlydHVhbCB+TGlzdGVuZXIoKSB7IH0KKworICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiAgc291cmNlSUQsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUpID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKCkgPSAw
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoKSA9IDA7CisgICAgfTsKKworICAg
IHN0YXRpYyBTY3JpcHREZWJ1Z1NlcnZlciYgc2hhcmVkKCk7CisKKyAgICB2b2lkIGFkZExpc3Rl
bmVyKExpc3RlbmVyKiwgUGFnZSopOworICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoTGlzdGVuZXIq
LCBQYWdlKik7CisKKyAgICB2b2lkIHNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCwgdW5zaWduZWQgbGluZU51bWJlciwgSW5zcGVjdG9yQnJlYWtwb2ludCBicmVha3BvaW50KTsK
KyAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWdu
ZWQgbGluZU51bWJlcik7CisgICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7CisKKyAgICBlbnVt
IFBhdXNlT25FeGNlcHRpb25zU3RhdGUgeworICAgICAgICBEb250UGF1c2VPbkV4Y2VwdGlvbnMs
CisgICAgICAgIFBhdXNlT25BbGxFeGNlcHRpb25zLAorICAgICAgICBQYXVzZU9uVW5jYXVnaHRF
eGNlcHRpb25zCisgICAgfTsKKyAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlT25FeGNl
cHRpb25zU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGU7IH0K
KyAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSk7CisKKyAgICB2b2lkIHBhdXNlUHJvZ3JhbSgpOworICAgIHZvaWQgY29udGludWVQcm9ncmFt
KCk7CisgICAgdm9pZCBzdGVwSW50b1N0YXRlbWVudCgpOworICAgIHZvaWQgc3RlcE92ZXJTdGF0
ZW1lbnQoKTsKKyAgICB2b2lkIHN0ZXBPdXRPZkZ1bmN0aW9uKCk7CisKKyAgICB2b2lkIHJlY29t
cGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOworICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlv
bnMoVGltZXI8U2NyaXB0RGVidWdTZXJ2ZXI+KiA9IDApOworCisgICAgSmF2YVNjcmlwdENhbGxG
cmFtZSogY3VycmVudENhbGxGcmFtZSgpOworICAgIFNjcmlwdFN0YXRlKiBjdXJyZW50Q2FsbEZy
YW1lU3RhdGUoKTsKKworICAgIHZvaWQgcGFnZUNyZWF0ZWQoUGFnZSopOworCitwcml2YXRlOgor
ICAgIHR5cGVkZWYgSGFzaFNldDxMaXN0ZW5lcio+IExpc3RlbmVyU2V0OworICAgIHR5cGVkZWYg
dm9pZCAoTGlzdGVuZXI6OipKYXZhU2NyaXB0RXhlY3V0aW9uQ2FsbGJhY2spKCk7CisKKyAgICBT
Y3JpcHREZWJ1Z1NlcnZlcigpOworICAgIH5TY3JpcHREZWJ1Z1NlcnZlcigpOworCisgICAgYm9v
bCBoYXNCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKSBj
b25zdDsKKyAgICBib29sIGhhc0xpc3RlbmVycygpIGNvbnN0IHsgcmV0dXJuICFtX2xpc3RlbmVy
cy5pc0VtcHR5KCkgfHwgIW1fcGFnZUxpc3RlbmVyc01hcC5pc0VtcHR5KCk7IH0KKyAgICBib29s
IGhhc0dsb2JhbExpc3RlbmVycygpIGNvbnN0IHsgcmV0dXJuICFtX2xpc3RlbmVycy5pc0VtcHR5
KCk7IH0KKyAgICBib29sIGhhc0xpc3RlbmVyc0ludGVyZXN0ZWRJblBhZ2UoUGFnZSopOworCisg
ICAgdm9pZCBzZXRKYXZhU2NyaXB0UGF1c2VkKGNvbnN0IFBhZ2VHcm91cCYsIGJvb2wgcGF1c2Vk
KTsKKyAgICB2b2lkIHNldEphdmFTY3JpcHRQYXVzZWQoUGFnZSosIGJvb2wgcGF1c2VkKTsKKyAg
ICB2b2lkIHNldEphdmFTY3JpcHRQYXVzZWQoRnJhbWUqLCBib29sIHBhdXNlZCk7CisgICAgdm9p
ZCBzZXRKYXZhU2NyaXB0UGF1c2VkKEZyYW1lVmlldyosIGJvb2wgcGF1c2VkKTsKKworICAgIHZv
aWQgZGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVuZXJzKEphdmFTY3JpcHRFeGVjdXRpb25DYWxsYmFj
aywgUGFnZSopOworICAgIHZvaWQgZGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVuZXJzKGNvbnN0IExp
c3RlbmVyU2V0JiBsaXN0ZW5lcnMsIEphdmFTY3JpcHRFeGVjdXRpb25DYWxsYmFjayBjYWxsYmFj
ayk7CisgICAgdm9pZCBkaXNwYXRjaERpZFBhcnNlU291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBs
aXN0ZW5lcnMsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlKTsKKyAgICB2b2lkIGRpc3Bh
dGNoRmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBjb25z
dCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UpOworCisgICAgdm9pZCBwYXVzZUlmTmVlZGVkKFBhZ2UqKTsKKworICAgIHZp
cnR1YWwgdm9pZCBkZXRhY2goSlNDOjpKU0dsb2JhbE9iamVjdCopOworCisgICAgdmlydHVhbCB2
b2lkIHNvdXJjZVBhcnNlZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYs
IGludCBlcnJvckxpbmUsIGNvbnN0IEpTQzo6VVN0cmluZyYgZXJyb3JNc2cpOworICAgIHZpcnR1
YWwgdm9pZCBjYWxsRXZlbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0cl90
IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcik7CisgICAgdmlydHVhbCB2b2lkIGF0U3RhdGVtZW50
KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGZp
cnN0TGluZSk7CisgICAgdmlydHVhbCB2b2lkIHJldHVybkV2ZW50KGNvbnN0IEpTQzo6RGVidWdn
ZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpOworICAgIHZp
cnR1YWwgdm9pZCBleGNlcHRpb24oY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0
cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlciwgYm9vbCBoYXNIYW5kbGVyKTsKKyAgICB2aXJ0
dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUm
LCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVubyk7CisgICAgdmlydHVhbCB2b2lkIGRpZEV4
ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3Vy
Y2VJRCwgaW50IGxpbmVubyk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlYWNoQnJlYWtwb2ludChj
b25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5l
bm8pOworCisgICAgdm9pZCBkaWRBZGRMaXN0ZW5lcihQYWdlKik7CisgICAgdm9pZCBkaWRSZW1v
dmVMaXN0ZW5lcihQYWdlKik7CisgICAgdm9pZCBkaWRSZW1vdmVMYXN0TGlzdGVuZXIoKTsKKwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxQYWdlKiwgTGlzdGVuZXJTZXQqPiBQYWdlTGlzdGVuZXJzTWFw
OworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgU291cmNlQnJlYWtwb2ludHM+IEJyZWFr
cG9pbnRzTWFwOworCisgICAgUGFnZUxpc3RlbmVyc01hcCBtX3BhZ2VMaXN0ZW5lcnNNYXA7Cisg
ICAgTGlzdGVuZXJTZXQgbV9saXN0ZW5lcnM7CisgICAgYm9vbCBtX2NhbGxpbmdMaXN0ZW5lcnM7
CisgICAgUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGU7Cisg
ICAgYm9vbCBtX3BhdXNlT25OZXh0U3RhdGVtZW50OworICAgIGJvb2wgbV9wYXVzZWQ7CisgICAg
Ym9vbCBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHM7CisgICAgSmF2YVNjcmlwdENhbGxG
cmFtZSogbV9wYXVzZU9uQ2FsbEZyYW1lOworICAgIFJlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1l
PiBtX2N1cnJlbnRDYWxsRnJhbWU7CisgICAgQnJlYWtwb2ludHNNYXAgbV9icmVha3BvaW50czsK
KyAgICBUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4gbV9yZWNvbXBpbGVUaW1lcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0RGVidWdTZXJ2ZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZl
ci5jcHAKaW5kZXggM2ZlOGMzNC4uZjM0YjdkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHREZWJ1Z1NlcnZlci5jcHAKQEAgLTMyLDE0ICszMiwxNCBAQAogCiAjaW5jbHVkZSAiU2NyaXB0
RGVidWdTZXJ2ZXIuaCIKIAotbmFtZXNwYWNlIFdlYkNvcmUgeworI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5j
dGlvbnMoKQotewotfQorbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFNjcmlwdERlYnVnU2Vy
dmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKQorU2NyaXB0RGVidWdTZXJ2ZXImIFNj
cmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKQogeworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU2Ny
aXB0RGVidWdTZXJ2ZXIsIHNlcnZlciwgKCkpOworICAgIHJldHVybiBzZXJ2ZXI7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIu
aAppbmRleCBiMzdhZjJmLi5jNTU5M2NiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1
Z1NlcnZlci5oCkBAIC0zNyw4ICszNyw0OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFNjcmlwdERlYnVnU2VydmVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgdm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucygpOwotICAgIHN0YXRpYyB2b2lkIHJl
Y29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOworICAgIGNsYXNzIExpc3RlbmVyIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkxpc3RlbmVyKCkgeyB9CisKKyAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgIHNvdXJjZUlELCBjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lKSA9IDA7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRQYXVzZSgpID0g
MDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZENvbnRpbnVlKCkgPSAwOworICAgIH07CisKKyAg
ICBzdGF0aWMgU2NyaXB0RGVidWdTZXJ2ZXImIHNoYXJlZCgpOworCisgICAgdm9pZCBhZGRMaXN0
ZW5lcihMaXN0ZW5lciosIFBhZ2UqKSB7IH0KKyAgICB2b2lkIHJlbW92ZUxpc3RlbmVyKExpc3Rl
bmVyKiwgUGFnZSopIHsgfQorCisgICAgdm9pZCBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYg
c291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIEluc3BlY3RvckJyZWFrcG9pbnQgYnJlYWtw
b2ludCkgeyB9CisgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNl
SUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpIHsgfQorICAgIHZvaWQgY2xlYXJCcmVha3BvaW50cygp
IHsgfQorCisgICAgZW51bSBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHsKKyAgICAgICAgRG9udFBh
dXNlT25FeGNlcHRpb25zLAorICAgICAgICBQYXVzZU9uQWxsRXhjZXB0aW9ucywKKyAgICAgICAg
UGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucworICAgIH07CisgICAgUGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZSBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKCkgY29uc3QgeyByZXR1cm4gRG9udFBhdXNlT25F
eGNlcHRpb25zOyB9CisgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25F
eGNlcHRpb25zU3RhdGUpIHsgfQorCisgICAgdm9pZCBwYXVzZVByb2dyYW0oKSB7IH0KKyAgICB2
b2lkIGNvbnRpbnVlUHJvZ3JhbSgpIHsgfQorICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnQoKSB7
IH0KKyAgICB2b2lkIHN0ZXBPdmVyU3RhdGVtZW50KCkgeyB9CisgICAgdm9pZCBzdGVwT3V0T2ZG
dW5jdGlvbigpIHsgfQorCisgICAgdm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKSB7
IH0KKyAgICB2b2lkIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFRpbWVyPFNjcmlwdERlYnVnU2Vy
dmVyPiogPSAwKSB7IH0KKworICAgIFNjcmlwdFN0YXRlKiBjdXJyZW50Q2FsbEZyYW1lU3RhdGUo
KSB7IHJldHVybiAwOyB9CisKKyAgICB2b2lkIHBhZ2VDcmVhdGVkKFBhZ2UqKSB7IH0KKworcHJp
dmF0ZToKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcigpIHsgfQorICAgIH5TY3JpcHREZWJ1Z1NlcnZl
cigpIHsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCmlu
ZGV4IDA1NGY5YmEuLmY1ODgxNjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKQEAgLTE1MSw2ICsxNTEs
MjAgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0OjpwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kQ2FsbGJhY2soY29uc3QKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OwogfQogCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OmN1cnJlbnRDYWxsRnJhbWVDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiSW5qZWN0ZWRTY3JpcHRI
b3N0LmN1cnJlbnRDYWxsRnJhbWUoKSIpOworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9
CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0SG9zdDo6aXNBY3RpdmF0
aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMo
IkluamVjdGVkU2NyaXB0SG9zdC5pc0FjdGl2YXRpb24oKSIpOworICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7Cit9CisjZW5kaWYKKwogI2lmIEVOQUJMRShEQVRBQkFTRSkKIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0SG9zdDo6ZGF0YWJhc2VGb3JJZENhbGxiYWNrKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRIb3N0LmNwcAppbmRleCA2MmRiNGI0Li42ZGJiZGZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0SG9zdC5jcHAKQEAgLTQ2LDEwICs0Niw4IEBACiAjaW5jbHVkZSAiSW5zcGVj
dG9yUmVzb3VyY2UuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAKLSNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKLSNpbmNsdWRlICJKYXZhU2NyaXB0Q2FsbEZy
YW1lLmgiCi0jaW5jbHVkZSAiSmF2YVNjcmlwdERlYnVnU2VydmVyLmgiCi11c2luZyBuYW1lc3Bh
Y2UgSlNDOworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorI2luY2x1ZGUgIlNjcmlw
dERlYnVnU2VydmVyLmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKQEAgLTEzMCwx
MyArMTI4LDYgQEAgbG9uZyBJbmplY3RlZFNjcmlwdEhvc3Q6OnB1c2hOb2RlQnlQYXRoVG9Gcm9u
dGVuZChjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgcmV0dXJuIGRvbUFnZW50LT5wdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKG5vZGUpOwogfQogCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
ICYmIFVTRShKU0MpCi1KYXZhU2NyaXB0Q2FsbEZyYW1lKiBJbmplY3RlZFNjcmlwdEhvc3Q6OmN1
cnJlbnRDYWxsRnJhbWUoKSBjb25zdAotewotICAgIHJldHVybiBKYXZhU2NyaXB0RGVidWdTZXJ2
ZXI6OnNoYXJlZCgpLmN1cnJlbnRDYWxsRnJhbWUoKTsKLX0KLSNlbmRpZgotCiAjaWYgRU5BQkxF
KERBVEFCQVNFKQogRGF0YWJhc2UqIEluamVjdGVkU2NyaXB0SG9zdDo6ZGF0YWJhc2VGb3JJZChs
b25nIGRhdGFiYXNlSWQpCiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdEhvc3QuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oCmlu
ZGV4IGZiNTYxMTUuLjExMmQ1NTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0SG9zdC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5oCkBAIC03Myw5ICs3Myw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZE5vZGVzVG9TZWFyY2hS
ZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKTsKICAgICBsb25nIHB1c2hOb2RlQnlQYXRoVG9G
cm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgpOwogCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpICYmIFVTRShKU0MpCi0gICAgSmF2YVNjcmlwdENhbGxGcmFtZSogY3VycmVudENhbGxG
cmFtZSgpIGNvbnN0OwotI2VuZGlmCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgIERhdGFiYXNl
KiBkYXRhYmFzZUZvcklkKGxvbmcgZGF0YWJhc2VJZCk7CiAgICAgdm9pZCBzZWxlY3REYXRhYmFz
ZShEYXRhYmFzZSogZGF0YWJhc2UpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5pZGwKaW5kZXggYmI1N2MzYS4uNzNhMzZmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdEhvc3QuaWRsCkBAIC00MSw3ICs0MSw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAg
dm9pZCBhZGROb2Rlc1RvU2VhcmNoUmVzdWx0KGluIERPTVN0cmluZyBub2RlSWRzKTsKICAgICAg
ICAgbG9uZyBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoaW4gRE9NU3RyaW5nIHBhdGgpOwogCi0j
aWYgZGVmaW5lZChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFX0pBVkFTQ1JJ
UFRfREVCVUdHRVIgJiYgIShkZWZpbmVkKFY4X0JJTkRJTkcpICYmIFY4X0JJTkRJTkcpCisjaWYg
ZGVmaW5lZChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFX0pBVkFTQ1JJUFRf
REVCVUdHRVIKICAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IGN1cnJlbnRDYWxsRnJhbWUoKTsK
ICAgICAgICAgW0N1c3RvbV0gYm9vbGVhbiBpc0FjdGl2YXRpb24oaW4gRE9NT2JqZWN0IG9iamVj
dCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5kZXggYzQz
YmU2My4uYmYyNWE1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKQEAg
LTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNs
dWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckJyZWFrcG9pbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGll
bnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yRE9NQWdlbnQuaCIKQEAgLTU1LDEwICs1Niw4IEBACiAjaW5jbHVkZSAiU3RvcmFnZS5oIgog
I2VuZGlmCiAKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKLSNp
bmNsdWRlICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCi0jaW5jbHVkZSAiSmF2YVNjcmlwdERlYnVn
U2VydmVyLmgiCi11c2luZyBuYW1lc3BhY2UgSlNDOworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQorI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCiAjZW5kaWYKIAogI2luY2x1
ZGUgIm1hcmt1cC5oIgpAQCAtMTQ4LDcgKzE0Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6
c3RvcFRpbWVsaW5lUHJvZmlsZXIoKQogICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnN0
b3BUaW1lbGluZVByb2ZpbGVyKCk7CiB9CiAKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikgJiYgVVNFKEpTQykKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKIGJvb2wgSW5z
cGVjdG9yQmFja2VuZDo6ZGVidWdnZXJFbmFibGVkKCkgY29uc3QKIHsKICAgICBpZiAobV9pbnNw
ZWN0b3JDb250cm9sbGVyKQpAQCAtMTY4LDI3ICsxNjcsMjEgQEAgdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kOjpkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpCiAgICAgICAgIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+ZGlzYWJsZURlYnVnZ2VyKGFsd2F5cyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQmFj
a2VuZDo6YWRkQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5l
TnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbikKLXsKLSAgICBpbnRwdHJfdCBzb3VyY2VJ
RFZhbHVlID0gc291cmNlSUQudG9JbnRQdHIoKTsKLSAgICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6
OnNoYXJlZCgpLmFkZEJyZWFrcG9pbnQoc291cmNlSURWYWx1ZSwgbGluZU51bWJlciwgY29uZGl0
aW9uKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjp1cGRhdGVCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgY29u
ZGl0aW9uKQordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3Ry
aW5nJiBjb25kaXRpb24pCiB7Ci0gICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlE
LnRvSW50UHRyKCk7Ci0gICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS51cGRhdGVC
cmVha3BvaW50KHNvdXJjZUlEVmFsdWUsIGxpbmVOdW1iZXIsIGNvbmRpdGlvbik7CisgICAgaWYg
KG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5z
ZXRCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyLCBlbmFibGVkLCBjb25kaXRpb24pOwog
fQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikKIHsKLSAgICBpbnRwdHJfdCBzb3VyY2VJ
RFZhbHVlID0gc291cmNlSUQudG9JbnRQdHIoKTsKLSAgICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6
OnNoYXJlZCgpLnJlbW92ZUJyZWFrcG9pbnQoc291cmNlSURWYWx1ZSwgbGluZU51bWJlcik7Cisg
ICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5yZW1vdmVCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kOjpwYXVzZUluRGVidWdnZXIoKQogewotICAgIEphdmFTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkucGF1c2VQcm9ncmFtKCk7CisgICAgU2NyaXB0RGVidWdTZXJ2ZXI6
OnNoYXJlZCgpLnBhdXNlUHJvZ3JhbSgpOwogfQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnJl
c3VtZURlYnVnZ2VyKCkKQEAgLTE5OSwzMyArMTkyLDI5IEBAIHZvaWQgSW5zcGVjdG9yQmFja2Vu
ZDo6cmVzdW1lRGVidWdnZXIoKQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnN0ZXBPdmVyU3Rh
dGVtZW50SW5EZWJ1Z2dlcigpCiB7Ci0gICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQo
KS5zdGVwT3ZlclN0YXRlbWVudCgpOworICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5z
dGVwT3ZlclN0YXRlbWVudCgpOwogfQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnN0ZXBJbnRv
U3RhdGVtZW50SW5EZWJ1Z2dlcigpCiB7Ci0gICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFy
ZWQoKS5zdGVwSW50b1N0YXRlbWVudCgpOworICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQo
KS5zdGVwSW50b1N0YXRlbWVudCgpOwogfQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnN0ZXBP
dXRPZkZ1bmN0aW9uSW5EZWJ1Z2dlcigpCiB7Ci0gICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpz
aGFyZWQoKS5zdGVwT3V0T2ZGdW5jdGlvbigpOworICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFy
ZWQoKS5zdGVwT3V0T2ZGdW5jdGlvbigpOwogfQogCiBsb25nIEluc3BlY3RvckJhY2tlbmQ6OnBh
dXNlT25FeGNlcHRpb25zU3RhdGUoKQogewotICAgIHJldHVybiBKYXZhU2NyaXB0RGVidWdTZXJ2
ZXI6OnNoYXJlZCgpLnBhdXNlT25FeGNlcHRpb25zU3RhdGUoKTsKKyAgICByZXR1cm4gU2NyaXB0
RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnBhdXNlT25FeGNlcHRpb25zU3RhdGUoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjpzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKGxvbmcgcGF1c2VT
dGF0ZSkKIHsKLSAgICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldFBhdXNlT25F
eGNlcHRpb25zU3RhdGUoc3RhdGljX2Nhc3Q8SmF2YVNjcmlwdERlYnVnU2VydmVyOjpQYXVzZU9u
RXhjZXB0aW9uc1N0YXRlPihwYXVzZVN0YXRlKSk7CisgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNo
YXJlZCgpLnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoc3RhdGljX2Nhc3Q8U2NyaXB0RGVidWdT
ZXJ2ZXI6OlBhdXNlT25FeGNlcHRpb25zU3RhdGU+KHBhdXNlU3RhdGUpKTsKIH0KIAotSmF2YVNj
cmlwdENhbGxGcmFtZSogSW5zcGVjdG9yQmFja2VuZDo6Y3VycmVudENhbGxGcmFtZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuY3VycmVudENh
bGxGcmFtZSgpOwotfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaAppbmRleCAwZGYxM2Y1Li5kMzFhMTgxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCkBAIC00MSw3ICs0MSw2IEBAIGNsYXNz
IENhY2hlZFJlc291cmNlOwogY2xhc3MgRGF0YWJhc2U7CiBjbGFzcyBJbnNwZWN0b3JET01BZ2Vu
dDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwotY2xhc3MgSmF2YVNjcmlwdENhbGxGcmFtZTsK
IGNsYXNzIE5vZGU7CiBjbGFzcyBTdG9yYWdlOwogCkBAIC03MywxMyArNzIsMTIgQEAgcHVibGlj
OgogICAgIHZvaWQgc3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7CiAgICAgdm9pZCBzdG9wVGltZWxp
bmVQcm9maWxlcigpOwogCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShK
U0MpCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgYm9vbCBkZWJ1Z2dlckVu
YWJsZWQoKSBjb25zdDsKICAgICB2b2lkIGVuYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzKTsKICAg
ICB2b2lkIGRpc2FibGVEZWJ1Z2dlcihib29sIGFsd2F5cyk7CiAKLSAgICB2b2lkIGFkZEJyZWFr
cG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3Qg
U3RyaW5nJiBjb25kaXRpb24pOwotICAgIHZvaWQgdXBkYXRlQnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlv
bik7CisgICAgdm9pZCBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2ln
bmVkIGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pOwog
ICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25l
ZCBsaW5lTnVtYmVyKTsKIAogICAgIHZvaWQgcGF1c2VJbkRlYnVnZ2VyKCk7CkBAIC05Miw5ICs5
MCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0ZXBJbnRvU3RhdGVtZW50SW5EZWJ1Z2dlcigpOwog
ICAgIHZvaWQgc3RlcE91dE9mRnVuY3Rpb25JbkRlYnVnZ2VyKCk7CiAKLSAgICBKYXZhU2NyaXB0
Q2FsbEZyYW1lKiBjdXJyZW50Q2FsbEZyYW1lKCkgY29uc3Q7Ci0jZW5kaWYKLSNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBib29sIHByb2ZpbGVyRW5hYmxlZCgpOwogICAgIHZv
aWQgZW5hYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMpOwogICAgIHZvaWQgZGlzYWJsZVByb2ZpbGVy
KGJvb2wgYWx3YXlzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwKaW5kZXgg
OWZhYWU3Ni4uMWNkNGJmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZC5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwK
QEAgLTQ3LDEzICs0NywxMiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHZvaWQgc3RhcnRUaW1l
bGluZVByb2ZpbGVyKCk7CiAgICAgICAgIHZvaWQgc3RvcFRpbWVsaW5lUHJvZmlsZXIoKTsKIAot
I2lmIGRlZmluZWQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRV9KQVZBU0NS
SVBUX0RFQlVHR0VSICYmICEoZGVmaW5lZChWOF9CSU5ESU5HKSAmJiBWOF9CSU5ESU5HKQorI2lm
IGRlZmluZWQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRV9KQVZBU0NSSVBU
X0RFQlVHR0VSCiAgICAgICAgIGJvb2xlYW4gZGVidWdnZXJFbmFibGVkKCk7CiAgICAgICAgIHZv
aWQgZW5hYmxlRGVidWdnZXIoaW4gYm9vbGVhbiBhbHdheXMpOwogICAgICAgICB2b2lkIGRpc2Fi
bGVEZWJ1Z2dlcihpbiBib29sZWFuIGFsd2F5cyk7CiAKLSAgICAgICAgdm9pZCBhZGRCcmVha3Bv
aW50KGluIERPTVN0cmluZyBzb3VyY2VJRCwgaW4gdW5zaWduZWQgbG9uZyBsaW5lTnVtYmVyLCBp
biBET01TdHJpbmcgY29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCB1cGRhdGVCcmVha3BvaW50KGlu
IERPTVN0cmluZyBzb3VyY2VJRCwgaW4gdW5zaWduZWQgbG9uZyBsaW5lTnVtYmVyLCBpbiBET01T
dHJpbmcgY29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBzZXRCcmVha3BvaW50KGluIERPTVN0cmlu
ZyBzb3VyY2VJRCwgaW4gdW5zaWduZWQgbG9uZyBsaW5lTnVtYmVyLCBpbiBib29sZWFuIGVuYWJs
ZWQsIGluIERPTVN0cmluZyBjb25kaXRpb24pOwogICAgICAgICB2b2lkIHJlbW92ZUJyZWFrcG9p
bnQoaW4gRE9NU3RyaW5nIHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxpbmVOdW1iZXIpOwog
CiAgICAgICAgIHZvaWQgcGF1c2VJbkRlYnVnZ2VyKCk7CkBAIC02NSw4ICs2NCw3IEBAIG1vZHVs
ZSBjb3JlIHsKIAogICAgICAgICBsb25nIHBhdXNlT25FeGNlcHRpb25zU3RhdGUoKTsKICAgICAg
ICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKGluIGxvbmcgcGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZSk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VS
KSAmJiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUgorCiAgICAgICAgIGJvb2xlYW4gcHJvZmls
ZXJFbmFibGVkKCk7CiAgICAgICAgIHZvaWQgZW5hYmxlUHJvZmlsZXIoaW4gYm9vbGVhbiBhbHdh
eXMpOwogICAgICAgICB2b2lkIGRpc2FibGVQcm9maWxlcihpbiBib29sZWFuIGFsd2F5cyk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcmVha3BvaW50LmggYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcmVha3BvaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZTFjNTRlNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJyZWFrcG9pbnQuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVj
dG9yQnJlYWtwb2ludF9oCisjZGVmaW5lIEluc3BlY3RvckJyZWFrcG9pbnRfaAorCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0cnVjdCBJbnNwZWN0b3JCcmVha3BvaW50IHsKKyAgICBJbnNwZWN0
b3JCcmVha3BvaW50KGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pCisgICAg
ICAgIDogZW5hYmxlZChlbmFibGVkKQorICAgICAgICAsIGNvbmRpdGlvbihjb25kaXRpb24pCisg
ICAgeworICAgIH0KKworICAgIEluc3BlY3RvckJyZWFrcG9pbnQoKQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGVuYWJsZWQ7CisgICAgU3RyaW5nIGNvbmRpdGlvbjsKK307CisKK3R5cGVkZWYg
SGFzaE1hcDxpbnQsIEluc3BlY3RvckJyZWFrcG9pbnQ+IFNvdXJjZUJyZWFrcG9pbnRzOworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JCcmVh
a3BvaW50X2gpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4
IGI0ODdhZDguLmQwMDE5Y2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKICNp
bmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5k
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQnJlYWtwb2ludC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckNsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgiCkBAIC05NiwxNyArOTcsMTcgQEAKICNpbmNsdWRl
ICJTdG9yYWdlQXJlYS5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKKyNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKLSNpbmNsdWRlICJKU0phdmFTY3JpcHRD
YWxsRnJhbWUuaCIKLSNpbmNsdWRlICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCi0jaW5jbHVkZSAi
SmF2YVNjcmlwdERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAiSmF2YVNjcmlwdFByb2ZpbGUuaCIK
IAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAjaW5jbHVkZSA8cnVudGltZS9VU3RyaW5n
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7CiAjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTQ0LDcgKzE0NSw3IEBAIEluc3BlY3RvckNv
bnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50
KiBjbGllbnQpCiAgICAgLCBtX2luc3BlY3RvckJhY2tlbmQoSW5zcGVjdG9yQmFja2VuZDo6Y3Jl
YXRlKHRoaXMpKQogICAgICwgbV9pbnNwZWN0b3JGcm9udGVuZEhvc3QoSW5zcGVjdG9yRnJvbnRl
bmRIb3N0OjpjcmVhdGUodGhpcywgY2xpZW50KSkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRIb3N0
KEluamVjdGVkU2NyaXB0SG9zdDo6Y3JlYXRlKHRoaXMpKQotI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKSAmJiBVU0UoSlNDKQorI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQog
ICAgICwgbV9kZWJ1Z2dlckVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2F0dGFjaERlYnVnZ2VyV2hl
blNob3duKGZhbHNlKQogI2VuZGlmCkBAIC0zMDUsMTMgKzMwNiwxMyBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNldFdpbmRvd1Zpc2libGUoYm9vbCB2aXNpYmxlLCBib29sIGF0dGFjaGVk
KQogCiAgICAgICAgIGlmIChtX25vZGVUb0ZvY3VzKQogICAgICAgICAgICAgZm9jdXNOb2RlKCk7
Ci0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCisjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgICAgIGlmIChtX2F0dGFjaERlYnVnZ2VyV2hlblNo
b3duKQogICAgICAgICAgICAgZW5hYmxlRGVidWdnZXIoKTsKICNlbmRpZgogICAgICAgICBzaG93
UGFuZWwobV9zaG93QWZ0ZXJWaXNpYmxlKTsKICAgICB9IGVsc2UgewotI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQorI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQogICAgICAgICAvLyBJZiB0aGUgd2luZG93IGlzIGJlaW5nIGNsb3NlZCB3aXRoIHRoZSBk
ZWJ1Z2dlciBlbmFibGVkLAogICAgICAgICAvLyByZW1lbWJlciB0aGlzIHN0YXRlIHRvIHJlLWVu
YWJsZSBkZWJ1Z2dlciBvbiB0aGUgbmV4dCB3aW5kb3cKICAgICAgICAgLy8gb3BlbmluZy4KQEAg
LTUyNyw3ICs1MjgsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdE9iamVjdFJl
YWR5KCkKICAgICAgICAgcmV0dXJuOwogICAgIHNldEZyb250ZW5kUHJveHlPYmplY3QobV9mcm9u
dGVuZFNjcmlwdFN0YXRlLCB3ZWJJbnNwZWN0b3JPYmopOwogCi0jaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpICYmIFVTRShKU0MpCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CiAgICAgU3RyaW5nIGRlYnVnZ2VyRW5hYmxlZCA9IHNldHRpbmcoZGVidWdnZXJFbmFibGVkU2V0
dGluZ05hbWUpOwogICAgIGlmIChkZWJ1Z2dlckVuYWJsZWQgPT0gInRydWUiKQogICAgICAgICBl
bmFibGVEZWJ1Z2dlcigpOwpAQCAtNTk2LDcgKzU5Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6Y2xvc2UoKQogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKKyNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKICAgICBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOwogICAg
IGRpc2FibGVEZWJ1Z2dlcigpOwogI2VuZGlmCkBAIC03NDcsNiArNzQ4LDkgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAK
ICAgICAgICAgbV90aW1lcy5jbGVhcigpOwogICAgICAgICBtX2NvdW50cy5jbGVhcigpOworI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgICAgICBtX3NvdXJjZUlEVG9VUkwuY2xl
YXIoKTsKKyNlbmRpZgogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlND
KQogICAgICAgICBtX3Byb2ZpbGVzLmNsZWFyKCk7CiAgICAgICAgIG1fY3VycmVudFVzZXJJbml0
aWF0ZWRQcm9maWxlTnVtYmVyID0gMTsKQEAgLTEzNTcsNyArMTM2MSw3IEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6YWRkUHJvZmlsZShQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHBycFBy
b2ZpbGUsIHVuc2lnCiAKICAgICBpZiAobV9mcm9udGVuZCkgewogI2lmIFVTRShKU0MpCi0gICAg
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNM
b2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogI2VuZGlmCiAgICAgICAgIG1f
ZnJvbnRlbmQtPmFkZFByb2ZpbGVIZWFkZXIoY3JlYXRlUHJvZmlsZUhlYWRlcigqcHJvZmlsZSkp
OwogICAgIH0KQEAgLTE0MzEsNyArMTQzNSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKFRpbWVyPEluc3BlY3RvckNvbnRyb2xsZXI+CiAK
ICAgICBpZiAoIXByb2ZpbGVyRW5hYmxlZCgpKSB7CiAgICAgICAgIGVuYWJsZVByb2ZpbGVyKGZh
bHNlLCB0cnVlKTsKLSAgICAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVu
Y3Rpb25zKCk7CisgICAgICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVB
bGxKU0Z1bmN0aW9ucygpOwogICAgIH0KIAogICAgIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFBy
b2ZpbGUgPSB0cnVlOwpAQCAtMTQzOSw3ICsxNDQzLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoVGltZXI8SW5zcGVjdG9yQ29udHJvbGxl
cj4KICAgICBTdHJpbmcgdGl0bGUgPSBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1l
KHRydWUpOwogCiAjaWYgVVNFKEpTQykKLSAgICBFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0gdG9K
U0RPTVdpbmRvdyhtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLCBkZWJ1Z2dlcldvcmxkKCkp
LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0gdG9KU0RP
TVdpbmRvdyhtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLCBkZWJ1Z2dlcldvcmxkKCkpLT5n
bG9iYWxFeGVjKCk7CiAjZWxzZQogICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IDA7CiAj
ZW5kaWYKQEAgLTE0NjAsNyArMTQ2NCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3Rv
cFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKQogICAgIFN0cmluZyB0aXRsZSA9IGdldEN1cnJlbnRV
c2VySW5pdGlhdGVkUHJvZmlsZU5hbWUoKTsKIAogI2lmIFVTRShKU0MpCi0gICAgRXhlY1N0YXRl
KiBzY3JpcHRTdGF0ZSA9IHRvSlNET01XaW5kb3cobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUo
KSwgZGVidWdnZXJXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6RXhlY1N0YXRlKiBz
Y3JpcHRTdGF0ZSA9IHRvSlNET01XaW5kb3cobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSwg
ZGVidWdnZXJXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwogI2Vsc2UKICAgICBTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUgPSAwOwogI2VuZGlmCkBAIC0xNDg5LDcgKzE0OTMsNyBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzLCBib29sIHNraXBSZWNv
bXBpbGUpCiAgICAgbV9wcm9maWxlckVuYWJsZWQgPSB0cnVlOwogCiAgICAgaWYgKCFza2lwUmVj
b21waWxlKQotICAgICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlv
bnNTb29uKCk7CisgICAgICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVB
bGxKU0Z1bmN0aW9uc1Nvb24oKTsKIAogICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICBtX2Zy
b250ZW5kLT5wcm9maWxlcldhc0VuYWJsZWQoKTsKQEAgLTE1MDUsMTQgKzE1MDksMTQgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMpCiAKICAg
ICBtX3Byb2ZpbGVyRW5hYmxlZCA9IGZhbHNlOwogCi0gICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnJl
Y29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOworICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFy
ZWQoKS5yZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKIAogICAgIGlmIChtX2Zyb250ZW5k
KQogICAgICAgICBtX2Zyb250ZW5kLT5wcm9maWxlcldhc0Rpc2FibGVkKCk7CiB9CiAjZW5kaWYK
IAotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQorI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVE
ZWJ1Z2dlckZyb21Gcm9udGVuZChib29sIGFsd2F5cykKIHsKICAgICBpZiAoYWx3YXlzKQpAQCAt
MTUyMCw4ICsxNTI0LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVEZWJ1Z2dl
ckZyb21Gcm9udGVuZChib29sIGFsd2F5cykKIAogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2Up
OwogCi0gICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5hZGRMaXN0ZW5lcih0aGlz
LCBtX2luc3BlY3RlZFBhZ2UpOwotICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCku
Y2xlYXJCcmVha3BvaW50cygpOworICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5hZGRM
aXN0ZW5lcih0aGlzLCBtX2luc3BlY3RlZFBhZ2UpOworICAgIFNjcmlwdERlYnVnU2VydmVyOjpz
aGFyZWQoKS5jbGVhckJyZWFrcG9pbnRzKCk7CiAKICAgICBtX2RlYnVnZ2VyRW5hYmxlZCA9IHRy
dWU7CiAgICAgbV9mcm9udGVuZC0+ZGVidWdnZXJXYXNFbmFibGVkKCk7CkBAIC0xNTUzLDcgKzE1
NTcsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVEZWJ1Z2dlcihib29sIGFs
d2F5cykKIAogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogCi0gICAgSmF2YVNjcmlwdERl
YnVnU2VydmVyOjpzaGFyZWQoKS5yZW1vdmVMaXN0ZW5lcih0aGlzLCBtX2luc3BlY3RlZFBhZ2Up
OworICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZW1vdmVMaXN0ZW5lcih0aGlzLCBt
X2luc3BlY3RlZFBhZ2UpOwogCiAgICAgbV9kZWJ1Z2dlckVuYWJsZWQgPSBmYWxzZTsKICAgICBt
X2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gZmFsc2U7CkBAIC0xNTY2LDI1ICsxNTcwLDY2IEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdW1lRGVidWdnZXIoKQogewogICAgIGlmICgh
bV9kZWJ1Z2dlckVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXI6OnNoYXJlZCgpLmNvbnRpbnVlUHJvZ3JhbSgpOworICAgIFNjcmlwdERlYnVnU2VydmVy
OjpzaGFyZWQoKS5jb250aW51ZVByb2dyYW0oKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVO
dW1iZXIsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pCit7CisgICAgSW5z
cGVjdG9yQnJlYWtwb2ludCBicmVha3BvaW50KGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAgU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1i
ZXIsIGJyZWFrcG9pbnQpOworICAgIFN0cmluZyB1cmwgPSBtX3NvdXJjZUlEVG9VUkwuZ2V0KHNv
dXJjZUlEKTsKKyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNr
eUJyZWFrcG9pbnRzLmZpbmQodXJsKTsKKyAgICBpZiAoaXQgPT0gbV9zdGlja3lCcmVha3BvaW50
cy5lbmQoKSkKKyAgICAgICAgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLnNldCh1cmwsIFNvdXJj
ZUJyZWFrcG9pbnRzKCkpLmZpcnN0OworICAgIGl0LT5zZWNvbmQuc2V0KGxpbmVOdW1iZXIsIGJy
ZWFrcG9pbnQpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZUJyZWFrcG9p
bnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikKK3sKKyAgICBT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVtb3ZlQnJlYWtwb2ludChzb3VyY2VJRCwgbGlu
ZU51bWJlcik7CisgCisgICAgU3RyaW5nIHVybCA9IG1fc291cmNlSURUb1VSTC5nZXQoc291cmNl
SUQpOworICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNo
TWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5QnJl
YWtwb2ludHMuZmluZCh1cmwpOworICAgIGlmIChpdCAhPSBtX3N0aWNreUJyZWFrcG9pbnRzLmVu
ZCgpKQorICAgICAgICBpdC0+c2Vjb25kLnJlbW92ZShsaW5lTnVtYmVyKTsKIH0KIAogLy8gSmF2
YVNjcmlwdERlYnVnTGlzdGVuZXIgZnVuY3Rpb25zCiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkUGFyc2VTb3VyY2UoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQor
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNv
dXJjZUlELCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RM
aW5lKQogewotICAgIG1fZnJvbnRlbmQtPnBhcnNlZFNjcmlwdFNvdXJjZShzb3VyY2UpOworICAg
IG1fZnJvbnRlbmQtPnBhcnNlZFNjcmlwdFNvdXJjZShzb3VyY2VJRCwgdXJsLCBkYXRhLCBmaXJz
dExpbmUpOworCisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlj
a3lCcmVha3BvaW50cy5maW5kKHVybCk7CisgICAgaWYgKGl0ICE9IG1fc3RpY2t5QnJlYWtwb2lu
dHMuZW5kKCkpIHsKKyAgICAgICAgZm9yIChTb3VyY2VCcmVha3BvaW50czo6aXRlcmF0b3IgYnJl
YWtwb2ludEl0ID0gaXQtPnNlY29uZC5iZWdpbigpOyBicmVha3BvaW50SXQgIT0gaXQtPnNlY29u
ZC5lbmQoKTsgKyticmVha3BvaW50SXQpIHsKKyAgICAgICAgICAgIGlmIChmaXJzdExpbmUgPD0g
YnJlYWtwb2ludEl0LT5maXJzdCAmJiBicmVha3BvaW50SXQtPnNlY29uZC5lbmFibGVkKSB7Cisg
ICAgICAgICAgICAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJyZWFrcG9pbnQo
c291cmNlSUQsIGJyZWFrcG9pbnRJdC0+Zmlyc3QsIGJyZWFrcG9pbnRJdC0+c2Vjb25kKTsKKyAg
ICAgICAgICAgICAgICBtX2Zyb250ZW5kLT5yZXN0b3JlZEJyZWFrcG9pbnQoc291cmNlSUQsIGJy
ZWFrcG9pbnRJdC0+Zmlyc3QsIGJyZWFrcG9pbnRJdC0+c2Vjb25kLmVuYWJsZWQsIGJyZWFrcG9p
bnRJdC0+c2Vjb25kLmNvbmRpdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBtX3NvdXJjZUlEVG9VUkwuc2V0KHNvdXJjZUlELCB1cmwpOwogfQogCi12b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmZhaWxlZFRvUGFyc2VTb3VyY2UoRXhlY1N0YXRlKiwgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBVU3RyaW5nJiBlcnJvck1l
c3NhZ2UpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZhaWxlZFRvUGFyc2VTb3VyY2UoY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVy
cm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgbV9mcm9udGVuZC0+
ZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZShzb3VyY2UsIGVycm9yTGluZSwgZXJyb3JNZXNzYWdl
KTsKKyAgICBtX2Zyb250ZW5kLT5mYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlKHVybCwgZGF0YSwg
Zmlyc3RMaW5lLCBlcnJvckxpbmUsIGVycm9yTWVzc2FnZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6ZGlkUGF1c2UoKQogewotICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5jdXJyZW50Q2FsbEZyYW1lKCk7Ci0gICAgU2Ny
aXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOworICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IFNjcmlw
dERlYnVnU2VydmVyOjpzaGFyZWQoKS5jdXJyZW50Q2FsbEZyYW1lU3RhdGUoKTsKICAgICBBU1NF
UlQoc2NyaXB0U3RhdGUpOwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9p
bmplY3RlZFNjcmlwdEhvc3QtPmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKICAgICBS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjYWxsRnJhbWVzID0gaW5qZWN0ZWRTY3JpcHQu
Y2FsbEZyYW1lcygpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4
IDJmMjVlZWMuLjE2OWM0MmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmgKQEAgLTQ3LDEyICs0Nyw4IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYg
VVNFKEpTQykKLSNpbmNsdWRlICJKYXZhU2NyaXB0RGVidWdMaXN0ZW5lci5oIgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLWNsYXNzIFVTdHJpbmc7Ci19CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCisjaW5jbHVkZSAiU2NyaXB0RGVidWdTZXJ2ZXIuaCIKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC05MCw4ICs4Niw4IEBAIGNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZTsKIGNsYXNzIEluc3BlY3RvclJlc291cmNlOwogCiBjbGFzcyBJbnNwZWN0b3JDb250cm9s
bGVyCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIDogSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIsIHB1YmxpYyBOb25j
b3B5YWJsZQorI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IFNjcmlwdERlYnVnU2VydmVyOjpMaXN0ZW5lciwgcHVibGljIE5vbmNvcHlh
YmxlCiAjZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHB1YmxpYyBOb25jb3B5YWJs
ZQogI2VuZGlmCkBAIC0yMzYsMTUgKzIzMiwxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcm9maWxl
ckVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBlbmFibGVkKCkgJiYgbV9wcm9maWxlckVuYWJsZWQ7
IH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0Mp
CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgdm9pZCBlbmFibGVEZWJ1Z2dl
cigpOwogICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzID0gZmFsc2UpOwogICAg
IGJvb2wgZGVidWdnZXJFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckVuYWJsZWQ7
IH0KIAogICAgIHZvaWQgcmVzdW1lRGVidWdnZXIoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkaWRQ
YXJzZVNvdXJjZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYpOwotICAg
IHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpTb3VyY2VDb2RlJiwgaW50IGVycm9yTGluZSwgY29uc3QgSlNDOjpVU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpOworICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcm
IHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmly
c3RMaW5lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5l
LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNl
KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbnRpbnVlKCk7CiAjZW5kaWYKQEAgLTI3MSw2ICsy
NjcsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IFN0cmluZyYgY29v
a2llTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCisgICAgdm9pZCBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQs
IHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRp
b24pOworICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1
bnNpZ25lZCBsaW5lTnVtYmVyKTsKKwogICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCBpbnQs
IFJlZlB0cjxTY3JpcHRQcm9maWxlPiA+IFByb2ZpbGVzTWFwOwogCiAgICAgdm9pZCBzdGFydFVz
ZXJJbml0aWF0ZWRQcm9maWxpbmdTb29uKCk7CkBAIC0zNDgsMTEgKzM0NywxMiBAQCBwcml2YXRl
OgogICAgIG11dGFibGUgU2V0dGluZ3MgbV9zZXR0aW5nczsKIAogICAgIFZlY3RvcjxwYWlyPGxv
bmcsIFN0cmluZz4gPiBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kczsKLSNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKICAgICBib29sIG1fZGVidWdnZXJFbmFibGVkOwogICAgIGJvb2wgbV9hdHRhY2hE
ZWJ1Z2dlcldoZW5TaG93bjsKLSNlbmRpZgotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQorICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fc291cmNlSURUb1VSTDsKKyAgICBIYXNo
TWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+IG1fc3RpY2t5QnJlYWtwb2ludHM7CisKICAg
ICBib29sIG1fcHJvZmlsZXJFbmFibGVkOwogICAgIGJvb2wgbV9yZWNvcmRpbmdVc2VySW5pdGlh
dGVkUHJvZmlsZTsKICAgICBpbnQgbV9jdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXI7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKaW5kZXggOTBiNjBmNC4uM2Yy
YWVkNCAxMDA3NTUKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3Bw
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcApAQCAtNDYsMTIg
KzQ2LDYgQEAKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpT
QykKLSNpbmNsdWRlIDxwYXJzZXIvU291cmNlQ29kZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNW
YWx1ZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVVN0cmluZy5oPgotI2VuZGlmCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogSW5zcGVjdG9yRnJvbnRlbmQ6Okluc3BlY3RvckZyb250ZW5kKEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIFNjcmlwdE9iamVjdCB3ZWJJbnNw
ZWN0b3IpCkBAIC0yNTAsNyArMjQ0LDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkUmVj
b3JkVG9UaW1lbGluZShjb25zdCBTY3JpcHRPYmplY3QmIHJlY29yZCkKICAgICBmdW5jdGlvbi5j
YWxsKCk7CiB9CiAKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykK
KyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OmF0dGFjaERlYnVnZ2VyV2hlblNob3duKCkKIHsKICAgICBjYWxsU2ltcGxlRnVuY3Rpb24oImF0
dGFjaERlYnVnZ2VyV2hlblNob3duIik7CkBAIC0yNjYsMjQgKzI2MCwzNSBAQCB2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjpkZWJ1Z2dlcldhc0Rpc2FibGVkKCkKICAgICBjYWxsU2ltcGxlRnVuY3Rp
b24oImRlYnVnZ2VyV2FzRGlzYWJsZWQiKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
cGFyc2VkU2NyaXB0U291cmNlKGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlKQordm9pZCBJ
bnNwZWN0b3JGcm9udGVuZDo6cGFyc2VkU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNl
SUQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUp
CiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlz
cGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInBhcnNlZFNjcmlwdFNvdXJj
ZSIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KEpTQzo6VVN0cmluZyhKU0M6OlVTdHJp
bmc6OmZyb20oc291cmNlLnByb3ZpZGVyKCktPmFzSUQoKSkpKTsKLSAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpOwotICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KEpTQzo6VVN0cmluZyhzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpKTsK
LSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzb3VyY2UuZmlyc3RMaW5lKCkpOworICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNvdXJjZUlEKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudCh1cmwpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGRhdGEpOworICAgIGZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KGZpcnN0TGluZSk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQor
Cit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpyZXN0b3JlZEJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBzb3VyY2VJRCwgaW50IGxpbmUsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRp
b24pCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAi
ZGlzcGF0Y2giKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgicmVzdG9yZWRCcmVha3Bv
aW50Iik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc291cmNlSUQpOworICAgIGZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KGxpbmUpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGVu
YWJsZWQpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNvbmRpdGlvbik7CiAgICAgZnVu
Y3Rpb24uY2FsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjpmYWlsZWRUb1BhcnNl
U2NyaXB0U291cmNlKGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBpbnQgZXJyb3JMaW5l
LCBjb25zdCBKU0M6OlVTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OmZhaWxlZFRvUGFyc2VTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5z
cGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImZhaWxl
ZFRvUGFyc2VTY3JpcHRTb3VyY2UiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzb3Vy
Y2UucHJvdmlkZXIoKS0+dXJsKCkpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KEpTQzo6
VVN0cmluZyhzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpKTsKLSAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudChzb3VyY2UuZmlyc3RMaW5lKCkpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KHVybCk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZGF0YSk7CisgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoZmlyc3RMaW5lKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudChlcnJvckxpbmUpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGVycm9yTWVzc2Fn
ZSk7CiAgICAgZnVuY3Rpb24uY2FsbCgpOwpAQCAtMzAyLDkgKzMwNyw3IEBAIHZvaWQgSW5zcGVj
dG9yRnJvbnRlbmQ6OnJlc3VtZWRTY3JpcHQoKQogewogICAgIGNhbGxTaW1wbGVGdW5jdGlvbigi
cmVzdW1lZFNjcmlwdCIpOwogfQotI2VuZGlmCiAKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnByb2ZpbGVyV2FzRW5hYmxlZCgpCiB7CiAg
ICAgY2FsbFNpbXBsZUZ1bmN0aW9uKCJwcm9maWxlcldhc0VuYWJsZWQiKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZC5oCmluZGV4IDFhMzcyNTYuLmMwYTIzZTAgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaApAQCAtMzUsMTQgKzM1LDYgQEAKICNpbmNsdWRlICJT
Y3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKLSNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKLW5hbWVzcGFjZSBKU0MgewotICAgIGNs
YXNzIEpTVmFsdWU7Ci0gICAgY2xhc3MgU291cmNlQ29kZTsKLSAgICBjbGFzcyBVU3RyaW5nOwot
fQotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDb25zb2xlTWVzc2Fn
ZTsKICAgICBjbGFzcyBEYXRhYmFzZTsKQEAgLTg0LDE2ICs3NiwxNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZvaWQgcmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQoKTsKICAgICAg
ICAgdm9pZCByZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQoKTsKIAotI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQorI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQogICAgICAgICB2b2lkIGF0dGFjaERlYnVnZ2VyV2hlblNob3duKCk7CiAgICAgICAgIHZv
aWQgZGVidWdnZXJXYXNFbmFibGVkKCk7CiAgICAgICAgIHZvaWQgZGVidWdnZXJXYXNEaXNhYmxl
ZCgpOwotICAgICAgICB2b2lkIHBhcnNlZFNjcmlwdFNvdXJjZShjb25zdCBKU0M6OlNvdXJjZUNv
ZGUmKTsKLSAgICAgICAgdm9pZCBmYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlKGNvbnN0IEpTQzo6
U291cmNlQ29kZSYsIGludCBlcnJvckxpbmUsIGNvbnN0IEpTQzo6VVN0cmluZyYgZXJyb3JNZXNz
YWdlKTsKKworICAgICAgICB2b2lkIHBhcnNlZFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNv
dXJjZUlELCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RM
aW5lKTsKKyAgICAgICAgdm9pZCByZXN0b3JlZEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCwgaW50IGxpbmUsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pOwor
ICAgICAgICB2b2lkIGZhaWxlZFRvUGFyc2VTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogICAgICAgICB2b2lkIHBhdXNlZFNjcmlwdChTZXJpYWxp
emVkU2NyaXB0VmFsdWUqIGNhbGxGcmFtZXMpOwogICAgICAgICB2b2lkIHJlc3VtZWRTY3JpcHQo
KTsKLSNlbmRpZgotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorCiAgICAgICAgIHZv
aWQgcHJvZmlsZXJXYXNFbmFibGVkKCk7CiAgICAgICAgIHZvaWQgcHJvZmlsZXJXYXNEaXNhYmxl
ZCgpOwogICAgICAgICB2b2lkIGFkZFByb2ZpbGVIZWFkZXIoY29uc3QgU2NyaXB0VmFsdWUmIHBy
b2ZpbGUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnTGlz
dGVuZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z0xpc3RlbmVyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1NzAwNjUuLjAwMDAwMDAKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgSmF2YVNjcmlwdERlYnVnTGlzdGVuZXJfaAotI2RlZmluZSBK
YXZhU2NyaXB0RGVidWdMaXN0ZW5lcl9oCi0KLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikgJiYgVVNFKEpTQykKLQotbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xhc3MgRXhlY1N0YXRlOwot
ICAgIGNsYXNzIFNvdXJjZUNvZGU7Ci0gICAgY2xhc3MgVVN0cmluZzsKLX0KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3MgUGFnZTsKLQotICAgIGNs
YXNzIEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1
YWwgfkphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyKCkgeyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFBhcnNlU291cmNlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBz
b3VyY2UpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGZhaWxlZFRvUGFyc2VTb3VyY2UoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9yTGlu
ZSwgY29uc3QgSlNDOjpVU3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFBhdXNlKCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUo
KSA9IDA7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0KLSNlbmRpZiAvLyBKYXZhU2NyaXB0RGVidWdMaXN0
ZW5lcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNjMzU3Ny4uMDAwMDAwMAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NjQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKYXZhU2Ny
aXB0RGVidWdTZXJ2ZXIuaCIKLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBV
U0UoSlNDKQotCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRXZlbnRMb29wLmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgotI2luY2x1ZGUgIkph
dmFTY3JpcHRDYWxsRnJhbWUuaCIKLSNpbmNsdWRlICJKYXZhU2NyaXB0RGVidWdMaXN0ZW5lci5o
IgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJQ
bHVnaW5WaWV3LmgiCi0jaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgotI2luY2x1ZGUgIldpZGdldC5o
IgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDxkZWJ1Z2dlci9EZWJ1
Z2dlckNhbGxGcmFtZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6Okxpc3RlbmVyU2V0
IExpc3RlbmVyU2V0OwotCi1pbmxpbmUgY29uc3QgVVN0cmluZyYgSmF2YVNjcmlwdERlYnVnU2Vy
dmVyOjpCcmVha3BvaW50SW5mbzo6Y29uZGl0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9j
b25kaXRpb247Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpCcmVha3BvaW50SW5m
bzo6c2V0Q29uZGl0aW9uKGNvbnN0IFVTdHJpbmcmIGNvbmRpdGlvbikKLXsKLSAgICBtX2NvbmRp
dGlvbiA9IGNvbmRpdGlvbjsKLX0KLQotSmF2YVNjcmlwdERlYnVnU2VydmVyJiBKYXZhU2NyaXB0
RGVidWdTZXJ2ZXI6OnNoYXJlZCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChKYXZhU2Ny
aXB0RGVidWdTZXJ2ZXIsIHNlcnZlciwgKCkpOwotICAgIHJldHVybiBzZXJ2ZXI7Ci19Ci0KLUph
dmFTY3JpcHREZWJ1Z1NlcnZlcjo6SmF2YVNjcmlwdERlYnVnU2VydmVyKCkKLSAgICA6IG1fY2Fs
bGluZ0xpc3RlbmVycyhmYWxzZSkKLSAgICAsIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShEb250
UGF1c2VPbkV4Y2VwdGlvbnMpCi0gICAgLCBtX3BhdXNlT25OZXh0U3RhdGVtZW50KGZhbHNlKQot
ICAgICwgbV9wYXVzZWQoZmFsc2UpCi0gICAgLCBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVu
dHModHJ1ZSkKLSAgICAsIG1fcGF1c2VPbkNhbGxGcmFtZSgwKQotICAgICwgbV9yZWNvbXBpbGVU
aW1lcih0aGlzLCAmSmF2YVNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9u
cykKLXsKLX0KLQotSmF2YVNjcmlwdERlYnVnU2VydmVyOjp+SmF2YVNjcmlwdERlYnVnU2VydmVy
KCkKLXsKLSAgICBkZWxldGVBbGxWYWx1ZXMobV9wYWdlTGlzdGVuZXJzTWFwKTsKLSAgICBkZWxl
dGVBbGxWYWx1ZXMobV9icmVha3BvaW50cyk7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2Vy
dmVyOjphZGRMaXN0ZW5lcihKYXZhU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIpCi17Ci0g
ICAgQVNTRVJUX0FSRyhsaXN0ZW5lciwgbGlzdGVuZXIpOwotCi0gICAgbV9saXN0ZW5lcnMuYWRk
KGxpc3RlbmVyKTsKLQotICAgIGRpZEFkZExpc3RlbmVyKDApOwotfQotCi12b2lkIEphdmFTY3Jp
cHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIqIGxp
c3RlbmVyKQotewotICAgIEFTU0VSVF9BUkcobGlzdGVuZXIsIGxpc3RlbmVyKTsKLQotICAgIG1f
bGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7Ci0KLSAgICBkaWRSZW1vdmVMaXN0ZW5lcigwKTsK
LSAgICBpZiAoIWhhc0xpc3RlbmVycygpKQotICAgICAgICBkaWRSZW1vdmVMYXN0TGlzdGVuZXIo
KTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKEphdmFTY3Jp
cHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgUGFnZSogcGFnZSkKLXsKLSAgICBBU1NFUlRfQVJH
KGxpc3RlbmVyLCBsaXN0ZW5lcik7Ci0gICAgQVNTRVJUX0FSRyhwYWdlLCBwYWdlKTsKLQotICAg
IHBhaXI8UGFnZUxpc3RlbmVyc01hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fcGFnZUxp
c3RlbmVyc01hcC5hZGQocGFnZSwgMCk7Ci0gICAgaWYgKHJlc3VsdC5zZWNvbmQpCi0gICAgICAg
IHJlc3VsdC5maXJzdC0+c2Vjb25kID0gbmV3IExpc3RlbmVyU2V0OwotCi0gICAgTGlzdGVuZXJT
ZXQqIGxpc3RlbmVycyA9IHJlc3VsdC5maXJzdC0+c2Vjb25kOwotICAgIGxpc3RlbmVycy0+YWRk
KGxpc3RlbmVyKTsKLQotICAgIGRpZEFkZExpc3RlbmVyKHBhZ2UpOwotfQotCi12b2lkIEphdmFT
Y3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIq
IGxpc3RlbmVyLCBQYWdlKiBwYWdlKQotewotICAgIEFTU0VSVF9BUkcobGlzdGVuZXIsIGxpc3Rl
bmVyKTsKLSAgICBBU1NFUlRfQVJHKHBhZ2UsIHBhZ2UpOwotCi0gICAgUGFnZUxpc3RlbmVyc01h
cDo6aXRlcmF0b3IgaXQgPSBtX3BhZ2VMaXN0ZW5lcnNNYXAuZmluZChwYWdlKTsKLSAgICBpZiAo
aXQgPT0gbV9wYWdlTGlzdGVuZXJzTWFwLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBM
aXN0ZW5lclNldCogbGlzdGVuZXJzID0gaXQtPnNlY29uZDsKLSAgICBsaXN0ZW5lcnMtPnJlbW92
ZShsaXN0ZW5lcik7Ci0gICAgaWYgKGxpc3RlbmVycy0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1f
cGFnZUxpc3RlbmVyc01hcC5yZW1vdmUoaXQpOwotICAgICAgICBkZWxldGUgbGlzdGVuZXJzOwot
ICAgIH0KLQotICAgIGRpZFJlbW92ZUxpc3RlbmVyKHBhZ2UpOwotICAgIGlmICghaGFzTGlzdGVu
ZXJzKCkpCi0gICAgICAgIGRpZFJlbW92ZUxhc3RMaXN0ZW5lcigpOwotfQotCi12b2lkIEphdmFT
Y3JpcHREZWJ1Z1NlcnZlcjo6cGFnZUNyZWF0ZWQoUGFnZSogcGFnZSkKLXsKLSAgICBBU1NFUlRf
QVJHKHBhZ2UsIHBhZ2UpOwotCi0gICAgaWYgKCFoYXNMaXN0ZW5lcnNJbnRlcmVzdGVkSW5QYWdl
KHBhZ2UpKQotICAgICAgICByZXR1cm47Ci0gICAgcGFnZS0+c2V0RGVidWdnZXIodGhpcyk7Ci19
Ci0KLWJvb2wgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpoYXNMaXN0ZW5lcnNJbnRlcmVzdGVkSW5Q
YWdlKFBhZ2UqIHBhZ2UpCi17Ci0gICAgQVNTRVJUX0FSRyhwYWdlLCBwYWdlKTsKLQotICAgIGlm
IChoYXNHbG9iYWxMaXN0ZW5lcnMoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1
cm4gbV9wYWdlTGlzdGVuZXJzTWFwLmNvbnRhaW5zKHBhZ2UpOwotfQotCi12b2lkIEphdmFTY3Jp
cHREZWJ1Z1NlcnZlcjo6YWRkQnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJRCwgdW5zaWduZWQg
bGluZU51bWJlciwgY29uc3QgVVN0cmluZyYgY29uZGl0aW9uKQotewotICAgIExpbmVUb0JyZWFr
cG9pbnRJbmZvTWFwKiBzb3VyY2VCcmVha3BvaW50cyA9IG1fYnJlYWtwb2ludHMuZ2V0KHNvdXJj
ZUlEKTsKLSAgICBpZiAoIXNvdXJjZUJyZWFrcG9pbnRzKSB7Ci0gICAgICAgIHNvdXJjZUJyZWFr
cG9pbnRzID0gbmV3IExpbmVUb0JyZWFrcG9pbnRJbmZvTWFwOwotICAgICAgICBtX2JyZWFrcG9p
bnRzLnNldChzb3VyY2VJRCwgc291cmNlQnJlYWtwb2ludHMpOwotICAgIH0KLSAgICBCcmVha3Bv
aW50SW5mbyogaW5mbyA9IHNvdXJjZUJyZWFrcG9pbnRzLT5nZXQobGluZU51bWJlcik7Ci0gICAg
aWYgKCFpbmZvKQotICAgICAgICBzb3VyY2VCcmVha3BvaW50cy0+c2V0KGxpbmVOdW1iZXIsIG5l
dyBCcmVha3BvaW50SW5mbyhjb25kaXRpb24pKTsKLSAgICBlbHNlCi0gICAgICAgIHVwZGF0ZUJy
ZWFrcG9pbnRJbmZvKGluZm8sIGNvbmRpdGlvbik7Ci19Ci0KLUphdmFTY3JpcHREZWJ1Z1NlcnZl
cjo6QnJlYWtwb2ludEluZm8qIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6YnJlYWtwb2ludEluZm8o
aW50cHRyX3Qgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpIGNvbnN0Ci17Ci0gICAgTGlu
ZVRvQnJlYWtwb2ludEluZm9NYXAqIHNvdXJjZUJyZWFrcG9pbnRzID0gbV9icmVha3BvaW50cy5n
ZXQoc291cmNlSUQpOwotICAgIGlmICghc291cmNlQnJlYWtwb2ludHMpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBzb3VyY2VCcmVha3BvaW50cy0+Z2V0KGxpbmVOdW1iZXIpOwotfQot
Ci12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6dXBkYXRlQnJlYWtwb2ludChpbnRwdHJfdCBz
b3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgVVN0cmluZyYgY29uZGl0aW9uKQot
ewotICAgIEJyZWFrcG9pbnRJbmZvKiBpbmZvID0gYnJlYWtwb2ludEluZm8oc291cmNlSUQsIGxp
bmVOdW1iZXIpOwotICAgIGlmICghaW5mbykKLSAgICAgICAgcmV0dXJuOwotICAgIHVwZGF0ZUJy
ZWFrcG9pbnRJbmZvKGluZm8sIGNvbmRpdGlvbik7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVn
U2VydmVyOjp1cGRhdGVCcmVha3BvaW50SW5mbyhCcmVha3BvaW50SW5mbyogaW5mbywgY29uc3Qg
VVN0cmluZyYgY29uZGl0aW9uKQotewotICAgIGluZm8tPnNldENvbmRpdGlvbihjb25kaXRpb24p
OwotfQotCi12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludChpbnRw
dHJfdCBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikKLXsKLSAgICBMaW5lVG9CcmVha3Bv
aW50SW5mb01hcCogc291cmNlQnJlYWtwb2ludHMgPSBtX2JyZWFrcG9pbnRzLmdldChzb3VyY2VJ
RCk7Ci0gICAgaWYgKCFzb3VyY2VCcmVha3BvaW50cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QnJlYWtwb2ludEluZm8qIGluZm8gPSBzb3VyY2VCcmVha3BvaW50cy0+Z2V0KGxpbmVOdW1iZXIp
OwotICAgIGlmICghaW5mbykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc291cmNlQnJlYWtwb2lu
dHMtPnJlbW92ZShsaW5lTnVtYmVyKTsKLSAgICBkZWxldGUgaW5mbzsKLQotICAgIGlmIChzb3Vy
Y2VCcmVha3BvaW50cy0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fYnJlYWtwb2ludHMucmVtb3Zl
KHNvdXJjZUlEKTsKLSAgICAgICAgZGVsZXRlIHNvdXJjZUJyZWFrcG9pbnRzOwotICAgIH0KLX0K
LQotYm9vbCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0JyZWFrcG9pbnQoaW50cHRyX3Qgc291
cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpIGNvbnN0Ci17Ci0gICAgQnJlYWtwb2ludEluZm8q
IGluZm8gPSBicmVha3BvaW50SW5mbyhzb3VyY2VJRCwgbGluZU51bWJlcik7Ci0gICAgaWYgKCFp
bmZvKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBbiBlbXB0eSBjb25kaXRpb24g
Y291bnRzIGFzIG5vIGNvbmRpdGlvbiB3aGljaCBpcyBlcXVpdmFsZW50IHRvICJ0cnVlIi4KLSAg
ICBpZiAoaW5mby0+Y29uZGl0aW9uKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9jdXJyZW50
Q2FsbEZyYW1lLT5ldmFsdWF0ZShpbmZvLT5jb25kaXRpb24oKSwgZXhjZXB0aW9uKTsKLSAgICBp
ZiAoZXhjZXB0aW9uKSB7Ci0gICAgICAgIC8vIEFuIGVycm9uZW91cyBjb25kaXRpb24gY291bnRz
IGFzICJmYWxzZSIuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJl
c3VsdC50b0Jvb2xlYW4obV9jdXJyZW50Q2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpKTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmNs
ZWFyQnJlYWtwb2ludHMoKQotewotICAgIEJyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBlbmQgPSBt
X2JyZWFrcG9pbnRzLmVuZCgpOwotICAgIGZvciAoQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9icmVha3BvaW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgZGVs
ZXRlQWxsVmFsdWVzKCooaXQtPnNlY29uZCkpOwotICAgICAgICBpdC0+c2Vjb25kLT5jbGVhcigp
OwotICAgIH0KLSAgICBkZWxldGVBbGxWYWx1ZXMobV9icmVha3BvaW50cyk7Ci0gICAgbV9icmVh
a3BvaW50cy5jbGVhcigpOwotfQotCi12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlKQotewotICAg
IG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9IHBhdXNlOwotfQotCi12b2lkIEphdmFTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cGF1c2VQcm9ncmFtKCkKLXsKLSAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50
ID0gdHJ1ZTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmNvbnRpbnVlUHJvZ3Jh
bSgpCi17Ci0gICAgaWYgKCFtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXVz
ZU9uTmV4dFN0YXRlbWVudCA9IGZhbHNlOwotICAgIG1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2
ZW50cyA9IHRydWU7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzdGVwSW50b1N0
YXRlbWVudCgpCi17Ci0gICAgaWYgKCFtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7Ci0gICAgbV9kb25lUHJvY2Vzc2luZ0RlYnVn
Z2VyRXZlbnRzID0gdHJ1ZTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBP
dmVyU3RhdGVtZW50KCkKLXsKLSAgICBpZiAoIW1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUuZ2V0KCk7Ci0gICAg
bV9kb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzID0gdHJ1ZTsKLX0KLQotdm9pZCBKYXZhU2Ny
aXB0RGVidWdTZXJ2ZXI6OnN0ZXBPdXRPZkZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoIW1fcGF1c2Vk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSBtX2N1cnJlbnRD
YWxsRnJhbWUgPyBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlcigpIDogMDsKLSAgICBtX2RvbmVQ
cm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0cnVlOwotfQotCi1KYXZhU2NyaXB0Q2FsbEZyYW1l
KiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWUoKQotewotICAgIGlmICgh
bV9wYXVzZWQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2N1cnJlbnRDYWxsRnJh
bWUuZ2V0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpc3BhdGNoRGlkUGFyc2VTb3VyY2UoY29uc3Qg
TGlzdGVuZXJTZXQmIGxpc3RlbmVycywgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OlNvdXJj
ZUNvZGUmIHNvdXJjZSkKLXsKLSAgICBWZWN0b3I8SmF2YVNjcmlwdERlYnVnTGlzdGVuZXIqPiBj
b3B5OwotICAgIGNvcHlUb1ZlY3RvcihsaXN0ZW5lcnMsIGNvcHkpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY29weS5zaXplKCk7ICsraSkKLSAgICAgICAgY29weVtpXS0+ZGlkUGFyc2VT
b3VyY2UoZXhlYywgc291cmNlKTsKLX0KLQotc3RhdGljIHZvaWQgZGlzcGF0Y2hGYWlsZWRUb1Bh
cnNlU291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkKLXsKLSAgICBWZWN0b3I8SmF2YVNjcmlwdERlYnVnTGlzdGVuZXIqPiBjb3B5
OwotICAgIGNvcHlUb1ZlY3RvcihsaXN0ZW5lcnMsIGNvcHkpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY29weS5zaXplKCk7ICsraSkKLSAgICAgICAgY29weVtpXS0+ZmFpbGVkVG9QYXJz
ZVNvdXJjZShleGVjLCBzb3VyY2UsIGVycm9yTGluZSwgZXJyb3JNZXNzYWdlKTsKLX0KLQotc3Rh
dGljIFBhZ2UqIHRvUGFnZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIEFT
U0VSVF9BUkcoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QpOwotCi0gICAgSlNET01XaW5kb3cq
IHdpbmRvdyA9IGFzSlNET01XaW5kb3coZ2xvYmFsT2JqZWN0KTsKLSAgICBGcmFtZSogZnJhbWUg
PSB3aW5kb3ctPmltcGwoKS0+ZnJhbWUoKTsKLSAgICByZXR1cm4gZnJhbWUgPyBmcmFtZS0+cGFn
ZSgpIDogMDsKLX0KLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmRldGFjaChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIC8vIElmIHdlJ3JlIGRldGFjaGluZyBmcm9t
IHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGdsb2JhbCBvYmplY3QsIG1hbnVhbGx5IHRlYXIgZG93
biBvdXIKLSAgICAvLyBzdGFjaywgc2luY2Ugd2Ugd29uJ3QgZ2V0IGZ1cnRoZXIgZGVidWdnZXIg
Y2FsbGJhY2tzIHRvIGRvIHNvLiBBbHNvLCByZXN1bWUgZXhlY3V0aW9uLAotICAgIC8vIHNpbmNl
IHRoZXJlJ3Mgbm8gcG9pbnQgaW4gc3RheWluZyBwYXVzZWQgb25jZSBhIHdpbmRvdyBjbG9zZXMu
Ci0gICAgaWYgKG1fY3VycmVudENhbGxGcmFtZSAmJiBtX2N1cnJlbnRDYWxsRnJhbWUtPmR5bmFt
aWNHbG9iYWxPYmplY3QoKSA9PSBnbG9iYWxPYmplY3QpIHsKLSAgICAgICAgbV9jdXJyZW50Q2Fs
bEZyYW1lID0gMDsKLSAgICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gMDsKLSAgICAgICAgY29u
dGludWVQcm9ncmFtKCk7Ci0gICAgfQotICAgIERlYnVnZ2VyOjpkZXRhY2goZ2xvYmFsT2JqZWN0
KTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNvdXJjZVBhcnNlZChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9yTGluZSwgY29uc3Qg
VVN0cmluZyYgZXJyb3JNZXNzYWdlKQotewotICAgIGlmIChtX2NhbGxpbmdMaXN0ZW5lcnMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFBhZ2UqIHBhZ2UgPSB0b1BhZ2UoZXhlYy0+ZHluYW1pY0ds
b2JhbE9iamVjdCgpKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
Y2FsbGluZ0xpc3RlbmVycyA9IHRydWU7Ci0KLSAgICBib29sIGlzRXJyb3IgPSBlcnJvckxpbmUg
IT0gLTE7Ci0KLSAgICBpZiAoaGFzR2xvYmFsTGlzdGVuZXJzKCkpIHsKLSAgICAgICAgaWYgKGlz
RXJyb3IpCi0gICAgICAgICAgICBkaXNwYXRjaEZhaWxlZFRvUGFyc2VTb3VyY2UobV9saXN0ZW5l
cnMsIGV4ZWMsIHNvdXJjZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBkaXNwYXRjaERpZFBhcnNlU291cmNlKG1fbGlzdGVuZXJzLCBleGVjLCBz
b3VyY2UpOwotICAgIH0KLQotICAgIGlmIChMaXN0ZW5lclNldCogcGFnZUxpc3RlbmVycyA9IG1f
cGFnZUxpc3RlbmVyc01hcC5nZXQocGFnZSkpIHsKLSAgICAgICAgQVNTRVJUKCFwYWdlTGlzdGVu
ZXJzLT5pc0VtcHR5KCkpOwotICAgICAgICBpZiAoaXNFcnJvcikKLSAgICAgICAgICAgIGRpc3Bh
dGNoRmFpbGVkVG9QYXJzZVNvdXJjZSgqcGFnZUxpc3RlbmVycywgZXhlYywgc291cmNlLCBlcnJv
ckxpbmUsIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRpc3BhdGNo
RGlkUGFyc2VTb3VyY2UoKnBhZ2VMaXN0ZW5lcnMsIGV4ZWMsIHNvdXJjZSk7Ci0gICAgfQotCi0g
ICAgbV9jYWxsaW5nTGlzdGVuZXJzID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpc3BhdGNo
RnVuY3Rpb25Ub0xpc3RlbmVycyhjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBKYXZhU2Ny
aXB0RGVidWdTZXJ2ZXI6OkphdmFTY3JpcHRFeGVjdXRpb25DYWxsYmFjayBjYWxsYmFjaykKLXsK
LSAgICBWZWN0b3I8SmF2YVNjcmlwdERlYnVnTGlzdGVuZXIqPiBjb3B5OwotICAgIGNvcHlUb1Zl
Y3RvcihsaXN0ZW5lcnMsIGNvcHkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29weS5z
aXplKCk7ICsraSkKLSAgICAgICAgKGNvcHlbaV0tPipjYWxsYmFjaykoKTsKLX0KLQotdm9pZCBK
YXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycyhKYXZhU2Ny
aXB0RXhlY3V0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIFBhZ2UqIHBhZ2UpCi17Ci0gICAgaWYgKG1f
Y2FsbGluZ0xpc3RlbmVycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jYWxsaW5nTGlzdGVu
ZXJzID0gdHJ1ZTsKLQotICAgIEFTU0VSVChoYXNMaXN0ZW5lcnMoKSk7Ci0KLSAgICBXZWJDb3Jl
OjpkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMobV9saXN0ZW5lcnMsIGNhbGxiYWNrKTsKLQot
ICAgIGlmIChMaXN0ZW5lclNldCogcGFnZUxpc3RlbmVycyA9IG1fcGFnZUxpc3RlbmVyc01hcC5n
ZXQocGFnZSkpIHsKLSAgICAgICAgQVNTRVJUKCFwYWdlTGlzdGVuZXJzLT5pc0VtcHR5KCkpOwot
ICAgICAgICBXZWJDb3JlOjpkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoKnBhZ2VMaXN0ZW5l
cnMsIGNhbGxiYWNrKTsKLSAgICB9Ci0KLSAgICBtX2NhbGxpbmdMaXN0ZW5lcnMgPSBmYWxzZTsK
LX0KLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEphdmFTY3JpcHRQYXVzZWQoY29u
c3QgUGFnZUdyb3VwJiBwYWdlR3JvdXAsIGJvb2wgcGF1c2VkKQotewotICAgIHNldE1haW5UaHJl
YWRDYWxsYmFja3NQYXVzZWQocGF1c2VkKTsKLQotICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBw
YWdlcyA9IHBhZ2VHcm91cC5wYWdlcygpOwotCi0gICAgSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IHBhZ2VzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxQYWdlKj46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gcGFnZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBz
ZXRKYXZhU2NyaXB0UGF1c2VkKCppdCwgcGF1c2VkKTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0RGVi
dWdTZXJ2ZXI6OnNldEphdmFTY3JpcHRQYXVzZWQoUGFnZSogcGFnZSwgYm9vbCBwYXVzZWQpCi17
Ci0gICAgQVNTRVJUX0FSRyhwYWdlLCBwYWdlKTsKLQotICAgIHBhZ2UtPnNldERlZmVyc0xvYWRp
bmcocGF1c2VkKTsKLQotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBz
ZXRKYXZhU2NyaXB0UGF1c2VkKGZyYW1lLCBwYXVzZWQpOwotfQotCi12b2lkIEphdmFTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlwdFBhdXNlZChGcmFtZSogZnJhbWUsIGJvb2wgcGF1c2Vk
KQotewotICAgIEFTU0VSVF9BUkcoZnJhbWUsIGZyYW1lKTsKLQotICAgIGlmICghZnJhbWUtPnNj
cmlwdCgpLT5jYW5FeGVjdXRlU2NyaXB0cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmcmFt
ZS0+c2NyaXB0KCktPnNldFBhdXNlZChwYXVzZWQpOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKHBhdXNlZCkKLSAgICAgICAgZG9jdW1lbnQt
PnN1c3BlbmRBY3RpdmVET01PYmplY3RzKCk7Ci0gICAgZWxzZQotICAgICAgICBkb2N1bWVudC0+
cmVzdW1lQWN0aXZlRE9NT2JqZWN0cygpOwotCi0gICAgc2V0SmF2YVNjcmlwdFBhdXNlZChmcmFt
ZS0+dmlldygpLCBwYXVzZWQpOwotfQotCi0jaWYgUExBVEZPUk0oTUFDKQotCi12b2lkIEphdmFT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlwdFBhdXNlZChGcmFtZVZpZXcqLCBib29sKQot
ewotfQotCi0jZWxzZQotCi12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlw
dFBhdXNlZChGcmFtZVZpZXcqIHZpZXcsIGJvb2wgcGF1c2VkKQotewotICAgIGlmICghdmlldykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgSGFzaFNldDxSZWZQdHI8V2lkZ2V0PiA+KiBj
aGlsZHJlbiA9IHZpZXctPmNoaWxkcmVuKCk7Ci0gICAgQVNTRVJUKGNoaWxkcmVuKTsKLQotICAg
IEhhc2hTZXQ8UmVmUHRyPFdpZGdldD4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2hpbGRyZW4t
PmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxSZWZQdHI8V2lkZ2V0PiA+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGNoaWxkcmVuLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV2lk
Z2V0KiB3aWRnZXQgPSAoKml0KS5nZXQoKTsKLSAgICAgICAgaWYgKCF3aWRnZXQtPmlzUGx1Z2lu
VmlldygpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHN0YXRpY19jYXN0PFBsdWdp
blZpZXcqPih3aWRnZXQpLT5zZXRKYXZhU2NyaXB0UGF1c2VkKHBhdXNlZCk7Ci0gICAgfQotfQot
Ci0jZW5kaWYKLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlSWZOZWVkZWQoUGFn
ZSogcGFnZSkKLXsKLSAgICBpZiAobV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghcGFnZSB8fCAhaGFzTGlzdGVuZXJzSW50ZXJlc3RlZEluUGFnZShwYWdlKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYm9vbCBwYXVzZU5vdyA9IG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQ7Ci0g
ICAgcGF1c2VOb3cgfD0gKG1fcGF1c2VPbkNhbGxGcmFtZSA9PSBtX2N1cnJlbnRDYWxsRnJhbWUp
OwotICAgIHBhdXNlTm93IHw9IChtX2N1cnJlbnRDYWxsRnJhbWUtPmxpbmUoKSA+IDAgJiYgaGFz
QnJlYWtwb2ludChtX2N1cnJlbnRDYWxsRnJhbWUtPnNvdXJjZUlEKCksIG1fY3VycmVudENhbGxG
cmFtZS0+bGluZSgpKSk7Ci0gICAgaWYgKCFwYXVzZU5vdykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gMDsKLSAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0g
ZmFsc2U7Ci0gICAgbV9wYXVzZWQgPSB0cnVlOwotCi0gICAgZGlzcGF0Y2hGdW5jdGlvblRvTGlz
dGVuZXJzKCZKYXZhU2NyaXB0RGVidWdMaXN0ZW5lcjo6ZGlkUGF1c2UsIHBhZ2UpOwotCi0gICAg
c2V0SmF2YVNjcmlwdFBhdXNlZChwYWdlLT5ncm91cCgpLCB0cnVlKTsKLQotICAgIFRpbWVyQmFz
ZTo6ZmlyZVRpbWVyc0luTmVzdGVkRXZlbnRMb29wKCk7Ci0KLSAgICBFdmVudExvb3AgbG9vcDsK
LSAgICBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSBmYWxzZTsKLSAgICB3aGlsZSAo
IW1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cyAmJiAhbG9vcC5lbmRlZCgpKQotICAgICAg
ICBsb29wLmN5Y2xlKCk7Ci0KLSAgICBzZXRKYXZhU2NyaXB0UGF1c2VkKHBhZ2UtPmdyb3VwKCks
IGZhbHNlKTsKLQotICAgIG1fcGF1c2VkID0gZmFsc2U7Ci0KLSAgICBkaXNwYXRjaEZ1bmN0aW9u
VG9MaXN0ZW5lcnMoJkphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyOjpkaWRDb250aW51ZSwgcGFnZSk7
Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpjYWxsRXZlbnQoY29uc3QgRGVidWdn
ZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxp
bmVOdW1iZXIpCi17Ci0gICAgaWYgKG1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2N1cnJlbnRDYWxsRnJhbWUgPSBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjcmVhdGUoZGVidWdnZXJD
YWxsRnJhbWUsIG1fY3VycmVudENhbGxGcmFtZSwgc291cmNlSUQsIGxpbmVOdW1iZXIpOwotICAg
IHBhdXNlSWZOZWVkZWQodG9QYWdlKGRlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKSkpOwotfQotCi12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6YXRTdGF0ZW1lbnQoY29u
c3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJ
RCwgaW50IGxpbmVOdW1iZXIpCi17Ci0gICAgaWYgKG1fcGF1c2VkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQobV9jdXJyZW50Q2FsbEZyYW1lKTsKLSAgICBpZiAoIW1fY3VycmVudENh
bGxGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jdXJyZW50Q2FsbEZyYW1lLT51cGRh
dGUoZGVidWdnZXJDYWxsRnJhbWUsIHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKLSAgICBwYXVzZUlm
TmVlZGVkKHRvUGFnZShkZWJ1Z2dlckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpKTsK
LX0KLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnJldHVybkV2ZW50KGNvbnN0IERlYnVn
Z2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgaW50cHRyX3Qgc291cmNlSUQsIGludCBs
aW5lTnVtYmVyKQotewotICAgIGlmIChtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVNTRVJUKG1fY3VycmVudENhbGxGcmFtZSk7Ci0gICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY3VycmVudENhbGxGcmFtZS0+dXBkYXRlKGRlYnVn
Z2VyQ2FsbEZyYW1lLCBzb3VyY2VJRCwgbGluZU51bWJlcik7Ci0gICAgcGF1c2VJZk5lZWRlZCh0
b1BhZ2UoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKSk7Ci0KLSAgICAv
LyBUcmVhdCBzdGVwcGluZyBvdmVyIGEgcmV0dXJuIHN0YXRlbWVudCBsaWtlIHN0ZXBwaW5nIG91
dC4KLSAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VPbkNhbGxGcmFtZSkKLSAg
ICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXIoKTsK
LSAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlcigpOwot
fQotCi12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZXhjZXB0aW9uKGNvbnN0IERlYnVnZ2Vy
Q2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5l
TnVtYmVyLCBib29sIGhhc0hhbmRsZXIpCi17Ci0gICAgaWYgKG1fcGF1c2VkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBBU1NFUlQobV9jdXJyZW50Q2FsbEZyYW1lKTsKLSAgICBpZiAoIW1fY3Vy
cmVudENhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSA9PSBQYXVzZU9uQWxsRXhjZXB0aW9ucyB8fCAobV9wYXVzZU9uRXhjZXB0aW9u
c1N0YXRlID09IFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnMgJiYgIWhhc0hhbmRsZXIpKQotICAg
ICAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKLQotICAgIG1fY3VycmVudENhbGxG
cmFtZS0+dXBkYXRlKGRlYnVnZ2VyQ2FsbEZyYW1lLCBzb3VyY2VJRCwgbGluZU51bWJlcik7Ci0g
ICAgcGF1c2VJZk5lZWRlZCh0b1BhZ2UoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9i
amVjdCgpKSk7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjp3aWxsRXhlY3V0ZVBy
b2dyYW0oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJf
dCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCi17Ci0gICAgaWYgKG1fcGF1c2VkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBKYXZhU2NyaXB0Q2FsbEZyYW1l
OjpjcmVhdGUoZGVidWdnZXJDYWxsRnJhbWUsIG1fY3VycmVudENhbGxGcmFtZSwgc291cmNlSUQs
IGxpbmVOdW1iZXIpOwotICAgIHBhdXNlSWZOZWVkZWQodG9QYWdlKGRlYnVnZ2VyQ2FsbEZyYW1l
LmR5bmFtaWNHbG9iYWxPYmplY3QoKSkpOwotfQotCi12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZl
cjo6ZGlkRXhlY3V0ZVByb2dyYW0oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2Fs
bEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCi17Ci0gICAgaWYgKG1f
cGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9jdXJyZW50Q2FsbEZyYW1l
KTsKLSAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9jdXJyZW50Q2FsbEZyYW1lLT51cGRhdGUoZGVidWdnZXJDYWxsRnJhbWUsIHNvdXJjZUlELCBs
aW5lTnVtYmVyKTsKLSAgICBwYXVzZUlmTmVlZGVkKHRvUGFnZShkZWJ1Z2dlckNhbGxGcmFtZS5k
eW5hbWljR2xvYmFsT2JqZWN0KCkpKTsKLQotICAgIC8vIFRyZWF0IHN0ZXBwaW5nIG92ZXIgdGhl
IGVuZCBvZiBhIHByb2dyYW0gbGlrZSBzdGVwcGluZyBvdXQuCi0gICAgaWYgKG1fY3VycmVudENh
bGxGcmFtZSA9PSBtX3BhdXNlT25DYWxsRnJhbWUpCi0gICAgICAgIG1fcGF1c2VPbkNhbGxGcmFt
ZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyKCk7Ci0gICAgbV9jdXJyZW50Q2FsbEZyYW1l
ID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXIoKTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0RGVi
dWdTZXJ2ZXI6OmRpZFJlYWNoQnJlYWtwb2ludChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVi
dWdnZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikKLXsKLSAg
ICBpZiAobV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2N1cnJlbnRD
YWxsRnJhbWUpOwotICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICBtX2N1cnJlbnRDYWxs
RnJhbWUtPnVwZGF0ZShkZWJ1Z2dlckNhbGxGcmFtZSwgc291cmNlSUQsIGxpbmVOdW1iZXIpOwot
ICAgIHBhdXNlSWZOZWVkZWQodG9QYWdlKGRlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxP
YmplY3QoKSkpOwotfQotCi12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxs
SlNGdW5jdGlvbnNTb29uKCkKLXsKLSAgICBtX3JlY29tcGlsZVRpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rp
b25zKFRpbWVyPEphdmFTY3JpcHREZWJ1Z1NlcnZlcj4qKQotewotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgRGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rp
b25zKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci19Ci0KLXZvaWQgSmF2YVNj
cmlwdERlYnVnU2VydmVyOjpkaWRBZGRMaXN0ZW5lcihQYWdlKiBwYWdlKQotewotICAgIHJlY29t
cGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwotCi0gICAgaWYgKHBhZ2UpCi0gICAgICAgIHBhZ2Ut
PnNldERlYnVnZ2VyKHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgUGFnZTo6c2V0RGVidWdnZXJG
b3JBbGxQYWdlcyh0aGlzKTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJl
bW92ZUxpc3RlbmVyKFBhZ2UqIHBhZ2UpCi17Ci0gICAgaWYgKGhhc0dsb2JhbExpc3RlbmVycygp
IHx8IChwYWdlICYmIGhhc0xpc3RlbmVyc0ludGVyZXN0ZWRJblBhZ2UocGFnZSkpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICByZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKLQotICAgIGlm
IChwYWdlKQotICAgICAgICBwYWdlLT5zZXREZWJ1Z2dlcigwKTsKLSAgICBlbHNlCi0gICAgICAg
IFBhZ2U6OnNldERlYnVnZ2VyRm9yQWxsUGFnZXMoMCk7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdERl
YnVnU2VydmVyOjpkaWRSZW1vdmVMYXN0TGlzdGVuZXIoKQotewotICAgIG1fZG9uZVByb2Nlc3Np
bmdEZWJ1Z2dlckV2ZW50cyA9IHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9K
YXZhU2NyaXB0RGVidWdTZXJ2ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdj
MjNiYy4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2
ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEphdmFTY3JpcHRE
ZWJ1Z1NlcnZlcl9oCi0jZGVmaW5lIEphdmFTY3JpcHREZWJ1Z1NlcnZlcl9oCi0KLSNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKLQotI2luY2x1ZGUgIlRpbWVyLmgi
Ci0jaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXIuaD4KLSNpbmNsdWRlIDxydW50aW1lL1VTdHJp
bmcuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBE
ZWJ1Z2dlckNhbGxGcmFtZTsKLSAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKLX0KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3MgRnJhbWVWaWV3Owot
ICAgIGNsYXNzIFBhZ2U7Ci0gICAgY2xhc3MgUGFnZUdyb3VwOwotICAgIGNsYXNzIEphdmFTY3Jp
cHRDYWxsRnJhbWU7Ci0gICAgY2xhc3MgSmF2YVNjcmlwdERlYnVnTGlzdGVuZXI7Ci0KLSAgICBj
bGFzcyBKYXZhU2NyaXB0RGVidWdTZXJ2ZXIgOiBKU0M6OkRlYnVnZ2VyLCBwdWJsaWMgTm9uY29w
eWFibGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIEphdmFTY3JpcHREZWJ1Z1NlcnZl
ciYgc2hhcmVkKCk7Ci0KLSAgICAgICAgdm9pZCBhZGRMaXN0ZW5lcihKYXZhU2NyaXB0RGVidWdM
aXN0ZW5lciopOwotICAgICAgICB2b2lkIHJlbW92ZUxpc3RlbmVyKEphdmFTY3JpcHREZWJ1Z0xp
c3RlbmVyKik7Ci0KLSAgICAgICAgdm9pZCBhZGRMaXN0ZW5lcihKYXZhU2NyaXB0RGVidWdMaXN0
ZW5lciosIFBhZ2UqKTsKLSAgICAgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihKYXZhU2NyaXB0RGVi
dWdMaXN0ZW5lciosIFBhZ2UqKTsKLQotICAgICAgICB2b2lkIGFkZEJyZWFrcG9pbnQoaW50cHRy
X3Qgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IEpTQzo6VVN0cmluZyYgY29u
ZGl0aW9uKTsKLSAgICAgICAgdm9pZCB1cGRhdGVCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlE
LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBKU0M6OlVTdHJpbmcmIGNvbmRpdGlvbik7Ci0g
ICAgICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJRCwgdW5zaWduZWQg
bGluZU51bWJlcik7Ci0gICAgICAgIGJvb2wgaGFzQnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJ
RCwgdW5zaWduZWQgbGluZU51bWJlcikgY29uc3Q7Ci0gICAgICAgIHZvaWQgY2xlYXJCcmVha3Bv
aW50cygpOwotCi0gICAgICAgIGVudW0gUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSB7Ci0gICAgICAg
ICAgICBEb250UGF1c2VPbkV4Y2VwdGlvbnMsCi0gICAgICAgICAgICBQYXVzZU9uQWxsRXhjZXB0
aW9ucywKLSAgICAgICAgICAgIFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnMKLSAgICAgICAgfTsK
LSAgICAgICAgUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOyB9Ci0gICAgICAgIHZvaWQg
c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKTsKLQotICAg
ICAgICB2b2lkIHBhdXNlUHJvZ3JhbSgpOwotICAgICAgICB2b2lkIGNvbnRpbnVlUHJvZ3JhbSgp
OwotICAgICAgICB2b2lkIHN0ZXBJbnRvU3RhdGVtZW50KCk7Ci0gICAgICAgIHZvaWQgc3RlcE92
ZXJTdGF0ZW1lbnQoKTsKLSAgICAgICAgdm9pZCBzdGVwT3V0T2ZGdW5jdGlvbigpOwotCi0gICAg
ICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCk7Ci0gICAgICAgIHZvaWQgcmVj
b21waWxlQWxsSlNGdW5jdGlvbnMoVGltZXI8SmF2YVNjcmlwdERlYnVnU2VydmVyPiogPSAwKTsK
LQotICAgICAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKiBjdXJyZW50Q2FsbEZyYW1lKCk7Ci0KLSAg
ICAgICAgdm9pZCBwYWdlQ3JlYXRlZChQYWdlKik7Ci0KLSAgICAgICAgdHlwZWRlZiBIYXNoU2V0
PEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyKj4gTGlzdGVuZXJTZXQ7Ci0gICAgICAgIHR5cGVkZWYg
dm9pZCAoSmF2YVNjcmlwdERlYnVnTGlzdGVuZXI6OipKYXZhU2NyaXB0RXhlY3V0aW9uQ2FsbGJh
Y2spKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBjbGFzcyBCcmVha3BvaW50SW5mbyB7Ci0g
ICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIEJyZWFrcG9pbnRJbmZvKGNvbnN0IEpTQzo6VVN0
cmluZyYgY29uZGl0aW9uKSA6IG1fY29uZGl0aW9uKGNvbmRpdGlvbikge30KLSAgICAgICAgICAg
IGNvbnN0IEpTQzo6VVN0cmluZyYgY29uZGl0aW9uKCkgY29uc3Q7Ci0gICAgICAgICAgICB2b2lk
IHNldENvbmRpdGlvbihjb25zdCBKU0M6OlVTdHJpbmcmIGNvbmRpdGlvbik7Ci0gICAgICAgIHBy
aXZhdGU6Ci0gICAgICAgICAgICBKU0M6OlVTdHJpbmcgbV9jb25kaXRpb247Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgSmF2YVNjcmlwdERlYnVnU2VydmVyKCk7Ci0gICAgICAgIH5KYXZhU2NyaXB0
RGVidWdTZXJ2ZXIoKTsKLQotICAgICAgICBib29sIGhhc0xpc3RlbmVycygpIGNvbnN0IHsgcmV0
dXJuICFtX2xpc3RlbmVycy5pc0VtcHR5KCkgfHwgIW1fcGFnZUxpc3RlbmVyc01hcC5pc0VtcHR5
KCk7IH0KLSAgICAgICAgYm9vbCBoYXNHbG9iYWxMaXN0ZW5lcnMoKSBjb25zdCB7IHJldHVybiAh
bV9saXN0ZW5lcnMuaXNFbXB0eSgpOyB9Ci0gICAgICAgIGJvb2wgaGFzTGlzdGVuZXJzSW50ZXJl
c3RlZEluUGFnZShQYWdlKik7Ci0KLSAgICAgICAgdm9pZCBzZXRKYXZhU2NyaXB0UGF1c2VkKGNv
bnN0IFBhZ2VHcm91cCYsIGJvb2wgcGF1c2VkKTsKLSAgICAgICAgdm9pZCBzZXRKYXZhU2NyaXB0
UGF1c2VkKFBhZ2UqLCBib29sIHBhdXNlZCk7Ci0gICAgICAgIHZvaWQgc2V0SmF2YVNjcmlwdFBh
dXNlZChGcmFtZSosIGJvb2wgcGF1c2VkKTsKLSAgICAgICAgdm9pZCBzZXRKYXZhU2NyaXB0UGF1
c2VkKEZyYW1lVmlldyosIGJvb2wgcGF1c2VkKTsKLQotICAgICAgICB2b2lkIGRpc3BhdGNoRnVu
Y3Rpb25Ub0xpc3RlbmVycyhKYXZhU2NyaXB0RXhlY3V0aW9uQ2FsbGJhY2ssIFBhZ2UqKTsKLSAg
ICAgICAgdm9pZCBwYXVzZUlmTmVlZGVkKFBhZ2UqKTsKLSAgICAgICAgQnJlYWtwb2ludEluZm8q
IGJyZWFrcG9pbnRJbmZvKGludHB0cl90IHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKSBj
b25zdDsKLSAgICAgICAgdm9pZCB1cGRhdGVCcmVha3BvaW50SW5mbyhCcmVha3BvaW50SW5mbyog
aW5mbywgY29uc3QgSlNDOjpVU3RyaW5nJiBjb25kaXRpb24pOwotCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBkZXRhY2goSlNDOjpKU0dsb2JhbE9iamVjdCopOwotCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBzb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmLCBp
bnQgZXJyb3JMaW5lLCBjb25zdCBKU0M6OlVTdHJpbmcmIGVycm9yTXNnKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGNhbGxFdmVudChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRy
X3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGF0U3Rh
dGVtZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJRCwg
aW50IGZpcnN0TGluZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXR1cm5FdmVudChjb25zdCBK
U0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVy
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbihjb25zdCBKU0M6OkRlYnVnZ2VyQ2Fs
bEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyLCBib29sIGhhc0hhbmRs
ZXIpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6
RGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVubyk7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShjb25zdCBKU0M6OkRlYnVnZ2VyQ2Fs
bEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lbm8pOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBp
bnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVubyk7Ci0KLSAgICAgICAgdm9pZCBkaWRBZGRMaXN0
ZW5lcihQYWdlKik7Ci0gICAgICAgIHZvaWQgZGlkUmVtb3ZlTGlzdGVuZXIoUGFnZSopOwotICAg
ICAgICB2b2lkIGRpZFJlbW92ZUxhc3RMaXN0ZW5lcigpOwotCi0gICAgICAgIHR5cGVkZWYgSGFz
aE1hcDxQYWdlKiwgTGlzdGVuZXJTZXQqPiBQYWdlTGlzdGVuZXJzTWFwOwotICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8dW5zaWduZWQsIEJyZWFrcG9pbnRJbmZvKj4gTGluZVRvQnJlYWtwb2ludElu
Zm9NYXA7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgTGluZVRvQnJlYWtwb2lu
dEluZm9NYXAqPiBCcmVha3BvaW50c01hcDsKLQotICAgICAgICBQYWdlTGlzdGVuZXJzTWFwIG1f
cGFnZUxpc3RlbmVyc01hcDsKLSAgICAgICAgTGlzdGVuZXJTZXQgbV9saXN0ZW5lcnM7Ci0gICAg
ICAgIGJvb2wgbV9jYWxsaW5nTGlzdGVuZXJzOwotICAgICAgICBQYXVzZU9uRXhjZXB0aW9uc1N0
YXRlIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZTsKLSAgICAgICAgYm9vbCBtX3BhdXNlT25OZXh0
U3RhdGVtZW50OwotICAgICAgICBib29sIG1fcGF1c2VkOwotICAgICAgICBib29sIG1fZG9uZVBy
b2Nlc3NpbmdEZWJ1Z2dlckV2ZW50czsKLSAgICAgICAgSmF2YVNjcmlwdENhbGxGcmFtZSogbV9w
YXVzZU9uQ2FsbEZyYW1lOwotICAgICAgICBSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gbV9j
dXJyZW50Q2FsbEZyYW1lOwotICAgICAgICBCcmVha3BvaW50c01hcCBtX2JyZWFrcG9pbnRzOwot
ICAgICAgICBUaW1lcjxKYXZhU2NyaXB0RGVidWdTZXJ2ZXI+IG1fcmVjb21waWxlVGltZXI7Ci0g
ICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCi0KLSNlbmRpZiAvLyBKYXZhU2NyaXB0RGVidWdTZXJ2ZXJfaApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanMgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludC5qcwppbmRleCA1ZDQ2Y2M5Li43ZjNl
ZjE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludC5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludC5qcwpAQCAtODks
NyArODksNyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJjb25kaXRpb24tY2hhbmdlZCIpOwogCiAg
ICAgICAgIGlmICh0aGlzLmVuYWJsZWQpCi0gICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnVw
ZGF0ZUJyZWFrcG9pbnQodGhpcy5zb3VyY2VJRCwgdGhpcy5saW5lLCBjKTsKKyAgICAgICAgICAg
IEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludCh0aGlzLnNvdXJjZUlELCB0aGlzLmxpbmUs
IHRoaXMuZW5hYmxlZCwgdGhpcy5jb25kaXRpb24pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcwppbmRl
eCA4ODY1ZjBiLi4wMDJiYzY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcwpAQCAtNjIsNyArNjIsNyBAQCBXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgaWYgKGJyZWFrcG9pbnQuZW5hYmxlZCkKLSAgICAgICAgICAgIElu
c3BlY3RvckJhY2tlbmQuYWRkQnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3Bv
aW50LmxpbmUsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKKyAgICAgICAgICAgIEluc3BlY3RvckJh
Y2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LmxpbmUs
IGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOwogICAgIH0sCiAKICAg
ICBfYXBwZW5kQnJlYWtwb2ludEVsZW1lbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCkBAIC0xNTIs
NyArMTUyLDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChicmVha3BvaW50LmVuYWJs
ZWQpCi0gICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2lu
dC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5lLCBicmVha3BvaW50LmNvbmRpdGlvbik7CisgICAg
ICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJ
RCwgYnJlYWtwb2ludC5saW5lLCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0
aW9uKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVC
cmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGluZSk7CiAgICAgfSwK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5k
U3R1Yi5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kU3R1
Yi5qcwppbmRleCBlZDAzZjczLi40MTBhZDk3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzCkBAIC0xNTgsNyArMTU4LDcgQEAg
V2ViSW5zcGVjdG9yLkluc3BlY3RvckJhY2tlbmRTdHViLnByb3RvdHlwZSA9IHsKICAgICAgICAg
dGhpcy5fZGVidWdnZXJFbmFibGVkID0gZmFsc2U7CiAgICAgfSwKIAotICAgIGFkZEJyZWFrcG9p
bnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lLCBjb25kaXRpb24pCisgICAgc2V0QnJlYWtwb2lu
dDogZnVuY3Rpb24oc291cmNlSUQsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKICAgICB7CiAg
ICAgfSwKIApAQCAtMTY2LDEwICsxNjYsNiBAQCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2Vu
ZFN0dWIucHJvdG90eXBlID0gewogICAgIHsKICAgICB9LAogCi0gICAgdXBkYXRlQnJlYWtwb2lu
dDogZnVuY3Rpb24oc291cmNlSUQsIGxpbmUsIGNvbmRpdGlvbikKLSAgICB7Ci0gICAgfSwKLQog
ICAgIHBhdXNlSW5EZWJ1Z2dlcjogZnVuY3Rpb24oKQogICAgIHsKICAgICB9LApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKaW5kZXggZWQxYWQ2ZS4uYTRhMzY4
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCkBAIC0x
NTcsOCArMTU3LDYgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbCA9IGZ1bmN0aW9uKCkKICAg
ICB0aGlzLnBhdXNlT25FeGNlcHRpb25CdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0Jh
ckJ1dHRvbigiIiwgInNjcmlwdHMtcGF1c2Utb24tZXhjZXB0aW9ucy1zdGF0dXMtYmFyLWl0ZW0i
LCAzKTsKICAgICB0aGlzLnBhdXNlT25FeGNlcHRpb25CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigi
Y2xpY2siLCB0aGlzLl90b2dnbGVQYXVzZU9uRXhjZXB0aW9ucy5iaW5kKHRoaXMpLCBmYWxzZSk7
CiAKLSAgICB0aGlzLl9icmVha3BvaW50c1VSTE1hcCA9IHt9OwotCiAgICAgdGhpcy5fc2hvcnRj
dXRzID0ge307CiAgICAgdmFyIGhhbmRsZXIsIHNob3J0Y3V0OwogICAgIHZhciBwbGF0Zm9ybVNw
ZWNpZmljTW9kaWZpZXIgPSBXZWJJbnNwZWN0b3IuaXNNYWMoKSA/IFdlYkluc3BlY3Rvci5LZXli
b2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5NZXRhIDogV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRj
dXQuTW9kaWZpZXJzLkN0cmw7CkBAIC0xOTQsNyArMTkyLDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlw
dHNQYW5lbCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLnJlc2V0KCk7CiB9CiAKLS8vIEtlZXAgdGhl
c2UgaW4gc3luYyB3aXRoIFdlYkNvcmU6OkphdmFTY3JpcHREZWJ1Z1NlcnZlcgorLy8gS2VlcCB0
aGVzZSBpbiBzeW5jIHdpdGggV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXIKIFdlYkluc3BlY3Rv
ci5TY3JpcHRzUGFuZWwuUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9IHsKICAgICBEb250UGF1c2VP
bkV4Y2VwdGlvbnMgOiAwLAogICAgIFBhdXNlT25BbGxFeGNlcHRpb25zIDogMSwKQEAgLTI4OSwy
NSArMjg3LDYgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAg
ICAgICAgaWYgKHNvdXJjZUlEKQogICAgICAgICAgICAgdGhpcy5fc291cmNlSURNYXBbc291cmNl
SURdID0gKHJlc291cmNlIHx8IHNjcmlwdCk7Ci0KLSAgICAgICAgaWYgKHNvdXJjZVVSTCBpbiB0
aGlzLl9icmVha3BvaW50c1VSTE1hcCAmJiBzb3VyY2VJRCkgewotICAgICAgICAgICAgdmFyIGJy
ZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludHNVUkxNYXBbc291cmNlVVJMXTsKLSAgICAgICAg
ICAgIHZhciBicmVha3BvaW50c0xlbmd0aCA9IGJyZWFrcG9pbnRzLmxlbmd0aDsKLSAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHNMZW5ndGg7ICsraSkgewotICAgICAg
ICAgICAgICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNbaV07Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoc3RhcnRpbmdMaW5lIDw9IGJyZWFrcG9pbnQubGluZSkgewotICAgICAgICAgICAg
ICAgICAgICAvLyByZW1vdmUgYW5kIGFkZCB0aGUgYnJlYWtwb2ludCwgdG8gY2xlYW4gdXAgdGhp
bmdzIGxpa2UgdGhlIHNpZGViYXIKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVCcmVh
a3BvaW50KGJyZWFrcG9pbnQpOwotICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50LnNvdXJj
ZUlEID0gc291cmNlSUQ7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQnJlYWtwb2ludChi
cmVha3BvaW50KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlm
IChicmVha3BvaW50LmVuYWJsZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5l
LCBicmVha3BvaW50LmNvbmRpdGlvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KICAgICAgICAgdGhpcy5fYWRkU2NyaXB0VG9GaWxlc01lbnUoc2NyaXB0
KTsKICAgICB9LAogCkBAIC0zMjcsMTAgKzMwNiw2IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFu
ZWwucHJvdG90eXBlID0gewogCiAgICAgICAgIHZhciBzb3VyY2VGcmFtZTsKICAgICAgICAgaWYg
KGJyZWFrcG9pbnQudXJsKSB7Ci0gICAgICAgICAgICBpZiAoIShicmVha3BvaW50LnVybCBpbiB0
aGlzLl9icmVha3BvaW50c1VSTE1hcCkpCi0gICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2lu
dHNVUkxNYXBbYnJlYWtwb2ludC51cmxdID0gW107Ci0gICAgICAgICAgICB0aGlzLl9icmVha3Bv
aW50c1VSTE1hcFticmVha3BvaW50LnVybF0udW5zaGlmdChicmVha3BvaW50KTsKLQogICAgICAg
ICAgICAgaWYgKGJyZWFrcG9pbnQudXJsIGluIFdlYkluc3BlY3Rvci5yZXNvdXJjZVVSTE1hcCkg
ewogICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IFdlYkluc3BlY3Rvci5yZXNvdXJjZVVS
TE1hcFticmVha3BvaW50LnVybF07CiAgICAgICAgICAgICAgICAgc291cmNlRnJhbWUgPSB0aGlz
Ll9zb3VyY2VGcmFtZUZvclNjcmlwdE9yUmVzb3VyY2UocmVzb3VyY2UpOwpAQCAtMzUxLDE2ICsz
MjYsOSBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAg
dGhpcy5zaWRlYmFyUGFuZXMuYnJlYWtwb2ludHMucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50
KTsKIAogICAgICAgICB2YXIgc291cmNlRnJhbWU7Ci0gICAgICAgIGlmIChicmVha3BvaW50LnVy
bCAmJiBicmVha3BvaW50LnVybCBpbiB0aGlzLl9icmVha3BvaW50c1VSTE1hcCkgewotICAgICAg
ICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludHNVUkxNYXBbYnJlYWtwb2lu
dC51cmxdOwotICAgICAgICAgICAgYnJlYWtwb2ludHMucmVtb3ZlKGJyZWFrcG9pbnQpOwotICAg
ICAgICAgICAgaWYgKCFicmVha3BvaW50cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgZGVsZXRl
IHRoaXMuX2JyZWFrcG9pbnRzVVJMTWFwW2JyZWFrcG9pbnQudXJsXTsKLQotICAgICAgICAgICAg
aWYgKGJyZWFrcG9pbnQudXJsIGluIFdlYkluc3BlY3Rvci5yZXNvdXJjZVVSTE1hcCkgewotICAg
ICAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IFdlYkluc3BlY3Rvci5yZXNvdXJjZVVSTE1hcFti
cmVha3BvaW50LnVybF07Ci0gICAgICAgICAgICAgICAgc291cmNlRnJhbWUgPSB0aGlzLl9zb3Vy
Y2VGcmFtZUZvclNjcmlwdE9yUmVzb3VyY2UocmVzb3VyY2UpOwotICAgICAgICAgICAgfQorICAg
ICAgICBpZiAoYnJlYWtwb2ludC51cmwgJiYgYnJlYWtwb2ludC51cmwgaW4gV2ViSW5zcGVjdG9y
LnJlc291cmNlVVJMTWFwKSB7CisgICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBXZWJJbnNwZWN0
b3IucmVzb3VyY2VVUkxNYXBbYnJlYWtwb2ludC51cmxdOworICAgICAgICAgICAgc291cmNlRnJh
bWUgPSB0aGlzLl9zb3VyY2VGcmFtZUZvclNjcmlwdE9yUmVzb3VyY2UocmVzb3VyY2UpOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKGJyZWFrcG9pbnQuc291cmNlSUQgJiYgIXNvdXJjZUZyYW1l
KSB7CkBAIC02MTYsMTcgKzU4NCw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90
eXBlID0gewogICAgICAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcykK
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIHZpZXcgPSBXZWJJbnNw
ZWN0b3IucGFuZWxzLnJlc291cmNlcy5yZXNvdXJjZVZpZXdGb3JSZXNvdXJjZShzY3JpcHRPclJl
c291cmNlKTsKLSAgICAgICAgICAgIHZpZXcuaGVhZGVyc1Zpc2libGUgPSBmYWxzZTsgCi0KLSAg
ICAgICAgICAgIGlmIChzY3JpcHRPclJlc291cmNlLnVybCBpbiB0aGlzLl9icmVha3BvaW50c1VS
TE1hcCkgewotICAgICAgICAgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZUZy
YW1lRm9yU2NyaXB0T3JSZXNvdXJjZShzY3JpcHRPclJlc291cmNlKTsKLSAgICAgICAgICAgICAg
ICBpZiAoc291cmNlRnJhbWUgJiYgIXNvdXJjZUZyYW1lLmJyZWFrcG9pbnRzLmxlbmd0aCkgewot
ICAgICAgICAgICAgICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9icmVha3BvaW50c1VS
TE1hcFtzY3JpcHRPclJlc291cmNlLnVybF07Ci0gICAgICAgICAgICAgICAgICAgIHZhciBicmVh
a3BvaW50c0xlbmd0aCA9IGJyZWFrcG9pbnRzLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50c0xlbmd0aDsgKytpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgc291cmNlRnJhbWUuYWRkQnJlYWtwb2ludChicmVha3BvaW50c1tpXSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmlldy5oZWFkZXJz
VmlzaWJsZSA9IGZhbHNlOwogICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdE9yUmVzb3VyY2UgaW5z
dGFuY2VvZiBXZWJJbnNwZWN0b3IuU2NyaXB0KQogICAgICAgICAgICAgdmlldyA9IHRoaXMuc2Ny
aXB0Vmlld0ZvclNjcmlwdChzY3JpcHRPclJlc291cmNlKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggOGJjZGY2My4uYzg0Y2Q1ZCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0xMjEyLDYgKzEyMTIsMTMgQEAgV2Vi
SW5zcGVjdG9yLnBhcnNlZFNjcmlwdFNvdXJjZSA9IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VV
UkwsIHNvdXJjZSwgc3RhcnRpbmcKICAgICB0aGlzLnBhbmVscy5zY3JpcHRzLmFkZFNjcmlwdChz
b3VyY2VJRCwgc291cmNlVVJMLCBzb3VyY2UsIHN0YXJ0aW5nTGluZSk7CiB9CiAKK1dlYkluc3Bl
Y3Rvci5yZXN0b3JlZEJyZWFrcG9pbnQgPSBmdW5jdGlvbihzb3VyY2VJRCwgbGluZSwgZW5hYmxl
ZCwgY29uZGl0aW9uKQoreworICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5C
cmVha3BvaW50KG51bGwsIGxpbmUsIHNvdXJjZUlELCBjb25kaXRpb24pOworICAgIGJyZWFrcG9p
bnQuZW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgdGhpcy5wYW5lbHMuc2NyaXB0cy5hZGRCcmVha3Bv
aW50KGJyZWFrcG9pbnQpOworfQorCiBXZWJJbnNwZWN0b3IuZmFpbGVkVG9QYXJzZVNjcmlwdFNv
dXJjZSA9IGZ1bmN0aW9uKHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbmUsIGVycm9yTGlu
ZSwgZXJyb3JNZXNzYWdlKQogewogICAgIHRoaXMucGFuZWxzLnNjcmlwdHMuYWRkU2NyaXB0KG51
bGwsIHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbmUsIGVycm9yTGluZSwgZXJyb3JNZXNz
YWdlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1dlYkNvcmUvcGFnZS9Q
YWdlLmNwcAppbmRleCAzZWNiYjVkLi5kMmFkMDQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC03MCw4ICs3MCw4IEBACiAj
aW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogI2VuZGlmCiAKLSNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKLSNpbmNsdWRlICJKYXZhU2NyaXB0RGVidWdTZXJ2
ZXIuaCIKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyNpbmNsdWRlICJTY3JpcHRE
ZWJ1Z1NlcnZlci5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV01MKQpAQCAtMTc0LDggKzE3NCw4
IEBAIFBhZ2U6OlBhZ2UoQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQsIENvbnRleHRNZW51Q2xp
ZW50KiBjb250ZXh0TWVudUNsaWVudCwgRWRpCiAgICAgICAgIG1fcGx1Z2luSGFsdGVyLT5zZXRQ
bHVnaW5BbGxvd2VkUnVuVGltZShtX3NldHRpbmdzLT5wbHVnaW5BbGxvd2VkUnVuVGltZSgpKTsK
ICAgICB9CiAKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKLSAg
ICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnBhZ2VDcmVhdGVkKHRoaXMpOworI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFy
ZWQoKS5wYWdlQ3JlYXRlZCh0aGlzKTsKICNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAppbmRleCA5Njk4
ZWFkLi43Y2Y4MzI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGVtcG9y
YXJ5TGlua1N0dWJzLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcApAQCAtODQsOCArODQsOCBAQAogI2luY2x1ZGUgIkFQSS9KU0NsYXNzUmVm
LmgiCiAjaW5jbHVkZSAiSk5JVXRpbGl0eVByaXZhdGUuaCIKICNpbmNsdWRlICJKYXZhU2NyaXB0
Q2FsbEZyYW1lLmgiCi0jaW5jbHVkZSAiSmF2YVNjcmlwdERlYnVnU2VydmVyLmgiCiAjaW5jbHVk
ZSAiSmF2YVNjcmlwdFByb2ZpbGUuaCIKKyNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgog
I2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZDhkODlh
Mi4uY2ZkZTI4MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDItMjEgIFBh
dmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hyb21pdW0gRGV2VG9vbHM6IGtlcHAgZGVi
dWdnZXIgQVBJIGluIHN5bmMgd2l0aCBpbnNwZWN0b3IuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4Nzk5CisKKyAgICAgICAgKiBzcmMvanMvRGVi
dWdnZXJBZ2VudC5qczoKKyAgICAgICAgKiBzcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwu
anM6CisgICAgICAgIChkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUuc2V0
QnJlYWtwb2ludCk6CisKIDIwMTAtMDItMTkgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvanMvRGVidWdnZXJBZ2VudC5qcyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvanMvRGVidWdnZXJBZ2VudC5qcwppbmRleCBiYjY1NWM3Li44ODZiNGIwIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyQWdlbnQuanMKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9qcy9EZWJ1Z2dlckFnZW50LmpzCkBAIC0zMzQsMzggKzMzNCw2IEBAIGRldnRv
b2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLnJlbW92ZUJyZWFrcG9pbnQgPSBmdW5jdGlvbihz
b3VyY2VJZCwgbGluZSkKIAogCiAvKioKLSAqIEBwYXJhbSB7bnVtYmVyfSBzb3VyY2VJZCBJZCBv
ZiB0aGUgc2NyaXB0IGZvciB0aGUgYnJlYWtwb2ludC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBsaW5l
IE51bWJlciBvZiB0aGUgbGluZSBmb3IgdGhlIGJyZWFrcG9pbnQuCi0gKiBAcGFyYW0gez9zdHJp
bmd9IGNvbmRpdGlvbiBOZXcgYnJlYWtwb2ludCBjb25kaXRpb24uCi0gKi8KLWRldnRvb2xzLkRl
YnVnZ2VyQWdlbnQucHJvdG90eXBlLnVwZGF0ZUJyZWFrcG9pbnQgPSBmdW5jdGlvbihzb3VyY2VJ
ZCwgbGluZSwgY29uZGl0aW9uKQotewotICAgIHZhciBzY3JpcHQgPSB0aGlzLnBhcnNlZFNjcmlw
dHNfW3NvdXJjZUlkXTsKLSAgICBpZiAoIXNjcmlwdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bGluZSA9IGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQud2Via2l0VG9WOExpbmVOdW1iZXJfKGxpbmUp
OwotCi0gICAgdmFyIGJyZWFrcG9pbnRJbmZvOwotICAgIGlmIChzY3JpcHQuZ2V0VXJsKCkpIHsK
LSAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy51cmxUb0JyZWFrcG9pbnRzX1tzY3JpcHQu
Z2V0VXJsKCldOwotICAgICAgICBicmVha3BvaW50SW5mbyA9IGJyZWFrcG9pbnRzW2xpbmVdOwot
ICAgIH0gZWxzZQotICAgICAgICBicmVha3BvaW50SW5mbyA9IHNjcmlwdC5nZXRCcmVha3BvaW50
SW5mbyhsaW5lKTsKLQotICAgIHZhciBpZCA9IGJyZWFrcG9pbnRJbmZvLmdldFY4SWQoKTsKLQot
ICAgIC8vIElmIHdlIGRvbid0IGtub3cgaWQgb2YgdGhpcyBicmVha3BvaW50IGluIHRoZSB2OCBk
ZWJ1Z2dlciB3ZSBjYW5ub3Qgc2VuZAotICAgIC8vIHRoZSAiY2hhbmdlYnJlYWtwb2ludCIgcmVx
dWVzdC4KLSAgICBpZiAoaWQgIT09IC0xKSB7Ci0gICAgICAgIC8vIFRPRE8oYXBhdmxvdik6IG1h
a2UgdXNlIG9mIHRoZSByZWFsIHZhbHVlcyBmb3IgImVuYWJsZWQiIGFuZAotICAgICAgICAvLyAi
aWdub3JlQ291bnQiIHdoZW4gYXBwcm9wcmlhdGUuCi0gICAgICAgIHRoaXMucmVxdWVzdENoYW5n
ZUJyZWFrcG9pbnRfKGlkLCB0cnVlLCBjb25kaXRpb24sIG51bGwpOwotICAgIH0KLX07Ci0KLQot
LyoqCiAgKiBUZWxscyB0aGUgdjggZGVidWdnZXIgdG8gc3RlcCBpbnRvIHRoZSBuZXh0IHN0YXRl
bWVudC4KICAqLwogZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUuc3RlcEludG9TdGF0
ZW1lbnQgPSBmdW5jdGlvbigpCkBAIC02NjMsMjUgKzYzMSw2IEBAIGRldnRvb2xzLkRlYnVnZ2Vy
QWdlbnQucHJvdG90eXBlLnJlcXVlc3RDbGVhckJyZWFrcG9pbnRfID0gZnVuY3Rpb24oYnJlYWtw
b2ludElkCiAKIAogLyoqCi0gKiBDaGFuZ2VzIGJyZWFrcG9pbnQgcGFyYW1ldGVycyBpbiB0aGUg
djggZGVidWdnZXIuCi0gKiBAcGFyYW0ge251bWJlcn0gYnJlYWtwb2ludElkIElkIG9mIHRoZSBi
cmVha3BvaW50IGluIHRoZSB2OCBkZWJ1Z2dlci4KLSAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxl
ZCBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgYnJlYWtwb2ludC4KLSAqIEBwYXJhbSB7P3N0cmluZ30g
Y29uZGl0aW9uIE5ldyBicmVha3BvaW50IGNvbmRpdGlvbi4KLSAqIEBwYXJhbSB7bnVtYmVyfSBp
Z25vcmVDb3VudCBOZXcgaWdub3JlIGNvdW50IGZvciB0aGUgYnJlYWtwb2ludC4KLSAqLwotZGV2
dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUucmVxdWVzdENoYW5nZUJyZWFrcG9pbnRfID0g
ZnVuY3Rpb24oYnJlYWtwb2ludElkLCBlbmFibGVkLCBjb25kaXRpb24sIGlnbm9yZUNvdW50KQot
ewotICAgIHZhciBjbWQgPSBuZXcgZGV2dG9vbHMuRGVidWdDb21tYW5kKCJjaGFuZ2VicmVha3Bv
aW50IiwgewotICAgICAgICAiYnJlYWtwb2ludCI6IGJyZWFrcG9pbnRJZCwKLSAgICAgICAgImVu
YWJsZWQiOiBlbmFibGVkLAotICAgICAgICAiY29uZGl0aW9uIjogY29uZGl0aW9uLAotICAgICAg
ICAiaWdub3JlQ291bnQiOiBpZ25vcmVDb3VudAotICAgIH0pOwotICAgIGRldnRvb2xzLkRlYnVn
Z2VyQWdlbnQuc2VuZENvbW1hbmRfKGNtZCk7Ci19OwotCi0KLS8qKgogICogU2VuZHMgImJhY2t0
cmFjZSIgcmVxdWVzdCB0byB2OC4KICAqLwogZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5
cGUucmVxdWVzdEJhY2t0cmFjZV8gPSBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcwppbmRleCBjOTJhOTRjLi5iNTFjZWQ3
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJ
bXBsLmpzCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlcklt
cGwuanMKQEAgLTEwMiw5ICsxMDIsMTEgQEAgZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwu
cHJvdG90eXBlLnByb2ZpbGVyRW5hYmxlZCA9IGZ1bmN0aW9uKCkKIH07CiAKIAotZGV2dG9vbHMu
SW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLmFkZEJyZWFrcG9pbnQgPSBmdW5jdGlvbihz
b3VyY2VJRCwgbGluZSwgY29uZGl0aW9uKQorZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwu
cHJvdG90eXBlLnNldEJyZWFrcG9pbnQgPSBmdW5jdGlvbihzb3VyY2VJRCwgbGluZSwgZW5hYmxl
ZCwgY29uZGl0aW9uKQogewotICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5h
ZGRCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lLCBjb25kaXRpb24pOworICAgIHRoaXMucmVtb3Zl
QnJlYWtwb2ludChzb3VyY2VJRCwgbGluZSk7CisgICAgaWYgKGVuYWJsZWQpCisgICAgICAgIGRl
dnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5hZGRCcmVha3BvaW50KHNvdXJjZUlELCBs
aW5lLCBjb25kaXRpb24pOwogfTsKIAogCkBAIC0xMTMsMTAgKzExNSw2IEBAIGRldnRvb2xzLklu
c3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5yZW1vdmVCcmVha3BvaW50ID0gZnVuY3Rpb24o
c291cmNlSUQsIGxpCiAgICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnJlbW92
ZUJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmUpOwogfTsKIAotZGV2dG9vbHMuSW5zcGVjdG9yQmFj
a2VuZEltcGwucHJvdG90eXBlLnVwZGF0ZUJyZWFrcG9pbnQgPSBmdW5jdGlvbihzb3VyY2VJRCwg
bGluZSwgY29uZGl0aW9uKQotewotICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQo
KS51cGRhdGVCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lLCBjb25kaXRpb24pOwotfTsKIAogZGV2
dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLnBhdXNlSW5EZWJ1Z2dlciA9IGZ1
bmN0aW9uKCkKIHsK
</data>
<flag name="review"
          id="31933"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49164</attachid>
            <date>2010-02-21 12:59:57 -0800</date>
            <delta_ts>2010-02-22 00:01:09 -0800</delta_ts>
            <desc>[PATCH] Patch I&apos;m going to land.</desc>
            <filename>break_on_load</filename>
            <type>text/plain</type>
            <size>133405</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmM4MzZhOC4uOTFhNjk4ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzcgQEAKKzIwMTAtMDItMjEgIFBhdmVsIEZlbGRt
YW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjogc3RvcCBvbiBpbmxpbmUgYnJlYWtw
b2ludHMgb24gcmVsb2FkLgorICAgICAgICAtIFNjcmlwdEJyZWFrcG9pbnQgc3RydWN0IGhhcyBi
ZWVuIGludHJvZHVjZWQgYW5kIHJldXNlZCBpbiBJbnNwZWN0b3JDb250cm9sbGVyCisgICAgICAg
ICAgYW5kIGRlYnVnIHNlcnZlci4KKyAgICAgICAgLSBKYXZhU2NyaXB0RGVidWdTZXJ2ZXIgd2Fz
IG1vdmVkIHRvIGJpbmRpbmdzL2pzIGFuZCByZW5hbWVkIHRvIFNjcmlwdERlYnVnU2VydmVyCisg
ICAgICAgICAgVGhlcmUgd2VyZSBubyBjaGFuZ2VzIHRvIHNlbWFudGljcywgb25seSBzb21lIG1l
Y2hhbmljYWwgY2hhbmdlczoKKyAgICAgICAgICAgIC0gYWRkQnJlYWtwb2ludCBhbmQgdXBkYXRl
QnJlYWtwb2ludCB3ZXJlIG1lcmdlZCBpbnRvIHNldEJyZWFrcG9pbnQKKyAgICAgICAgICAgIC0g
U2NyaXB0RGVidWdTZXJ2ZXIgbm93IG9wZXJhdGVzIFNjcmlwdEJyZWFrcG9pbnQgaW5zdGFuY2Vz
IGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgQnJlYWtwb2ludEluZm8uCisgICAgICAgICAgICAt
IEl0IG5vIGxvbmdlciBhbGxvY2F0ZXMgbWFwcyBhbmQgYnJlYWtwb2ludCBpbmZvIGluIGhlYXAg
LSBhbGwgZG9uZSBvbiBzdGFjay4KKyAgICAgICAgICAgIC0gSmF2YVNjcmlwdERlYnVnTGlzdGVu
ZXIgaXMgbm93IFNjcmlwdERlYnVnU2VydmVyOjpMaXN0ZW5lcgorICAgICAgICAgICAgLSBMaXN0
ZW5lciBtZXRob2RzIG5vIGxvbmdlciBoYXZlIEV4ZWNTdGF0ZSAod2FzIHVudXNlZCkuCisgICAg
ICAgICAgICAtIGFkZExpc3RlbmVyL3JlbW92ZUxpc3RlbmVyIHBhaXIgd3V0aCBubyBwYWdlIGFy
Z3VtZW50IHJlbW92ZWQgKHdhcyB1bnVzZWQpLgorICAgICAgICAtIEluc3BlY3RvckNvbnRyb2xs
ZXIgbm93IGJpbmRzIHNvdXJjZUlEIHRvIHVybCBhbmQgbWFpbnRhaW5zIGEgbWFwIG9mICdzdGlj
a3knCisgICAgICAgICAgYnJlYWtwb2ludHMuIFdoZW5ldmVyIHNjcmlwdCBpcyBsb2FkZWQgYW5k
IHRoZXJlIGlzIGEgc3RpY2t5IGJyZWFrcG9pbnQgdXJsIG1hdGNoaW5nLAorICAgICAgICAgIGJy
ZWFrcG9pbnQgaXMgYmVpbmcgJ3Jlc3RvcmVkJyBzeW5jaHJvbm91c2x5IGluIGRlYnVnIHNlcnZl
ciBhbmQgcHVzaGVkIHRvIGZyb250ZW5kLgorICAgICAgICAgIEZyb250LWVuZCBubyBsb25nZXIg
c3RvcmVzIG1hcCBvZiBzdGlja3kgYnJlYWtwb2ludHMuCisgICAgICAgICAgICAtIHNldEJyZWFr
cG9pbnQvcmVtb3ZlQnJlYWtwb2ludC9kaWRQYXJzZVNvdXJjZSB0cmlvIGhhbmRsZSB0aGlzIGxv
Z2ljLgorICAgICAgICAtIEEgYnVuY2ggb2YgaWYoVVNFX0pTQy9WOC9vdGhlcikgZm9ya3MgcmVt
b3ZlZC4KKyAgICAgICAgLSBJbnNwZWN0b3JGcm9udGVuZCBub3cgb3BlcmF0ZXMgcHJpbWl0aXZl
IHR5cGVzIG9ubHksIGdvdCByaWQgb2YgVVNFX0pTQyBhcyB3ZWxsLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODc5OQorCisgICAgICAgICogR05V
bWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBXZWJDb3JlLnBy
bzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmN1cnJlbnRDYWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNJ
bmplY3RlZFNjcmlwdEhvc3Q6OmlzQWN0aXZhdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2
ZXI6OnNoYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0
RGVidWdTZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6On5TY3Jp
cHREZWJ1Z1NlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6YWRk
TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpwYWdlQ3JlYXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzTGlzdGVuZXJzSW50
ZXJlc3RlZEluUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3Zl
QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzQnJl
YWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVh
a3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
cGF1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpjb250
aW51ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBJ
bnRvU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzdGVw
T3ZlclN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c3Rl
cE91dE9mRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmN1
cnJlbnRDYWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmN1
cnJlbnRDYWxsRnJhbWVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZl
cjo6ZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlzcGF0Y2hGYWlsZWRUb1BhcnNlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGV0YWNoKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzb3VyY2VQYXJzZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRnVuY3Rpb25Ub0xpc3Rl
bmVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlw
dFBhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2VJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y2FsbEV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjphdFN0YXRlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHREZWJ1Z1NlcnZlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaWRFeGVjdXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkUmVhY2hCcmVha3BvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaWRBZGRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkUmVtb3ZlTGlzdGVu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlbW92ZUxhc3RM
aXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpMaXN0ZW5lcjo6fkxpc3RlbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjopOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlT25FeGNlcHRpb25zU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0xpc3RlbmVycyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzR2xvYmFsTGlzdGVuZXJzKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2hhcmVkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHREZWJ1
Z1NlcnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6Okxpc3RlbmVy
Ojp+TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVMaXN0
ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2lu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2lu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpwYXVzZVByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmNvbnRpbnVlUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcEludG9TdGF0ZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBPdmVyU3RhdGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzdGVwT3V0T2ZGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5j
dGlvbnNTb29uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBp
bGVBbGxKU0Z1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
Y3VycmVudENhbGxGcmFtZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2Vy
dmVyOjpwYWdlQ3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
U2NyaXB0RGVidWdTZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6
On5TY3JpcHREZWJ1Z1NlcnZlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5q
ZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4SW5qZWN0ZWRT
Y3JpcHRIb3N0OjpjdXJyZW50Q2FsbEZyYW1lQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
VjhJbmplY3RlZFNjcmlwdEhvc3Q6OmlzQWN0aXZhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OnBhdXNlSW5EZWJ1Z2dlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpzdGVwT3ZlclN0YXRlbWVudEluRGVidWdnZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6c3RlcEludG9TdGF0ZW1lbnRJbkRlYnVn
Z2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OnN0ZXBPdXRPZkZ1bmN0
aW9uSW5EZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpwYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6
OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsOgor
ICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50Lmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQnJlYWtwb2ludDo6SW5zcGVjdG9yQnJlYWtwb2ludCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRXaW5kb3dWaXNpYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdE9iamVjdFJlYWR5KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlUHJvZmls
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2Zp
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVn
Z2VyRnJvbUZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmRpc2FibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpyZXN1bWVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkUGFyc2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6ZmFpbGVkVG9QYXJzZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpkaWRQYXVzZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OnBhcnNlZFNjcmlwdFNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6cmVzdG9yZWRCcmVha3BvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpmYWlsZWRUb1BhcnNlU2NyaXB0U291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpyZXN1bWVkU2NyaXB0
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBp
bnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBp
bnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnQucHJvdG90eXBlLnNldCBjb25kaXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZS5hZGRCcmVha3BvaW50KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZS5fYnJlYWtw
b2ludEVuYWJsZUNoYW5nZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVj
dG9yQmFja2VuZFN0dWIuanM6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3BlY3RvckJhY2tl
bmRTdHViLnByb3RvdHlwZS5hZGRCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNl
c1BhbmVsLnByb3RvdHlwZS5zb3VyY2VGcmFtZUZvclJlc291cmNlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
Y3JpcHRzUGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5
cGUuYWRkU2NyaXB0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90
eXBlLmFkZEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5w
cm90b3R5cGUucmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0
c1BhbmVsLnByb3RvdHlwZS5fc2hvd1NjcmlwdE9yUmVzb3VyY2UpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLnJlc3Rv
cmVkQnJlYWtwb2ludCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvVGVtcG9yYXJ5TGlu
a1N0dWJzLmNwcDoKKwogMjAxMC0wMi0yMCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRl
eCBiNzNkOGQwLi40ZWY4MzQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisr
KyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEyMjUsOSArMTIyNSw3IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5o
IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBcCiAJV2ViQ29y
ZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oIFwKLQlXZWJDb3JlL2luc3BlY3Rvci9K
YXZhU2NyaXB0RGVidWdMaXN0ZW5lci5oIFwKLQlXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwIFwKLQlXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2
ZXIuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oIFwKIAlXZWJDb3Jl
L2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaCBcCiAJV2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwIFwK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAppbmRleCAyYWZkZDM0Li5hMDdhZWU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC00MTksOCArNDE5
LDYgQEAgX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyRDFFdgogX19aTjdXZWJDb3Jl
MTlhcHBsaWNhdGlvbklzU2FmYXJpRXYKIF9fWk43V2ViQ29yZTIwUmVzb3VyY2VSZXNwb25zZUJh
c2UyNHNldEV4cGVjdGVkQ29udGVudExlbmd0aEV4CiBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVz
cG9uc2VCYXNlQzJFdgotX19aTjdXZWJDb3JlMjFKYXZhU2NyaXB0RGVidWdTZXJ2ZXIyM3JlY29t
cGlsZUFsbEpTRnVuY3Rpb25zRVBOU181VGltZXJJUzBfRUUKLV9fWk43V2ViQ29yZTIxSmF2YVNj
cmlwdERlYnVnU2VydmVyNnNoYXJlZEV2CiBfX1pON1dlYkNvcmUyMVBsYXRmb3JtS2V5Ym9hcmRF
dmVudDI0ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50RU5TMF80VHlwZUViCiBfX1pON1dlYkNvcmUy
MVBsYXRmb3JtS2V5Ym9hcmRFdmVudEMxRVA3TlNFdmVudAogX19aTjdXZWJDb3JlMjFTVkdEb2N1
bWVudEV4dGVuc2lvbnMyMXNhbXBsZUFuaW1hdGlvbkF0VGltZUVSS05TXzZTdHJpbmdFUE5TXzE0
U1ZHU01JTEVsZW1lbnRFZApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCBiODMxNmNmLi43NWQ4NTRiIDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTYxNCw5ICsx
NjE0LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5o
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgnLAotICAgICAgICAgICAg
J2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdMaXN0ZW5lci5oJywKLSAgICAgICAgICAgICdpbnNw
ZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcCcsCi0gICAgICAgICAgICAnaW5zcGVjdG9y
L0phdmFTY3JpcHREZWJ1Z1NlcnZlci5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvU2NyaXB0
QnJlYWtwb2ludC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0
b3J5LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5o
JywKICAgICAgICAgICAgICdsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAnLApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLm9yZGVyIGIvV2ViQ29yZS9XZWJDb3JlLm9yZGVy
CmluZGV4IDMxNDRlYzEuLmE4ZDIwZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5vcmRl
cgorKysgYi9XZWJDb3JlL1dlYkNvcmUub3JkZXIKQEAgLTIxNSwxMSArMjE1LDYgQEAgX19aTjNX
VEY5SGFzaFRhYmxlSVBON1dlYkNvcmU0UGFnZUVTM19OU18xN0lkZW50aXR5RXh0cmFjdG9ySVMz
X0VFTlNfN1B0ckhhc2hJUzMKIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlNFBhZ2VFUzNf
TlNfMTdJZGVudGl0eUV4dHJhY3RvcklTM19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTBIYXNoVHJh
aXRzSVMzX0VFUzlfRTZyZWhhc2hFaQogX19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmU0UGFn
ZUVTM19OU18xN0lkZW50aXR5RXh0cmFjdG9ySVMzX0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xMEhh
c2hUcmFpdHNJUzNfRUVTOV9FMTNhbGxvY2F0ZVRhYmxlRWkKIF9fWk4zV1RGOUhhc2hUYWJsZUlQ
TjdXZWJDb3JlNFBhZ2VFUzNfTlNfMTdJZGVudGl0eUV4dHJhY3RvcklTM19FRU5TXzdQdHJIYXNo
SVMzX0VFTlNfMTBIYXNoVHJhaXRzSVMzX0VFUzlfRTE1ZGVhbGxvY2F0ZVRhYmxlRVAKLV9fWk43
V2ViQ29yZTIxSmF2YVNjcmlwdERlYnVnU2VydmVyNnNoYXJlZEV2Ci1fX1pON1dlYkNvcmUyMUph
dmFTY3JpcHREZWJ1Z1NlcnZlckMxRXYKLV9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERlYnVnU2Vy
dmVyQzJFdgotX19aTjdXZWJDb3JlMjFKYXZhU2NyaXB0RGVidWdTZXJ2ZXIxMXBhZ2VDcmVhdGVk
RVBOU180UGFnZUUKLV9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERlYnVnU2VydmVyMjhoYXNMaXN0
ZW5lcnNJbnRlcmVzdGVkSW5QYWdlRVBOU180UGFnZUUKIF9fWk5LM1dURjlIYXNoVGFibGVJUE43
V2ViQ29yZTRQYWdlRVN0NHBhaXJJUzNfUE5TXzdIYXNoU2V0SVBOUzFfMjNKYXZhU2NyaXB0RGVi
dWdMaXN0ZW5lckVOU183UHRySGFzaElTN19FRU5TXzEwSGFzaFRyYWl0c0lTN18KIF9fWk43V2Vi
Q29yZThTZXR0aW5nczI3c2V0TG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoRVJLTlNfNlN0cmluZ0UK
IF9fWk43V2ViQ29yZTVGcmFtZUMxRVBOU180UGFnZUVQTlNfMjFIVE1MRnJhbWVPd25lckVsZW1l
bnRFUE5TXzE3RnJhbWVMb2FkZXJDbGllbnRFCkBAIC0xOTgxMyw3ICsxOTgwOCw2IEBAIF9fWk4z
V1RGNlZlY3RvcklOM0pTQzE2UHJvdGVjdGVkSlNWYWx1ZUVMbTBFRTE1cmVzZXJ2ZUNhcGFjaXR5
RW0KIF9fWk4zV1RGNlZlY3RvcklOM0pTQzE2UHJvdGVjdGVkSlNWYWx1ZUVMbTBFRTZzaHJpbmtF
bQogX19aTjdXZWJDb3JlMTNIVE1MVG9rZW5pemVyOXBhcnNlVGV4dEVSTlNfMTVTZWdtZW50ZWRT
dHJpbmdFTlMwXzVTdGF0ZUUKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE0ZW5h
YmxlUHJvZmlsZXJFYgotX19aTjdXZWJDb3JlMjFKYXZhU2NyaXB0RGVidWdTZXJ2ZXIyN3JlY29t
cGlsZUFsbEpTRnVuY3Rpb25zU29vbkV2CiBfX1pON1dlYkNvcmUzM2pzQ29uc29sZVByb3RvdHlw
ZUZ1bmN0aW9uUHJvZmlsZUVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNW
YWx1ZUVSS05TMF83QXJnTGlzdEUKIF9fWk43V2ViQ29yZTdDb25zb2xlN3Byb2ZpbGVFUktOM0pT
QzdVU3RyaW5nRVBOU18xNVNjcmlwdENhbGxTdGFja0UKIF9fWk43V2ViQ29yZTM2anNDb25zb2xl
UHJvdG90eXBlRnVuY3Rpb25Qcm9maWxlRW5kRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmpl
Y3RFTlMwXzdKU1ZhbHVlRVJLTlMwXzdBcmdMaXN0RQpAQCAtMTk4NDksOCArMTk4NDMsNiBAQCBf
X1pON1dlYkNvcmVMNmdldFVSTEVQSzE1T3BhcXVlSlNDb250ZXh0UDEzT3BhcXVlSlNWYWx1ZVAx
NE9wYXF1ZUpTU3RyaW5nUFBLUzNfCiBfX1pON1dlYkNvcmVMMTNnZXRMaW5lTnVtYmVyRVBLMTVP
cGFxdWVKU0NvbnRleHRQMTNPcGFxdWVKU1ZhbHVlUDE0T3BhcXVlSlNTdHJpbmdQUEtTM18KIF9f
Wk43V2ViQ29yZUwxMWdldENoaWxkcmVuRVBLMTVPcGFxdWVKU0NvbnRleHRQMTNPcGFxdWVKU1Zh
bHVlUDE0T3BhcXVlSlNTdHJpbmdQUEtTM18KIF9fWk5LM1dURjdIYXNoTWFwSXhOU182UmVmUHRy
SU43V2ViQ29yZTE3SW5zcGVjdG9yUmVzb3VyY2VFRUVOU183SW50SGFzaEl5RUVOU18xMEhhc2hU
cmFpdHNJeEVFTlM3X0lTNF9FRUUzZ2V0RVJLeAotX19aTjdXZWJDb3JlNVRpbWVySU5TXzIxSmF2
YVNjcmlwdERlYnVnU2VydmVyRUU1ZmlyZWRFdgotX19aTjdXZWJDb3JlMjFKYXZhU2NyaXB0RGVi
dWdTZXJ2ZXIyM3JlY29tcGlsZUFsbEpTRnVuY3Rpb25zRVBOU181VGltZXJJUzBfRUUKIF9fWk5L
M0pTQzIxQ29sbGVjdG9ySGVhcEl0ZXJhdG9ySUxOU184SGVhcFR5cGVFMEVFZGVFdgogX19aTjNK
U0MyMUNvbGxlY3RvckhlYXBJdGVyYXRvcklMTlNfOEhlYXBUeXBlRTBFRXBwRXYKIF9fWk4zV1RG
NlZlY3RvcklOM0pTQzEyUHJvdGVjdGVkUHRySU5TMV8xMEpTRnVuY3Rpb25FRUVMbTBFRTE0ZXhw
YW5kQ2FwYWNpdHlFbQpAQCAtMjM4NzQsMTkgKzIzODY2LDE1IEBAIF9fWk43V2ViQ29yZTEzVGV4
dFRva2VuaXplckMyRVBOU18yMkhUTUxWaWV3U291cmNlRG9jdW1lbnRFCiBfX1pON1dlYkNvcmUy
MkhUTUxWaWV3U291cmNlRG9jdW1lbnQxN2FkZFZpZXdTb3VyY2VUZXh0RVJLTlNfNlN0cmluZ0UK
IF9fWk43V2ViQ29yZTUyanNJbnNwZWN0b3JDb250cm9sbGVyUHJvdG90eXBlRnVuY3Rpb25FbmFi
bGVEZWJ1Z2dlckVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUVS
S05TMF83QXJnTGlzdEUKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE0ZW5hYmxl
RGVidWdnZXJFdgotX19aTjdXZWJDb3JlMjFKYXZhU2NyaXB0RGVidWdTZXJ2ZXIxMWFkZExpc3Rl
bmVyRVBOU18yM0phdmFTY3JpcHREZWJ1Z0xpc3RlbmVyRVBOU180UGFnZUUKIF9fWk4zV1RGN0hh
c2hNYXBJUE43V2ViQ29yZTRQYWdlRVBOU183SGFzaFNldElQTlMxXzIzSmF2YVNjcmlwdERlYnVn
TGlzdGVuZXJFTlNfN1B0ckhhc2hJUzZfRUVOU18xMEhhc2hUcmFpdHNJUzZfRUVFRU5TN19JUzNf
RUUKIF9fWk4zV1RGN0hhc2hTZXRJUE43V2ViQ29yZTIzSmF2YVNjcmlwdERlYnVnTGlzdGVuZXJF
TlNfN1B0ckhhc2hJUzNfRUVOU18xMEhhc2hUcmFpdHNJUzNfRUVFM2FkZEVSS1MzXwogX19aTjNX
VEY5SGFzaFRhYmxlSVBON1dlYkNvcmUyM0phdmFTY3JpcHREZWJ1Z0xpc3RlbmVyRVMzX05TXzE3
SWRlbnRpdHlFeHRyYWN0b3JJUzNfRUVOU183UHRySGFzaElTM19FRU5TXzEwSGFzaFRyYWl0c0lT
M19FRVM5XwotX19aTjdXZWJDb3JlMjFKYXZhU2NyaXB0RGVidWdTZXJ2ZXIxNGRpZEFkZExpc3Rl
bmVyRVBOU180UGFnZUUKIF9fWk43V2ViQ29yZTRQYWdlMTFzZXREZWJ1Z2dlckVQTjNKU0M4RGVi
dWdnZXJFCi1fX1pON1dlYkNvcmUyMUphdmFTY3JpcHREZWJ1Z1NlcnZlcjE2Y2xlYXJCcmVha3Bv
aW50c0V2CiBfX1pOM1dURjIwZGVsZXRlQWxsUGFpclNlY29uZHNJUE5TXzdIYXNoU2V0SWpOU183
SW50SGFzaElqRUVOU18xMEhhc2hUcmFpdHNJakVFRUVLTlNfN0hhc2hNYXBJbFM3X05TMl9JbUVF
TlM0X0lsRUVOUzRfSVM3X0VFRUVFCiBfX1pOSzdXZWJDb3JlMjVKU0NhbnZhc0dyYWRpZW50UHJv
dG90eXBlOWNsYXNzSW5mb0V2CiBfX1pOSzdXZWJDb3JlMzBKU0luc3BlY3RvckNvbnRyb2xsZXJQ
cm90b3R5cGU5Y2xhc3NJbmZvRXYKIF9fWk4zV1RGN0hhc2hNYXBJUE4zSlNDMTRTb3VyY2VQcm92
aWRlckVQTlMxXzlFeGVjU3RhdGVFTlNfN1B0ckhhc2hJUzNfRUVOU18xMEhhc2hUcmFpdHNJUzNf
RUVOUzhfSVM1X0VFRTNhZGRFUktTM19SS1M1XwogX19aTjNXVEY5SGFzaFRhYmxlSVBOM0pTQzE0
U291cmNlUHJvdmlkZXJFU3Q0cGFpcklTM19QTlMxXzlFeGVjU3RhdGVFRU5TXzE4UGFpckZpcnN0
RXh0cmFjdG9ySVM3X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJIYQotX19aTjdXZWJDb3Jl
MjFKYXZhU2NyaXB0RGVidWdTZXJ2ZXIxMnNvdXJjZVBhcnNlZEVQTjNKU0M5RXhlY1N0YXRlRVJL
TlMxXzEwU291cmNlQ29kZUVpUktOUzFfN1VTdHJpbmdFCiBfX1pON1dlYkNvcmVMNnRvUGFnZUVQ
TjNKU0MxNEpTR2xvYmFsT2JqZWN0RQogX19aTkszV1RGN0hhc2hNYXBJUE43V2ViQ29yZTRQYWdl
RVBOU183SGFzaFNldElQTlMxXzIzSmF2YVNjcmlwdERlYnVnTGlzdGVuZXJFTlNfN1B0ckhhc2hJ
UzZfRUVOU18xMEhhc2hUcmFpdHNJUzZfRUVFRU5TN19JUzNfRQogX19aTjdXZWJDb3JlTDIyZGlz
cGF0Y2hEaWRQYXJzZVNvdXJjZUVSS04zV1RGN0hhc2hTZXRJUE5TXzIzSmF2YVNjcmlwdERlYnVn
TGlzdGVuZXJFTlMwXzdQdHJIYXNoSVMzX0VFTlMwXzEwSGFzaFRyYWl0c0lTM19FRUVFUApAQCAt
MjM5MDAsMzIgKzIzODg4LDIwIEBAIF9fWk43V2ViQ29yZTIxSlNJbnNwZWN0b3JDb250cm9sbGVy
MTZhZGRTb3VyY2VUb0ZyYW1lRVBOM0pTQzlFeGVjU3RhdGVFUktOUzFfN0FyCiBfX1pON1dlYkNv
cmUzMmpzQ29uc29sZVByb3RvdHlwZUZ1bmN0aW9uQXNzZXJ0RVBOM0pTQzlFeGVjU3RhdGVFUE5T
MF84SlNPYmplY3RFTlMwXzdKU1ZhbHVlRVJLTlMwXzdBcmdMaXN0RQogX19aTjdXZWJDb3JlN0Nv
bnNvbGUxNWFzc2VydENvbmRpdGlvbkViUE5TXzE1U2NyaXB0Q2FsbFN0YWNrRQogX19aTjNXVEY2
VmVjdG9ySVBON1dlYkNvcmUyM0phdmFTY3JpcHREZWJ1Z0xpc3RlbmVyRUxtMEVFNnNocmlua0Vt
Ci1fX1pON1dlYkNvcmUyMUphdmFTY3JpcHREZWJ1Z1NlcnZlcjljYWxsRXZlbnRFUktOM0pTQzE3
RGVidWdnZXJDYWxsRnJhbWVFbGkKIF9fWk43V2ViQ29yZTE5SmF2YVNjcmlwdENhbGxGcmFtZUMx
RVJLTjNKU0MxN0RlYnVnZ2VyQ2FsbEZyYW1lRU4zV1RGMTBQYXNzUmVmUHRySVMwX0VFbGkKIF9f
Wk43V2ViQ29yZTE5SmF2YVNjcmlwdENhbGxGcmFtZUMyRVJLTjNKU0MxN0RlYnVnZ2VyQ2FsbEZy
YW1lRU4zV1RGMTBQYXNzUmVmUHRySVMwX0VFbGkKLV9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERl
YnVnU2VydmVyMTNwYXVzZUlmTmVlZGVkRVBOU180UGFnZUUKLV9fWk5LN1dlYkNvcmUyMUphdmFT
Y3JpcHREZWJ1Z1NlcnZlcjEzaGFzQnJlYWtwb2ludEVsagogX19aTkszV1RGN0hhc2hNYXBJbFBO
U183SGFzaFNldElqTlNfN0ludEhhc2hJakVFTlNfMTBIYXNoVHJhaXRzSWpFRUVFTlMyX0ltRUVO
UzRfSWxFRU5TNF9JUzdfRUVFM2dldEVSS2wKLV9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERlYnVn
U2VydmVyMTFhdFN0YXRlbWVudEVSS04zSlNDMTdEZWJ1Z2dlckNhbGxGcmFtZUVsaQotX19aTjdX
ZWJDb3JlMjFKYXZhU2NyaXB0RGVidWdTZXJ2ZXIxMXJldHVybkV2ZW50RVJLTjNKU0MxN0RlYnVn
Z2VyQ2FsbEZyYW1lRWxpCiBfX1pON1dlYkNvcmUxOUphdmFTY3JpcHRDYWxsRnJhbWU2Y2FsbGVy
RXYKIF9fWk4zV1RGMTBSZWZDb3VudGVkSU43V2ViQ29yZTE5SmF2YVNjcmlwdENhbGxGcmFtZUVF
NWRlcmVmRXYKLV9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERlYnVnU2VydmVyMTh3aWxsRXhlY3V0
ZVByb2dyYW1FUktOM0pTQzE3RGVidWdnZXJDYWxsRnJhbWVFbGkKLV9fWk43V2ViQ29yZTIxSmF2
YVNjcmlwdERlYnVnU2VydmVyMTdkaWRFeGVjdXRlUHJvZ3JhbUVSS04zSlNDMTdEZWJ1Z2dlckNh
bGxGcmFtZUVsaQogX19aTjdXZWJDb3JlNDZqc0luc3BlY3RvckNvbnRyb2xsZXJQcm90b3R5cGVG
dW5jdGlvblByb2ZpbGVzRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdKU1Zh
bHVlRVJLTlMwXzdBcmdMaXN0RQogX19aTjdXZWJDb3JlMjFKU0luc3BlY3RvckNvbnRyb2xsZXI4
cHJvZmlsZXNFUE4zSlNDOUV4ZWNTdGF0ZUVSS05TMV83QXJnTGlzdEUKIF9fWk43V2ViQ29yZTUy
anNJbnNwZWN0b3JDb250cm9sbGVyUHJvdG90eXBlRnVuY3Rpb25FbmFibGVQcm9maWxlckVQTjNK
U0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUVSS05TMF83QXJnTGlzdEUK
IF9fWk5LN1dlYkNvcmUzMkpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uUHJvdG90eXBlOWNsYXNzSW5m
b0V2Ci1fX1pON1dlYkNvcmUyMUphdmFTY3JpcHREZWJ1Z1NlcnZlcjE1Y29udGludWVQcm9ncmFt
RXYKLV9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERlYnVnU2VydmVyOWV4Y2VwdGlvbkVSS04zSlND
MTdEZWJ1Z2dlckNhbGxGcmFtZUVsaQogX19aTjdXZWJDb3JlNTJqc0luc3BlY3RvckNvbnRyb2xs
ZXJQcm90b3R5cGVGdW5jdGlvblN0YXJ0UHJvZmlsaW5nRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84
SlNPYmplY3RFTlMwXzdKU1ZhbHVlRVJLTlMwXzdBcmdMaXN0RQogX19aTjdXZWJDb3JlNTFqc0lu
c3BlY3RvckNvbnRyb2xsZXJQcm90b3R5cGVGdW5jdGlvblN0b3BQcm9maWxpbmdFUE4zSlNDOUV4
ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFUktOUzBfN0FyZ0xpc3RFCiBfX1pO
N1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5n
RXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE1ZGlzYWJsZURlYnVnZ2VyRXYK
LV9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERlYnVnU2VydmVyMTRyZW1vdmVMaXN0ZW5lckVQTlNf
MjNKYXZhU2NyaXB0RGVidWdMaXN0ZW5lckVQTlNfNFBhZ2VFCiBfX1pOM1dURjlIYXNoVGFibGVJ
UE43V2ViQ29yZTRQYWdlRVN0NHBhaXJJUzNfUE5TXzdIYXNoU2V0SVBOUzFfMjNKYXZhU2NyaXB0
RGVidWdMaXN0ZW5lckVOU183UHRySGFzaElTN19FRU5TXzEwSGFzaFRyYWl0c0lTN19FCi1fX1pO
N1dlYkNvcmUyMUphdmFTY3JpcHREZWJ1Z1NlcnZlcjE3ZGlkUmVtb3ZlTGlzdGVuZXJFUE5TXzRQ
YWdlRQotX19aTjdXZWJDb3JlMjFKYXZhU2NyaXB0RGVidWdTZXJ2ZXIyMWRpZFJlbW92ZUxhc3RM
aXN0ZW5lckV2CiBfX1pON1dlYkNvcmU1RnJhbWUxN3NldElzRGlzY29ubmVjdGVkRWIKIF9fWk43
V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjExY2xvc2VXaW5kb3dFdgogX19aTjdXZWJDb3Jl
TDE5Z2V0VW5pcXVlSWRDYWxsYmFja0VQSzE1T3BhcXVlSlNDb250ZXh0UDEzT3BhcXVlSlNWYWx1
ZVAxNE9wYXF1ZUpTU3RyaW5nUFBLUzNfCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJv
IGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA0Y2I0Nzk0Li4yZThlNDdlIDEwMDY0NAotLS0g
YS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTEzNzQs
NyArMTM3NCw2IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZS5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKICAgICBpbnNw
ZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oIFwKLSAgICBpbnNwZWN0b3IvSmF2YVNjcmlwdERl
YnVnU2VydmVyLmggXAogICAgIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaCBcCiAg
ICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIFwKICAgICBsb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuaCBcCkBAIC0yNjMwLDcgKzI2MjksNiBAQCBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUj0xKSB7CiAgICAgU09V
UkNFUyArPSBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3Rv
bS5jcHAgXAogICAgICAgICBpbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgXAotICAg
ICAgICBpbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcCBcCiB9CiAKIGNvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlM9MSkgewpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggYzc3YzRhNS4uMjA0Y2U1NSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00MjY4OSwxNSArNDI2ODksNyBAQAogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0
b3JcSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8
RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxKYXZhU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5caW5zcGVjdG9yXEphdmFTY3JpcHREZWJ1Z1NlcnZlci5oIg0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGluc3BlY3RvclxTY3JpcHRCcmVha3BvaW50LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQogCQkJPEZpbGUNCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDNkYWFjMWYuLjMwMjdmOGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC01MzMsOSArNTMzLDYgQEAKIAkJMUM4MUI5NUMwRTk3MzMwODAwMjY2RTA3
IC8qIEluc3BlY3RvckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFDODFC
QTA5MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDODFCQTAzMEU5NzM0ODMwMDI2
NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCAqLzsgfTsKIAkJMUM4MUJBMEEwRTk3MzQ4
MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDODFCQTA0MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZh
U2NyaXB0Q2FsbEZyYW1lLmggKi87IH07Ci0JCTFDODFCQTBDMEU5NzM0ODMwMDI2NkUwNyAvKiBK
YXZhU2NyaXB0RGVidWdMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUM4MUJBMDYwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHREZWJ1
Z0xpc3RlbmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJMUM4MUJBMEQwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHREZWJ1Z1NlcnZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzgxQkEw
NzBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcCAqLzsgfTsKLQkJ
MUM4MUJBMEUwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHREZWJ1Z1NlcnZlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM4MUJBMDgwRTk3MzQ4
MzAwMjY2RTA3IC8qIEphdmFTY3JpcHREZWJ1Z1NlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFDQTE5RTA1MERDMjU1OTUwMDY1QTk5NCAv
KiBFdmVudExvb3BNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQ0ExOUUwMzBEQzI1NTk1MDA2NUE5OTQgLyogRXZlbnRMb29wTWFjLm1tICovOyB9
OwogCQkxQ0ExOUUxNjBEQzI1NUNBMDA2NUE5OTQgLyogRXZlbnRMb29wLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0ExOUUxNTBEQzI1NUNBMDA2NUE5
OTQgLyogRXZlbnRMb29wLmggKi87IH07CiAJCTFDQUYzNDgxMEE2QzQwNTIwMEFCRTA2RSAvKiBX
ZWJTY3JpcHRPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFDQUYzNDdFMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTI5OCw2ICsx
Mjk1LDcgQEAKIAkJN0FERTcyMjYxMENCQkI5QjAwNkIzQjNBIC8qIENvbnRleHRNZW51UHJvdmlk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBREU3
MjI1MTBDQkJCOUIwMDZCM0IzQSAvKiBDb250ZXh0TWVudVByb3ZpZGVyLmggKi87IH07CiAJCTdB
RUQzRTA1MEZCQjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUVEM0UwMzBGQkIxRUFBMDBE
MkIwM0MgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwICovOyB9OwogCQk3QUVEM0UwNjBGQkIxRUFB
MDBEMkIwM0MgLyogSW5zcGVjdG9yRnJvbnRlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRUQzRTA0MEZCQjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0
b3JGcm9udGVuZC5oICovOyB9OworCQk3QUZENEE4QjExMzFDMjc2MDAzNUI4ODMgLyogU2NyaXB0
QnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0FGRDRBOEExMTMxQzI3NjAwMzVCODgzIC8qIFNjcmlwdEJyZWFrcG9pbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NDIyNDE4MzEwN0U3
N0Y0MDA3NjZBODcgLyogSlNTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MjI0MTgxMTA3RTc3RjQwMDc2NkE4
NyAvKiBKU1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwICovOyB9OwogCQk4NDIyNDE4NDEwN0U3
N0Y0MDA3NjZBODcgLyogSlNTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE4MjEwN0U3N0Y0MDA3NjZBODcg
LyogSlNTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggKi87IH07CiAJCTg0MjI0MThDMTA3RTc4NkYw
MDc2NkE4NyAvKiBET01TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE4OTEwN0U3ODZGMDA3NjZBODcgLyog
RE9NU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oICovOyB9OwpAQCAtNTg1NSw5ICs1ODUzLDYgQEAK
IAkJMUM4MUJBMDMwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSmF2YVNjcmlwdENhbGxGcmFtZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCQTA0MEU5NzM0ODMwMDI2NkUw
NyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEphdmFTY3JpcHRDYWxsRnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUM4MUJBMDUwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IEphdmFTY3JpcHRDYWxsRnJhbWUuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkxQzgxQkEwNjBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdERl
YnVnTGlzdGVuZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSmF2YVNjcmlw
dERlYnVnTGlzdGVuZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUM4MUJBMDcw
RTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQzgxQkEwODBFOTczNDgzMDAyNjZFMDcgLyogSmF2
YVNjcmlwdERlYnVnU2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEph
dmFTY3JpcHREZWJ1Z1NlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkw
NERGOTBCQTlEMkM4MDA4MUU5RDAgLyogVmVyc2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
eGNjb25maWc7IHBhdGggPSBWZXJzaW9uLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQ0ExOUUwMzBEQzI1NTk1MDA2NUE5OTQgLyogRXZlbnRMb29wTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRXZlbnRMb29wTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0ExOUUxNTBEQzI1NUNBMDA2NUE5OTQgLyogRXZl
bnRMb29wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50TG9vcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjcyMCw2ICs2NzE1LDcgQEAKIAkJN0FERTcy
MjUxMENCQkI5QjAwNkIzQjNBIC8qIENvbnRleHRNZW51UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGV4dE1lbnVQcm92aWRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QUVEM0UwMzBGQkIxRUFBMDBEMkIwM0MgLyogSW5zcGVjdG9yRnJv
bnRlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9y
RnJvbnRlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUVEM0UwNDBGQkIx
RUFBMDBEMkIwM0MgLyogSW5zcGVjdG9yRnJvbnRlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJN0FGRDRBOEExMTMxQzI3NjAwMzVCODgzIC8qIFNjcmlwdEJyZWFrcG9pbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0QnJlYWtwb2ludC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NDIyNDE4MTEwN0U3N0Y0MDA3NjZBODcgLyogSlNTVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg0MjI0MTgyMTA3RTc3RjQwMDc2NkE4NyAvKiBKU1NWR0ZFTW9ycGhvbG9neUVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdGRU1vcnBob2xvZ3lF
bGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MjI0MTg5MTA3RTc4NkYw
MDc2NkE4NyAvKiBET01TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERPTVNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNjQ1LDkgKzEwNjQxLDcgQEAKIAkJCQkxQzgxQkEwMzBFOTcz
NDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgKi8sCiAJCQkJMUM4MUJBMDQw
RTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCAqLywKIAkJCQkxQzgxQkEw
NTBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5pZGwgKi8sCi0JCQkJMUM4
MUJBMDYwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyLmggKi8sCi0J
CQkJMUM4MUJBMDcwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAg
Ki8sCi0JCQkJMUM4MUJBMDgwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHREZWJ1Z1NlcnZl
ci5oICovLAorCQkJCTdBRkQ0QThBMTEzMUMyNzYwMDM1Qjg4MyAvKiBTY3JpcHRCcmVha3BvaW50
LmggKi8sCiAJCQkJQkNDNjRGNUYwRENGQjg0RTAwODFFRjNCIC8qIGxvY2FsaXplZFN0cmluZ3Mu
anMgKi8sCiAJCQkJNzU1M0NGRTcxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFj
dG9yeS5jcHAgKi8sCiAJCQkJNzU1M0NGRTYxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVj
b3JkRmFjdG9yeS5oICovLApAQCAtMTczMTAsOCArMTczMDQsNiBAQAogCQkJCTU5RTU2MEE3MTEw
NTMzNjYwMEFBMTI1OCAvKiBKYXZhQ2xhc3NKU0MuaCBpbiBIZWFkZXJzICovLAogCQkJCTU5QTlF
N0IyMTEwNDc1OTQwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFDODFCQTBBMEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4g
SGVhZGVycyAqLywKLQkJCQkxQzgxQkEwQzBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdERl
YnVnTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTFDODFCQTBFMEU5NzM0ODMwMDI2NkUw
NyAvKiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU5QkMzOTNG
MTEwNTRBMTMwMEZEODVEQiAvKiBKYXZhU3RyaW5nSlNDLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTU2OUQwNDBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk1OTEzOTUzQjExMDc1ODQ1MDA4M0VDNTUgLyogSk5JQnJpZGdlLmggaW4gSGVhZGVycyAq
LywKQEAgLTE4NTQwLDYgKzE4NTMyLDcgQEAKIAkJCQk5MzFCQ0M2MTExMjRERkNCMDBCRTcwREQg
LyogTWVkaWFDYW5TdGFydExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5RjJBMzIyQzEx
MjVBMEEyMDAzQzMwNTYgLyogSmF2YVNjcmlwdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTlGMkEzMjJFMTEyNUEwQTIwMDNDMzA1NiAvKiBKYXZhU2NyaXB0UHJvZmlsZU5vZGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTdBRkQ0QThCMTEzMUMyNzYwMDM1Qjg4MyAvKiBTY3JpcHRCcmVha3Bv
aW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE5NTA0LDcgKzE5NDk3LDYgQEAKIAkJCQk1OUU1NjBB
OTExMDUzMzZGMDBBQTEyNTggLyogSmF2YUNsYXNzSlNDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTU5QTlFN0IwMTEwNDc1ODgwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUM4MUJBMDkwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJh
bWUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUM4MUJBMEQwRTk3MzQ4MzAwMjY2RTA3IC8qIEph
dmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTU2OUQwMzBEN0Uy
QjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE1NjlE
MDUwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9vYmpjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTkx
Mzk1M0QxMTA3NTg0RTAwODNFQzU1IC8qIEpOSUJyaWRnZS5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20u
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAK
aW5kZXggM2RiODk0ZC4uOTQ3Njc0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKQEAgLTY3LDggKzY3LDggQEAKIAogI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUu
aCIKLSNpbmNsdWRlICJKYXZhU2NyaXB0RGVidWdTZXJ2ZXIuaCIKICNpbmNsdWRlICJKU0phdmFT
Y3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgogI2VuZGlm
CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC0xMTgsMTAgKzExOCw5IEBAIEpTVmFsdWUgSlNJ
bmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlRm9ySWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzCiAjZW5kaWYKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQot
CiBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpjdXJyZW50Q2FsbEZyYW1lKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCiB7Ci0gICAgSmF2YVNjcmlwdENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gaW1wbCgpLT5jdXJyZW50Q2FsbEZyYW1lKCk7CisgICAgSmF2YVNjcmlwdENhbGxG
cmFtZSogY2FsbEZyYW1lID0gU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmN1cnJlbnRDYWxs
RnJhbWUoKTsKICAgICBpZiAoIWNhbGxGcmFtZSB8fCAhY2FsbEZyYW1lLT5pc1ZhbGlkKCkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCkBAIC0xMzQsNyArMTMzLDYgQEAgSlNWYWx1
ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6aXNBY3RpdmF0aW9uKEV4ZWNTdGF0ZSosIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFyZ3MuYXQoMCkuZ2V0T2JqZWN0
KCk7CiAgICAgcmV0dXJuIGpzQm9vbGVhbihvYmplY3QgJiYgb2JqZWN0LT5pc0FjdGl2YXRpb25P
YmplY3QoKSk7CiB9Ci0KICNlbmRpZgogCiBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojpu
b2RlRm9ySWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAppbmRleCA5ODY5Nzc1Li5iMjgwZDUyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtMSw0NyArMSw1
ODQgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcmlwdERl
YnVnU2VydmVyLmgiCiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKIAotI2luY2x1
ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVk
ZSAiRXZlbnRMb29wLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUu
aCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5o
IgorI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUg
IlNjcmlwdEJyZWFrcG9pbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiU2Nyb2xsVmlldy5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgPGRlYnVn
Z2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmg+CisjaW5jbHVkZSA8cGFyc2VyL1NvdXJjZUNvZGUuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJh
bS5oPgogCi0jaW5jbHVkZSAiSmF2YVNjcmlwdERlYnVnU2VydmVyLmgiCit1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6
OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCkKK1NjcmlwdERlYnVnU2VydmVyJiBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFNjcmlwdERlYnVn
U2VydmVyLCBzZXJ2ZXIsICgpKTsKKyAgICByZXR1cm4gc2VydmVyOworfQorCitTY3JpcHREZWJ1
Z1NlcnZlcjo6U2NyaXB0RGVidWdTZXJ2ZXIoKQorICAgIDogbV9jYWxsaW5nTGlzdGVuZXJzKGZh
bHNlKQorICAgICwgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKERvbnRQYXVzZU9uRXhjZXB0aW9u
cykKKyAgICAsIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQoZmFsc2UpCisgICAgLCBtX3BhdXNlZChm
YWxzZSkKKyAgICAsIG1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cyh0cnVlKQorICAgICwg
bV9wYXVzZU9uQ2FsbEZyYW1lKDApCisgICAgLCBtX3JlY29tcGlsZVRpbWVyKHRoaXMsICZTY3Jp
cHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMpCit7Cit9CisKK1NjcmlwdERl
YnVnU2VydmVyOjp+U2NyaXB0RGVidWdTZXJ2ZXIoKQoreworICAgIGRlbGV0ZUFsbFZhbHVlcyht
X3BhZ2VMaXN0ZW5lcnNNYXApOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0
ZW5lcihMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBhZ2UpCit7CisgICAgQVNTRVJUX0FSRyhs
aXN0ZW5lciwgbGlzdGVuZXIpOworICAgIEFTU0VSVF9BUkcocGFnZSwgcGFnZSk7CisKKyAgICBw
YWlyPFBhZ2VMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX3BhZ2VMaXN0
ZW5lcnNNYXAuYWRkKHBhZ2UsIDApOworICAgIGlmIChyZXN1bHQuc2Vjb25kKQorICAgICAgICBy
ZXN1bHQuZmlyc3QtPnNlY29uZCA9IG5ldyBMaXN0ZW5lclNldDsKKworICAgIExpc3RlbmVyU2V0
KiBsaXN0ZW5lcnMgPSByZXN1bHQuZmlyc3QtPnNlY29uZDsKKyAgICBsaXN0ZW5lcnMtPmFkZChs
aXN0ZW5lcik7CisKKyAgICBkaWRBZGRMaXN0ZW5lcihwYWdlKTsKK30KKwordm9pZCBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoTGlzdGVuZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWdl
KQoreworICAgIEFTU0VSVF9BUkcobGlzdGVuZXIsIGxpc3RlbmVyKTsKKyAgICBBU1NFUlRfQVJH
KHBhZ2UsIHBhZ2UpOworCisgICAgUGFnZUxpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Bh
Z2VMaXN0ZW5lcnNNYXAuZmluZChwYWdlKTsKKyAgICBpZiAoaXQgPT0gbV9wYWdlTGlzdGVuZXJz
TWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBMaXN0ZW5lclNldCogbGlzdGVuZXJz
ID0gaXQtPnNlY29uZDsKKyAgICBsaXN0ZW5lcnMtPnJlbW92ZShsaXN0ZW5lcik7CisgICAgaWYg
KGxpc3RlbmVycy0+aXNFbXB0eSgpKSB7CisgICAgICAgIG1fcGFnZUxpc3RlbmVyc01hcC5yZW1v
dmUoaXQpOworICAgICAgICBkZWxldGUgbGlzdGVuZXJzOworICAgIH0KKworICAgIGRpZFJlbW92
ZUxpc3RlbmVyKHBhZ2UpOworICAgIGlmICghaGFzTGlzdGVuZXJzKCkpCisgICAgICAgIGRpZFJl
bW92ZUxhc3RMaXN0ZW5lcigpOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpwYWdlQ3Jl
YXRlZChQYWdlKiBwYWdlKQoreworICAgIEFTU0VSVF9BUkcocGFnZSwgcGFnZSk7CisKKyAgICBp
ZiAoIWhhc0xpc3RlbmVyc0ludGVyZXN0ZWRJblBhZ2UocGFnZSkpCisgICAgICAgIHJldHVybjsK
KyAgICBwYWdlLT5zZXREZWJ1Z2dlcih0aGlzKTsKK30KKworYm9vbCBTY3JpcHREZWJ1Z1NlcnZl
cjo6aGFzTGlzdGVuZXJzSW50ZXJlc3RlZEluUGFnZShQYWdlKiBwYWdlKQoreworICAgIEFTU0VS
VF9BUkcocGFnZSwgcGFnZSk7CisKKyAgICBpZiAoaGFzR2xvYmFsTGlzdGVuZXJzKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIG1fcGFnZUxpc3RlbmVyc01hcC5jb250YWlu
cyhwYWdlKTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBTY3JpcHRCcmVha3BvaW50
IGJyZWFrcG9pbnQpCit7CisgICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRv
SW50UHRyKCk7CisgICAgQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9icmVha3BvaW50
cy5maW5kKHNvdXJjZUlEVmFsdWUpOworICAgIGlmIChpdCA9PSBtX2JyZWFrcG9pbnRzLmVuZCgp
KQorICAgICAgICBpdCA9IG1fYnJlYWtwb2ludHMuc2V0KHNvdXJjZUlEVmFsdWUsIFNvdXJjZUJy
ZWFrcG9pbnRzKCkpLmZpcnN0OworICAgIGl0LT5zZWNvbmQuc2V0KGxpbmVOdW1iZXIsIGJyZWFr
cG9pbnQpOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KGNv
bnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCit7CisgICAgaW50cHRy
X3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7CisgICAgQnJlYWtwb2ludHNN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9icmVha3BvaW50cy5maW5kKHNvdXJjZUlEVmFsdWUpOworICAg
IGlmIChpdCAhPSBtX2JyZWFrcG9pbnRzLmVuZCgpKQorICAgICAgICBpdC0+c2Vjb25kLnJlbW92
ZShsaW5lTnVtYmVyKTsKK30KKworYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzQnJlYWtwb2lu
dChpbnRwdHJfdCBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikgY29uc3QKK3sKKyAgICBC
cmVha3BvaW50c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2JyZWFrcG9pbnRzLmZpbmQoc291
cmNlSUQpOworICAgIGlmIChpdCA9PSBtX2JyZWFrcG9pbnRzLmVuZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgU291cmNlQnJlYWtwb2ludHM6OmNvbnN0X2l0ZXJhdG9yIGJyZWFrSXQg
PSBpdC0+c2Vjb25kLmZpbmQobGluZU51bWJlcik7CisgICAgaWYgKGJyZWFrSXQgPT0gaXQtPnNl
Y29uZC5lbmQoKSB8fCAhYnJlYWtJdC0+c2Vjb25kLmVuYWJsZWQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIEFuIGVtcHR5IGNvbmRpdGlvbiBjb3VudHMgYXMgbm8gY29uZGl0aW9u
IHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gInRydWUiLgorICAgIGlmIChicmVha0l0LT5zZWNvbmQu
Y29uZGl0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBKU1ZhbHVl
IGV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fY3VycmVudENhbGxGcmFtZS0+ZXZh
bHVhdGUoYnJlYWtJdC0+c2Vjb25kLmNvbmRpdGlvbiwgZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhj
ZXB0aW9uKSB7CisgICAgICAgIC8vIEFuIGVycm9uZW91cyBjb25kaXRpb24gY291bnRzIGFzICJm
YWxzZSIuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC50
b0Jvb2xlYW4obV9jdXJyZW50Q2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpKTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVha3Bv
aW50cygpCit7CisgICAgbV9icmVha3BvaW50cy5jbGVhcigpOworfQorCit2b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNlcHRpb25zU3Rh
dGUgcGF1c2UpCit7CisgICAgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID0gcGF1c2U7Cit9CisK
K3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlUHJvZ3JhbSgpCiB7Ci0gICAgSmF2YVNjcmlw
dERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucygpOworICAgIG1f
cGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVy
Ojpjb250aW51ZVByb2dyYW0oKQoreworICAgIGlmICghbV9wYXVzZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSBmYWxzZTsKKyAgICBtX2RvbmVQcm9j
ZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0cnVlOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVy
OjpzdGVwSW50b1N0YXRlbWVudCgpCit7CisgICAgaWYgKCFtX3BhdXNlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7CisgICAgbV9kb25lUHJv
Y2Vzc2luZ0RlYnVnZ2VyRXZlbnRzID0gdHJ1ZTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6c3RlcE92ZXJTdGF0ZW1lbnQoKQoreworICAgIGlmICghbV9wYXVzZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS5nZXQo
KTsKKyAgICBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0cnVlOworfQorCit2b2lk
IFNjcmlwdERlYnVnU2VydmVyOjpzdGVwT3V0T2ZGdW5jdGlvbigpCit7CisgICAgaWYgKCFtX3Bh
dXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gbV9jdXJy
ZW50Q2FsbEZyYW1lID8gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXIoKSA6IDA7CisgICAgbV9k
b25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzID0gdHJ1ZTsKK30KKworSmF2YVNjcmlwdENhbGxG
cmFtZSogU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWUoKQoreworICAgIGlmICgh
bV9wYXVzZWQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2N1cnJlbnRDYWxsRnJh
bWUuZ2V0KCk7Cit9CisKK1NjcmlwdFN0YXRlKiBTY3JpcHREZWJ1Z1NlcnZlcjo6Y3VycmVudENh
bGxGcmFtZVN0YXRlKCkKK3sKKyAgICBpZiAoIW1fcGF1c2VkKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gbV9jdXJyZW50Q2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpOyAgICAgICAgCit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRp
c3BhdGNoRGlkUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgY29uc3Qg
SlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UpCit7CisgICAgU3RyaW5nIHNvdXJjZUlEID0gSlNDOjpV
U3RyaW5nKEpTQzo6VVN0cmluZzo6ZnJvbShzb3VyY2UucHJvdmlkZXIoKS0+YXNJRCgpKSk7Cisg
ICAgU3RyaW5nIHVybCA9IHNvdXJjZS5wcm92aWRlcigpLT51cmwoKTsKKyAgICBTdHJpbmcgZGF0
YSA9IEpTQzo6VVN0cmluZyhzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOworICAgIGlu
dCBmaXJzdExpbmUgPSBzb3VyY2UuZmlyc3RMaW5lKCk7CisKKyAgICBWZWN0b3I8TGlzdGVuZXIq
PiBjb3B5OworICAgIGNvcHlUb1ZlY3RvcihsaXN0ZW5lcnMsIGNvcHkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY29weS5zaXplKCk7ICsraSkKKyAgICAgICAgY29weVtpXS0+ZGlkUGFy
c2VTb3VyY2Uoc291cmNlSUQsIHVybCwgZGF0YSwgZmlyc3RMaW5lKTsKK30KKwordm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hGYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IExpc3RlbmVy
U2V0JiBsaXN0ZW5lcnMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9yTGluZSwg
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgU3RyaW5nIHVybCA9IHNvdXJjZS5w
cm92aWRlcigpLT51cmwoKTsKKyAgICBTdHJpbmcgZGF0YSA9IEpTQzo6VVN0cmluZyhzb3VyY2Uu
ZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOworICAgIGludCBmaXJzdExpbmUgPSBzb3VyY2UuZmly
c3RMaW5lKCk7CisKKyAgICBWZWN0b3I8TGlzdGVuZXIqPiBjb3B5OworICAgIGNvcHlUb1ZlY3Rv
cihsaXN0ZW5lcnMsIGNvcHkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29weS5zaXpl
KCk7ICsraSkKKyAgICAgICAgY29weVtpXS0+ZmFpbGVkVG9QYXJzZVNvdXJjZSh1cmwsIGRhdGEs
IGZpcnN0TGluZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2UpOworfQorCitzdGF0aWMgUGFnZSog
dG9QYWdlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgQVNTRVJUX0FSRyhn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCk7CisKKyAgICBKU0RPTVdpbmRvdyogd2luZG93ID0g
YXNKU0RPTVdpbmRvdyhnbG9iYWxPYmplY3QpOworICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvdy0+
aW1wbCgpLT5mcmFtZSgpOworICAgIHJldHVybiBmcmFtZSA/IGZyYW1lLT5wYWdlKCkgOiAwOwor
fQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkZXRhY2goSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICAvLyBJZiB3ZSdyZSBkZXRhY2hpbmcgZnJvbSB0aGUgY3VycmVudGx5
IGV4ZWN1dGluZyBnbG9iYWwgb2JqZWN0LCBtYW51YWxseSB0ZWFyIGRvd24gb3VyCisgICAgLy8g
c3RhY2ssIHNpbmNlIHdlIHdvbid0IGdldCBmdXJ0aGVyIGRlYnVnZ2VyIGNhbGxiYWNrcyB0byBk
byBzby4gQWxzbywgcmVzdW1lIGV4ZWN1dGlvbiwKKyAgICAvLyBzaW5jZSB0aGVyZSdzIG5vIHBv
aW50IGluIHN0YXlpbmcgcGF1c2VkIG9uY2UgYSB3aW5kb3cgY2xvc2VzLgorICAgIGlmIChtX2N1
cnJlbnRDYWxsRnJhbWUgJiYgbV9jdXJyZW50Q2FsbEZyYW1lLT5keW5hbWljR2xvYmFsT2JqZWN0
KCkgPT0gZ2xvYmFsT2JqZWN0KSB7CisgICAgICAgIG1fY3VycmVudENhbGxGcmFtZSA9IDA7Cisg
ICAgICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IDA7CisgICAgICAgIGNvbnRpbnVlUHJvZ3JhbSgp
OworICAgIH0KKyAgICBEZWJ1Z2dlcjo6ZGV0YWNoKGdsb2JhbE9iamVjdCk7Cit9CisKK3ZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnNvdXJjZVBhcnNlZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9yTGluZSwgY29uc3QgVVN0cmluZyYgZXJyb3JNZXNz
YWdlKQoreworICAgIGlmIChtX2NhbGxpbmdMaXN0ZW5lcnMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFBhZ2UqIHBhZ2UgPSB0b1BhZ2UoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2FsbGluZ0xpc3RlbmVycyA9
IHRydWU7CisKKyAgICBib29sIGlzRXJyb3IgPSBlcnJvckxpbmUgIT0gLTE7CisKKyAgICBpZiAo
aGFzR2xvYmFsTGlzdGVuZXJzKCkpIHsKKyAgICAgICAgaWYgKGlzRXJyb3IpCisgICAgICAgICAg
ICBkaXNwYXRjaEZhaWxlZFRvUGFyc2VTb3VyY2UobV9saXN0ZW5lcnMsIHNvdXJjZSwgZXJyb3JM
aW5lLCBlcnJvck1lc3NhZ2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkaXNwYXRjaERp
ZFBhcnNlU291cmNlKG1fbGlzdGVuZXJzLCBzb3VyY2UpOworICAgIH0KKworICAgIGlmIChMaXN0
ZW5lclNldCogcGFnZUxpc3RlbmVycyA9IG1fcGFnZUxpc3RlbmVyc01hcC5nZXQocGFnZSkpIHsK
KyAgICAgICAgQVNTRVJUKCFwYWdlTGlzdGVuZXJzLT5pc0VtcHR5KCkpOworICAgICAgICBpZiAo
aXNFcnJvcikKKyAgICAgICAgICAgIGRpc3BhdGNoRmFpbGVkVG9QYXJzZVNvdXJjZSgqcGFnZUxp
c3RlbmVycywgc291cmNlLCBlcnJvckxpbmUsIGVycm9yTWVzc2FnZSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGRpc3BhdGNoRGlkUGFyc2VTb3VyY2UoKnBhZ2VMaXN0ZW5lcnMsIHNvdXJj
ZSk7CisgICAgfQorCisgICAgbV9jYWxsaW5nTGlzdGVuZXJzID0gZmFsc2U7Cit9CisKK3ZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycyhjb25zdCBMaXN0
ZW5lclNldCYgbGlzdGVuZXJzLCBKYXZhU2NyaXB0RXhlY3V0aW9uQ2FsbGJhY2sgY2FsbGJhY2sp
Cit7CisgICAgVmVjdG9yPExpc3RlbmVyKj4gY29weTsKKyAgICBjb3B5VG9WZWN0b3IobGlzdGVu
ZXJzLCBjb3B5KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvcHkuc2l6ZSgpOyArK2kp
CisgICAgICAgIChjb3B5W2ldLT4qY2FsbGJhY2spKCk7Cit9CisKK3ZvaWQgU2NyaXB0RGVidWdT
ZXJ2ZXI6OmRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycyhKYXZhU2NyaXB0RXhlY3V0aW9uQ2Fs
bGJhY2sgY2FsbGJhY2ssIFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKG1fY2FsbGluZ0xpc3RlbmVy
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jYWxsaW5nTGlzdGVuZXJzID0gdHJ1ZTsKKwor
ICAgIEFTU0VSVChoYXNMaXN0ZW5lcnMoKSk7CisKKyAgICBkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0
ZW5lcnMobV9saXN0ZW5lcnMsIGNhbGxiYWNrKTsKKworICAgIGlmIChMaXN0ZW5lclNldCogcGFn
ZUxpc3RlbmVycyA9IG1fcGFnZUxpc3RlbmVyc01hcC5nZXQocGFnZSkpIHsKKyAgICAgICAgQVNT
RVJUKCFwYWdlTGlzdGVuZXJzLT5pc0VtcHR5KCkpOworICAgICAgICBkaXNwYXRjaEZ1bmN0aW9u
VG9MaXN0ZW5lcnMoKnBhZ2VMaXN0ZW5lcnMsIGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICBtX2Nh
bGxpbmdMaXN0ZW5lcnMgPSBmYWxzZTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
SmF2YVNjcmlwdFBhdXNlZChjb25zdCBQYWdlR3JvdXAmIHBhZ2VHcm91cCwgYm9vbCBwYXVzZWQp
Cit7CisgICAgc2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNlZChwYXVzZWQpOworCisgICAgY29u
c3QgSGFzaFNldDxQYWdlKj4mIHBhZ2VzID0gcGFnZUdyb3VwLnBhZ2VzKCk7CisKKyAgICBIYXNo
U2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFnZXMuZW5kKCk7CisgICAgZm9yIChI
YXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWdlcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgIHNldEphdmFTY3JpcHRQYXVzZWQoKml0LCBwYXVzZWQpOworfQor
Cit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRKYXZhU2NyaXB0UGF1c2VkKFBhZ2UqIHBhZ2Us
IGJvb2wgcGF1c2VkKQoreworICAgIEFTU0VSVF9BUkcocGFnZSwgcGFnZSk7CisKKyAgICBwYWdl
LT5zZXREZWZlcnNMb2FkaW5nKHBhdXNlZCk7CisKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBh
Z2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5l
eHQoKSkKKyAgICAgICAgc2V0SmF2YVNjcmlwdFBhdXNlZChmcmFtZSwgcGF1c2VkKTsKK30KKwor
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlwdFBhdXNlZChGcmFtZSogZnJhbWUs
IGJvb2wgcGF1c2VkKQoreworICAgIEFTU0VSVF9BUkcoZnJhbWUsIGZyYW1lKTsKKworICAgIGlm
ICghZnJhbWUtPnNjcmlwdCgpLT5jYW5FeGVjdXRlU2NyaXB0cygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBmcmFtZS0+c2NyaXB0KCktPnNldFBhdXNlZChwYXVzZWQpOworCisgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgaWYgKHBhdXNlZCkKKyAgICAg
ICAgZG9jdW1lbnQtPnN1c3BlbmRBY3RpdmVET01PYmplY3RzKCk7CisgICAgZWxzZQorICAgICAg
ICBkb2N1bWVudC0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0cygpOworCisgICAgc2V0SmF2YVNjcmlw
dFBhdXNlZChmcmFtZS0+dmlldygpLCBwYXVzZWQpOworfQorCisjaWYgUExBVEZPUk0oTUFDKQor
Cit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRKYXZhU2NyaXB0UGF1c2VkKEZyYW1lVmlldyos
IGJvb2wpCit7Cit9CisKKyNlbHNlCisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEphdmFT
Y3JpcHRQYXVzZWQoRnJhbWVWaWV3KiB2aWV3LCBib29sIHBhdXNlZCkKK3sKKyAgICBpZiAoIXZp
ZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEhhc2hTZXQ8UmVmUHRyPFdpZGdldD4g
PiogY2hpbGRyZW4gPSB2aWV3LT5jaGlsZHJlbigpOworICAgIEFTU0VSVChjaGlsZHJlbik7CisK
KyAgICBIYXNoU2V0PFJlZlB0cjxXaWRnZXQ+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNoaWxk
cmVuLT5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFdpZGdldD4gPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBjaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IFdpZGdldCogd2lkZ2V0ID0gKCppdCkuZ2V0KCk7CisgICAgICAgIGlmICghd2lkZ2V0LT5pc1Bs
dWdpblZpZXcoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzdGF0aWNfY2FzdDxQ
bHVnaW5WaWV3Kj4od2lkZ2V0KS0+c2V0SmF2YVNjcmlwdFBhdXNlZChwYXVzZWQpOworICAgIH0K
K30KKworI2VuZGlmCisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlSWZOZWVkZWQoUGFn
ZSogcGFnZSkKK3sKKyAgICBpZiAobV9wYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghcGFnZSB8fCAhaGFzTGlzdGVuZXJzSW50ZXJlc3RlZEluUGFnZShwYWdlKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYm9vbCBwYXVzZU5vdyA9IG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQ7Cisg
ICAgcGF1c2VOb3cgfD0gKG1fcGF1c2VPbkNhbGxGcmFtZSA9PSBtX2N1cnJlbnRDYWxsRnJhbWUp
OworICAgIHBhdXNlTm93IHw9IChtX2N1cnJlbnRDYWxsRnJhbWUtPmxpbmUoKSA+IDAgJiYgaGFz
QnJlYWtwb2ludChtX2N1cnJlbnRDYWxsRnJhbWUtPnNvdXJjZUlEKCksIG1fY3VycmVudENhbGxG
cmFtZS0+bGluZSgpKSk7CisgICAgaWYgKCFwYXVzZU5vdykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gMDsKKyAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0g
ZmFsc2U7CisgICAgbV9wYXVzZWQgPSB0cnVlOworCisgICAgZGlzcGF0Y2hGdW5jdGlvblRvTGlz
dGVuZXJzKCZMaXN0ZW5lcjo6ZGlkUGF1c2UsIHBhZ2UpOworCisgICAgc2V0SmF2YVNjcmlwdFBh
dXNlZChwYWdlLT5ncm91cCgpLCB0cnVlKTsKKworICAgIFRpbWVyQmFzZTo6ZmlyZVRpbWVyc0lu
TmVzdGVkRXZlbnRMb29wKCk7CisKKyAgICBFdmVudExvb3AgbG9vcDsKKyAgICBtX2RvbmVQcm9j
ZXNzaW5nRGVidWdnZXJFdmVudHMgPSBmYWxzZTsKKyAgICB3aGlsZSAoIW1fZG9uZVByb2Nlc3Np
bmdEZWJ1Z2dlckV2ZW50cyAmJiAhbG9vcC5lbmRlZCgpKQorICAgICAgICBsb29wLmN5Y2xlKCk7
CisKKyAgICBzZXRKYXZhU2NyaXB0UGF1c2VkKHBhZ2UtPmdyb3VwKCksIGZhbHNlKTsKKworICAg
IG1fcGF1c2VkID0gZmFsc2U7CisKKyAgICBkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoJkxp
c3RlbmVyOjpkaWRDb250aW51ZSwgcGFnZSk7Cit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6
OmNhbGxFdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGlu
dHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikKK3sKKyAgICBpZiAobV9wYXVzZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVudENhbGxGcmFtZSA9IEphdmFTY3JpcHRDYWxs
RnJhbWU6OmNyZWF0ZShkZWJ1Z2dlckNhbGxGcmFtZSwgbV9jdXJyZW50Q2FsbEZyYW1lLCBzb3Vy
Y2VJRCwgbGluZU51bWJlcik7CisgICAgcGF1c2VJZk5lZWRlZCh0b1BhZ2UoZGVidWdnZXJDYWxs
RnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKSk7Cit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OmF0U3RhdGVtZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFt
ZSwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKQoreworICAgIGlmIChtX3BhdXNl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY3VycmVudENhbGxGcmFtZSk7Cisg
ICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3Vy
cmVudENhbGxGcmFtZS0+dXBkYXRlKGRlYnVnZ2VyQ2FsbEZyYW1lLCBzb3VyY2VJRCwgbGluZU51
bWJlcik7CisgICAgcGF1c2VJZk5lZWRlZCh0b1BhZ2UoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1p
Y0dsb2JhbE9iamVjdCgpKSk7Cit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJldHVybkV2
ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgaW50cHRyX3Qg
c291cmNlSUQsIGludCBsaW5lTnVtYmVyKQoreworICAgIGlmIChtX3BhdXNlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKG1fY3VycmVudENhbGxGcmFtZSk7CisgICAgaWYgKCFtX2N1
cnJlbnRDYWxsRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVudENhbGxGcmFt
ZS0+dXBkYXRlKGRlYnVnZ2VyQ2FsbEZyYW1lLCBzb3VyY2VJRCwgbGluZU51bWJlcik7CisgICAg
cGF1c2VJZk5lZWRlZCh0b1BhZ2UoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVj
dCgpKSk7CisKKyAgICAvLyBUcmVhdCBzdGVwcGluZyBvdmVyIGEgcmV0dXJuIHN0YXRlbWVudCBs
aWtlIHN0ZXBwaW5nIG91dC4KKyAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lID09IG1fcGF1c2VP
bkNhbGxGcmFtZSkKKyAgICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gbV9jdXJyZW50Q2FsbEZy
YW1lLT5jYWxsZXIoKTsKKyAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJh
bWUtPmNhbGxlcigpOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpleGNlcHRpb24oY29u
c3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJ
RCwgaW50IGxpbmVOdW1iZXIsIGJvb2wgaGFzSGFuZGxlcikKK3sKKyAgICBpZiAobV9wYXVzZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2N1cnJlbnRDYWxsRnJhbWUpOworICAg
IGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9w
YXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8IChtX3BhdXNl
T25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAmJiAhaGFzSGFu
ZGxlcikpCisgICAgICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOworCisgICAgbV9j
dXJyZW50Q2FsbEZyYW1lLT51cGRhdGUoZGVidWdnZXJDYWxsRnJhbWUsIHNvdXJjZUlELCBsaW5l
TnVtYmVyKTsKKyAgICBwYXVzZUlmTmVlZGVkKHRvUGFnZShkZWJ1Z2dlckNhbGxGcmFtZS5keW5h
bWljR2xvYmFsT2JqZWN0KCkpKTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6d2lsbEV4
ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwg
aW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKQoreworICAgIGlmIChtX3BhdXNlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gSmF2YVNjcmlwdENh
bGxGcmFtZTo6Y3JlYXRlKGRlYnVnZ2VyQ2FsbEZyYW1lLCBtX2N1cnJlbnRDYWxsRnJhbWUsIHNv
dXJjZUlELCBsaW5lTnVtYmVyKTsKKyAgICBwYXVzZUlmTmVlZGVkKHRvUGFnZShkZWJ1Z2dlckNh
bGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpKTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6ZGlkRXhlY3V0ZVByb2dyYW0oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2Vy
Q2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCit7CisgICAgaWYg
KG1fcGF1c2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9jdXJyZW50Q2FsbEZy
YW1lKTsKKyAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9jdXJyZW50Q2FsbEZyYW1lLT51cGRhdGUoZGVidWdnZXJDYWxsRnJhbWUsIHNvdXJjZUlE
LCBsaW5lTnVtYmVyKTsKKyAgICBwYXVzZUlmTmVlZGVkKHRvUGFnZShkZWJ1Z2dlckNhbGxGcmFt
ZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpKTsKKworICAgIC8vIFRyZWF0IHN0ZXBwaW5nIG92ZXIg
dGhlIGVuZCBvZiBhIHByb2dyYW0gbGlrZSBzdGVwcGluZyBvdXQuCisgICAgaWYgKG1fY3VycmVu
dENhbGxGcmFtZSA9PSBtX3BhdXNlT25DYWxsRnJhbWUpCisgICAgICAgIG1fcGF1c2VPbkNhbGxG
cmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyKCk7CisgICAgbV9jdXJyZW50Q2FsbEZy
YW1lID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5jYWxsZXIoKTsKK30KKwordm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1
Z2dlckNhbGxGcmFtZSwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKQoreworICAg
IGlmIChtX3BhdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY3VycmVudENh
bGxGcmFtZSk7CisgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOworICAgIG1fY3VycmVudENhbGxG
cmFtZS0+dXBkYXRlKGRlYnVnZ2VyQ2FsbEZyYW1lLCBzb3VyY2VJRCwgbGluZU51bWJlcik7Cisg
ICAgcGF1c2VJZk5lZWRlZCh0b1BhZ2UoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9i
amVjdCgpKSk7CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVu
Y3Rpb25zU29vbigpCiB7Ci0gICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZWNv
bXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKKyAgICBtX3JlY29tcGlsZVRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5j
dGlvbnMoVGltZXI8U2NyaXB0RGVidWdTZXJ2ZXI+KikKK3sKKyAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIERlYnVnZ2VyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9u
cyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOworfQorCit2b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpkaWRBZGRMaXN0ZW5lcihQYWdlKiBwYWdlKQoreworICAgIHJlY29tcGlsZUFs
bEpTRnVuY3Rpb25zU29vbigpOworCisgICAgaWYgKHBhZ2UpCisgICAgICAgIHBhZ2UtPnNldERl
YnVnZ2VyKHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgUGFnZTo6c2V0RGVidWdnZXJGb3JBbGxQ
YWdlcyh0aGlzKTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkUmVtb3ZlTGlzdGVu
ZXIoUGFnZSogcGFnZSkKK3sKKyAgICBpZiAoaGFzR2xvYmFsTGlzdGVuZXJzKCkgfHwgKHBhZ2Ug
JiYgaGFzTGlzdGVuZXJzSW50ZXJlc3RlZEluUGFnZShwYWdlKSkpCisgICAgICAgIHJldHVybjsK
KworICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOworCisgICAgaWYgKHBhZ2UpCisg
ICAgICAgIHBhZ2UtPnNldERlYnVnZ2VyKDApOworICAgIGVsc2UKKyAgICAgICAgUGFnZTo6c2V0
RGVidWdnZXJGb3JBbGxQYWdlcygwKTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlk
UmVtb3ZlTGFzdExpc3RlbmVyKCkKK3sKKyAgICBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVu
dHMgPSB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdERlYnVnU2VydmVyLmgKaW5kZXggMDI3ZmZhNS4uNDc1YzBjNyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaApAQCAtMSwyNyArMSwzMCBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAg
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZu
ZGVmIFNjcmlwdERlYnVnU2VydmVyX2gKQEAgLTI5LDE0ICszMiwxMjkgQEAKIAogI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQogCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRCcmVha3BvaW50Lmgi
CisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCisjaW5jbHVk
ZSA8ZGVidWdnZXIvRGVidWdnZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIERlYnVnZ2VyQ2FsbEZy
YW1lOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7Cit9CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIFNjcmlwdERlYnVnU2VydmVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK2NsYXNzIEZyYW1l
OworY2xhc3MgRnJhbWVWaWV3OworY2xhc3MgUGFnZTsKK2NsYXNzIFBhZ2VHcm91cDsKK2NsYXNz
IEphdmFTY3JpcHRDYWxsRnJhbWU7CisKK2NsYXNzIEZyYW1lOworY2xhc3MgUGFnZTsKK2NsYXNz
IFN0cmluZzsKKworY2xhc3MgU2NyaXB0RGVidWdTZXJ2ZXIgOiBKU0M6OkRlYnVnZ2VyLCBwdWJs
aWMgTm9uY29weWFibGUgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHJlY29tcGlsZUFsbEpT
RnVuY3Rpb25zKCk7Ci0gICAgc3RhdGljIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29u
KCk7CisgICAgY2xhc3MgTGlzdGVuZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+
TGlzdGVuZXIoKSB7IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3VyY2UoY29u
c3QgU3RyaW5nJiAgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRh
dGEsIGludCBmaXJzdExpbmUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZhaWxlZFRvUGFy
c2VTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0
TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ29udGludWUoKSA9IDA7CisgICAgfTsKKworICAgIHN0YXRpYyBTY3JpcHREZWJ1Z1NlcnZl
ciYgc2hhcmVkKCk7CisKKyAgICB2b2lkIGFkZExpc3RlbmVyKExpc3RlbmVyKiwgUGFnZSopOwor
ICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoTGlzdGVuZXIqLCBQYWdlKik7CisKKyAgICB2b2lkIHNl
dEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwg
U2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50KTsKKyAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQo
Y29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7CisgICAgdm9pZCBj
bGVhckJyZWFrcG9pbnRzKCk7CisKKyAgICBlbnVtIFBhdXNlT25FeGNlcHRpb25zU3RhdGUgewor
ICAgICAgICBEb250UGF1c2VPbkV4Y2VwdGlvbnMsCisgICAgICAgIFBhdXNlT25BbGxFeGNlcHRp
b25zLAorICAgICAgICBQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zCisgICAgfTsKKyAgICBQYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGU7IH0KKyAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRp
b25zU3RhdGUoUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk7CisKKyAgICB2b2lkIHBhdXNlUHJvZ3Jh
bSgpOworICAgIHZvaWQgY29udGludWVQcm9ncmFtKCk7CisgICAgdm9pZCBzdGVwSW50b1N0YXRl
bWVudCgpOworICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1lbnQoKTsKKyAgICB2b2lkIHN0ZXBPdXRP
ZkZ1bmN0aW9uKCk7CisKKyAgICB2b2lkIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwor
ICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVGltZXI8U2NyaXB0RGVidWdTZXJ2ZXI+
KiA9IDApOworCisgICAgSmF2YVNjcmlwdENhbGxGcmFtZSogY3VycmVudENhbGxGcmFtZSgpOwor
ICAgIFNjcmlwdFN0YXRlKiBjdXJyZW50Q2FsbEZyYW1lU3RhdGUoKTsKKworICAgIHZvaWQgcGFn
ZUNyZWF0ZWQoUGFnZSopOworCitwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaFNldDxMaXN0ZW5l
cio+IExpc3RlbmVyU2V0OworICAgIHR5cGVkZWYgdm9pZCAoTGlzdGVuZXI6OipKYXZhU2NyaXB0
RXhlY3V0aW9uQ2FsbGJhY2spKCk7CisKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcigpOworICAgIH5T
Y3JpcHREZWJ1Z1NlcnZlcigpOworCisgICAgYm9vbCBoYXNCcmVha3BvaW50KGludHB0cl90IHNv
dXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKSBjb25zdDsKKyAgICBib29sIGhhc0xpc3RlbmVy
cygpIGNvbnN0IHsgcmV0dXJuICFtX2xpc3RlbmVycy5pc0VtcHR5KCkgfHwgIW1fcGFnZUxpc3Rl
bmVyc01hcC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc0dsb2JhbExpc3RlbmVycygpIGNvbnN0
IHsgcmV0dXJuICFtX2xpc3RlbmVycy5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc0xpc3RlbmVy
c0ludGVyZXN0ZWRJblBhZ2UoUGFnZSopOworCisgICAgdm9pZCBzZXRKYXZhU2NyaXB0UGF1c2Vk
KGNvbnN0IFBhZ2VHcm91cCYsIGJvb2wgcGF1c2VkKTsKKyAgICB2b2lkIHNldEphdmFTY3JpcHRQ
YXVzZWQoUGFnZSosIGJvb2wgcGF1c2VkKTsKKyAgICB2b2lkIHNldEphdmFTY3JpcHRQYXVzZWQo
RnJhbWUqLCBib29sIHBhdXNlZCk7CisgICAgdm9pZCBzZXRKYXZhU2NyaXB0UGF1c2VkKEZyYW1l
VmlldyosIGJvb2wgcGF1c2VkKTsKKworICAgIHZvaWQgZGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVu
ZXJzKEphdmFTY3JpcHRFeGVjdXRpb25DYWxsYmFjaywgUGFnZSopOworICAgIHZvaWQgZGlzcGF0
Y2hGdW5jdGlvblRvTGlzdGVuZXJzKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIEphdmFT
Y3JpcHRFeGVjdXRpb25DYWxsYmFjayBjYWxsYmFjayk7CisgICAgdm9pZCBkaXNwYXRjaERpZFBh
cnNlU291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIGNvbnN0IEpTQzo6U291cmNl
Q29kZSYgc291cmNlKTsKKyAgICB2b2lkIGRpc3BhdGNoRmFpbGVkVG9QYXJzZVNvdXJjZShjb25z
dCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwg
aW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworCisgICAgdm9pZCBw
YXVzZUlmTmVlZGVkKFBhZ2UqKTsKKworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goSlNDOjpKU0ds
b2JhbE9iamVjdCopOworCisgICAgdmlydHVhbCB2b2lkIHNvdXJjZVBhcnNlZChKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIGludCBlcnJvckxpbmUsIGNvbnN0IEpTQzo6
VVN0cmluZyYgZXJyb3JNc2cpOworICAgIHZpcnR1YWwgdm9pZCBjYWxsRXZlbnQoY29uc3QgSlND
OjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcik7
CisgICAgdmlydHVhbCB2b2lkIGF0U3RhdGVtZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJh
bWUmLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGZpcnN0TGluZSk7CisgICAgdmlydHVhbCB2b2lk
IHJldHVybkV2ZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3Vy
Y2VJRCwgaW50IGxpbmVOdW1iZXIpOworICAgIHZpcnR1YWwgdm9pZCBleGNlcHRpb24oY29uc3Qg
SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJl
ciwgYm9vbCBoYXNIYW5kbGVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFt
KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxp
bmVubyk7CisgICAgdmlydHVhbCB2b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVi
dWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVubyk7CisgICAgdmly
dHVhbCB2b2lkIGRpZFJlYWNoQnJlYWtwb2ludChjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1l
JiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lbm8pOworCisgICAgdm9pZCBkaWRBZGRMaXN0
ZW5lcihQYWdlKik7CisgICAgdm9pZCBkaWRSZW1vdmVMaXN0ZW5lcihQYWdlKik7CisgICAgdm9p
ZCBkaWRSZW1vdmVMYXN0TGlzdGVuZXIoKTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxQYWdlKiwg
TGlzdGVuZXJTZXQqPiBQYWdlTGlzdGVuZXJzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRw
dHJfdCwgU291cmNlQnJlYWtwb2ludHM+IEJyZWFrcG9pbnRzTWFwOworCisgICAgUGFnZUxpc3Rl
bmVyc01hcCBtX3BhZ2VMaXN0ZW5lcnNNYXA7CisgICAgTGlzdGVuZXJTZXQgbV9saXN0ZW5lcnM7
CisgICAgYm9vbCBtX2NhbGxpbmdMaXN0ZW5lcnM7CisgICAgUGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGU7CisgICAgYm9vbCBtX3BhdXNlT25OZXh0U3RhdGVt
ZW50OworICAgIGJvb2wgbV9wYXVzZWQ7CisgICAgYm9vbCBtX2RvbmVQcm9jZXNzaW5nRGVidWdn
ZXJFdmVudHM7CisgICAgSmF2YVNjcmlwdENhbGxGcmFtZSogbV9wYXVzZU9uQ2FsbEZyYW1lOwor
ICAgIFJlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBtX2N1cnJlbnRDYWxsRnJhbWU7CisgICAg
QnJlYWtwb2ludHNNYXAgbV9icmVha3BvaW50czsKKyAgICBUaW1lcjxTY3JpcHREZWJ1Z1NlcnZl
cj4gbV9yZWNvbXBpbGVUaW1lcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggM2ZlOGMzNC4uNzI0YjQ3
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTI5LDE3
ICsyOSwyMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLQogI2luY2x1ZGUgIlNjcmlw
dERlYnVnU2VydmVyLmgiCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKKyNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNG
dW5jdGlvbnMoKQotewotfQorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAotdm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCkKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworU2NyaXB0RGVidWdTZXJ2ZXImIFNjcmlwdERlYnVnU2VydmVyOjpzaGFy
ZWQoKQogeworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU2NyaXB0RGVidWdTZXJ2ZXIsIHNlcnZl
ciwgKCkpOworICAgIHJldHVybiBzZXJ2ZXI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHREZWJ1Z1NlcnZlci5oCmluZGV4IGIzN2FmMmYuLjFlNjYwMTEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKQEAgLTMxLDE2ICszMSw2NiBAQAogI2lmbmRl
ZiBTY3JpcHREZWJ1Z1NlcnZlcl9oCiAjZGVmaW5lIFNjcmlwdERlYnVnU2VydmVyX2gKIAorI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJTY3JpcHRCcmVha3BvaW50LmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUu
aCIKKyNpbmNsdWRlICJUaW1lci5oIgorCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2NyaXB0RGVidWdTZXJ2ZXIgOiBwdWJsaWMg
Tm9uY29weWFibGUgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHJlY29tcGlsZUFsbEpTRnVu
Y3Rpb25zKCk7Ci0gICAgc3RhdGljIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCk7
CisgICAgY2xhc3MgTGlzdGVuZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+TGlz
dGVuZXIoKSB7IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3VyY2UoY29uc3Qg
U3RyaW5nJiAgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEs
IGludCBmaXJzdExpbmUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZhaWxlZFRvUGFyc2VT
b3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGlu
ZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
Q29udGludWUoKSA9IDA7CisgICAgfTsKKworICAgIHN0YXRpYyBTY3JpcHREZWJ1Z1NlcnZlciYg
c2hhcmVkKCk7CisKKyAgICB2b2lkIGFkZExpc3RlbmVyKExpc3RlbmVyKiwgUGFnZSopIHsgfQor
ICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoTGlzdGVuZXIqLCBQYWdlKikgeyB9CisKKyAgICB2b2lk
IHNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
ciwgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50KSB7IH0KKyAgICB2b2lkIHJlbW92ZUJyZWFr
cG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikgeyB9Cisg
ICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCkgeyB9CisKKyAgICBlbnVtIFBhdXNlT25FeGNlcHRp
b25zU3RhdGUgeworICAgICAgICBEb250UGF1c2VPbkV4Y2VwdGlvbnMsCisgICAgICAgIFBhdXNl
T25BbGxFeGNlcHRpb25zLAorICAgICAgICBQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zCisgICAg
fTsKKyAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSBj
b25zdCB7IHJldHVybiBEb250UGF1c2VPbkV4Y2VwdGlvbnM7IH0KKyAgICB2b2lkIHNldFBhdXNl
T25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSkgeyB9CisKKyAgICB2b2lk
IHBhdXNlUHJvZ3JhbSgpIHsgfQorICAgIHZvaWQgY29udGludWVQcm9ncmFtKCkgeyB9CisgICAg
dm9pZCBzdGVwSW50b1N0YXRlbWVudCgpIHsgfQorICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1lbnQo
KSB7IH0KKyAgICB2b2lkIHN0ZXBPdXRPZkZ1bmN0aW9uKCkgeyB9CisKKyAgICB2b2lkIHJlY29t
cGlsZUFsbEpTRnVuY3Rpb25zU29vbigpIHsgfQorICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5j
dGlvbnMoVGltZXI8U2NyaXB0RGVidWdTZXJ2ZXI+KiA9IDApIHsgfQorCisgICAgU2NyaXB0U3Rh
dGUqIGN1cnJlbnRDYWxsRnJhbWVTdGF0ZSgpIHsgcmV0dXJuIDA7IH0KKworICAgIHZvaWQgcGFn
ZUNyZWF0ZWQoUGFnZSopIHsgfQorCitwcml2YXRlOgorICAgIFNjcmlwdERlYnVnU2VydmVyKCkg
eyB9CisgICAgflNjcmlwdERlYnVnU2VydmVyKCkgeyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKKyNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKwogI2VuZGlm
IC8vIFNjcmlwdERlYnVnU2VydmVyX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAppbmRleCAwNTRmOWJhLi5m
NTg4MTY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVk
U2NyaXB0SG9zdEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJ
bmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCkBAIC0xNTEsNiArMTUxLDIwIEBAIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0SG9zdDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVu
ZENhbGxiYWNrKGNvbnN0CiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KIAorI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0
ZWRTY3JpcHRIb3N0OjpjdXJyZW50Q2FsbEZyYW1lQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5jdXJyZW50Q2Fs
bEZyYW1lKCkiKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OmlzQWN0aXZhdGlvbkNhbGxiYWNrKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJJbmplY3RlZFNjcmlw
dEhvc3QuaXNBY3RpdmF0aW9uKCkiKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQor
I2VuZGlmCisKICNpZiBFTkFCTEUoREFUQUJBU0UpCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJ
bmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlRm9ySWRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQogewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRIb3N0LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAKaW5k
ZXggNjJkYjRiNC4uNmRiYmRmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRIb3N0LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhv
c3QuY3BwCkBAIC00NiwxMCArNDYsOCBAQAogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgi
CiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgogCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpICYmIFVTRShKU0MpCi0jaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgotI2luY2x1
ZGUgIkphdmFTY3JpcHREZWJ1Z1NlcnZlci5oIgotdXNpbmcgbmFtZXNwYWNlIEpTQzsKKyNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5o
IgogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCkBAIC0xMzAsMTMgKzEyOCw2IEBAIGxv
bmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjpwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoY29uc3QgU3Ry
aW5nJiBwYXRoKQogICAgIHJldHVybiBkb21BZ2VudC0+cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChu
b2RlKTsKIH0KIAotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQot
SmF2YVNjcmlwdENhbGxGcmFtZSogSW5qZWN0ZWRTY3JpcHRIb3N0OjpjdXJyZW50Q2FsbEZyYW1l
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5j
dXJyZW50Q2FsbEZyYW1lKCk7Ci19Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShEQVRBQkFTRSkKIERh
dGFiYXNlKiBJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlRm9ySWQobG9uZyBkYXRhYmFzZUlk
KQogewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaAppbmRleCBmYjU2MTE1Li4x
MTJkNTU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3Qu
aAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaApAQCAtNzMsOSAr
NzMsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGROb2Rlc1RvU2VhcmNoUmVzdWx0KGNvbnN0IFN0
cmluZyYgbm9kZUlkcyk7CiAgICAgbG9uZyBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoY29uc3Qg
U3RyaW5nJiBwYXRoKTsKIAotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0Uo
SlNDKQotICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGN1cnJlbnRDYWxsRnJhbWUoKSBjb25zdDsK
LSNlbmRpZgogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICBEYXRhYmFzZSogZGF0YWJhc2VGb3JJ
ZChsb25nIGRhdGFiYXNlSWQpOwogICAgIHZvaWQgc2VsZWN0RGF0YWJhc2UoRGF0YWJhc2UqIGRh
dGFiYXNlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCmluZGV4IGJi
NTdjM2EuLjczYTM2ZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0SG9zdC5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmlk
bApAQCAtNDEsNyArNDEsNyBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHZvaWQgYWRkTm9kZXNU
b1NlYXJjaFJlc3VsdChpbiBET01TdHJpbmcgbm9kZUlkcyk7CiAgICAgICAgIGxvbmcgcHVzaE5v
ZGVCeVBhdGhUb0Zyb250ZW5kKGluIERPTVN0cmluZyBwYXRoKTsKIAotI2lmIGRlZmluZWQoRU5B
QkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSICYm
ICEoZGVmaW5lZChWOF9CSU5ESU5HKSAmJiBWOF9CSU5ESU5HKQorI2lmIGRlZmluZWQoRU5BQkxF
X0pBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSCiAgICAg
ICAgIFtDdXN0b21dIERPTU9iamVjdCBjdXJyZW50Q2FsbEZyYW1lKCk7CiAgICAgICAgIFtDdXN0
b21dIGJvb2xlYW4gaXNBY3RpdmF0aW9uKGluIERPTU9iamVjdCBvYmplY3QpOwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCmluZGV4IGM0M2JlNjMuLjE0NzQzYzAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCkBAIC00OSwxNiArNDksMTUg
QEAKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQu
aCIKICNpbmNsdWRlICJTY3JpcHRBcnJheS5oIgorI2luY2x1ZGUgIlNjcmlwdEJyZWFrcG9pbnQu
aCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAogI2lmIEVOQUJMRShET01f
U1RPUkFHRSkKICNpbmNsdWRlICJTdG9yYWdlLmgiCiAjZW5kaWYKIAotI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQotI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJh
bWUuaCIKLSNpbmNsdWRlICJKYXZhU2NyaXB0RGVidWdTZXJ2ZXIuaCIKLXVzaW5nIG5hbWVzcGFj
ZSBKU0M7CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisjaW5jbHVkZSAiU2NyaXB0
RGVidWdTZXJ2ZXIuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAibWFya3VwLmgiCkBAIC0xNDgsNyAr
MTQ3LDcgQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdG9wVGltZWxpbmVQcm9maWxlcigpCiAg
ICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c3RvcFRpbWVsaW5lUHJvZmlsZXIoKTsKIH0K
IAotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQorI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQogYm9vbCBJbnNwZWN0b3JCYWNrZW5kOjpkZWJ1Z2dlckVu
YWJsZWQoKSBjb25zdAogewogICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCkBAIC0xNjgs
MjcgKzE2NywyMSBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmRpc2FibGVEZWJ1Z2dlcihib29s
IGFsd2F5cykKICAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaXNhYmxlRGVidWdnZXIo
YWx3YXlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjphZGRCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgY29u
ZGl0aW9uKQotewotICAgIGludHB0cl90IHNvdXJjZUlEVmFsdWUgPSBzb3VyY2VJRC50b0ludFB0
cigpOwotICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuYWRkQnJlYWtwb2ludChz
b3VyY2VJRFZhbHVlLCBsaW5lTnVtYmVyLCBjb25kaXRpb24pOwotfQotCi12b2lkIEluc3BlY3Rv
ckJhY2tlbmQ6OnVwZGF0ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWdu
ZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pCit2b2lkIEluc3BlY3RvckJh
Y2tlbmQ6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGlu
ZU51bWJlciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbikKIHsKLSAgICBp
bnRwdHJfdCBzb3VyY2VJRFZhbHVlID0gc291cmNlSUQudG9JbnRQdHIoKTsKLSAgICBKYXZhU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnVwZGF0ZUJyZWFrcG9pbnQoc291cmNlSURWYWx1ZSwg
bGluZU51bWJlciwgY29uZGl0aW9uKTsKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQor
ICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldEJyZWFrcG9pbnQoc291cmNlSUQsIGxp
bmVOdW1iZXIsIGVuYWJsZWQsIGNvbmRpdGlvbik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2Vu
ZDo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5l
TnVtYmVyKQogewotICAgIGludHB0cl90IHNvdXJjZUlEVmFsdWUgPSBzb3VyY2VJRC50b0ludFB0
cigpOwotICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVtb3ZlQnJlYWtwb2lu
dChzb3VyY2VJRFZhbHVlLCBsaW5lTnVtYmVyKTsKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9s
bGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlbW92ZUJyZWFrcG9pbnQoc291
cmNlSUQsIGxpbmVOdW1iZXIpOwogfQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnBhdXNlSW5E
ZWJ1Z2dlcigpCiB7Ci0gICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5wYXVzZVBy
b2dyYW0oKTsKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucGF1c2VQcm9ncmFtKCk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6cmVzdW1lRGVidWdnZXIoKQpAQCAtMTk5LDMz
ICsxOTIsMjkgQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpyZXN1bWVEZWJ1Z2dlcigpCiAKIHZv
aWQgSW5zcGVjdG9yQmFja2VuZDo6c3RlcE92ZXJTdGF0ZW1lbnRJbkRlYnVnZ2VyKCkKIHsKLSAg
ICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnN0ZXBPdmVyU3RhdGVtZW50KCk7Cisg
ICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnN0ZXBPdmVyU3RhdGVtZW50KCk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c3RlcEludG9TdGF0ZW1lbnRJbkRlYnVnZ2VyKCkKIHsK
LSAgICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnN0ZXBJbnRvU3RhdGVtZW50KCk7
CisgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnN0ZXBJbnRvU3RhdGVtZW50KCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c3RlcE91dE9mRnVuY3Rpb25JbkRlYnVnZ2VyKCkK
IHsKLSAgICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnN0ZXBPdXRPZkZ1bmN0aW9u
KCk7CisgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnN0ZXBPdXRPZkZ1bmN0aW9uKCk7
CiB9CiAKIGxvbmcgSW5zcGVjdG9yQmFja2VuZDo6cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpCiB7
Ci0gICAgcmV0dXJuIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSgpOworICAgIHJldHVybiBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnNldFBh
dXNlT25FeGNlcHRpb25zU3RhdGUobG9uZyBwYXVzZVN0YXRlKQogewotICAgIEphdmFTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShzdGF0aWNfY2Fz
dDxKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OlBhdXNlT25FeGNlcHRpb25zU3RhdGU+KHBhdXNlU3Rh
dGUpKTsKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0UGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZShzdGF0aWNfY2FzdDxTY3JpcHREZWJ1Z1NlcnZlcjo6UGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZT4ocGF1c2VTdGF0ZSkpOwogfQogCi1KYXZhU2NyaXB0Q2FsbEZyYW1lKiBJbnNwZWN0b3JC
YWNrZW5kOjpjdXJyZW50Q2FsbEZyYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSmF2YVNjcmlw
dERlYnVnU2VydmVyOjpzaGFyZWQoKS5jdXJyZW50Q2FsbEZyYW1lKCk7Ci19CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5oCmluZGV4IDBkZjEzZjUuLmQzMWExODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmgKQEAgLTQxLDcgKzQxLDYgQEAgY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiBjbGFzcyBE
YXRhYmFzZTsKIGNsYXNzIEluc3BlY3RvckRPTUFnZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRl
bmQ7Ci1jbGFzcyBKYXZhU2NyaXB0Q2FsbEZyYW1lOwogY2xhc3MgTm9kZTsKIGNsYXNzIFN0b3Jh
Z2U7CiAKQEAgLTczLDEzICs3MiwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydFRpbWVsaW5l
UHJvZmlsZXIoKTsKICAgICB2b2lkIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CiAKLSNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKKyNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKICAgICBib29sIGRlYnVnZ2VyRW5hYmxlZCgpIGNvbnN0OwogICAgIHZvaWQg
ZW5hYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpOwogICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGJv
b2wgYWx3YXlzKTsKIAotICAgIHZvaWQgYWRkQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJj
ZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbik7Ci0gICAg
dm9pZCB1cGRhdGVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxp
bmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uKTsKKyAgICB2b2lkIHNldEJyZWFrcG9p
bnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgYm9vbCBlbmFi
bGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbik7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpOwogCiAgICAgdm9p
ZCBwYXVzZUluRGVidWdnZXIoKTsKQEAgLTkyLDkgKzkwLDYgQEAgcHVibGljOgogICAgIHZvaWQg
c3RlcEludG9TdGF0ZW1lbnRJbkRlYnVnZ2VyKCk7CiAgICAgdm9pZCBzdGVwT3V0T2ZGdW5jdGlv
bkluRGVidWdnZXIoKTsKIAotICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGN1cnJlbnRDYWxsRnJh
bWUoKSBjb25zdDsKLSNlbmRpZgotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAg
IGJvb2wgcHJvZmlsZXJFbmFibGVkKCk7CiAgICAgdm9pZCBlbmFibGVQcm9maWxlcihib29sIGFs
d2F5cyk7CiAgICAgdm9pZCBkaXNhYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAppbmRleCA5ZmFhZTc2Li4xY2Q0YmYyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbApAQCAtNDcsMTMgKzQ3LDEyIEBAIG1vZHVs
ZSBjb3JlIHsKICAgICAgICAgdm9pZCBzdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKICAgICAgICAg
dm9pZCBzdG9wVGltZWxpbmVQcm9maWxlcigpOwogCi0jaWYgZGVmaW5lZChFTkFCTEVfSkFWQVND
UklQVF9ERUJVR0dFUikgJiYgRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIgJiYgIShkZWZpbmVk
KFY4X0JJTkRJTkcpICYmIFY4X0JJTkRJTkcpCisjaWYgZGVmaW5lZChFTkFCTEVfSkFWQVNDUklQ
VF9ERUJVR0dFUikgJiYgRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIKICAgICAgICAgYm9vbGVh
biBkZWJ1Z2dlckVuYWJsZWQoKTsKICAgICAgICAgdm9pZCBlbmFibGVEZWJ1Z2dlcihpbiBib29s
ZWFuIGFsd2F5cyk7CiAgICAgICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGluIGJvb2xlYW4gYWx3
YXlzKTsKIAotICAgICAgICB2b2lkIGFkZEJyZWFrcG9pbnQoaW4gRE9NU3RyaW5nIHNvdXJjZUlE
LCBpbiB1bnNpZ25lZCBsb25nIGxpbmVOdW1iZXIsIGluIERPTVN0cmluZyBjb25kaXRpb24pOwot
ICAgICAgICB2b2lkIHVwZGF0ZUJyZWFrcG9pbnQoaW4gRE9NU3RyaW5nIHNvdXJjZUlELCBpbiB1
bnNpZ25lZCBsb25nIGxpbmVOdW1iZXIsIGluIERPTVN0cmluZyBjb25kaXRpb24pOworICAgICAg
ICB2b2lkIHNldEJyZWFrcG9pbnQoaW4gRE9NU3RyaW5nIHNvdXJjZUlELCBpbiB1bnNpZ25lZCBs
b25nIGxpbmVOdW1iZXIsIGluIGJvb2xlYW4gZW5hYmxlZCwgaW4gRE9NU3RyaW5nIGNvbmRpdGlv
bik7CiAgICAgICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbiBET01TdHJpbmcgc291cmNlSUQs
IGluIHVuc2lnbmVkIGxvbmcgbGluZU51bWJlcik7CiAKICAgICAgICAgdm9pZCBwYXVzZUluRGVi
dWdnZXIoKTsKQEAgLTY1LDggKzY0LDcgQEAgbW9kdWxlIGNvcmUgewogCiAgICAgICAgIGxvbmcg
cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpOwogICAgICAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRp
b25zU3RhdGUoaW4gbG9uZyBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKTsKLSNlbmRpZgotI2lmIGRl
ZmluZWQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRV9KQVZBU0NSSVBUX0RF
QlVHR0VSCisKICAgICAgICAgYm9vbGVhbiBwcm9maWxlckVuYWJsZWQoKTsKICAgICAgICAgdm9p
ZCBlbmFibGVQcm9maWxlcihpbiBib29sZWFuIGFsd2F5cyk7CiAgICAgICAgIHZvaWQgZGlzYWJs
ZVByb2ZpbGVyKGluIGJvb2xlYW4gYWx3YXlzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKaW5kZXggYjQ4N2FkOC4uNDZmMGJlMyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTcwLDggKzcwLDggQEAKICNpbmNsdWRlICJS
ZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2NyaXB0QnJlYWtwb2ludC5oIgogI2luY2x1
ZGUgIlNjcmlwdENhbGxTdGFjay5oIgotI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25DYWxsLmgiCiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0Lmgi
CiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgpAQCAtOTYsMTcgKzk2LDE3IEBACiAjaW5jbHVk
ZSAiU3RvcmFnZUFyZWEuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCisjaW5jbHVkZSAiU2NyaXB0RGVidWdTZXJ2ZXIuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCi0jaW5jbHVkZSAiSlNKYXZhU2NyaXB0
Q2FsbEZyYW1lLmgiCi0jaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgotI2luY2x1ZGUg
IkphdmFTY3JpcHREZWJ1Z1NlcnZlci5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHRQcm9maWxlLmgi
CiAKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVVN0cmlu
Zy5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwogI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE0NCw3ICsxNDQsNyBAQCBJbnNwZWN0b3JD
b250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVu
dCogY2xpZW50KQogICAgICwgbV9pbnNwZWN0b3JCYWNrZW5kKEluc3BlY3RvckJhY2tlbmQ6OmNy
ZWF0ZSh0aGlzKSkKICAgICAsIG1faW5zcGVjdG9yRnJvbnRlbmRIb3N0KEluc3BlY3RvckZyb250
ZW5kSG9zdDo6Y3JlYXRlKHRoaXMsIGNsaWVudCkpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0SG9z
dChJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZSh0aGlzKSkKLSNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikgJiYgVVNFKEpTQykKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
ICAgICAsIG1fZGVidWdnZXJFbmFibGVkKGZhbHNlKQogICAgICwgbV9hdHRhY2hEZWJ1Z2dlcldo
ZW5TaG93bihmYWxzZSkKICNlbmRpZgpAQCAtMzA1LDEzICszMDUsMTMgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpzZXRXaW5kb3dWaXNpYmxlKGJvb2wgdmlzaWJsZSwgYm9vbCBhdHRhY2hl
ZCkKIAogICAgICAgICBpZiAobV9ub2RlVG9Gb2N1cykKICAgICAgICAgICAgIGZvY3VzTm9kZSgp
OwotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQorI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgICAgICBpZiAobV9hdHRhY2hEZWJ1Z2dlcldoZW5T
aG93bikKICAgICAgICAgICAgIGVuYWJsZURlYnVnZ2VyKCk7CiAjZW5kaWYKICAgICAgICAgc2hv
d1BhbmVsKG1fc2hvd0FmdGVyVmlzaWJsZSk7CiAgICAgfSBlbHNlIHsKLSNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKICAgICAgICAgLy8gSWYgdGhlIHdpbmRvdyBpcyBiZWluZyBjbG9zZWQgd2l0aCB0aGUg
ZGVidWdnZXIgZW5hYmxlZCwKICAgICAgICAgLy8gcmVtZW1iZXIgdGhpcyBzdGF0ZSB0byByZS1l
bmFibGUgZGVidWdnZXIgb24gdGhlIG5leHQgd2luZG93CiAgICAgICAgIC8vIG9wZW5pbmcuCkBA
IC01MjcsNyArNTI3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRPYmplY3RS
ZWFkeSgpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJv
bnRlbmRTY3JpcHRTdGF0ZSwgd2ViSW5zcGVjdG9yT2JqKTsKIAotI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQorI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQogICAgIFN0cmluZyBkZWJ1Z2dlckVuYWJsZWQgPSBzZXR0aW5nKGRlYnVnZ2VyRW5hYmxlZFNl
dHRpbmdOYW1lKTsKICAgICBpZiAoZGVidWdnZXJFbmFibGVkID09ICJ0cnVlIikKICAgICAgICAg
ZW5hYmxlRGVidWdnZXIoKTsKQEAgLTU5Niw3ICs1OTYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmNsb3NlKCkKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0j
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCisjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKICAg
ICBkaXNhYmxlRGVidWdnZXIoKTsKICNlbmRpZgpAQCAtNzQ3LDYgKzc0Nyw5IEBAIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyKQog
CiAgICAgICAgIG1fdGltZXMuY2xlYXIoKTsKICAgICAgICAgbV9jb3VudHMuY2xlYXIoKTsKKyNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICAgICAgbV9zb3VyY2VJRFRvVVJMLmNs
ZWFyKCk7CisjZW5kaWYKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpT
QykKICAgICAgICAgbV9wcm9maWxlcy5jbGVhcigpOwogICAgICAgICBtX2N1cnJlbnRVc2VySW5p
dGlhdGVkUHJvZmlsZU51bWJlciA9IDE7CkBAIC0xMzU3LDcgKzEzNjAsNyBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmFkZFByb2ZpbGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBwcnBQ
cm9maWxlLCB1bnNpZwogCiAgICAgaWYgKG1fZnJvbnRlbmQpIHsKICNpZiBVU0UoSlNDKQotICAg
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpT
TG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICNlbmRpZgogICAgICAgICBt
X2Zyb250ZW5kLT5hZGRQcm9maWxlSGVhZGVyKGNyZWF0ZVByb2ZpbGVIZWFkZXIoKnByb2ZpbGUp
KTsKICAgICB9CkBAIC0xNDMxLDcgKzE0MzQsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZyhUaW1lcjxJbnNwZWN0b3JDb250cm9sbGVyPgog
CiAgICAgaWYgKCFwcm9maWxlckVuYWJsZWQoKSkgewogICAgICAgICBlbmFibGVQcm9maWxlcihm
YWxzZSwgdHJ1ZSk7Ci0gICAgICAgIFNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1
bmN0aW9ucygpOworICAgICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVjb21waWxl
QWxsSlNGdW5jdGlvbnMoKTsKICAgICB9CiAKICAgICBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQ
cm9maWxlID0gdHJ1ZTsKQEAgLTE0MzksNyArMTQ0Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKFRpbWVyPEluc3BlY3RvckNvbnRyb2xs
ZXI+CiAgICAgU3RyaW5nIHRpdGxlID0gZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFt
ZSh0cnVlKTsKIAogI2lmIFVTRShKU0MpCi0gICAgRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IHRv
SlNET01XaW5kb3cobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSwgZGVidWdnZXJXb3JsZCgp
KS0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IHRvSlNE
T01XaW5kb3cobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSwgZGVidWdnZXJXb3JsZCgpKS0+
Z2xvYmFsRXhlYygpOwogI2Vsc2UKICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSAwOwog
I2VuZGlmCkBAIC0xNDYwLDcgKzE0NjMsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0
b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCkKICAgICBTdHJpbmcgdGl0bGUgPSBnZXRDdXJyZW50
VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKCk7CiAKICNpZiBVU0UoSlNDKQotICAgIEV4ZWNTdGF0
ZSogc2NyaXB0U3RhdGUgPSB0b0pTRE9NV2luZG93KG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1l
KCksIGRlYnVnZ2VyV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSog
c2NyaXB0U3RhdGUgPSB0b0pTRE9NV2luZG93KG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCks
IGRlYnVnZ2VyV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKICNlbHNlCiAgICAgU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlID0gMDsKICNlbmRpZgpAQCAtMTQ4OSw3ICsxNDkyLDcgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjplbmFibGVQcm9maWxlcihib29sIGFsd2F5cywgYm9vbCBza2lwUmVj
b21waWxlKQogICAgIG1fcHJvZmlsZXJFbmFibGVkID0gdHJ1ZTsKIAogICAgIGlmICghc2tpcFJl
Y29tcGlsZSkKLSAgICAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rp
b25zU29vbigpOworICAgICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVjb21waWxl
QWxsSlNGdW5jdGlvbnNTb29uKCk7CiAKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAgbV9m
cm9udGVuZC0+cHJvZmlsZXJXYXNFbmFibGVkKCk7CkBAIC0xNTA1LDE0ICsxNTA4LDE0IEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzKQogCiAg
ICAgbV9wcm9maWxlckVuYWJsZWQgPSBmYWxzZTsKIAotICAgIFNjcmlwdERlYnVnU2VydmVyOjpy
ZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hh
cmVkKCkucmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCk7CiAKICAgICBpZiAobV9mcm9udGVu
ZCkKICAgICAgICAgbV9mcm9udGVuZC0+cHJvZmlsZXJXYXNEaXNhYmxlZCgpOwogfQogI2VuZGlm
CiAKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKKyNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxl
RGVidWdnZXJGcm9tRnJvbnRlbmQoYm9vbCBhbHdheXMpCiB7CiAgICAgaWYgKGFsd2F5cykKQEAg
LTE1MjAsOCArMTUyMyw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVidWdn
ZXJGcm9tRnJvbnRlbmQoYm9vbCBhbHdheXMpCiAKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdl
KTsKIAotICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuYWRkTGlzdGVuZXIodGhp
cywgbV9pbnNwZWN0ZWRQYWdlKTsKLSAgICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgp
LmNsZWFyQnJlYWtwb2ludHMoKTsKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuYWRk
TGlzdGVuZXIodGhpcywgbV9pbnNwZWN0ZWRQYWdlKTsKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6
c2hhcmVkKCkuY2xlYXJCcmVha3BvaW50cygpOwogCiAgICAgbV9kZWJ1Z2dlckVuYWJsZWQgPSB0
cnVlOwogICAgIG1fZnJvbnRlbmQtPmRlYnVnZ2VyV2FzRW5hYmxlZCgpOwpAQCAtMTU1Myw3ICsx
NTU2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxlRGVidWdnZXIoYm9vbCBh
bHdheXMpCiAKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKIAotICAgIEphdmFTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVtb3ZlTGlzdGVuZXIodGhpcywgbV9pbnNwZWN0ZWRQYWdl
KTsKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVtb3ZlTGlzdGVuZXIodGhpcywg
bV9pbnNwZWN0ZWRQYWdlKTsKIAogICAgIG1fZGVidWdnZXJFbmFibGVkID0gZmFsc2U7CiAgICAg
bV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IGZhbHNlOwpAQCAtMTU2NiwyNSArMTU2OSw2NiBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3VtZURlYnVnZ2VyKCkKIHsKICAgICBpZiAo
IW1fZGVidWdnZXJFbmFibGVkKQogICAgICAgICByZXR1cm47Ci0gICAgSmF2YVNjcmlwdERlYnVn
U2VydmVyOjpzaGFyZWQoKS5jb250aW51ZVByb2dyYW0oKTsKKyAgICBTY3JpcHREZWJ1Z1NlcnZl
cjo6c2hhcmVkKCkuY29udGludWVQcm9ncmFtKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5l
TnVtYmVyLCBib29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uKQoreworICAgIFNj
cmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludChlbmFibGVkLCBjb25kaXRpb24pOworICAgIFNjcmlw
dERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVy
LCBicmVha3BvaW50KTsKKyAgICBTdHJpbmcgdXJsID0gbV9zb3VyY2VJRFRvVVJMLmdldChzb3Vy
Y2VJRCk7CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEhh
c2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlja3lC
cmVha3BvaW50cy5maW5kKHVybCk7CisgICAgaWYgKGl0ID09IG1fc3RpY2t5QnJlYWtwb2ludHMu
ZW5kKCkpCisgICAgICAgIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5zZXQodXJsLCBTb3VyY2VC
cmVha3BvaW50cygpKS5maXJzdDsKKyAgICBpdC0+c2Vjb25kLnNldChsaW5lTnVtYmVyLCBicmVh
a3BvaW50KTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCit7CisgICAgU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmVO
dW1iZXIpOworIAorICAgIFN0cmluZyB1cmwgPSBtX3NvdXJjZUlEVG9VUkwuZ2V0KHNvdXJjZUlE
KTsKKyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaE1h
cDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFr
cG9pbnRzLmZpbmQodXJsKTsKKyAgICBpZiAoaXQgIT0gbV9zdGlja3lCcmVha3BvaW50cy5lbmQo
KSkKKyAgICAgICAgaXQtPnNlY29uZC5yZW1vdmUobGluZU51bWJlcik7CiB9CiAKIC8vIEphdmFT
Y3JpcHREZWJ1Z0xpc3RlbmVyIGZ1bmN0aW9ucwogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmRpZFBhcnNlU291cmNlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKK3Zv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGlu
ZSkKIHsKLSAgICBtX2Zyb250ZW5kLT5wYXJzZWRTY3JpcHRTb3VyY2Uoc291cmNlKTsKKyAgICBt
X2Zyb250ZW5kLT5wYXJzZWRTY3JpcHRTb3VyY2Uoc291cmNlSUQsIHVybCwgZGF0YSwgZmlyc3RM
aW5lKTsKKworICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBI
YXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5
QnJlYWtwb2ludHMuZmluZCh1cmwpOworICAgIGlmIChpdCAhPSBtX3N0aWNreUJyZWFrcG9pbnRz
LmVuZCgpKSB7CisgICAgICAgIGZvciAoU291cmNlQnJlYWtwb2ludHM6Oml0ZXJhdG9yIGJyZWFr
cG9pbnRJdCA9IGl0LT5zZWNvbmQuYmVnaW4oKTsgYnJlYWtwb2ludEl0ICE9IGl0LT5zZWNvbmQu
ZW5kKCk7ICsrYnJlYWtwb2ludEl0KSB7CisgICAgICAgICAgICBpZiAoZmlyc3RMaW5lIDw9IGJy
ZWFrcG9pbnRJdC0+Zmlyc3QpIHsKKyAgICAgICAgICAgICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6
c2hhcmVkKCkuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgYnJlYWtwb2ludEl0LT5maXJzdCwgYnJl
YWtwb2ludEl0LT5zZWNvbmQpOworICAgICAgICAgICAgICAgIG1fZnJvbnRlbmQtPnJlc3RvcmVk
QnJlYWtwb2ludChzb3VyY2VJRCwgdXJsLCBicmVha3BvaW50SXQtPmZpcnN0LCBicmVha3BvaW50
SXQtPnNlY29uZC5lbmFibGVkLCBicmVha3BvaW50SXQtPnNlY29uZC5jb25kaXRpb24pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbV9zb3VyY2VJRFRvVVJMLnNldChz
b3VyY2VJRCwgdXJsKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpmYWlsZWRUb1Bh
cnNlU291cmNlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9y
TGluZSwgY29uc3QgVVN0cmluZyYgZXJyb3JNZXNzYWdlKQordm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpmYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcm
IGRhdGEsIGludCBmaXJzdExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlKQogewotICAgIG1fZnJvbnRlbmQtPmZhaWxlZFRvUGFyc2VTY3JpcHRTb3VyY2Uoc291
cmNlLCBlcnJvckxpbmUsIGVycm9yTWVzc2FnZSk7CisgICAgbV9mcm9udGVuZC0+ZmFpbGVkVG9Q
YXJzZVNjcmlwdFNvdXJjZSh1cmwsIGRhdGEsIGZpcnN0TGluZSwgZXJyb3JMaW5lLCBlcnJvck1l
c3NhZ2UpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFBhdXNlKCkKIHsKLSAg
ICBKYXZhU2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBtX2luamVjdGVkU2NyaXB0SG9zdC0+
Y3VycmVudENhbGxGcmFtZSgpOwotICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGNhbGxG
cmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBTY3Jp
cHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuY3VycmVu
dENhbGxGcmFtZVN0YXRlKCk7CiAgICAgQVNTRVJUKHNjcmlwdFN0YXRlKTsKICAgICBJbmplY3Rl
ZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5pbmplY3RlZFNj
cmlwdEZvcihzY3JpcHRTdGF0ZSk7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
Y2FsbEZyYW1lcyA9IGluamVjdGVkU2NyaXB0LmNhbGxGcmFtZXMoKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCAyZjI1ZWVjLi4xNjljNDJiIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC00NywxMiArNDcsOCBAQAogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCi0jaW5jbHVkZSAiSmF2YVNjcmlw
dERlYnVnTGlzdGVuZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBVU3RyaW5nOwotfQor
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorI2luY2x1ZGUgIlNjcmlwdERlYnVnU2Vy
dmVyLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTAsOCArODYsOCBAQCBj
bGFzcyBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U7CiBjbGFzcyBJbnNwZWN0b3JSZXNvdXJj
ZTsKIAogY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcgotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKSAmJiBVU0UoSlNDKQotICAgICAgICAgICAgICAgICAgICAgICAgICA6IEphdmFTY3Jp
cHREZWJ1Z0xpc3RlbmVyLCBwdWJsaWMgTm9uY29weWFibGUKKyNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTY3JpcHREZWJ1Z1NlcnZl
cjo6TGlzdGVuZXIsIHB1YmxpYyBOb25jb3B5YWJsZQogI2Vsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiBwdWJsaWMgTm9uY29weWFibGUKICNlbmRpZgpAQCAtMjM2LDE1ICsyMzIsMTUg
QEAgcHVibGljOgogICAgIGJvb2wgcHJvZmlsZXJFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gZW5h
YmxlZCgpICYmIG1fcHJvZmlsZXJFbmFibGVkOyB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQorI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQogICAgIHZvaWQgZW5hYmxlRGVidWdnZXIoKTsKICAgICB2b2lkIGRpc2FibGVEZWJ1Z2dl
cihib29sIGFsd2F5cyA9IGZhbHNlKTsKICAgICBib29sIGRlYnVnZ2VyRW5hYmxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGVidWdnZXJFbmFibGVkOyB9CiAKICAgICB2b2lkIHJlc3VtZURlYnVnZ2Vy
KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3VyY2UoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OlNvdXJjZUNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNv
dXJjZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIGludCBlcnJvckxp
bmUsIGNvbnN0IEpTQzo6VVN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSk7CisgICAgdmlydHVhbCB2b2lkIGZh
aWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwg
aW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXVzZSgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb250
aW51ZSgpOwogI2VuZGlmCkBAIC0yNzEsNiArMjY3LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRl
bGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWlu
KTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIHZvaWQgc2V0QnJlYWtw
b2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBib29sIGVu
YWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uKTsKKyAgICB2b2lkIHJlbW92ZUJyZWFrcG9p
bnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7CisKICAgICB0
eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQgaW50LCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gPiBQcm9m
aWxlc01hcDsKIAogICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nU29vbigpOwpA
QCAtMzQ4LDExICszNDcsMTIgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIFNldHRpbmdzIG1fc2V0
dGluZ3M7CiAKICAgICBWZWN0b3I8cGFpcjxsb25nLCBTdHJpbmc+ID4gbV9wZW5kaW5nRXZhbHVh
dGVUZXN0Q29tbWFuZHM7Ci0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShK
U0MpCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgYm9vbCBtX2RlYnVnZ2Vy
RW5hYmxlZDsKICAgICBib29sIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd247Ci0jZW5kaWYKLSNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiBtX3NvdXJjZUlEVG9VUkw7CisgICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRz
PiBtX3N0aWNreUJyZWFrcG9pbnRzOworCiAgICAgYm9vbCBtX3Byb2ZpbGVyRW5hYmxlZDsKICAg
ICBib29sIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGU7CiAgICAgaW50IG1fY3VycmVu
dFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmQuY3BwCmluZGV4IDkwYjYwZjQuLmIzM2VhNmEgMTAwNzU1Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHAKQEAgLTQ2LDEyICs0Niw2IEBACiAjaW5jbHVkZSAiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCi0jaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCi0jaW5jbHVkZSA8cGFyc2VyL1NvdXJjZUNv
ZGUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTVmFsdWUuaD4KLSNpbmNsdWRlIDxydW50aW1lL1VT
dHJpbmcuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEluc3BlY3RvckZyb250
ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250
cm9sbGVyLCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yKQpAQCAtMjUwLDcgKzI0NCw3IEBAIHZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZFJlY29yZFRvVGltZWxpbmUoY29uc3QgU2NyaXB0T2Jq
ZWN0JiByZWNvcmQpCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCi0jaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjphdHRhY2hEZWJ1Z2dlcldoZW5TaG93bigpCiB7
CiAgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKCJhdHRhY2hEZWJ1Z2dlcldoZW5TaG93biIpOwpAQCAt
MjY2LDI0ICsyNjAsMzYgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGVidWdnZXJXYXNEaXNh
YmxlZCgpCiAgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKCJkZWJ1Z2dlcldhc0Rpc2FibGVkIik7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnBhcnNlZFNjcmlwdFNvdXJjZShjb25zdCBKU0M6
OlNvdXJjZUNvZGUmIHNvdXJjZSkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnBhcnNlZFNjcmlw
dFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KCJwYXJzZWRTY3JpcHRTb3VyY2UiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudChKU0M6OlVTdHJpbmcoSlNDOjpVU3RyaW5nOjpmcm9tKHNvdXJjZS5wcm92aWRlcigpLT5h
c0lEKCkpKSk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc291cmNlLnByb3ZpZGVyKCkt
PnVybCgpKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChKU0M6OlVTdHJpbmcoc291cmNl
LmRhdGEoKSwgc291cmNlLmxlbmd0aCgpKSk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQo
c291cmNlLmZpcnN0TGluZSgpKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzb3VyY2VJ
RCk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQodXJsKTsKKyAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChkYXRhKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChmaXJzdExpbmUp
OworICAgIGZ1bmN0aW9uLmNhbGwoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6cmVz
dG9yZWRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgdXJs
LCBpbnQgbGluZSwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbikKK3sKKyAg
ICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIp
OworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJyZXN0b3JlZEJyZWFrcG9pbnQiKTsKKyAg
ICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzb3VyY2VJRCk7CisgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQodXJsKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChsaW5lKTsKKyAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudChlbmFibGVkKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudChjb25kaXRpb24pOwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JGcm9udGVuZDo6ZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZShjb25zdCBKU0M6OlNvdXJjZUNv
ZGUmIHNvdXJjZSwgaW50IGVycm9yTGluZSwgY29uc3QgSlNDOjpVU3RyaW5nJiBlcnJvck1lc3Nh
Z2UpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpmYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlKGNv
bnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGludCBl
cnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewogICAgIFNjcmlwdEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KCJmYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlIik7Ci0gICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoc291cmNlLnByb3ZpZGVyKCktPnVybCgpKTsKLSAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudChKU0M6OlVTdHJpbmcoc291cmNlLmRhdGEoKSwgc291cmNlLmxl
bmd0aCgpKSk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc291cmNlLmZpcnN0TGluZSgp
KTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCh1cmwpOworICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KGRhdGEpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGZpcnN0TGluZSk7
CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZXJyb3JMaW5lKTsKICAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudChlcnJvck1lc3NhZ2UpOwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKQEAgLTMw
Miw5ICszMDgsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpyZXN1bWVkU2NyaXB0KCkKIHsK
ICAgICBjYWxsU2ltcGxlRnVuY3Rpb24oInJlc3VtZWRTY3JpcHQiKTsKIH0KLSNlbmRpZgogCi0j
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpw
cm9maWxlcldhc0VuYWJsZWQoKQogewogICAgIGNhbGxTaW1wbGVGdW5jdGlvbigicHJvZmlsZXJX
YXNFbmFibGVkIik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAppbmRleCAxYTM3
MjU2Li5mYTA5ZWJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKQEAgLTM1
LDE0ICszNSw2IEBACiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgogCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0Mp
Ci1uYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBKU1ZhbHVlOwotICAgIGNsYXNzIFNvdXJjZUNv
ZGU7Ci0gICAgY2xhc3MgVVN0cmluZzsKLX0KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgQ29uc29sZU1lc3NhZ2U7CiAgICAgY2xhc3MgRGF0YWJhc2U7CkBAIC04NCwx
NiArNzYsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJlc291cmNlVHJh
Y2tpbmdXYXNFbmFibGVkKCk7CiAgICAgICAgIHZvaWQgcmVzb3VyY2VUcmFja2luZ1dhc0Rpc2Fi
bGVkKCk7CiAKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKKyNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICAgICAgdm9pZCBhdHRhY2hEZWJ1Z2dl
cldoZW5TaG93bigpOwogICAgICAgICB2b2lkIGRlYnVnZ2VyV2FzRW5hYmxlZCgpOwogICAgICAg
ICB2b2lkIGRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsKLSAgICAgICAgdm9pZCBwYXJzZWRTY3JpcHRT
b3VyY2UoY29uc3QgSlNDOjpTb3VyY2VDb2RlJik7Ci0gICAgICAgIHZvaWQgZmFpbGVkVG9QYXJz
ZVNjcmlwdFNvdXJjZShjb25zdCBKU0M6OlNvdXJjZUNvZGUmLCBpbnQgZXJyb3JMaW5lLCBjb25z
dCBKU0M6OlVTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisKKyAgICAgICAgdm9pZCBwYXJzZWRTY3Jp
cHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSk7CisgICAgICAgIHZvaWQgcmVzdG9yZWRCcmVh
a3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGlu
ZSwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbik7CisgICAgICAgIHZvaWQg
ZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSk7CiAgICAgICAgIHZvaWQgcGF1c2VkU2NyaXB0KFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSogY2FsbEZyYW1lcyk7CiAgICAgICAgIHZvaWQgcmVzdW1lZFNjcmlwdCgpOwotI2VuZGlmCi0j
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisKICAgICAgICAgdm9pZCBwcm9maWxlcldh
c0VuYWJsZWQoKTsKICAgICAgICAgdm9pZCBwcm9maWxlcldhc0Rpc2FibGVkKCk7CiAgICAgICAg
IHZvaWQgYWRkUHJvZmlsZUhlYWRlcihjb25zdCBTY3JpcHRWYWx1ZSYgcHJvZmlsZSk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdMaXN0ZW5lci5oIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNjU3MDA2NS4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9K
YXZhU2NyaXB0RGVidWdMaXN0ZW5lci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lcl9oCi0jZGVmaW5lIEphdmFTY3JpcHREZWJ1
Z0xpc3RlbmVyX2gKLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlND
KQotCi1uYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBFeGVjU3RhdGU7Ci0gICAgY2xhc3MgU291
cmNlQ29kZTsKLSAgICBjbGFzcyBVU3RyaW5nOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBQYWdlOwotCi0gICAgY2xhc3MgSmF2YVNjcmlw
dERlYnVnTGlzdGVuZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+SmF2YVNjcmlw
dERlYnVnTGlzdGVuZXIoKSB7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3Vy
Y2UoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSkgPSAwOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJjZShKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBKU0M6
OlVTdHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1
c2UoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZSgpID0gMDsKLSAgICB9
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKLQotI2VuZGlmIC8vIEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyX2gKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9XZWJD
b3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwM2MzNTc3Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0ph
dmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NDEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkphdmFTY3JpcHREZWJ1Z1NlcnZl
ci5oIgotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCi0KLSNp
bmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJFdmVudExvb3AuaCIKLSNpbmNsdWRlICJG
cmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgot
I2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCi0jaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxG
cmFtZS5oIgotI2luY2x1ZGUgIkphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyLmgiCi0jaW5jbHVkZSAi
UGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIK
LSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0jaW5jbHVkZSAiV2lkZ2V0LmgiCi0jaW5jbHVkZSAi
U2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1l
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci10eXBlZGVmIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6TGlzdGVuZXJTZXQgTGlzdGVuZXJTZXQ7
Ci0KLWlubGluZSBjb25zdCBVU3RyaW5nJiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OkJyZWFrcG9p
bnRJbmZvOjpjb25kaXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbmRpdGlvbjsKLX0K
LQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OkJyZWFrcG9pbnRJbmZvOjpzZXRDb25kaXRp
b24oY29uc3QgVVN0cmluZyYgY29uZGl0aW9uKQotewotICAgIG1fY29uZGl0aW9uID0gY29uZGl0
aW9uOwotfQotCi1KYXZhU2NyaXB0RGVidWdTZXJ2ZXImIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6
c2hhcmVkKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEphdmFTY3JpcHREZWJ1Z1NlcnZl
ciwgc2VydmVyLCAoKSk7Ci0gICAgcmV0dXJuIHNlcnZlcjsKLX0KLQotSmF2YVNjcmlwdERlYnVn
U2VydmVyOjpKYXZhU2NyaXB0RGVidWdTZXJ2ZXIoKQotICAgIDogbV9jYWxsaW5nTGlzdGVuZXJz
KGZhbHNlKQotICAgICwgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKERvbnRQYXVzZU9uRXhjZXB0
aW9ucykKLSAgICAsIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQoZmFsc2UpCi0gICAgLCBtX3BhdXNl
ZChmYWxzZSkKLSAgICAsIG1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cyh0cnVlKQotICAg
ICwgbV9wYXVzZU9uQ2FsbEZyYW1lKDApCi0gICAgLCBtX3JlY29tcGlsZVRpbWVyKHRoaXMsICZK
YXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKQotewotfQotCi1K
YXZhU2NyaXB0RGVidWdTZXJ2ZXI6On5KYXZhU2NyaXB0RGVidWdTZXJ2ZXIoKQotewotICAgIGRl
bGV0ZUFsbFZhbHVlcyhtX3BhZ2VMaXN0ZW5lcnNNYXApOwotICAgIGRlbGV0ZUFsbFZhbHVlcyht
X2JyZWFrcG9pbnRzKTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3Rl
bmVyKEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lcikKLXsKLSAgICBBU1NFUlRfQVJH
KGxpc3RlbmVyLCBsaXN0ZW5lcik7Ci0KLSAgICBtX2xpc3RlbmVycy5hZGQobGlzdGVuZXIpOwot
Ci0gICAgZGlkQWRkTGlzdGVuZXIoMCk7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVy
OjpyZW1vdmVMaXN0ZW5lcihKYXZhU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIpCi17Ci0g
ICAgQVNTRVJUX0FSRyhsaXN0ZW5lciwgbGlzdGVuZXIpOwotCi0gICAgbV9saXN0ZW5lcnMucmVt
b3ZlKGxpc3RlbmVyKTsKLQotICAgIGRpZFJlbW92ZUxpc3RlbmVyKDApOwotICAgIGlmICghaGFz
TGlzdGVuZXJzKCkpCi0gICAgICAgIGRpZFJlbW92ZUxhc3RMaXN0ZW5lcigpOwotfQotCi12b2lk
IEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6YWRkTGlzdGVuZXIoSmF2YVNjcmlwdERlYnVnTGlzdGVu
ZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWdlKQotewotICAgIEFTU0VSVF9BUkcobGlzdGVuZXIsIGxp
c3RlbmVyKTsKLSAgICBBU1NFUlRfQVJHKHBhZ2UsIHBhZ2UpOwotCi0gICAgcGFpcjxQYWdlTGlz
dGVuZXJzTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9wYWdlTGlzdGVuZXJzTWFwLmFk
ZChwYWdlLCAwKTsKLSAgICBpZiAocmVzdWx0LnNlY29uZCkKLSAgICAgICAgcmVzdWx0LmZpcnN0
LT5zZWNvbmQgPSBuZXcgTGlzdGVuZXJTZXQ7Ci0KLSAgICBMaXN0ZW5lclNldCogbGlzdGVuZXJz
ID0gcmVzdWx0LmZpcnN0LT5zZWNvbmQ7Ci0gICAgbGlzdGVuZXJzLT5hZGQobGlzdGVuZXIpOwot
Ci0gICAgZGlkQWRkTGlzdGVuZXIocGFnZSk7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2Vy
dmVyOjpyZW1vdmVMaXN0ZW5lcihKYXZhU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBh
Z2UqIHBhZ2UpCi17Ci0gICAgQVNTRVJUX0FSRyhsaXN0ZW5lciwgbGlzdGVuZXIpOwotICAgIEFT
U0VSVF9BUkcocGFnZSwgcGFnZSk7Ci0KLSAgICBQYWdlTGlzdGVuZXJzTWFwOjppdGVyYXRvciBp
dCA9IG1fcGFnZUxpc3RlbmVyc01hcC5maW5kKHBhZ2UpOwotICAgIGlmIChpdCA9PSBtX3BhZ2VM
aXN0ZW5lcnNNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIExpc3RlbmVyU2V0KiBs
aXN0ZW5lcnMgPSBpdC0+c2Vjb25kOwotICAgIGxpc3RlbmVycy0+cmVtb3ZlKGxpc3RlbmVyKTsK
LSAgICBpZiAobGlzdGVuZXJzLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wYWdlTGlzdGVuZXJz
TWFwLnJlbW92ZShpdCk7Ci0gICAgICAgIGRlbGV0ZSBsaXN0ZW5lcnM7Ci0gICAgfQotCi0gICAg
ZGlkUmVtb3ZlTGlzdGVuZXIocGFnZSk7Ci0gICAgaWYgKCFoYXNMaXN0ZW5lcnMoKSkKLSAgICAg
ICAgZGlkUmVtb3ZlTGFzdExpc3RlbmVyKCk7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2Vy
dmVyOjpwYWdlQ3JlYXRlZChQYWdlKiBwYWdlKQotewotICAgIEFTU0VSVF9BUkcocGFnZSwgcGFn
ZSk7Ci0KLSAgICBpZiAoIWhhc0xpc3RlbmVyc0ludGVyZXN0ZWRJblBhZ2UocGFnZSkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBwYWdlLT5zZXREZWJ1Z2dlcih0aGlzKTsKLX0KLQotYm9vbCBKYXZh
U2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0xpc3RlbmVyc0ludGVyZXN0ZWRJblBhZ2UoUGFnZSogcGFn
ZSkKLXsKLSAgICBBU1NFUlRfQVJHKHBhZ2UsIHBhZ2UpOwotCi0gICAgaWYgKGhhc0dsb2JhbExp
c3RlbmVycygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtX3BhZ2VMaXN0
ZW5lcnNNYXAuY29udGFpbnMocGFnZSk7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVy
OjphZGRCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBj
b25zdCBVU3RyaW5nJiBjb25kaXRpb24pCi17Ci0gICAgTGluZVRvQnJlYWtwb2ludEluZm9NYXAq
IHNvdXJjZUJyZWFrcG9pbnRzID0gbV9icmVha3BvaW50cy5nZXQoc291cmNlSUQpOwotICAgIGlm
ICghc291cmNlQnJlYWtwb2ludHMpIHsKLSAgICAgICAgc291cmNlQnJlYWtwb2ludHMgPSBuZXcg
TGluZVRvQnJlYWtwb2ludEluZm9NYXA7Ci0gICAgICAgIG1fYnJlYWtwb2ludHMuc2V0KHNvdXJj
ZUlELCBzb3VyY2VCcmVha3BvaW50cyk7Ci0gICAgfQotICAgIEJyZWFrcG9pbnRJbmZvKiBpbmZv
ID0gc291cmNlQnJlYWtwb2ludHMtPmdldChsaW5lTnVtYmVyKTsKLSAgICBpZiAoIWluZm8pCi0g
ICAgICAgIHNvdXJjZUJyZWFrcG9pbnRzLT5zZXQobGluZU51bWJlciwgbmV3IEJyZWFrcG9pbnRJ
bmZvKGNvbmRpdGlvbikpOwotICAgIGVsc2UKLSAgICAgICAgdXBkYXRlQnJlYWtwb2ludEluZm8o
aW5mbywgY29uZGl0aW9uKTsKLX0KLQotSmF2YVNjcmlwdERlYnVnU2VydmVyOjpCcmVha3BvaW50
SW5mbyogSmF2YVNjcmlwdERlYnVnU2VydmVyOjpicmVha3BvaW50SW5mbyhpbnRwdHJfdCBzb3Vy
Y2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikgY29uc3QKLXsKLSAgICBMaW5lVG9CcmVha3BvaW50
SW5mb01hcCogc291cmNlQnJlYWtwb2ludHMgPSBtX2JyZWFrcG9pbnRzLmdldChzb3VyY2VJRCk7
Ci0gICAgaWYgKCFzb3VyY2VCcmVha3BvaW50cykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIHNvdXJjZUJyZWFrcG9pbnRzLT5nZXQobGluZU51bWJlcik7Ci19Ci0KLXZvaWQgSmF2YVNj
cmlwdERlYnVnU2VydmVyOjp1cGRhdGVCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCB1bnNp
Z25lZCBsaW5lTnVtYmVyLCBjb25zdCBVU3RyaW5nJiBjb25kaXRpb24pCi17Ci0gICAgQnJlYWtw
b2ludEluZm8qIGluZm8gPSBicmVha3BvaW50SW5mbyhzb3VyY2VJRCwgbGluZU51bWJlcik7Ci0g
ICAgaWYgKCFpbmZvKQotICAgICAgICByZXR1cm47Ci0gICAgdXBkYXRlQnJlYWtwb2ludEluZm8o
aW5mbywgY29uZGl0aW9uKTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnVwZGF0
ZUJyZWFrcG9pbnRJbmZvKEJyZWFrcG9pbnRJbmZvKiBpbmZvLCBjb25zdCBVU3RyaW5nJiBjb25k
aXRpb24pCi17Ci0gICAgaW5mby0+c2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci19Ci0KLXZvaWQg
SmF2YVNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlE
LCB1bnNpZ25lZCBsaW5lTnVtYmVyKQotewotICAgIExpbmVUb0JyZWFrcG9pbnRJbmZvTWFwKiBz
b3VyY2VCcmVha3BvaW50cyA9IG1fYnJlYWtwb2ludHMuZ2V0KHNvdXJjZUlEKTsKLSAgICBpZiAo
IXNvdXJjZUJyZWFrcG9pbnRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBCcmVha3BvaW50SW5m
byogaW5mbyA9IHNvdXJjZUJyZWFrcG9pbnRzLT5nZXQobGluZU51bWJlcik7Ci0gICAgaWYgKCFp
bmZvKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzb3VyY2VCcmVha3BvaW50cy0+cmVtb3ZlKGxp
bmVOdW1iZXIpOwotICAgIGRlbGV0ZSBpbmZvOwotCi0gICAgaWYgKHNvdXJjZUJyZWFrcG9pbnRz
LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9icmVha3BvaW50cy5yZW1vdmUoc291cmNlSUQpOwot
ICAgICAgICBkZWxldGUgc291cmNlQnJlYWtwb2ludHM7Ci0gICAgfQotfQotCi1ib29sIEphdmFT
Y3JpcHREZWJ1Z1NlcnZlcjo6aGFzQnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJRCwgdW5zaWdu
ZWQgbGluZU51bWJlcikgY29uc3QKLXsKLSAgICBCcmVha3BvaW50SW5mbyogaW5mbyA9IGJyZWFr
cG9pbnRJbmZvKHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKLSAgICBpZiAoIWluZm8pCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIEFuIGVtcHR5IGNvbmRpdGlvbiBjb3VudHMgYXMgbm8g
Y29uZGl0aW9uIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gInRydWUiLgotICAgIGlmIChpbmZvLT5j
b25kaXRpb24oKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgSlNWYWx1
ZSBleGNlcHRpb247Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmV2
YWx1YXRlKGluZm8tPmNvbmRpdGlvbigpLCBleGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24p
IHsKLSAgICAgICAgLy8gQW4gZXJyb25lb3VzIGNvbmRpdGlvbiBjb3VudHMgYXMgImZhbHNlIi4K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LnRvQm9vbGVh
bihtX2N1cnJlbnRDYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCkpOwotfQotCi12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50
cygpCi17Ci0gICAgQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fYnJlYWtwb2ludHMu
ZW5kKCk7Ci0gICAgZm9yIChCcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX2JyZWFrcG9p
bnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMo
KihpdC0+c2Vjb25kKSk7Ci0gICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyKCk7Ci0gICAgfQotICAg
IGRlbGV0ZUFsbFZhbHVlcyhtX2JyZWFrcG9pbnRzKTsKLSAgICBtX2JyZWFrcG9pbnRzLmNsZWFy
KCk7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVzZU9uRXhjZXB0aW9u
c1N0YXRlKFBhdXNlT25FeGNlcHRpb25zU3RhdGUgcGF1c2UpCi17Ci0gICAgbV9wYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlID0gcGF1c2U7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpw
YXVzZVByb2dyYW0oKQotewotICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOwotfQot
Ci12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6Y29udGludWVQcm9ncmFtKCkKLXsKLSAgICBp
ZiAoIW1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdXNlT25OZXh0U3RhdGVt
ZW50ID0gZmFsc2U7Ci0gICAgbV9kb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzID0gdHJ1ZTsK
LX0KLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBJbnRvU3RhdGVtZW50KCkKLXsK
LSAgICBpZiAoIW1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdXNlT25OZXh0
U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICBtX2RvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVudHMgPSB0
cnVlOwotfQotCi12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcE92ZXJTdGF0ZW1lbnQo
KQotewotICAgIGlmICghbV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGF1c2VP
bkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS5nZXQoKTsKLSAgICBtX2RvbmVQcm9jZXNz
aW5nRGVidWdnZXJFdmVudHMgPSB0cnVlOwotfQotCi12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZl
cjo6c3RlcE91dE9mRnVuY3Rpb24oKQotewotICAgIGlmICghbV9wYXVzZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fcGF1c2VPbkNhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZSA/IG1f
Y3VycmVudENhbGxGcmFtZS0+Y2FsbGVyKCkgOiAwOwotICAgIG1fZG9uZVByb2Nlc3NpbmdEZWJ1
Z2dlckV2ZW50cyA9IHRydWU7Ci19Ci0KLUphdmFTY3JpcHRDYWxsRnJhbWUqIEphdmFTY3JpcHRE
ZWJ1Z1NlcnZlcjo6Y3VycmVudENhbGxGcmFtZSgpCi17Ci0gICAgaWYgKCFtX3BhdXNlZCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fY3VycmVudENhbGxGcmFtZS5nZXQoKTsKLX0K
LQotc3RhdGljIHZvaWQgZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZShjb25zdCBMaXN0ZW5lclNldCYg
bGlzdGVuZXJzLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNl
KQotewotICAgIFZlY3RvcjxKYXZhU2NyaXB0RGVidWdMaXN0ZW5lcio+IGNvcHk7Ci0gICAgY29w
eVRvVmVjdG9yKGxpc3RlbmVycywgY29weSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b3B5LnNpemUoKTsgKytpKQotICAgICAgICBjb3B5W2ldLT5kaWRQYXJzZVNvdXJjZShleGVjLCBz
b3VyY2UpOwotfQotCi1zdGF0aWMgdm9pZCBkaXNwYXRjaEZhaWxlZFRvUGFyc2VTb3VyY2UoY29u
c3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQot
ewotICAgIFZlY3RvcjxKYXZhU2NyaXB0RGVidWdMaXN0ZW5lcio+IGNvcHk7Ci0gICAgY29weVRv
VmVjdG9yKGxpc3RlbmVycywgY29weSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3B5
LnNpemUoKTsgKytpKQotICAgICAgICBjb3B5W2ldLT5mYWlsZWRUb1BhcnNlU291cmNlKGV4ZWMs
IHNvdXJjZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2UpOwotfQotCi1zdGF0aWMgUGFnZSogdG9Q
YWdlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgQVNTRVJUX0FSRyhnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdCk7Ci0KLSAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gYXNK
U0RPTVdpbmRvdyhnbG9iYWxPYmplY3QpOwotICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvdy0+aW1w
bCgpLT5mcmFtZSgpOwotICAgIHJldHVybiBmcmFtZSA/IGZyYW1lLT5wYWdlKCkgOiAwOwotfQot
Ci12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZGV0YWNoKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgLy8gSWYgd2UncmUgZGV0YWNoaW5nIGZyb20gdGhlIGN1cnJlbnRs
eSBleGVjdXRpbmcgZ2xvYmFsIG9iamVjdCwgbWFudWFsbHkgdGVhciBkb3duIG91cgotICAgIC8v
IHN0YWNrLCBzaW5jZSB3ZSB3b24ndCBnZXQgZnVydGhlciBkZWJ1Z2dlciBjYWxsYmFja3MgdG8g
ZG8gc28uIEFsc28sIHJlc3VtZSBleGVjdXRpb24sCi0gICAgLy8gc2luY2UgdGhlcmUncyBubyBw
b2ludCBpbiBzdGF5aW5nIHBhdXNlZCBvbmNlIGEgd2luZG93IGNsb3Nlcy4KLSAgICBpZiAobV9j
dXJyZW50Q2FsbEZyYW1lICYmIG1fY3VycmVudENhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVj
dCgpID09IGdsb2JhbE9iamVjdCkgewotICAgICAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSAwOwot
ICAgICAgICBtX3BhdXNlT25DYWxsRnJhbWUgPSAwOwotICAgICAgICBjb250aW51ZVByb2dyYW0o
KTsKLSAgICB9Ci0gICAgRGVidWdnZXI6OmRldGFjaChnbG9iYWxPYmplY3QpOwotfQotCi12b2lk
IEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c291cmNlUGFyc2VkKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBVU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fY2FsbGluZ0xpc3RlbmVycykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUGFnZSogcGFnZSA9IHRvUGFnZShleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkp
OwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jYWxsaW5nTGlzdGVu
ZXJzID0gdHJ1ZTsKLQotICAgIGJvb2wgaXNFcnJvciA9IGVycm9yTGluZSAhPSAtMTsKLQotICAg
IGlmIChoYXNHbG9iYWxMaXN0ZW5lcnMoKSkgewotICAgICAgICBpZiAoaXNFcnJvcikKLSAgICAg
ICAgICAgIGRpc3BhdGNoRmFpbGVkVG9QYXJzZVNvdXJjZShtX2xpc3RlbmVycywgZXhlYywgc291
cmNlLCBlcnJvckxpbmUsIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGRpc3BhdGNoRGlkUGFyc2VTb3VyY2UobV9saXN0ZW5lcnMsIGV4ZWMsIHNvdXJjZSk7Ci0gICAg
fQotCi0gICAgaWYgKExpc3RlbmVyU2V0KiBwYWdlTGlzdGVuZXJzID0gbV9wYWdlTGlzdGVuZXJz
TWFwLmdldChwYWdlKSkgewotICAgICAgICBBU1NFUlQoIXBhZ2VMaXN0ZW5lcnMtPmlzRW1wdHko
KSk7Ci0gICAgICAgIGlmIChpc0Vycm9yKQotICAgICAgICAgICAgZGlzcGF0Y2hGYWlsZWRUb1Bh
cnNlU291cmNlKCpwYWdlTGlzdGVuZXJzLCBleGVjLCBzb3VyY2UsIGVycm9yTGluZSwgZXJyb3JN
ZXNzYWdlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGlzcGF0Y2hEaWRQYXJzZVNvdXJj
ZSgqcGFnZUxpc3RlbmVycywgZXhlYywgc291cmNlKTsKLSAgICB9Ci0KLSAgICBtX2NhbGxpbmdM
aXN0ZW5lcnMgPSBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgZGlzcGF0Y2hGdW5jdGlvblRvTGlz
dGVuZXJzKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIEphdmFTY3JpcHREZWJ1Z1NlcnZl
cjo6SmF2YVNjcmlwdEV4ZWN1dGlvbkNhbGxiYWNrIGNhbGxiYWNrKQotewotICAgIFZlY3RvcjxK
YXZhU2NyaXB0RGVidWdMaXN0ZW5lcio+IGNvcHk7Ci0gICAgY29weVRvVmVjdG9yKGxpc3RlbmVy
cywgY29weSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3B5LnNpemUoKTsgKytpKQot
ICAgICAgICAoY29weVtpXS0+KmNhbGxiYWNrKSgpOwotfQotCi12b2lkIEphdmFTY3JpcHREZWJ1
Z1NlcnZlcjo6ZGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVuZXJzKEphdmFTY3JpcHRFeGVjdXRpb25D
YWxsYmFjayBjYWxsYmFjaywgUGFnZSogcGFnZSkKLXsKLSAgICBpZiAobV9jYWxsaW5nTGlzdGVu
ZXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NhbGxpbmdMaXN0ZW5lcnMgPSB0cnVlOwot
Ci0gICAgQVNTRVJUKGhhc0xpc3RlbmVycygpKTsKLQotICAgIFdlYkNvcmU6OmRpc3BhdGNoRnVu
Y3Rpb25Ub0xpc3RlbmVycyhtX2xpc3RlbmVycywgY2FsbGJhY2spOwotCi0gICAgaWYgKExpc3Rl
bmVyU2V0KiBwYWdlTGlzdGVuZXJzID0gbV9wYWdlTGlzdGVuZXJzTWFwLmdldChwYWdlKSkgewot
ICAgICAgICBBU1NFUlQoIXBhZ2VMaXN0ZW5lcnMtPmlzRW1wdHkoKSk7Ci0gICAgICAgIFdlYkNv
cmU6OmRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycygqcGFnZUxpc3RlbmVycywgY2FsbGJhY2sp
OwotICAgIH0KLQotICAgIG1fY2FsbGluZ0xpc3RlbmVycyA9IGZhbHNlOwotfQotCi12b2lkIEph
dmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlwdFBhdXNlZChjb25zdCBQYWdlR3JvdXAm
IHBhZ2VHcm91cCwgYm9vbCBwYXVzZWQpCi17Ci0gICAgc2V0TWFpblRocmVhZENhbGxiYWNrc1Bh
dXNlZChwYXVzZWQpOwotCi0gICAgY29uc3QgSGFzaFNldDxQYWdlKj4mIHBhZ2VzID0gcGFnZUdy
b3VwLnBhZ2VzKCk7Ci0KLSAgICBIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
cGFnZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBwYWdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHNldEphdmFTY3JpcHRQ
YXVzZWQoKml0LCBwYXVzZWQpOwotfQotCi12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
SmF2YVNjcmlwdFBhdXNlZChQYWdlKiBwYWdlLCBib29sIHBhdXNlZCkKLXsKLSAgICBBU1NFUlRf
QVJHKHBhZ2UsIHBhZ2UpOwotCi0gICAgcGFnZS0+c2V0RGVmZXJzTG9hZGluZyhwYXVzZWQpOwot
Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpCi0gICAgICAgIHNldEphdmFTY3JpcHRQ
YXVzZWQoZnJhbWUsIHBhdXNlZCk7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpz
ZXRKYXZhU2NyaXB0UGF1c2VkKEZyYW1lKiBmcmFtZSwgYm9vbCBwYXVzZWQpCi17Ci0gICAgQVNT
RVJUX0FSRyhmcmFtZSwgZnJhbWUpOwotCi0gICAgaWYgKCFmcmFtZS0+c2NyaXB0KCktPmNhbkV4
ZWN1dGVTY3JpcHRzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZyYW1lLT5zY3JpcHQoKS0+
c2V0UGF1c2VkKHBhdXNlZCk7Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9j
dW1lbnQoKTsKLSAgICBpZiAocGF1c2VkKQotICAgICAgICBkb2N1bWVudC0+c3VzcGVuZEFjdGl2
ZURPTU9iamVjdHMoKTsKLSAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50LT5yZXN1bWVBY3RpdmVE
T01PYmplY3RzKCk7Ci0KLSAgICBzZXRKYXZhU2NyaXB0UGF1c2VkKGZyYW1lLT52aWV3KCksIHBh
dXNlZCk7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpCi0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2Vy
dmVyOjpzZXRKYXZhU2NyaXB0UGF1c2VkKEZyYW1lVmlldyosIGJvb2wpCi17Ci19Ci0KLSNlbHNl
Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzZXRKYXZhU2NyaXB0UGF1c2VkKEZyYW1l
VmlldyogdmlldywgYm9vbCBwYXVzZWQpCi17Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBjb25zdCBIYXNoU2V0PFJlZlB0cjxXaWRnZXQ+ID4qIGNoaWxkcmVuID0gdmll
dy0+Y2hpbGRyZW4oKTsKLSAgICBBU1NFUlQoY2hpbGRyZW4pOwotCi0gICAgSGFzaFNldDxSZWZQ
dHI8V2lkZ2V0PiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBjaGlsZHJlbi0+ZW5kKCk7Ci0gICAg
Zm9yIChIYXNoU2V0PFJlZlB0cjxXaWRnZXQ+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hpbGRy
ZW4tPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBXaWRnZXQqIHdpZGdldCA9
ICgqaXQpLmdldCgpOwotICAgICAgICBpZiAoIXdpZGdldC0+aXNQbHVnaW5WaWV3KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KHdpZGdl
dCktPnNldEphdmFTY3JpcHRQYXVzZWQocGF1c2VkKTsKLSAgICB9Ci19Ci0KLSNlbmRpZgotCi12
b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2VJZk5lZWRlZChQYWdlKiBwYWdlKQotewot
ICAgIGlmIChtX3BhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFwYWdlIHx8ICFo
YXNMaXN0ZW5lcnNJbnRlcmVzdGVkSW5QYWdlKHBhZ2UpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBib29sIHBhdXNlTm93ID0gbV9wYXVzZU9uTmV4dFN0YXRlbWVudDsKLSAgICBwYXVzZU5vdyB8
PSAobV9wYXVzZU9uQ2FsbEZyYW1lID09IG1fY3VycmVudENhbGxGcmFtZSk7Ci0gICAgcGF1c2VO
b3cgfD0gKG1fY3VycmVudENhbGxGcmFtZS0+bGluZSgpID4gMCAmJiBoYXNCcmVha3BvaW50KG1f
Y3VycmVudENhbGxGcmFtZS0+c291cmNlSUQoKSwgbV9jdXJyZW50Q2FsbEZyYW1lLT5saW5lKCkp
KTsKLSAgICBpZiAoIXBhdXNlTm93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhdXNlT25D
YWxsRnJhbWUgPSAwOwotICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSBmYWxzZTsKLSAgICBt
X3BhdXNlZCA9IHRydWU7Ci0KLSAgICBkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoJkphdmFT
Y3JpcHREZWJ1Z0xpc3RlbmVyOjpkaWRQYXVzZSwgcGFnZSk7Ci0KLSAgICBzZXRKYXZhU2NyaXB0
UGF1c2VkKHBhZ2UtPmdyb3VwKCksIHRydWUpOwotCi0gICAgVGltZXJCYXNlOjpmaXJlVGltZXJz
SW5OZXN0ZWRFdmVudExvb3AoKTsKLQotICAgIEV2ZW50TG9vcCBsb29wOwotICAgIG1fZG9uZVBy
b2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cyA9IGZhbHNlOwotICAgIHdoaWxlICghbV9kb25lUHJvY2Vz
c2luZ0RlYnVnZ2VyRXZlbnRzICYmICFsb29wLmVuZGVkKCkpCi0gICAgICAgIGxvb3AuY3ljbGUo
KTsKLQotICAgIHNldEphdmFTY3JpcHRQYXVzZWQocGFnZS0+Z3JvdXAoKSwgZmFsc2UpOwotCi0g
ICAgbV9wYXVzZWQgPSBmYWxzZTsKLQotICAgIGRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycygm
SmF2YVNjcmlwdERlYnVnTGlzdGVuZXI6OmRpZENvbnRpbnVlLCBwYWdlKTsKLX0KLQotdm9pZCBK
YXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmNhbGxFdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYg
ZGVidWdnZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikKLXsK
LSAgICBpZiAobV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY3VycmVudENhbGxG
cmFtZSA9IEphdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZShkZWJ1Z2dlckNhbGxGcmFtZSwgbV9j
dXJyZW50Q2FsbEZyYW1lLCBzb3VyY2VJRCwgbGluZU51bWJlcik7Ci0gICAgcGF1c2VJZk5lZWRl
ZCh0b1BhZ2UoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKSk7Ci19Ci0K
LXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjphdFN0YXRlbWVudChjb25zdCBEZWJ1Z2dlckNh
bGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51
bWJlcikKLXsKLSAgICBpZiAobV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChtX2N1cnJlbnRDYWxsRnJhbWUpOwotICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2N1cnJlbnRDYWxsRnJhbWUtPnVwZGF0ZShkZWJ1Z2dlckNh
bGxGcmFtZSwgc291cmNlSUQsIGxpbmVOdW1iZXIpOwotICAgIHBhdXNlSWZOZWVkZWQodG9QYWdl
KGRlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxPYmplY3QoKSkpOwotfQotCi12b2lkIEph
dmFTY3JpcHREZWJ1Z1NlcnZlcjo6cmV0dXJuRXZlbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUm
IGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCi17
Ci0gICAgaWYgKG1fcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9jdXJy
ZW50Q2FsbEZyYW1lKTsKLSAgICBpZiAoIW1fY3VycmVudENhbGxGcmFtZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9jdXJyZW50Q2FsbEZyYW1lLT51cGRhdGUoZGVidWdnZXJDYWxsRnJhbWUs
IHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKLSAgICBwYXVzZUlmTmVlZGVkKHRvUGFnZShkZWJ1Z2dl
ckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpKTsKLQotICAgIC8vIFRyZWF0IHN0ZXBw
aW5nIG92ZXIgYSByZXR1cm4gc3RhdGVtZW50IGxpa2Ugc3RlcHBpbmcgb3V0LgotICAgIGlmICht
X2N1cnJlbnRDYWxsRnJhbWUgPT0gbV9wYXVzZU9uQ2FsbEZyYW1lKQotICAgICAgICBtX3BhdXNl
T25DYWxsRnJhbWUgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmNhbGxlcigpOwotICAgIG1fY3VycmVu
dENhbGxGcmFtZSA9IG1fY3VycmVudENhbGxGcmFtZS0+Y2FsbGVyKCk7Ci19Ci0KLXZvaWQgSmF2
YVNjcmlwdERlYnVnU2VydmVyOjpleGNlcHRpb24oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRl
YnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIsIGJvb2wg
aGFzSGFuZGxlcikKLXsKLSAgICBpZiAobV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChtX2N1cnJlbnRDYWxsRnJhbWUpOwotICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1l
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09
IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8IChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1
c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAmJiAhaGFzSGFuZGxlcikpCi0gICAgICAgIG1fcGF1c2VP
bk5leHRTdGF0ZW1lbnQgPSB0cnVlOwotCi0gICAgbV9jdXJyZW50Q2FsbEZyYW1lLT51cGRhdGUo
ZGVidWdnZXJDYWxsRnJhbWUsIHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKLSAgICBwYXVzZUlmTmVl
ZGVkKHRvUGFnZShkZWJ1Z2dlckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpKTsKLX0K
LQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OndpbGxFeGVjdXRlUHJvZ3JhbShjb25zdCBE
ZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBp
bnQgbGluZU51bWJlcikKLXsKLSAgICBpZiAobV9wYXVzZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fY3VycmVudENhbGxGcmFtZSA9IEphdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZShkZWJ1
Z2dlckNhbGxGcmFtZSwgbV9jdXJyZW50Q2FsbEZyYW1lLCBzb3VyY2VJRCwgbGluZU51bWJlcik7
Ci0gICAgcGF1c2VJZk5lZWRlZCh0b1BhZ2UoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2Jh
bE9iamVjdCgpKSk7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpkaWRFeGVjdXRl
UHJvZ3JhbShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGludHB0
cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikKLXsKLSAgICBpZiAobV9wYXVzZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2N1cnJlbnRDYWxsRnJhbWUpOwotICAgIGlmICgh
bV9jdXJyZW50Q2FsbEZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2N1cnJlbnRDYWxs
RnJhbWUtPnVwZGF0ZShkZWJ1Z2dlckNhbGxGcmFtZSwgc291cmNlSUQsIGxpbmVOdW1iZXIpOwot
ICAgIHBhdXNlSWZOZWVkZWQodG9QYWdlKGRlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxP
YmplY3QoKSkpOwotCi0gICAgLy8gVHJlYXQgc3RlcHBpbmcgb3ZlciB0aGUgZW5kIG9mIGEgcHJv
Z3JhbSBsaWtlIHN0ZXBwaW5nIG91dC4KLSAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lID09IG1f
cGF1c2VPbkNhbGxGcmFtZSkKLSAgICAgICAgbV9wYXVzZU9uQ2FsbEZyYW1lID0gbV9jdXJyZW50
Q2FsbEZyYW1lLT5jYWxsZXIoKTsKLSAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBtX2N1cnJlbnRD
YWxsRnJhbWUtPmNhbGxlcigpOwotfQotCi12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlk
UmVhY2hCcmVha3BvaW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFt
ZSwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKQotewotICAgIGlmIChtX3BhdXNl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fY3VycmVudENhbGxGcmFtZSk7Ci0g
ICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGF1
c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOwotICAgIG1fY3VycmVudENhbGxGcmFtZS0+dXBkYXRl
KGRlYnVnZ2VyQ2FsbEZyYW1lLCBzb3VyY2VJRCwgbGluZU51bWJlcik7Ci0gICAgcGF1c2VJZk5l
ZWRlZCh0b1BhZ2UoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKSk7Ci19
Ci0KLXZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nv
b24oKQotewotICAgIG1fcmVjb21waWxlVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lk
IEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVGltZXI8SmF2
YVNjcmlwdERlYnVnU2VydmVyPiopCi17Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKLSAgICBEZWJ1Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2
ZXI6OmRpZEFkZExpc3RlbmVyKFBhZ2UqIHBhZ2UpCi17Ci0gICAgcmVjb21waWxlQWxsSlNGdW5j
dGlvbnNTb29uKCk7Ci0KLSAgICBpZiAocGFnZSkKLSAgICAgICAgcGFnZS0+c2V0RGVidWdnZXIo
dGhpcyk7Ci0gICAgZWxzZQotICAgICAgICBQYWdlOjpzZXREZWJ1Z2dlckZvckFsbFBhZ2VzKHRo
aXMpOwotfQotCi12b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkUmVtb3ZlTGlzdGVuZXIo
UGFnZSogcGFnZSkKLXsKLSAgICBpZiAoaGFzR2xvYmFsTGlzdGVuZXJzKCkgfHwgKHBhZ2UgJiYg
aGFzTGlzdGVuZXJzSW50ZXJlc3RlZEluUGFnZShwYWdlKSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwotCi0gICAgaWYgKHBhZ2UpCi0gICAg
ICAgIHBhZ2UtPnNldERlYnVnZ2VyKDApOwotICAgIGVsc2UKLSAgICAgICAgUGFnZTo6c2V0RGVi
dWdnZXJGb3JBbGxQYWdlcygwKTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmRp
ZFJlbW92ZUxhc3RMaXN0ZW5lcigpCi17Ci0gICAgbV9kb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZl
bnRzID0gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9K
YXZhU2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1
Z1NlcnZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2MyM2JjLi4wMDAwMDAw
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSmF2YVNjcmlwdERlYnVnU2VydmVyX2gK
LSNkZWZpbmUgSmF2YVNjcmlwdERlYnVnU2VydmVyX2gKLQotI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKSAmJiBVU0UoSlNDKQotCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDxk
ZWJ1Z2dlci9EZWJ1Z2dlci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVVN0cmluZy5oPgotI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNzIERlYnVnZ2VyQ2FsbEZy
YW1lOwotICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBGcmFtZVZpZXc7Ci0gICAgY2xhc3MgUGFn
ZTsKLSAgICBjbGFzcyBQYWdlR3JvdXA7Ci0gICAgY2xhc3MgSmF2YVNjcmlwdENhbGxGcmFtZTsK
LSAgICBjbGFzcyBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lcjsKLQotICAgIGNsYXNzIEphdmFTY3Jp
cHREZWJ1Z1NlcnZlciA6IEpTQzo6RGVidWdnZXIsIHB1YmxpYyBOb25jb3B5YWJsZSB7Ci0gICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgSmF2YVNjcmlwdERlYnVnU2VydmVyJiBzaGFyZWQoKTsK
LQotICAgICAgICB2b2lkIGFkZExpc3RlbmVyKEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyKik7Ci0g
ICAgICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIqKTsKLQot
ICAgICAgICB2b2lkIGFkZExpc3RlbmVyKEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSop
OwotICAgICAgICB2b2lkIHJlbW92ZUxpc3RlbmVyKEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyKiwg
UGFnZSopOwotCi0gICAgICAgIHZvaWQgYWRkQnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJRCwg
dW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgSlNDOjpVU3RyaW5nJiBjb25kaXRpb24pOwotICAg
ICAgICB2b2lkIHVwZGF0ZUJyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIHVuc2lnbmVkIGxp
bmVOdW1iZXIsIGNvbnN0IEpTQzo6VVN0cmluZyYgY29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBy
ZW1vdmVCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsK
LSAgICAgICAgYm9vbCBoYXNCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCB1bnNpZ25lZCBs
aW5lTnVtYmVyKSBjb25zdDsKLSAgICAgICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7Ci0KLSAg
ICAgICAgZW51bSBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHsKLSAgICAgICAgICAgIERvbnRQYXVz
ZU9uRXhjZXB0aW9ucywKLSAgICAgICAgICAgIFBhdXNlT25BbGxFeGNlcHRpb25zLAotICAgICAg
ICAgICAgUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucwotICAgICAgICB9OwotICAgICAgICBQYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGU7IH0KLSAgICAgICAgdm9pZCBzZXRQYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNlcHRpb25zU3RhdGUpOwotCi0gICAgICAgIHZvaWQgcGF1
c2VQcm9ncmFtKCk7Ci0gICAgICAgIHZvaWQgY29udGludWVQcm9ncmFtKCk7Ci0gICAgICAgIHZv
aWQgc3RlcEludG9TdGF0ZW1lbnQoKTsKLSAgICAgICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVudCgp
OwotICAgICAgICB2b2lkIHN0ZXBPdXRPZkZ1bmN0aW9uKCk7Ci0KLSAgICAgICAgdm9pZCByZWNv
bXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKLSAgICAgICAgdm9pZCByZWNvbXBpbGVBbGxKU0Z1
bmN0aW9ucyhUaW1lcjxKYXZhU2NyaXB0RGVidWdTZXJ2ZXI+KiA9IDApOwotCi0gICAgICAgIEph
dmFTY3JpcHRDYWxsRnJhbWUqIGN1cnJlbnRDYWxsRnJhbWUoKTsKLQotICAgICAgICB2b2lkIHBh
Z2VDcmVhdGVkKFBhZ2UqKTsKLQotICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8SmF2YVNjcmlwdERl
YnVnTGlzdGVuZXIqPiBMaXN0ZW5lclNldDsKLSAgICAgICAgdHlwZWRlZiB2b2lkIChKYXZhU2Ny
aXB0RGVidWdMaXN0ZW5lcjo6KkphdmFTY3JpcHRFeGVjdXRpb25DYWxsYmFjaykoKTsKLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIGNsYXNzIEJyZWFrcG9pbnRJbmZvIHsKLSAgICAgICAgcHVibGlj
OgotICAgICAgICAgICAgQnJlYWtwb2ludEluZm8oY29uc3QgSlNDOjpVU3RyaW5nJiBjb25kaXRp
b24pIDogbV9jb25kaXRpb24oY29uZGl0aW9uKSB7fQotICAgICAgICAgICAgY29uc3QgSlNDOjpV
U3RyaW5nJiBjb25kaXRpb24oKSBjb25zdDsKLSAgICAgICAgICAgIHZvaWQgc2V0Q29uZGl0aW9u
KGNvbnN0IEpTQzo6VVN0cmluZyYgY29uZGl0aW9uKTsKLSAgICAgICAgcHJpdmF0ZToKLSAgICAg
ICAgICAgIEpTQzo6VVN0cmluZyBtX2NvbmRpdGlvbjsKLSAgICAgICAgfTsKLQotICAgICAgICBK
YXZhU2NyaXB0RGVidWdTZXJ2ZXIoKTsKLSAgICAgICAgfkphdmFTY3JpcHREZWJ1Z1NlcnZlcigp
OwotCi0gICAgICAgIGJvb2wgaGFzTGlzdGVuZXJzKCkgY29uc3QgeyByZXR1cm4gIW1fbGlzdGVu
ZXJzLmlzRW1wdHkoKSB8fCAhbV9wYWdlTGlzdGVuZXJzTWFwLmlzRW1wdHkoKTsgfQotICAgICAg
ICBib29sIGhhc0dsb2JhbExpc3RlbmVycygpIGNvbnN0IHsgcmV0dXJuICFtX2xpc3RlbmVycy5p
c0VtcHR5KCk7IH0KLSAgICAgICAgYm9vbCBoYXNMaXN0ZW5lcnNJbnRlcmVzdGVkSW5QYWdlKFBh
Z2UqKTsKLQotICAgICAgICB2b2lkIHNldEphdmFTY3JpcHRQYXVzZWQoY29uc3QgUGFnZUdyb3Vw
JiwgYm9vbCBwYXVzZWQpOwotICAgICAgICB2b2lkIHNldEphdmFTY3JpcHRQYXVzZWQoUGFnZSos
IGJvb2wgcGF1c2VkKTsKLSAgICAgICAgdm9pZCBzZXRKYXZhU2NyaXB0UGF1c2VkKEZyYW1lKiwg
Ym9vbCBwYXVzZWQpOwotICAgICAgICB2b2lkIHNldEphdmFTY3JpcHRQYXVzZWQoRnJhbWVWaWV3
KiwgYm9vbCBwYXVzZWQpOwotCi0gICAgICAgIHZvaWQgZGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVu
ZXJzKEphdmFTY3JpcHRFeGVjdXRpb25DYWxsYmFjaywgUGFnZSopOwotICAgICAgICB2b2lkIHBh
dXNlSWZOZWVkZWQoUGFnZSopOwotICAgICAgICBCcmVha3BvaW50SW5mbyogYnJlYWtwb2ludElu
Zm8oaW50cHRyX3Qgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpIGNvbnN0OwotICAgICAg
ICB2b2lkIHVwZGF0ZUJyZWFrcG9pbnRJbmZvKEJyZWFrcG9pbnRJbmZvKiBpbmZvLCBjb25zdCBK
U0M6OlVTdHJpbmcmIGNvbmRpdGlvbik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaChK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNvdXJjZVBhcnNl
ZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIGludCBlcnJvckxpbmUs
IGNvbnN0IEpTQzo6VVN0cmluZyYgZXJyb3JNc2cpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2Fs
bEV2ZW50KGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJRCwg
aW50IGxpbmVOdW1iZXIpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYXRTdGF0ZW1lbnQoY29uc3Qg
SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0cl90IHNvdXJjZUlELCBpbnQgZmlyc3RMaW5l
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJldHVybkV2ZW50KGNvbnN0IEpTQzo6RGVidWdnZXJD
YWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgZXhjZXB0aW9uKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnRw
dHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIsIGJvb2wgaGFzSGFuZGxlcik7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCB3aWxsRXhlY3V0ZVByb2dyYW0oY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxG
cmFtZSYsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZW5vKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBpbnRw
dHJfdCBzb3VyY2VJRCwgaW50IGxpbmVubyk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFj
aEJyZWFrcG9pbnQoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0cl90IHNvdXJj
ZUlELCBpbnQgbGluZW5vKTsKLQotICAgICAgICB2b2lkIGRpZEFkZExpc3RlbmVyKFBhZ2UqKTsK
LSAgICAgICAgdm9pZCBkaWRSZW1vdmVMaXN0ZW5lcihQYWdlKik7Ci0gICAgICAgIHZvaWQgZGlk
UmVtb3ZlTGFzdExpc3RlbmVyKCk7Ci0KLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFBhZ2UqLCBM
aXN0ZW5lclNldCo+IFBhZ2VMaXN0ZW5lcnNNYXA7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDx1
bnNpZ25lZCwgQnJlYWtwb2ludEluZm8qPiBMaW5lVG9CcmVha3BvaW50SW5mb01hcDsKLSAgICAg
ICAgdHlwZWRlZiBIYXNoTWFwPGludHB0cl90LCBMaW5lVG9CcmVha3BvaW50SW5mb01hcCo+IEJy
ZWFrcG9pbnRzTWFwOwotCi0gICAgICAgIFBhZ2VMaXN0ZW5lcnNNYXAgbV9wYWdlTGlzdGVuZXJz
TWFwOwotICAgICAgICBMaXN0ZW5lclNldCBtX2xpc3RlbmVyczsKLSAgICAgICAgYm9vbCBtX2Nh
bGxpbmdMaXN0ZW5lcnM7Ci0gICAgICAgIFBhdXNlT25FeGNlcHRpb25zU3RhdGUgbV9wYXVzZU9u
RXhjZXB0aW9uc1N0YXRlOwotICAgICAgICBib29sIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQ7Ci0g
ICAgICAgIGJvb2wgbV9wYXVzZWQ7Ci0gICAgICAgIGJvb2wgbV9kb25lUHJvY2Vzc2luZ0RlYnVn
Z2VyRXZlbnRzOwotICAgICAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKiBtX3BhdXNlT25DYWxsRnJh
bWU7Ci0gICAgICAgIFJlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBtX2N1cnJlbnRDYWxsRnJh
bWU7Ci0gICAgICAgIEJyZWFrcG9pbnRzTWFwIG1fYnJlYWtwb2ludHM7Ci0gICAgICAgIFRpbWVy
PEphdmFTY3JpcHREZWJ1Z1NlcnZlcj4gbV9yZWNvbXBpbGVUaW1lcjsKLSAgICB9OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKLQotI2VuZGlmIC8vIEphdmFTY3JpcHREZWJ1Z1NlcnZlcl9oCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9TY3Jp
cHRCcmVha3BvaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3NTkw
MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQu
aApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0QnJlYWtwb2ludF9oCisjZGVmaW5lIFNj
cmlwdEJyZWFrcG9pbnRfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBTY3JpcHRC
cmVha3BvaW50IHsKKyAgICBTY3JpcHRCcmVha3BvaW50KGJvb2wgZW5hYmxlZCwgY29uc3QgU3Ry
aW5nJiBjb25kaXRpb24pCisgICAgICAgIDogZW5hYmxlZChlbmFibGVkKQorICAgICAgICAsIGNv
bmRpdGlvbihjb25kaXRpb24pCisgICAgeworICAgIH0KKworICAgIFNjcmlwdEJyZWFrcG9pbnQo
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVuYWJsZWQ7CisgICAgU3RyaW5nIGNvbmRpdGlv
bjsKK307CisKK3R5cGVkZWYgSGFzaE1hcDxpbnQsIFNjcmlwdEJyZWFrcG9pbnQ+IFNvdXJjZUJy
ZWFrcG9pbnRzOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhZGVmaW5l
ZChTY3JpcHRCcmVha3BvaW50X2gpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQnJlYWtwb2ludC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3Bv
aW50LmpzCmluZGV4IDVkNDZjYzkuLjdmM2VmMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9CcmVha3BvaW50LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9CcmVha3BvaW50LmpzCkBAIC04OSw3ICs4OSw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
ImNvbmRpdGlvbi1jaGFuZ2VkIik7CiAKICAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCkKLSAgICAg
ICAgICAgIEluc3BlY3RvckJhY2tlbmQudXBkYXRlQnJlYWtwb2ludCh0aGlzLnNvdXJjZUlELCB0
aGlzLmxpbmUsIGMpOworICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRCcmVha3BvaW50
KHRoaXMuc291cmNlSUQsIHRoaXMubGluZSwgdGhpcy5lbmFibGVkLCB0aGlzLmNvbmRpdGlvbik7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJl
YWtwb2ludHNTaWRlYmFyUGFuZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVh
a3BvaW50c1NpZGViYXJQYW5lLmpzCmluZGV4IDg4NjVmMGIuLjBiY2EwNWIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpz
CkBAIC00MCw2ICs0MCwxNiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZSA9
IGZ1bmN0aW9uKCkKIH0KIAogV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJv
dG90eXBlID0geworICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmJy
ZWFrcG9pbnRzID0ge307CisgICAgICAgIHRoaXMubGlzdEVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4o
KTsKKyAgICAgICAgaWYgKHRoaXMubGlzdEVsZW1lbnQucGFyZW50RWxlbWVudCkgeworICAgICAg
ICAgICAgdGhpcy5ib2R5RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmxpc3RFbGVtZW50KTsKKyAg
ICAgICAgICAgIHRoaXMuYm9keUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lbXB0eUVsZW1lbnQp
OworICAgICAgICB9CisgICAgfSwKKwogICAgIGFkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFr
cG9pbnQpCiAgICAgewogICAgICAgICBpZiAodGhpcy5icmVha3BvaW50c1ticmVha3BvaW50Lmlk
XSkKQEAgLTYyLDcgKzcyLDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRzU2lkZWJhclBhbmUu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChicmVha3Bv
aW50LmVuYWJsZWQpCi0gICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmFkZEJyZWFrcG9pbnQo
YnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5lLCBicmVha3BvaW50LmNvbmRpdGlv
bik7CisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEJyZWFrcG9pbnQoYnJlYWtwb2lu
dC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5lLCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9p
bnQuY29uZGl0aW9uKTsKICAgICB9LAogCiAgICAgX2FwcGVuZEJyZWFrcG9pbnRFbGVtZW50OiBm
dW5jdGlvbihicmVha3BvaW50KQpAQCAtMTUxLDEwICsxNjEsNyBAQCBXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghSW5zcGVjdG9y
QmFja2VuZC5kZWJ1Z2dlckVuYWJsZWQoKSB8fCAhYnJlYWtwb2ludC5zb3VyY2VJRCkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAoYnJlYWtwb2ludC5lbmFibGVkKQotICAgICAg
ICAgICAgSW5zcGVjdG9yQmFja2VuZC5hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQs
IGJyZWFrcG9pbnQubGluZSwgYnJlYWtwb2ludC5jb25kaXRpb24pOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5z
b3VyY2VJRCwgYnJlYWtwb2ludC5saW5lKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRC
cmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGluZSwgYnJlYWtwb2lu
dC5lbmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7CiAgICAgfSwKIAogICAgIF9icmVha3Bv
aW50VGV4dENoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzCmluZGV4IGVkMDNmNzMuLjQxMGFk
OTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNr
ZW5kU3R1Yi5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFj
a2VuZFN0dWIuanMKQEAgLTE1OCw3ICsxNTgsNyBAQCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFj
a2VuZFN0dWIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9kZWJ1Z2dlckVuYWJsZWQgPSBm
YWxzZTsKICAgICB9LAogCi0gICAgYWRkQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIGxp
bmUsIGNvbmRpdGlvbikKKyAgICBzZXRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgbGlu
ZSwgZW5hYmxlZCwgY29uZGl0aW9uKQogICAgIHsKICAgICB9LAogCkBAIC0xNjYsMTAgKzE2Niw2
IEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUgPSB7CiAgICAg
ewogICAgIH0sCiAKLSAgICB1cGRhdGVCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgbGlu
ZSwgY29uZGl0aW9uKQotICAgIHsKLSAgICB9LAotCiAgICAgcGF1c2VJbkRlYnVnZ2VyOiBmdW5j
dGlvbigpCiAgICAgewogICAgIH0sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU2NyaXB0c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dHNQYW5lbC5qcwppbmRleCBlZDFhZDZlLi44YjE3NTMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTE1Nyw4ICsxNTcsNiBAQCBXZWJJbnNwZWN0
b3IuU2NyaXB0c1BhbmVsID0gZnVuY3Rpb24oKQogICAgIHRoaXMucGF1c2VPbkV4Y2VwdGlvbkJ1
dHRvbiA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdHVzQmFyQnV0dG9uKCIiLCAic2NyaXB0cy1wYXVz
ZS1vbi1leGNlcHRpb25zLXN0YXR1cy1iYXItaXRlbSIsIDMpOwogICAgIHRoaXMucGF1c2VPbkV4
Y2VwdGlvbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2dsZVBhdXNl
T25FeGNlcHRpb25zLmJpbmQodGhpcyksIGZhbHNlKTsKIAotICAgIHRoaXMuX2JyZWFrcG9pbnRz
VVJMTWFwID0ge307Ci0KICAgICB0aGlzLl9zaG9ydGN1dHMgPSB7fTsKICAgICB2YXIgaGFuZGxl
ciwgc2hvcnRjdXQ7CiAgICAgdmFyIHBsYXRmb3JtU3BlY2lmaWNNb2RpZmllciA9IFdlYkluc3Bl
Y3Rvci5pc01hYygpID8gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzLk1l
dGEgOiBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllcnMuQ3RybDsKQEAgLTE5
NCw3ICsxOTIsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsID0gZnVuY3Rpb24oKQogICAg
IHRoaXMucmVzZXQoKTsKIH0KIAotLy8gS2VlcCB0aGVzZSBpbiBzeW5jIHdpdGggV2ViQ29yZTo6
SmF2YVNjcmlwdERlYnVnU2VydmVyCisvLyBLZWVwIHRoZXNlIGluIHN5bmMgd2l0aCBXZWJDb3Jl
OjpTY3JpcHREZWJ1Z1NlcnZlcgogV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5QYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlID0gewogICAgIERvbnRQYXVzZU9uRXhjZXB0aW9ucyA6IDAsCiAgICAgUGF1
c2VPbkFsbEV4Y2VwdGlvbnMgOiAxLApAQCAtMjg5LDI1ICsyODcsNiBAQCBXZWJJbnNwZWN0b3Iu
U2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBpZiAoc291cmNlSUQpCiAgICAg
ICAgICAgICB0aGlzLl9zb3VyY2VJRE1hcFtzb3VyY2VJRF0gPSAocmVzb3VyY2UgfHwgc2NyaXB0
KTsKLQotICAgICAgICBpZiAoc291cmNlVVJMIGluIHRoaXMuX2JyZWFrcG9pbnRzVVJMTWFwICYm
IHNvdXJjZUlEKSB7Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9icmVha3Bv
aW50c1VSTE1hcFtzb3VyY2VVUkxdOwotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRzTGVuZ3Ro
ID0gYnJlYWtwb2ludHMubGVuZ3RoOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBi
cmVha3BvaW50c0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQg
PSBicmVha3BvaW50c1tpXTsKLQotICAgICAgICAgICAgICAgIGlmIChzdGFydGluZ0xpbmUgPD0g
YnJlYWtwb2ludC5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbmQgYWRk
IHRoZSBicmVha3BvaW50LCB0byBjbGVhbiB1cCB0aGluZ3MgbGlrZSB0aGUgc2lkZWJhcgotICAg
ICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQuc291cmNlSUQgPSBzb3VyY2VJRDsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuZW5hYmxlZCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQuYWRkQnJlYWtwb2ludChicmVh
a3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LmxpbmUsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICB0
aGlzLl9hZGRTY3JpcHRUb0ZpbGVzTWVudShzY3JpcHQpOwogICAgIH0sCiAKQEAgLTMyNywxMCAr
MzA2LDYgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICAg
ICAgdmFyIHNvdXJjZUZyYW1lOwogICAgICAgICBpZiAoYnJlYWtwb2ludC51cmwpIHsKLSAgICAg
ICAgICAgIGlmICghKGJyZWFrcG9pbnQudXJsIGluIHRoaXMuX2JyZWFrcG9pbnRzVVJMTWFwKSkK
LSAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50c1VSTE1hcFticmVha3BvaW50LnVybF0g
PSBbXTsKLSAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzVVJMTWFwW2JyZWFrcG9pbnQudXJs
XS51bnNoaWZ0KGJyZWFrcG9pbnQpOwotCiAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC51cmwg
aW4gV2ViSW5zcGVjdG9yLnJlc291cmNlVVJMTWFwKSB7CiAgICAgICAgICAgICAgICAgdmFyIHJl
c291cmNlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlVVJMTWFwW2JyZWFrcG9pbnQudXJsXTsKICAg
ICAgICAgICAgICAgICBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZUZyYW1lRm9yU2NyaXB0T3JS
ZXNvdXJjZShyZXNvdXJjZSk7CkBAIC0zNTEsMTYgKzMyNiw5IEBAIFdlYkluc3BlY3Rvci5TY3Jp
cHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnNpZGViYXJQYW5lcy5icmVha3Bv
aW50cy5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpOwogCiAgICAgICAgIHZhciBzb3VyY2VG
cmFtZTsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQudXJsICYmIGJyZWFrcG9pbnQudXJsIGluIHRo
aXMuX2JyZWFrcG9pbnRzVVJMTWFwKSB7Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0
aGlzLl9icmVha3BvaW50c1VSTE1hcFticmVha3BvaW50LnVybF07Ci0gICAgICAgICAgICBicmVh
a3BvaW50cy5yZW1vdmUoYnJlYWtwb2ludCk7Ci0gICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnRz
Lmxlbmd0aCkKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNVUkxNYXBb
YnJlYWtwb2ludC51cmxdOwotCi0gICAgICAgICAgICBpZiAoYnJlYWtwb2ludC51cmwgaW4gV2Vi
SW5zcGVjdG9yLnJlc291cmNlVVJMTWFwKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJlc291cmNl
ID0gV2ViSW5zcGVjdG9yLnJlc291cmNlVVJMTWFwW2JyZWFrcG9pbnQudXJsXTsKLSAgICAgICAg
ICAgICAgICBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZUZyYW1lRm9yU2NyaXB0T3JSZXNvdXJj
ZShyZXNvdXJjZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChicmVha3BvaW50LnVybCAm
JiBicmVha3BvaW50LnVybCBpbiBXZWJJbnNwZWN0b3IucmVzb3VyY2VVUkxNYXApIHsKKyAgICAg
ICAgICAgIHZhciByZXNvdXJjZSA9IFdlYkluc3BlY3Rvci5yZXNvdXJjZVVSTE1hcFticmVha3Bv
aW50LnVybF07CisgICAgICAgICAgICBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZUZyYW1lRm9y
U2NyaXB0T3JSZXNvdXJjZShyZXNvdXJjZSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYnJl
YWtwb2ludC5zb3VyY2VJRCAmJiAhc291cmNlRnJhbWUpIHsKQEAgLTQ4Nyw2ICs0NTUsNyBAQCBX
ZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fc291
cmNlSURNYXAgPSB7fTsKICAgICAgICAgCiAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLndhdGNo
RXhwcmVzc2lvbnMucmVmcmVzaEV4cHJlc3Npb25zKCk7CisgICAgICAgIHRoaXMuc2lkZWJhclBh
bmVzLmJyZWFrcG9pbnRzLnJlc2V0KCk7CiAgICAgfSwKIAogICAgIGdldCB2aXNpYmxlVmlldygp
CkBAIC02MTYsMTUgKzU4NSwxMyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIGlmICghV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB2aWV3ID0gV2ViSW5zcGVj
dG9yLnBhbmVscy5yZXNvdXJjZXMucmVzb3VyY2VWaWV3Rm9yUmVzb3VyY2Uoc2NyaXB0T3JSZXNv
dXJjZSk7Ci0gICAgICAgICAgICB2aWV3LmhlYWRlcnNWaXNpYmxlID0gZmFsc2U7IAotCi0gICAg
ICAgICAgICBpZiAoc2NyaXB0T3JSZXNvdXJjZS51cmwgaW4gdGhpcy5fYnJlYWtwb2ludHNVUkxN
YXApIHsKLSAgICAgICAgICAgICAgICB2YXIgc291cmNlRnJhbWUgPSB0aGlzLl9zb3VyY2VGcmFt
ZUZvclNjcmlwdE9yUmVzb3VyY2Uoc2NyaXB0T3JSZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAg
aWYgKHNvdXJjZUZyYW1lICYmICFzb3VyY2VGcmFtZS5icmVha3BvaW50cy5sZW5ndGgpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludHNVUkxN
YXBbc2NyaXB0T3JSZXNvdXJjZS51cmxdOwotICAgICAgICAgICAgICAgICAgICB2YXIgYnJlYWtw
b2ludHNMZW5ndGggPSBicmVha3BvaW50cy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHNMZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZUZyYW1lLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludHNbaV0pOworICAg
ICAgICAgICAgdmlldy5oZWFkZXJzVmlzaWJsZSA9IGZhbHNlOworICAgICAgICAgICAgdmFyIGJy
ZWFrcG9pbnRzID0gdGhpcy5zaWRlYmFyUGFuZXMuYnJlYWtwb2ludHMuYnJlYWtwb2ludHM7Cisg
ICAgICAgICAgICBmb3IgKHZhciBicmVha3BvaW50SWQgaW4gYnJlYWtwb2ludHMpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF07Cisg
ICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQudXJsID09PSBzY3JpcHRPclJlc291cmNlLnVy
bCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlRnJhbWUgPSB0aGlzLl9zb3VyY2VG
cmFtZUZvclNjcmlwdE9yUmVzb3VyY2Uoc2NyaXB0T3JSZXNvdXJjZSk7CisgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZUZyYW1lLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdE9yUmVzb3Vy
Y2UgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU2NyaXB0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggOGJjZGY2My4uODE5NTgzMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0xMjEyLDYgKzEyMTIsMTMgQEAgV2ViSW5z
cGVjdG9yLnBhcnNlZFNjcmlwdFNvdXJjZSA9IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkws
IHNvdXJjZSwgc3RhcnRpbmcKICAgICB0aGlzLnBhbmVscy5zY3JpcHRzLmFkZFNjcmlwdChzb3Vy
Y2VJRCwgc291cmNlVVJMLCBzb3VyY2UsIHN0YXJ0aW5nTGluZSk7CiB9CiAKK1dlYkluc3BlY3Rv
ci5yZXN0b3JlZEJyZWFrcG9pbnQgPSBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5l
LCBlbmFibGVkLCBjb25kaXRpb24pCit7CisgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnQoc291cmNlVVJMLCBsaW5lLCBzb3VyY2VJRCwgY29uZGl0aW9uKTsK
KyAgICBicmVha3BvaW50LmVuYWJsZWQgPSBlbmFibGVkOworICAgIHRoaXMucGFuZWxzLnNjcmlw
dHMuYWRkQnJlYWtwb2ludChicmVha3BvaW50KTsKK30KKwogV2ViSW5zcGVjdG9yLmZhaWxlZFRv
UGFyc2VTY3JpcHRTb3VyY2UgPSBmdW5jdGlvbihzb3VyY2VVUkwsIHNvdXJjZSwgc3RhcnRpbmdM
aW5lLCBlcnJvckxpbmUsIGVycm9yTWVzc2FnZSkKIHsKICAgICB0aGlzLnBhbmVscy5zY3JpcHRz
LmFkZFNjcmlwdChudWxsLCBzb3VyY2VVUkwsIHNvdXJjZSwgc3RhcnRpbmdMaW5lLCBlcnJvckxp
bmUsIGVycm9yTWVzc2FnZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggM2VjYmI1ZC4uZDJhZDA0NiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtNzAs
OCArNzAsOCBAQAogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKICNlbmRpZgogCi0jaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCi0jaW5jbHVkZSAiSmF2YVNj
cmlwdERlYnVnU2VydmVyLmgiCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisjaW5j
bHVkZSAiU2NyaXB0RGVidWdTZXJ2ZXIuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdNTCkKQEAg
LTE3NCw4ICsxNzQsOCBAQCBQYWdlOjpQYWdlKENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50LCBD
b250ZXh0TWVudUNsaWVudCogY29udGV4dE1lbnVDbGllbnQsIEVkaQogICAgICAgICBtX3BsdWdp
bkhhbHRlci0+c2V0UGx1Z2luQWxsb3dlZFJ1blRpbWUobV9zZXR0aW5ncy0+cGx1Z2luQWxsb3dl
ZFJ1blRpbWUoKSk7CiAgICAgfQogCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYm
IFVTRShKU0MpCi0gICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5wYWdlQ3JlYXRl
ZCh0aGlzKTsKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkucGFnZUNyZWF0ZWQodGhpcyk7CiAjZW5kaWYKIAogI2lmbmRlZiBO
REVCVUcKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5j
cHAKaW5kZXggOTY5OGVhZC4uN2NmODMyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9h
bmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9hbmRy
b2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKQEAgLTg0LDggKzg0LDggQEAKICNpbmNsdWRlICJB
UEkvSlNDbGFzc1JlZi5oIgogI2luY2x1ZGUgIkpOSVV0aWxpdHlQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgotI2luY2x1ZGUgIkphdmFTY3JpcHREZWJ1Z1NlcnZl
ci5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHRQcm9maWxlLmgiCisjaW5jbHVkZSAiU2NyaXB0RGVi
dWdTZXJ2ZXIuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CmluZGV4IGQ4ZDg5YTIuLmNmZGUyODIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDEwLTAyLTIxICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENocm9taXVtIERldlRv
b2xzOiBrZXBwIGRlYnVnZ2VyIEFQSSBpbiBzeW5jIHdpdGggaW5zcGVjdG9yLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODc5OQorCisgICAgICAg
ICogc3JjL2pzL0RlYnVnZ2VyQWdlbnQuanM6CisgICAgICAgICogc3JjL2pzL0luc3BlY3RvckNv
bnRyb2xsZXJJbXBsLmpzOgorICAgICAgICAoZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwu
cHJvdG90eXBlLnNldEJyZWFrcG9pbnQpOgorCiAyMDEwLTAyLTE5ICBNYWNpZWogU3RhY2hvd2lh
ayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyQWdlbnQuanMgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyQWdlbnQuanMKaW5kZXggYmI2NTVjNy4uODg2YjRi
MCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlckFnZW50LmpzCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGVidWdnZXJBZ2VudC5qcwpAQCAtMzM0LDM4ICsz
MzQsNiBAQCBkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5yZW1vdmVCcmVha3BvaW50
ID0gZnVuY3Rpb24oc291cmNlSWQsIGxpbmUpCiAKIAogLyoqCi0gKiBAcGFyYW0ge251bWJlcn0g
c291cmNlSWQgSWQgb2YgdGhlIHNjcmlwdCBmb3IgdGhlIGJyZWFrcG9pbnQuCi0gKiBAcGFyYW0g
e251bWJlcn0gbGluZSBOdW1iZXIgb2YgdGhlIGxpbmUgZm9yIHRoZSBicmVha3BvaW50LgotICog
QHBhcmFtIHs/c3RyaW5nfSBjb25kaXRpb24gTmV3IGJyZWFrcG9pbnQgY29uZGl0aW9uLgotICov
Ci1kZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS51cGRhdGVCcmVha3BvaW50ID0gZnVu
Y3Rpb24oc291cmNlSWQsIGxpbmUsIGNvbmRpdGlvbikKLXsKLSAgICB2YXIgc2NyaXB0ID0gdGhp
cy5wYXJzZWRTY3JpcHRzX1tzb3VyY2VJZF07Ci0gICAgaWYgKCFzY3JpcHQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGxpbmUgPSBkZXZ0b29scy5EZWJ1Z2dlckFnZW50LndlYmtpdFRvVjhMaW5l
TnVtYmVyXyhsaW5lKTsKLQotICAgIHZhciBicmVha3BvaW50SW5mbzsKLSAgICBpZiAoc2NyaXB0
LmdldFVybCgpKSB7Ci0gICAgICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMudXJsVG9CcmVha3Bv
aW50c19bc2NyaXB0LmdldFVybCgpXTsKLSAgICAgICAgYnJlYWtwb2ludEluZm8gPSBicmVha3Bv
aW50c1tsaW5lXTsKLSAgICB9IGVsc2UKLSAgICAgICAgYnJlYWtwb2ludEluZm8gPSBzY3JpcHQu
Z2V0QnJlYWtwb2ludEluZm8obGluZSk7Ci0KLSAgICB2YXIgaWQgPSBicmVha3BvaW50SW5mby5n
ZXRWOElkKCk7Ci0KLSAgICAvLyBJZiB3ZSBkb24ndCBrbm93IGlkIG9mIHRoaXMgYnJlYWtwb2lu
dCBpbiB0aGUgdjggZGVidWdnZXIgd2UgY2Fubm90IHNlbmQKLSAgICAvLyB0aGUgImNoYW5nZWJy
ZWFrcG9pbnQiIHJlcXVlc3QuCi0gICAgaWYgKGlkICE9PSAtMSkgewotICAgICAgICAvLyBUT0RP
KGFwYXZsb3YpOiBtYWtlIHVzZSBvZiB0aGUgcmVhbCB2YWx1ZXMgZm9yICJlbmFibGVkIiBhbmQK
LSAgICAgICAgLy8gImlnbm9yZUNvdW50IiB3aGVuIGFwcHJvcHJpYXRlLgotICAgICAgICB0aGlz
LnJlcXVlc3RDaGFuZ2VCcmVha3BvaW50XyhpZCwgdHJ1ZSwgY29uZGl0aW9uLCBudWxsKTsKLSAg
ICB9Ci19OwotCi0KLS8qKgogICogVGVsbHMgdGhlIHY4IGRlYnVnZ2VyIHRvIHN0ZXAgaW50byB0
aGUgbmV4dCBzdGF0ZW1lbnQuCiAgKi8KIGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBl
LnN0ZXBJbnRvU3RhdGVtZW50ID0gZnVuY3Rpb24oKQpAQCAtNjYzLDI1ICs2MzEsNiBAQCBkZXZ0
b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5yZXF1ZXN0Q2xlYXJCcmVha3BvaW50XyA9IGZ1
bmN0aW9uKGJyZWFrcG9pbnRJZAogCiAKIC8qKgotICogQ2hhbmdlcyBicmVha3BvaW50IHBhcmFt
ZXRlcnMgaW4gdGhlIHY4IGRlYnVnZ2VyLgotICogQHBhcmFtIHtudW1iZXJ9IGJyZWFrcG9pbnRJ
ZCBJZCBvZiB0aGUgYnJlYWtwb2ludCBpbiB0aGUgdjggZGVidWdnZXIuCi0gKiBAcGFyYW0ge2Jv
b2xlYW59IGVuYWJsZWQgV2hldGhlciB0byBlbmFibGUgdGhlIGJyZWFrcG9pbnQuCi0gKiBAcGFy
YW0gez9zdHJpbmd9IGNvbmRpdGlvbiBOZXcgYnJlYWtwb2ludCBjb25kaXRpb24uCi0gKiBAcGFy
YW0ge251bWJlcn0gaWdub3JlQ291bnQgTmV3IGlnbm9yZSBjb3VudCBmb3IgdGhlIGJyZWFrcG9p
bnQuCi0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLnJlcXVlc3RDaGFuZ2VC
cmVha3BvaW50XyA9IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCwgZW5hYmxlZCwgY29uZGl0aW9uLCBp
Z25vcmVDb3VudCkKLXsKLSAgICB2YXIgY21kID0gbmV3IGRldnRvb2xzLkRlYnVnQ29tbWFuZCgi
Y2hhbmdlYnJlYWtwb2ludCIsIHsKLSAgICAgICAgImJyZWFrcG9pbnQiOiBicmVha3BvaW50SWQs
Ci0gICAgICAgICJlbmFibGVkIjogZW5hYmxlZCwKLSAgICAgICAgImNvbmRpdGlvbiI6IGNvbmRp
dGlvbiwKLSAgICAgICAgImlnbm9yZUNvdW50IjogaWdub3JlQ291bnQKLSAgICB9KTsKLSAgICBk
ZXZ0b29scy5EZWJ1Z2dlckFnZW50LnNlbmRDb21tYW5kXyhjbWQpOwotfTsKLQotCi0vKioKICAq
IFNlbmRzICJiYWNrdHJhY2UiIHJlcXVlc3QgdG8gdjguCiAgKi8KIGRldnRvb2xzLkRlYnVnZ2Vy
QWdlbnQucHJvdG90eXBlLnJlcXVlc3RCYWNrdHJhY2VfID0gZnVuY3Rpb24oKQpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMKaW5kZXggYzky
YTk0Yy4uYjUxY2VkNyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0
b3JDb250cm9sbGVySW1wbC5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3Rv
ckNvbnRyb2xsZXJJbXBsLmpzCkBAIC0xMDIsOSArMTAyLDExIEBAIGRldnRvb2xzLkluc3BlY3Rv
ckJhY2tlbmRJbXBsLnByb3RvdHlwZS5wcm9maWxlckVuYWJsZWQgPSBmdW5jdGlvbigpCiB9Owog
CiAKLWRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5hZGRCcmVha3BvaW50
ID0gZnVuY3Rpb24oc291cmNlSUQsIGxpbmUsIGNvbmRpdGlvbikKK2RldnRvb2xzLkluc3BlY3Rv
ckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zZXRCcmVha3BvaW50ID0gZnVuY3Rpb24oc291cmNlSUQs
IGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKIHsKLSAgICBkZXZ0b29scy50b29scy5nZXREZWJ1
Z2dlckFnZW50KCkuYWRkQnJlYWtwb2ludChzb3VyY2VJRCwgbGluZSwgY29uZGl0aW9uKTsKKyAg
ICB0aGlzLnJlbW92ZUJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmUpOworICAgIGlmIChlbmFibGVk
KQorICAgICAgICBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkuYWRkQnJlYWtwb2lu
dChzb3VyY2VJRCwgbGluZSwgY29uZGl0aW9uKTsKIH07CiAKIApAQCAtMTEzLDEwICsxMTUsNiBA
QCBkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2lu
dCA9IGZ1bmN0aW9uKHNvdXJjZUlELCBsaQogICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2Vy
QWdlbnQoKS5yZW1vdmVCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lKTsKIH07CiAKLWRldnRvb2xz
Lkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS51cGRhdGVCcmVha3BvaW50ID0gZnVuY3Rp
b24oc291cmNlSUQsIGxpbmUsIGNvbmRpdGlvbikKLXsKLSAgICBkZXZ0b29scy50b29scy5nZXRE
ZWJ1Z2dlckFnZW50KCkudXBkYXRlQnJlYWtwb2ludChzb3VyY2VJRCwgbGluZSwgY29uZGl0aW9u
KTsKLX07CiAKIGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5wYXVzZUlu
RGVidWdnZXIgPSBmdW5jdGlvbigpCiB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>