<?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>122144</bug_id>
          
          <creation_ts>2013-10-01 01:05:16 -0700</creation_ts>
          <short_desc>Get rid of Node::preDispatchEventHandler and Node::postDispatchEventHandler</short_desc>
          <delta_ts>2013-10-03 00:32:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>122143</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>934927</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-01 01:05:16 -0700</bug_when>
    <thetext>Node::preDispatchEventHandler and Node::postDispatchEventHandler are only implemented by HTMLInputElement and HTMLMediaElement for a couple of events.
There is no reason every single event dispatch has to pay the cost of calling these virtual functions.

Furthermore, preDispatchEventHandlerResult that&apos;s passed around from preDispatchEventHandler and postDispatchEventHandler is only used by HTMLInputElement&apos;s preDispatchEventHandler and it&apos;s always of type ClickHandlingState. Since ClickHandlingState is never subclassed, we don&apos;t even need to heap-allocate this object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935331</commentid>
    <comment_count>1</comment_count>
      <attachid>213147</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-01 20:39:15 -0700</bug_when>
    <thetext>Created attachment 213147
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935339</commentid>
    <comment_count>2</comment_count>
      <attachid>213147</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-10-01 20:50:49 -0700</bug_when>
    <thetext>Comment on attachment 213147
Cleanup

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

&gt; Source/WebCore/dom/Document.cpp:5392
&gt; +    dispatchFullScreenChangeOrErrorEvent(changeQueue, eventNames().webkitfullscreenchangeEvent, true /* shouldNotifyMediaElement */);
&gt; +    dispatchFullScreenChangeOrErrorEvent(errorQueue, eventNames().webkitfullscreenerrorEvent, false /* shouldNotifyMediaElement */);

I think typically we do &quot;/* variableName */ true&quot; rather than &quot;true /* variableName */&quot;
Of course it&apos;d be nicest to use enums instead of magical boolean arguments.

&gt; Source/WebCore/dom/Document.cpp:5411
&gt; +        if (shouldNotifyMediaElement &amp;&amp; isElement(*node.get()) &amp;&amp; toElement(node.get())-&gt;isMediaElement())
&gt; +            toHTMLMediaElement(node.get())-&gt;willDispatchFullScreenChangeEvent();

if (shouldNotifyMediaElement &amp;&amp; isMediaElement(node.get()))

&gt; Source/WebCore/dom/EventDispatcher.cpp:137
&gt; +    if (isHTMLInputElement(m_node.get())) {

I would use early return style here.

&gt; Source/WebCore/dom/EventDispatcher.cpp:194
&gt; +inline void EventDispatcher::dispatchEventPostProcess(const ClickHandlingState* inputElmenetClickHandlingState)

inputElmenetClickHandlingState
Typo, Elmenet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935340</commentid>
    <comment_count>3</comment_count>
      <attachid>213149</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-01 21:01:16 -0700</bug_when>
    <thetext>Created attachment 213149
More cleanups</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935408</commentid>
    <comment_count>4</comment_count>
      <attachid>213149</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-10-02 09:11:18 -0700</bug_when>
    <thetext>Comment on attachment 213149
More cleanups

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

While I am OK with this, I think it can be improved.

&gt; Source/WebCore/dom/Document.cpp:5411
&gt; +        if (shouldNotifyMediaElement &amp;&amp; isMediaElement(node.get()))
&gt; +            toHTMLMediaElement(node.get())-&gt;willDispatchFullScreenChangeEvent();

This seems awkward. Is there really not a better way of doing this? I’m not even sure that the work to configure the media element has much to do with DOM events. Maybe we can do this in Document::fullScreenChangeDelayTimerFired rather than inside the dispatching function.

&gt; Source/WebCore/dom/EventDispatcher.cpp:115
&gt; +    InputElementClickHandlingState inputElementClickHandlingState;

I don’t think the local variable needs such a long name. How about just &quot;clickHandlingState&quot; or even just &quot;state&quot;? The type name will still be there.

&gt; Source/WebCore/dom/EventDispatcher.cpp:116
&gt; +    if (callWillDispatchEventOnInputElement(inputElementClickHandlingState) == ContinueDispatching &amp;&amp; !m_eventPath.isEmpty()) {

The m_eventPath.isEmpty() check here is non-obvious. I don’t know why you chose to move this out of callWillDispatchEventOnInputElement but not the m_event.propagationStopped part. The EventDispatchContinuation enum seems quite awkward.

&gt; Source/WebCore/dom/EventDispatcher.cpp:141
&gt; -inline EventDispatchContinuation EventDispatcher::dispatchEventPreProcess(void*&amp; preDispatchEventHandlerResult)
&gt; +inline EventDispatchContinuation EventDispatcher::callWillDispatchEventOnInputElement(InputElementClickHandlingState&amp; state)
&gt;  {
&gt; -    // Give the target node a chance to do some work before DOM event handlers get a crack.
&gt; -    preDispatchEventHandlerResult = m_node-&gt;preDispatchEventHandler(m_event.get());
&gt; -    return (m_eventPath.isEmpty() || m_event-&gt;propagationStopped()) ? DoneDispatching : ContinueDispatching;
&gt; +    if (isHTMLInputElement(m_node.get())) {
&gt; +        toHTMLInputElement(m_node.get())-&gt;willDispatchEvent(m_event.get(), state);
&gt; +        if (m_event-&gt;propagationStopped())
&gt; +            return DoneDispatching;
&gt; +    }
&gt; +    return ContinueDispatching;

I think it’s not all that helpful to have this as a separate function. Can we just put this inline in EventDispatcher::dispatch? Or maybe find some other way to factor the code into a separate function. This particular function just seems like a random snippet of code broken out into a separate function, not something with its own separate mission.

And given we still have a dispatchEventPostProcess function, maybe we should try to keep this named dispatchEventPreProcess and have it do a bit more? I’m not really sure.

&gt; Source/WebCore/dom/EventDispatcher.cpp:193
&gt; -inline void EventDispatcher::dispatchEventPostProcess(void* preDispatchEventHandlerResult)
&gt; +inline void EventDispatcher::dispatchEventPostProcess(const InputElementClickHandlingState&amp; inputElementClickHandlingState)

I think the argument name here is too long. I think we can just call it clickHandlingState or maybe event just state since the type name will still be there.

&gt; Source/WebCore/html/HTMLInputElement.h:47
&gt; +class InputElementClickHandlingState {
&gt; +    WTF_MAKE_FAST_ALLOCATED;

This seems more like a struct with a constructor than a class. I suggest making it a struct.

Why WTF_MAKE_FAST_ALLOCATED? I don’t think we are allocating these with new/delete any more.

Would be nice to have a slightly more streamlined name. Maybe InputElementClickState or InputElementClickEventState or CheckboxClickState?

&gt; Source/WebCore/html/HTMLInputElement.h:53
&gt; +    InputElementClickHandlingState()
&gt; +    : stateful(false)
&gt; +    , checked(false)
&gt; +    , indeterminate(false)
&gt; +    { }

Formatting here isn’t right. I suggest one of these two forms:

    InputElementClickHandlingState()
        : stateful(false)
        , checked(false)
        , indeterminate(false)
    {
    }

Or:

    InputElementClickHandlingState() : stateful(false), checked(false), indeterminate(false) { }

To me, either of these seems consistent with our style guidelines, but the formatting you chose does not seem to be.

&gt; Source/WebCore/html/HTMLMediaElement.cpp:-4830
&gt; -    if (event &amp;&amp; event-&gt;type() == eventNames().webkitfullscreenchangeEvent)
&gt; -        configureMediaControls();

The patch describes this as a refactoring.

But this is not just a refactoring, it’s a behavior change. We now do this work when *sending* a full screen change event, rather than when receiving it. In the old code, sending the event from a webpage to the media element would trigger this. In the new code, it’s only the engine that can trigger it.

Was the old behavior incorrect? Is the new behavior correct?

&gt; Source/WebCore/html/HTMLMediaElement.h:386
&gt; +    void willDispatchFullScreenChangeEvent() { configureMediaControls(); }

I’m not too fond of this name. If my guess is correct, this media control configuration is really not about dispatching the event. It’s about being properly configured for full screen display. The event is to let the content know that happened, not a way to tell the media element to configure itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935706</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-02 22:43:17 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; Source/WebCore/dom/Document.cpp:5411
&gt; &gt; +        if (shouldNotifyMediaElement &amp;&amp; isMediaElement(node.get()))
&gt; &gt; +            toHTMLMediaElement(node.get())-&gt;willDispatchFullScreenChangeEvent();
&gt; 
&gt; This seems awkward. Is there really not a better way of doing this? I’m not even sure that the work to configure the media element has much to do with DOM events. Maybe we can do this in Document::fullScreenChangeDelayTimerFired rather than inside the dispatching function.

Renamed to enteredOrExitedFullscreen.

&gt; &gt; Source/WebCore/dom/EventDispatcher.cpp:115
&gt; &gt; +    InputElementClickHandlingState inputElementClickHandlingState;
&gt; 
&gt; I don’t think the local variable needs such a long name. How about just &quot;clickHandlingState&quot; or even just &quot;state&quot;? The type name will still be there.

Renamed to clickHandlingState.

&gt; &gt; Source/WebCore/dom/EventDispatcher.cpp:116
&gt; &gt; +    if (callWillDispatchEventOnInputElement(inputElementClickHandlingState) == ContinueDispatching &amp;&amp; !m_eventPath.isEmpty()) {
&gt; 
&gt; The m_eventPath.isEmpty() check here is non-obvious. I don’t know why you chose to move this out of callWillDispatchEventOnInputElement but not the m_event.propagationStopped part. The EventDispatchContinuation enum seems quite awkward.
&gt; 
&gt; &gt; Source/WebCore/dom/EventDispatcher.cpp:141
&gt; &gt; -inline EventDispatchContinuation EventDispatcher::dispatchEventPreProcess(void*&amp; preDispatchEventHandlerResult)
&gt; &gt; +inline EventDispatchContinuation EventDispatcher::callWillDispatchEventOnInputElement(InputElementClickHandlingState&amp; state)
&gt; &gt;  {
&gt; &gt; -    // Give the target node a chance to do some work before DOM event handlers get a crack.
&gt; &gt; -    preDispatchEventHandlerResult = m_node-&gt;preDispatchEventHandler(m_event.get());
&gt; &gt; -    return (m_eventPath.isEmpty() || m_event-&gt;propagationStopped()) ? DoneDispatching : ContinueDispatching;
&gt; &gt; +    if (isHTMLInputElement(m_node.get())) {
&gt; &gt; +        toHTMLInputElement(m_node.get())-&gt;willDispatchEvent(m_event.get(), state);
&gt; &gt; +        if (m_event-&gt;propagationStopped())
&gt; &gt; +            return DoneDispatching;
&gt; &gt; +    }
&gt; &gt; +    return ContinueDispatching;
&gt; 
&gt; I think it’s not all that helpful to have this as a separate function. Can we just put this inline in EventDispatcher::dispatch? Or maybe find some other way to factor the code into a separate function. This particular function just seems like a random snippet of code broken out into a separate function, not something with its own separate mission.

Done.

&gt; &gt; Source/WebCore/dom/EventDispatcher.cpp:193
&gt; &gt; -inline void EventDispatcher::dispatchEventPostProcess(void* preDispatchEventHandlerResult)
&gt; &gt; +inline void EventDispatcher::dispatchEventPostProcess(const InputElementClickHandlingState&amp; inputElementClickHandlingState)
&gt; 
&gt; I think the argument name here is too long. I think we can just call it clickHandlingState or maybe event just state since the type name will still be there.
&gt; 
&gt; &gt; Source/WebCore/html/HTMLInputElement.h:47
&gt; &gt; +class InputElementClickHandlingState {
&gt; &gt; +    WTF_MAKE_FAST_ALLOCATED;
&gt; 
&gt; This seems more like a struct with a constructor than a class. I suggest making it a struct.
&gt; Why WTF_MAKE_FAST_ALLOCATED? I don’t think we are allocating these with new/delete any more.

Fixed.

&gt; Would be nice to have a slightly more streamlined name. Maybe InputElementClickState or InputElementClickEventState or CheckboxClickState?

Renamed to InputElementClickState.

&gt; &gt; Source/WebCore/html/HTMLInputElement.h:53
&gt; &gt; +    InputElementClickHandlingState()
&gt; &gt; +    : stateful(false)
&gt; &gt; +    , checked(false)
&gt; &gt; +    , indeterminate(false)
&gt; &gt; +    { }
&gt; 
&gt; Formatting here isn’t right. I suggest one of these two forms:
&gt; 
&gt;     InputElementClickHandlingState()
&gt;         : stateful(false)
&gt;         , checked(false)
&gt;         , indeterminate(false)
&gt;     {
&gt;     }
&gt; 
&gt; Or:
&gt; 
&gt;     InputElementClickHandlingState() : stateful(false), checked(false), indeterminate(false) { }
&gt; 
&gt; To me, either of these seems consistent with our style guidelines, but the formatting you chose does not seem to be.

Fixed.

&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:-4830
&gt; &gt; -    if (event &amp;&amp; event-&gt;type() == eventNames().webkitfullscreenchangeEvent)
&gt; &gt; -        configureMediaControls();
&gt; 
&gt; The patch describes this as a refactoring.
&gt; 
&gt; But this is not just a refactoring, it’s a behavior change. We now do this work when *sending* a full screen change event, rather than when receiving it. In the old code, sending the event from a webpage to the media element would trigger this. In the new code, it’s only the engine that can trigger it.
&gt; Was the old behavior incorrect? Is the new behavior correct?

The old code was wrong since configureMediaControls is called to show the media controls after entering or existing fullscreen.  Unfortunately, I couldn&apos;t create a test case after a couple hours of attempt.

&gt; &gt; Source/WebCore/html/HTMLMediaElement.h:386
&gt; &gt; +    void willDispatchFullScreenChangeEvent() { configureMediaControls(); }
&gt; 
&gt; I’m not too fond of this name. If my guess is correct, this media control configuration is really not about dispatching the event. It’s about being properly configured for full screen display. The event is to let the content know that happened, not a way to tell the media element to configure itself.

Renamed to enteredOrExitedFullscreen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935707</commentid>
    <comment_count>6</comment_count>
      <attachid>213227</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-02 22:49:19 -0700</bug_when>
    <thetext>Created attachment 213227
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935721</commentid>
    <comment_count>7</comment_count>
      <attachid>213227</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-02 23:49:34 -0700</bug_when>
    <thetext>Comment on attachment 213227
Patch for landing

Clearing flags on attachment: 213227

Committed r156825: &lt;http://trac.webkit.org/changeset/156825&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935722</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-02 23:49:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935731</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-03 00:32:49 -0700</bug_when>
    <thetext>Somehow removals in Node.h got lost. Committed it in http://trac.webkit.org/changeset/156826.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213147</attachid>
            <date>2013-10-01 20:39:15 -0700</date>
            <delta_ts>2013-10-01 21:01:14 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-122144-20131001203914.patch</filename>
            <type>text/plain</type>
            <size>22355</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Njc1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTEwLTAxICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEdldCByaWQgb2YgTm9kZTo6cHJl
RGlzcGF0Y2hFdmVudEhhbmRsZXIgYW5kIE5vZGU6OnBvc3REaXNwYXRjaEV2ZW50SGFuZGxlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMTQ0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR2V0IHJpZCBv
ZiBwcmUvcG9zdCBldmVudCBkaXNwYXRjaCBjYWxsYmFja3MgcHJlRGlzcGF0Y2hFdmVudEhhbmRs
ZXIgYW5kIHBvc3REaXNwYXRjaEV2ZW50SGFuZGxlciBzaW5jZSB0aGUgZm9ybWVyIHdhcworICAg
ICAgICBvbmx5IGNhbGxlZCBieSBIVE1MTWVkaWFFbGVtZW50IGFuZCBIVE1MSW5wdXRFbGVtZW50
IGFuZCB0aGUgbGF0dGVyIHdhcyBvbmx5IGNhbGxlZCBieSBIVE1MSW5wdXRFbGVtZW50LgorCisg
ICAgICAgIEFkZCBhbiBleHBsaWNpdCBjYWxsIHRvIEhUTUxNZWRpYUVsZW1lbnQ6OndpbGxEaXNw
YXRjaEZ1bGxTY3JlZW5DaGFuZ2VFdmVudCBpbiBEb2N1bWVudDo6ZnVsbFNjcmVlbkNoYW5nZURl
bGF5VGltZXJGaXJlZAorICAgICAgICBzaW5jZSB0aGlzIGlzIHRoZSBvbmx5IHBsYWNlIHRoYXQg
ZmlyZXMgdGhlIGZ1bGxzY3JlZW5jaGFuZ2UgZXZlbnQuCisKKyAgICAgICAgQWxzbyBhZGQgYW4g
ZXhwbGljaXQgY2FsbCB0byB3aWxsRGlzcGF0Y2hFdmVudCBhbmQgZGlkRGlzcGF0Y2hDbGlja0V2
ZW50IGluIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2guIFRoaXMgYWxzbyBhbGxvd3MKKyAgICAg
ICAgdXMgdG8gc3RhY2stYWxsb2NhdGUgQ2xpY2tIYW5kbGluZ1N0YXRlIGluc3RlYWQgb2YgaGF2
aW5nIHdpbGxEaXNwYXRjaEV2ZW50IGhlYXAtYWxsb2NhdGUgaXQgYW5kIHBhc3MgaXQgYXJvdW5k
IGFzIHZvaWQqLgorCisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZ1bGxTY3JlZW5DaGFuZ2VE
ZWxheVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpc3BhdGNoRnVs
bFNjcmVlbkNoYW5nZU9yRXJyb3JFdmVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6Cisg
ICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5jcHA6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0
Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6Y2FsbFdpbGxEaXNwYXRjaEV2ZW50
T25JbnB1dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNw
YXRjaEV2ZW50UG9zdFByb2Nlc3MpOgorICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuaDoK
KyAgICAgICAgKiBodG1sL0NoZWNrYm94SW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNoZWNrYm94SW5wdXRUeXBlOjp3aWxsRGlzcGF0Y2hDbGljayk6CisgICAgICAgICogaHRtbC9D
aGVja2JveElucHV0VHlwZS5oOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp3aWxsRGlzcGF0Y2hFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkaWREaXNwYXRjaENsaWNrRXZl
bnQpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp3aWxsRGlzcGF0Y2hGdWxsU2Ny
ZWVuQ2hhbmdlRXZlbnQpOiBSZW5hbWVkIGZyb20gcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIuCisg
ICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6d2lsbERpc3Bh
dGNoQ2xpY2spOgorICAgICAgICAqIGh0bWwvSW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9S
YWRpb0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6d2ls
bERpc3BhdGNoQ2xpY2spOgorICAgICAgICAqIGh0bWwvUmFkaW9JbnB1dFR5cGUuaDoKKwogMjAx
My0xMC0wMSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIENvbnZlcnQg
UGFnZUdyb3VwIHRvIHVzaW5nIHN0ZDo6dW5pcXVlX3B0cgpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5vcmRlcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVy
CShyZXZpc2lvbiAxNTY3NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzIzLDcgKzEzMjMsNiBAQCBfX1pON1dlYkNvcmU1RXZlbnQ5c2V0VGFy
Z2V0RU4zV1RGMTBQYXNzCiBfX1pON1dlYkNvcmU1RXZlbnQxNHJlY2VpdmVkVGFyZ2V0RXYKIF9f
Wk43V2ViQ29yZTE4V2luZG93RXZlbnRDb250ZXh0QzFFUE5TXzVFdmVudEVOM1dURjEwUGFzc1Jl
ZlB0cklOU180Tm9kZUVFRVBLTlNfMTJFdmVudENvbnRleHRFCiBfX1pON1dlYkNvcmUxOFdpbmRv
d0V2ZW50Q29udGV4dEMyRVBOU181RXZlbnRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVQ
S05TXzEyRXZlbnRDb250ZXh0RQotX19aTjdXZWJDb3JlNE5vZGUyM3ByZURpc3BhdGNoRXZlbnRI
YW5kbGVyRVBOU181RXZlbnRFCiBfX1pON1dlYkNvcmUxOFdpbmRvd0V2ZW50Q29udGV4dDE3aGFu
ZGxlTG9jYWxFdmVudHNFUE5TXzVFdmVudEUKIF9fWk43V2ViQ29yZTROb2RlMTZkZXJlZkV2ZW50
VGFyZ2V0RXYKIF9fWk43V2ViQ29yZTExRXZlbnRUYXJnZXQxOGZpcmVFdmVudExpc3RlbmVyc0VQ
TlNfNUV2ZW50RQpAQCAtOTg5OSw4ICs5ODk4LDYgQEAgX19aTjdXZWJDb3JlNDBqc0RvY3VtZW50
UHJvdG90eXBlRnVuY3RpbwogX19aTjdXZWJDb3JlNVRpbWVySU5TXzE3R2VuZXJpY0V2ZW50UXVl
dWVFRTVmaXJlZEV2CiBfX1pON1dlYkNvcmUxN0dlbmVyaWNFdmVudFF1ZXVlMTB0aW1lckZpcmVk
RVBOU181VGltZXJJUzBfRUUKIF9fWk43V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDEzZGlzcGF0
Y2hFdmVudEVOM1dURjEwUGFzc1JlZlB0cklOU181RXZlbnRFRUUKLV9fWk43V2ViQ29yZTE2SFRN
TE1lZGlhRWxlbWVudDIzcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJFUE5TXzVFdmVudEUKLV9fWk43
V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDE5ZGVmYXVsdEV2ZW50SGFuZGxlckVQTlNfNUV2ZW50
RQogX19aTjdXZWJDb3JlMTZwYXJzZUhUTUxJbnRlZ2VyRVJLTjNXVEY2U3RyaW5nRVJpCiBfX1pO
N1dlYkNvcmU3RWxlbWVudDIxc2V0VGFiSW5kZXhFeHBsaWNpdGx5RXMKIF9fWk43V2ViQ29yZTE4
VGV4dEZpZWxkSW5wdXRUeXBlMjRyZWFkb25seUF0dHJpYnV0ZUNoYW5nZWRFdgpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNTY3NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVk
ZSAiSFRNTEhlYWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgpAQCAtNTM4NywxMSArNTM4OCwxMSBAQCB2
b2lkIERvY3VtZW50OjpmdWxsU2NyZWVuQ2hhbmdlRGVsYXlUaW1lCiAgICAgbV9mdWxsU2NyZWVu
Q2hhbmdlRXZlbnRUYXJnZXRRdWV1ZS5zd2FwKGNoYW5nZVF1ZXVlKTsKICAgICBEZXF1ZTxSZWZQ
dHI8Tm9kZT4gPiBlcnJvclF1ZXVlOwogICAgIG1fZnVsbFNjcmVlbkVycm9yRXZlbnRUYXJnZXRR
dWV1ZS5zd2FwKGVycm9yUXVldWUpOwotICAgIGRpc3BhdGNoRnVsbFNjcmVlbkNoYW5nZU9yRXJy
b3JFdmVudChjaGFuZ2VRdWV1ZSwgZXZlbnROYW1lcygpLndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2VF
dmVudCk7Ci0gICAgZGlzcGF0Y2hGdWxsU2NyZWVuQ2hhbmdlT3JFcnJvckV2ZW50KGVycm9yUXVl
dWUsIGV2ZW50TmFtZXMoKS53ZWJraXRmdWxsc2NyZWVuZXJyb3JFdmVudCk7CisgICAgZGlzcGF0
Y2hGdWxsU2NyZWVuQ2hhbmdlT3JFcnJvckV2ZW50KGNoYW5nZVF1ZXVlLCBldmVudE5hbWVzKCku
d2Via2l0ZnVsbHNjcmVlbmNoYW5nZUV2ZW50LCB0cnVlIC8qIHNob3VsZE5vdGlmeU1lZGlhRWxl
bWVudCAqLyk7CisgICAgZGlzcGF0Y2hGdWxsU2NyZWVuQ2hhbmdlT3JFcnJvckV2ZW50KGVycm9y
UXVldWUsIGV2ZW50TmFtZXMoKS53ZWJraXRmdWxsc2NyZWVuZXJyb3JFdmVudCwgZmFsc2UgLyog
c2hvdWxkTm90aWZ5TWVkaWFFbGVtZW50ICovKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZGlzcGF0
Y2hGdWxsU2NyZWVuQ2hhbmdlT3JFcnJvckV2ZW50KERlcXVlPFJlZlB0cjxOb2RlPj4mIHF1ZXVl
LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKK3ZvaWQgRG9jdW1lbnQ6OmRpc3BhdGNo
RnVsbFNjcmVlbkNoYW5nZU9yRXJyb3JFdmVudChEZXF1ZTxSZWZQdHI8Tm9kZT4+JiBxdWV1ZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUsIGJvb2wgc2hvdWxkTm90aWZ5TWVkaWFFbGVt
ZW50KQogewogICAgIHdoaWxlICghcXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIFJlZlB0cjxO
b2RlPiBub2RlID0gcXVldWUudGFrZUZpcnN0KCk7CkBAIC01NDA2LDYgKzU0MDcsOCBAQCB2b2lk
IERvY3VtZW50OjpkaXNwYXRjaEZ1bGxTY3JlZW5DaGFuZ2VPCiAgICAgICAgIGlmICghbm9kZS0+
aW5Eb2N1bWVudCgpKQogICAgICAgICAgICAgcXVldWUuYXBwZW5kKGRvY3VtZW50RWxlbWVudCgp
KTsKIAorICAgICAgICBpZiAoc2hvdWxkTm90aWZ5TWVkaWFFbGVtZW50ICYmIGlzRWxlbWVudCgq
bm9kZS5nZXQoKSkgJiYgdG9FbGVtZW50KG5vZGUuZ2V0KCkpLT5pc01lZGlhRWxlbWVudCgpKQor
ICAgICAgICAgICAgdG9IVE1MTWVkaWFFbGVtZW50KG5vZGUuZ2V0KCkpLT53aWxsRGlzcGF0Y2hG
dWxsU2NyZWVuQ2hhbmdlRXZlbnQoKTsKICAgICAgICAgbm9kZS0+ZGlzcGF0Y2hFdmVudChFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZSwgdHJ1ZSwgZmFsc2UpKTsKICAgICB9CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTU2NzUxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNTMsNyArMTI1Myw3IEBAIHByaXZhdGU6CiAg
ICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gZW5zdXJlQ2FjaGVkQ29sbGVjdGlvbihDb2xs
ZWN0aW9uVHlwZSk7CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgdm9pZCBkaXNw
YXRjaEZ1bGxTY3JlZW5DaGFuZ2VPckVycm9yRXZlbnQoRGVxdWU8UmVmUHRyPE5vZGU+PiYsIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lKTsKKyAgICB2b2lkIGRpc3BhdGNoRnVsbFNjcmVl
bkNoYW5nZU9yRXJyb3JFdmVudChEZXF1ZTxSZWZQdHI8Tm9kZT4+JiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudE5hbWUsIGJvb2wgc2hvdWxkTm90aWZ5TWVkaWFFbGVtZW50KTsKICAgICB2b2lk
IGNsZWFyRnVsbHNjcmVlbkVsZW1lbnRTdGFjaygpOwogICAgIHZvaWQgcG9wRnVsbHNjcmVlbkVs
ZW1lbnRTdGFjaygpOwogICAgIHZvaWQgcHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soRWxlbWVu
dCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAJKHJldmlzaW9u
IDE1Njc1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaE1lZGlh
dG9yLmgiCiAjaW5jbHVkZSAiRXZlbnRSZXRhcmdldGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oIgpAQCAtMTExLDEyICsxMTIsMTYgQEAgYm9vbCBFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoKCkKICAgICBXaW5kb3dFdmVudENvbnRleHQgd2luZG93RXZlbnRDb250
ZXh0KG1fZXZlbnQuZ2V0KCksIG1fbm9kZS5nZXQoKSwgdG9wRXZlbnRDb250ZXh0KCkpOwogICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KCZtX25vZGUtPmRvY3VtZW50KCksICptX2V2ZW50
LCB3aW5kb3dFdmVudENvbnRleHQud2luZG93KCksIG1fbm9kZS5nZXQoKSwgbV9ldmVudFBhdGgp
OwogCi0gICAgdm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQ7Ci0gICAgaWYgKGRp
c3BhdGNoRXZlbnRQcmVQcm9jZXNzKHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KSA9PSBD
b250aW51ZURpc3BhdGNoaW5nKQotICAgICAgICBpZiAoZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5n
KHdpbmRvd0V2ZW50Q29udGV4dCkgPT0gQ29udGludWVEaXNwYXRjaGluZykKKyAgICBib29sIHNo
b3VsZENhbGxEaWREaXNwYXRjaENsaWNrRXZlbnQgPSBmYWxzZTsKKyAgICBDbGlja0hhbmRsaW5n
U3RhdGUgaW5wdXRFbGVtZW50Q2xpY2tIYW5kbGluZ1N0YXRlOworICAgIGlmIChjYWxsV2lsbERp
c3BhdGNoRXZlbnRPbklucHV0RWxlbWVudChpbnB1dEVsZW1lbnRDbGlja0hhbmRsaW5nU3RhdGUs
IHNob3VsZENhbGxEaWREaXNwYXRjaENsaWNrRXZlbnQpID09IENvbnRpbnVlRGlzcGF0Y2hpbmcg
JiYgIW1fZXZlbnRQYXRoLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoZGlzcGF0Y2hFdmVudEF0
Q2FwdHVyaW5nKHdpbmRvd0V2ZW50Q29udGV4dCkgPT0gQ29udGludWVEaXNwYXRjaGluZykgewog
ICAgICAgICAgICAgaWYgKGRpc3BhdGNoRXZlbnRBdFRhcmdldCgpID09IENvbnRpbnVlRGlzcGF0
Y2hpbmcpCiAgICAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudEF0QnViYmxpbmcod2luZG93RXZl
bnRDb250ZXh0KTsKLSAgICBkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MocHJlRGlzcGF0Y2hFdmVu
dEhhbmRsZXJSZXN1bHQpOworICAgICAgICB9CisgICAgfQorCisgICAgZGlzcGF0Y2hFdmVudFBv
c3RQcm9jZXNzKHNob3VsZENhbGxEaWREaXNwYXRjaENsaWNrRXZlbnQgPyAmaW5wdXRFbGVtZW50
Q2xpY2tIYW5kbGluZ1N0YXRlIDogMCk7CiAKICAgICAvLyBFbnN1cmUgdGhhdCBhZnRlciBldmVu
dCBkaXNwYXRjaCwgdGhlIGV2ZW50J3MgdGFyZ2V0IG9iamVjdCBpcyB0aGUKICAgICAvLyBvdXRl
cm1vc3Qgc2hhZG93IERPTSBib3VuZGFyeS4KQEAgLTEyNywxMSArMTMyLDE0IEBAIGJvb2wgRXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaCgpCiAgICAgcmV0dXJuICFtX2V2ZW50LT5kZWZhdWx0UHJl
dmVudGVkKCk7CiB9CiAKLWlubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudFByZVByb2Nlc3Modm9pZComIHByZURpc3BhdGNoRXZlbnRI
YW5kbGVyUmVzdWx0KQoraW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNw
YXRjaGVyOjpjYWxsV2lsbERpc3BhdGNoRXZlbnRPbklucHV0RWxlbWVudChDbGlja0hhbmRsaW5n
U3RhdGUmIHN0YXRlLCBib29sJiBzaG91bGRDYWxsRGlkRGlzcGF0Y2hDbGlja0V2ZW50KQogewot
ICAgIC8vIEdpdmUgdGhlIHRhcmdldCBub2RlIGEgY2hhbmNlIHRvIGRvIHNvbWUgd29yayBiZWZv
cmUgRE9NIGV2ZW50IGhhbmRsZXJzIGdldCBhIGNyYWNrLgotICAgIHByZURpc3BhdGNoRXZlbnRI
YW5kbGVyUmVzdWx0ID0gbV9ub2RlLT5wcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihtX2V2ZW50Lmdl
dCgpKTsKLSAgICByZXR1cm4gKG1fZXZlbnRQYXRoLmlzRW1wdHkoKSB8fCBtX2V2ZW50LT5wcm9w
YWdhdGlvblN0b3BwZWQoKSkgPyBEb25lRGlzcGF0Y2hpbmcgOiBDb250aW51ZURpc3BhdGNoaW5n
OworICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQobV9ub2RlLmdldCgpKSkgeworICAgICAgICBz
aG91bGRDYWxsRGlkRGlzcGF0Y2hDbGlja0V2ZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KG1fbm9k
ZS5nZXQoKSktPndpbGxEaXNwYXRjaEV2ZW50KG1fZXZlbnQuZ2V0KCksIHN0YXRlKTsKKyAgICAg
ICAgaWYgKG1fZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJu
IERvbmVEaXNwYXRjaGluZzsKKyAgICB9CisgICAgcmV0dXJuIENvbnRpbnVlRGlzcGF0Y2hpbmc7
CiB9CiAKIGlubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKFdpbmRvd0V2ZW50Q29udGV4dCYgd2luZG93RXZlbnRD
b250ZXh0KQpAQCAtMTgzLDE0ICsxOTEsMTQgQEAgaW5saW5lIHZvaWQgRXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaEV2ZQogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpk
aXNwYXRjaEV2ZW50UG9zdFByb2Nlc3Modm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1
bHQpCitpbmxpbmUgdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnRQb3N0UHJvY2Vz
cyhjb25zdCBDbGlja0hhbmRsaW5nU3RhdGUqIGlucHV0RWxtZW5ldENsaWNrSGFuZGxpbmdTdGF0
ZSkKIHsKICAgICBtX2V2ZW50LT5zZXRUYXJnZXQoRXZlbnRSZXRhcmdldGVyOjpldmVudFRhcmdl
dFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsKICAgICBtX2V2ZW50LT5zZXRD
dXJyZW50VGFyZ2V0KDApOwogICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoMCk7CiAKLSAgICAv
LyBQYXNzIHRoZSBkYXRhIGZyb20gdGhlIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyIHRvIHRoZSBw
b3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIuCi0gICAgbV9ub2RlLT5wb3N0RGlzcGF0Y2hFdmVudEhh
bmRsZXIobV9ldmVudC5nZXQoKSwgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOworICAg
IGlmIChpbnB1dEVsbWVuZXRDbGlja0hhbmRsaW5nU3RhdGUpCisgICAgICAgIHRvSFRNTElucHV0
RWxlbWVudChtX25vZGUuZ2V0KCkpLT5kaWREaXNwYXRjaENsaWNrRXZlbnQobV9ldmVudC5nZXQo
KSwgKmlucHV0RWxtZW5ldENsaWNrSGFuZGxpbmdTdGF0ZSk7CiAKICAgICAvLyBDYWxsIGRlZmF1
bHQgZXZlbnQgaGFuZGxlcnMuIFdoaWxlIHRoZSBET00gZG9lcyBoYXZlIGEgY29uY2VwdCBvZiBw
cmV2ZW50aW5nCiAgICAgLy8gZGVmYXVsdCBoYW5kbGluZywgdGhlIGRldGFpbCBvZiB3aGljaCBo
YW5kbGVycyBhcmUgY2FsbGVkIGlzIGFuIGludGVybmFsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnREaXNwYXRjaGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50RGlzcGF0Y2hlci5oCShyZXZpc2lvbiAxNTY3NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnREaXNwYXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgY2xhc3Mg
UGxhdGZvcm1Nb3VzZUV2ZW50OwogY2xhc3MgU2hhZG93Um9vdDsKIGNsYXNzIFRyZWVTY29wZTsK
IGNsYXNzIFdpbmRvd0V2ZW50Q29udGV4dDsKK3N0cnVjdCBDbGlja0hhbmRsaW5nU3RhdGU7CiAK
IGVudW0gRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiB7CiAgICAgQ29udGludWVEaXNwYXRjaGlu
ZywKQEAgLTY3LDExICs2OCwxMSBAQCBwcml2YXRlOgogICAgIEV2ZW50RGlzcGF0Y2hlcihOb2Rl
KiwgUGFzc1JlZlB0cjxFdmVudD4pOwogICAgIGNvbnN0IEV2ZW50Q29udGV4dCogdG9wRXZlbnRD
b250ZXh0KCk7CiAKLSAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3BhdGNoRXZlbnRQ
cmVQcm9jZXNzKHZvaWQqJiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7CisgICAgRXZl
bnREaXNwYXRjaENvbnRpbnVhdGlvbiBjYWxsV2lsbERpc3BhdGNoRXZlbnRPbklucHV0RWxlbWVu
dChDbGlja0hhbmRsaW5nU3RhdGUmLCBib29sJiBzaG91bGRDYWxsRGlkRGlzcGF0Y2hDbGlja0V2
ZW50KTsKICAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIGRpc3BhdGNoRXZlbnRBdENhcHR1
cmluZyhXaW5kb3dFdmVudENvbnRleHQmKTsKICAgICBFdmVudERpc3BhdGNoQ29udGludWF0aW9u
IGRpc3BhdGNoRXZlbnRBdFRhcmdldCgpOwogICAgIHZvaWQgZGlzcGF0Y2hFdmVudEF0QnViYmxp
bmcoV2luZG93RXZlbnRDb250ZXh0Jik7Ci0gICAgdm9pZCBkaXNwYXRjaEV2ZW50UG9zdFByb2Nl
c3Modm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOworICAgIHZvaWQgZGlzcGF0
Y2hFdmVudFBvc3RQcm9jZXNzKGNvbnN0IENsaWNrSGFuZGxpbmdTdGF0ZSopOwogCiAgICAgRXZl
bnRQYXRoIG1fZXZlbnRQYXRoOwogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0NoZWNrYm94SW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0NoZWNrYm94SW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTU2NzUxKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9DaGVja2JveElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDIyICs2OCwxOCBAQCB2b2lkIENoZWNrYm94SW5wdXRUeXBlOjpoYW5kbGVLZXl1
cEV2ZW50CiAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGlja0lmQWN0aXZlKGV2ZW50KTsKIH0KIAot
T3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gQ2hlY2tib3hJbnB1dFR5cGU6OndpbGxEaXNwYXRj
aENsaWNrKCkKK3ZvaWQgQ2hlY2tib3hJbnB1dFR5cGU6OndpbGxEaXNwYXRjaENsaWNrKENsaWNr
SGFuZGxpbmdTdGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8gQW4gZXZlbnQgaGFuZGxlciBjYW4gdXNl
IHByZXZlbnREZWZhdWx0IG9yICJyZXR1cm4gZmFsc2UiIHRvIHJldmVyc2UgdGhlIGNoZWNraW5n
IHdlIGRvIGhlcmUuCiAgICAgLy8gVGhlIENsaWNrSGFuZGxpbmdTdGF0ZSBvYmplY3QgY29udGFp
bnMgd2hhdCB3ZSBuZWVkIHRvIHVuZG8gd2hhdCB3ZSBkaWQgaGVyZSBpbiBkaWREaXNwYXRjaENs
aWNrLgogCi0gICAgT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gc3RhdGUgPSBhZG9wdFB0cihu
ZXcgQ2xpY2tIYW5kbGluZ1N0YXRlKTsKKyAgICBzdGF0ZS5jaGVja2VkID0gZWxlbWVudCgpLmNo
ZWNrZWQoKTsKKyAgICBzdGF0ZS5pbmRldGVybWluYXRlID0gZWxlbWVudCgpLmluZGV0ZXJtaW5h
dGUoKTsKIAotICAgIHN0YXRlLT5jaGVja2VkID0gZWxlbWVudCgpLmNoZWNrZWQoKTsKLSAgICBz
dGF0ZS0+aW5kZXRlcm1pbmF0ZSA9IGVsZW1lbnQoKS5pbmRldGVybWluYXRlKCk7Ci0KLSAgICBp
ZiAoc3RhdGUtPmluZGV0ZXJtaW5hdGUpCisgICAgaWYgKHN0YXRlLmluZGV0ZXJtaW5hdGUpCiAg
ICAgICAgIGVsZW1lbnQoKS5zZXRJbmRldGVybWluYXRlKGZhbHNlKTsKIAotICAgIGVsZW1lbnQo
KS5zZXRDaGVja2VkKCFzdGF0ZS0+Y2hlY2tlZCwgRGlzcGF0Y2hDaGFuZ2VFdmVudCk7Ci0KLSAg
ICByZXR1cm4gc3RhdGUucmVsZWFzZSgpOworICAgIGVsZW1lbnQoKS5zZXRDaGVja2VkKCFzdGF0
ZS5jaGVja2VkLCBEaXNwYXRjaENoYW5nZUV2ZW50KTsKIH0KIAogdm9pZCBDaGVja2JveElucHV0
VHlwZTo6ZGlkRGlzcGF0Y2hDbGljayhFdmVudCogZXZlbnQsIGNvbnN0IENsaWNrSGFuZGxpbmdT
dGF0ZSYgc3RhdGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0NoZWNrYm94SW5wdXRUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9DaGVja2JveElucHV0VHlwZS5o
CShyZXZpc2lvbiAxNTY3NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0NoZWNrYm94SW5wdXRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIGJvb2wgdmFsdWVNaXNzaW5nKGNvbnN0IFN0cmluZyYpIGNvbnN0IE9WRVJSSURFOwogICAg
IHZpcnR1YWwgU3RyaW5nIHZhbHVlTWlzc2luZ1RleHQoKSBjb25zdCBPVkVSUklERTsKICAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlS2V5dXBFdmVudChLZXlib2FyZEV2ZW50KikgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBPd25QdHI8Q2xpY2tIYW5kbGluZ1N0YXRlPiB3aWxsRGlzcGF0Y2hDbGljaygp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB3aWxsRGlzcGF0Y2hDbGljayhDbGlja0hhbmRs
aW5nU3RhdGUmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRGlzcGF0Y2hDbGljayhF
dmVudCosIGNvbnN0IENsaWNrSGFuZGxpbmdTdGF0ZSYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
Ym9vbCBpc0NoZWNrYm94KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzSW5kZXRlcm1pbmF0ZUFwcGVhcmFuY2UoKSBjb25zdCBPVkVSUklERTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTU2NzUxKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTExMCwyNiArMTExMCwyMCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJv
bVJlbmRlCiAgICAgc2V0QXV0b2ZpbGxlZChmYWxzZSk7CiB9CiAKLXZvaWQqIEhUTUxJbnB1dEVs
ZW1lbnQ6OnByZURpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKK2Jvb2wgSFRNTElu
cHV0RWxlbWVudDo6d2lsbERpc3BhdGNoRXZlbnQoRXZlbnQqIGV2ZW50LCBDbGlja0hhbmRsaW5n
U3RhdGUmIHN0YXRlKQogewotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50
ZXh0SW5wdXRFdmVudCAmJiBtX2lucHV0VHlwZS0+c2hvdWxkU3VibWl0SW1wbGljaXRseShldmVu
dCkpIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZl
bnQgJiYgbV9pbnB1dFR5cGUtPnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoZXZlbnQpKQogICAgICAg
ICBldmVudC0+c3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgIHJldHVybiAwOworICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIGV2ZW50LT5pc01vdXNl
RXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBM
ZWZ0QnV0dG9uKSB7CisgICAgICAgIG1faW5wdXRUeXBlLT53aWxsRGlzcGF0Y2hDbGljayhzdGF0
ZSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSAh
PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFl
dmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+
YnV0dG9uKCkgIT0gTGVmdEJ1dHRvbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgLy8gRklYTUU6
IENoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBjYXNlcyB3aGVyZSB0aGlzIGFjdHVhbGx5IGVu
ZHMgdXAgbGVha2luZy4KLSAgICByZXR1cm4gbV9pbnB1dFR5cGUtPndpbGxEaXNwYXRjaENsaWNr
KCkubGVha1B0cigpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBIVE1MSW5wdXRFbGVt
ZW50Ojpwb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50LCB2b2lkKiBkYXRhRnJv
bVByZURpc3BhdGNoKQordm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaWREaXNwYXRjaENsaWNrRXZl
bnQoRXZlbnQqIGV2ZW50LCBjb25zdCBDbGlja0hhbmRsaW5nU3RhdGUmIHN0YXRlKQogewotICAg
IE93blB0cjxDbGlja0hhbmRsaW5nU3RhdGU+IHN0YXRlID0gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8
Q2xpY2tIYW5kbGluZ1N0YXRlKj4oZGF0YUZyb21QcmVEaXNwYXRjaCkpOwotICAgIGlmICghc3Rh
dGUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2lucHV0VHlwZS0+ZGlkRGlzcGF0Y2hDbGljayhl
dmVudCwgKnN0YXRlKTsKKyAgICBtX2lucHV0VHlwZS0+ZGlkRGlzcGF0Y2hDbGljayhldmVudCwg
c3RhdGUpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIo
RXZlbnQqIGV2dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCShy
ZXZpc2lvbiAxNTY3NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDYgKzIwMSw5IEBAIHB1YmxpYzoKIAogICAgIFN0cmlu
ZyBhbHRUZXh0KCkgY29uc3Q7CiAKKyAgICBib29sIHdpbGxEaXNwYXRjaEV2ZW50KEV2ZW50Kiwg
Q2xpY2tIYW5kbGluZ1N0YXRlJik7CisgICAgdm9pZCBkaWREaXNwYXRjaENsaWNrRXZlbnQoRXZl
bnQqLCBjb25zdCBDbGlja0hhbmRsaW5nU3RhdGUmKTsKKwogICAgIGludCBtYXhSZXN1bHRzKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXhSZXN1bHRzOyB9CiAKICAgICBTdHJpbmcgZGVmYXVsdFZhbHVl
KCkgY29uc3Q7CkBAIC0zNTYsOSArMzU5LDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9p
ZCByZXNldCgpOwogCi0gICAgdmlydHVhbCB2b2lkKiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihF
dmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQq
LCB2b2lkKiBkYXRhRnJvbVByZURpc3BhdGNoKTsKLQogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0
dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJv
b2wgaXNJblJhbmdlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzT3V0T2ZSYW5nZSgpIGNv
bnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNTY3NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00ODI0LDE0ICs0ODI0LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjptYXJrQ2FwdGlvbkFuZFN1YgogCiAjZW5kaWYKIAotdm9pZCogSFRNTE1lZGlhRWxlbWVu
dDo6cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQotewotICAgIGlmIChldmVu
dCAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53ZWJraXRmdWxsc2NyZWVuY2hhbmdl
RXZlbnQpCi0gICAgICAgIGNvbmZpZ3VyZU1lZGlhQ29udHJvbHMoKTsKLQotICAgIHJldHVybiAw
OwotfQotCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlhUGxheWVyKCkKIHsKICNp
ZiBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmgJKHJldmlzaW9uIDE1Njc1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODIsNiArMzgyLDggQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSBPVkVSUklERTsK
IAogICAgIHZpcnR1YWwgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50cygpIE9WRVJS
SURFOworICAgIAorICAgIHZvaWQgd2lsbERpc3BhdGNoRnVsbFNjcmVlbkNoYW5nZUV2ZW50KCkg
eyBjb25maWd1cmVNZWRpYUNvbnRyb2xzKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIEhUTUxNZWRp
YUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50JiwgYm9vbCk7CkBAIC02MDcs
OCArNjA5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHByZXBhcmVNZWRpYUZyYWdtZW50VVJJKCk7
CiAgICAgdm9pZCBhcHBseU1lZGlhRnJhZ21lbnRVUkkoKTsKIAotICAgIHZpcnR1YWwgdm9pZCog
cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqKTsKLQogICAgIHZvaWQgY2hhbmdlTmV0d29y
a1N0YXRlRnJvbUxvYWRpbmdUb0lkbGUoKTsKIAogICAgIHZvaWQgcmVtb3ZlQmVoYXZpb3JzUmVz
dHJpY3Rpb25zQWZ0ZXJGaXJzdFVzZXJHZXN0dXJlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oCShyZXZpc2lvbiAxNTY3NTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDE0IEBAIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIGVu
dW0gVGV4dEZpZWxkU2VsZWN0aW9uRGlyZWN0aW9uIHsgU2VsZWN0aW9uSGFzTm9EaXJlY3Rpb24s
IFNlbGVjdGlvbkhhc0ZvcndhcmREaXJlY3Rpb24sIFNlbGVjdGlvbkhhc0JhY2t3YXJkRGlyZWN0
aW9uIH07CiBlbnVtIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgeyBEaXNwYXRjaE5vRXZlbnQsIERp
c3BhdGNoQ2hhbmdlRXZlbnQsIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCB9OwogCitzdHJ1
Y3QgQ2xpY2tIYW5kbGluZ1N0YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBib29sIGNoZWNrZWQ7CisgICAgYm9vbCBpbmRldGVybWluYXRlOworICAgIFJl
ZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBjaGVja2VkUmFkaW9CdXR0b247Cit9OworCiBjbGFzcyBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
V2l0aFN0YXRlIHsKIHB1YmxpYzoKICAgICAvLyBDb21tb24gZmxhZyBmb3IgSFRNTElucHV0RWxl
bWVudDo6dG9vTG9uZygpIGFuZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojp0b29Mb25nKCkuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAxNTY3NTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw5ICs2ODIs
OCBAQCBib29sIElucHV0VHlwZTo6Y2FuU2V0VmFsdWUoY29uc3QgU3RyaW5nCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLU93blB0cjxDbGlja0hhbmRsaW5nU3RhdGU+IElucHV0VHlwZTo6d2lsbERp
c3BhdGNoQ2xpY2soKQordm9pZCBJbnB1dFR5cGU6OndpbGxEaXNwYXRjaENsaWNrKENsaWNrSGFu
ZGxpbmdTdGF0ZSYpCiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHZvaWQgSW5wdXRUeXBl
OjpkaWREaXNwYXRjaENsaWNrKEV2ZW50KiwgY29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAkocmV2aXNpb24gMTU2NzUxKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9JbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTUgKzY0LDYgQEAg
Y2xhc3MgVG91Y2hFdmVudDsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotc3RydWN0
IENsaWNrSGFuZGxpbmdTdGF0ZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gIAot
cHVibGljOgotICAgIGJvb2wgY2hlY2tlZDsKLSAgICBib29sIGluZGV0ZXJtaW5hdGU7Ci0gICAg
UmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGNoZWNrZWRSYWRpb0J1dHRvbjsKLX07Ci0KIC8vIEFu
IElucHV0VHlwZSBvYmplY3QgcmVwcmVzZW50cyB0aGUgdHlwZS1zcGVjaWZpYyBwYXJ0IG9mIGFu
IEhUTUxJbnB1dEVsZW1lbnQuCiAvLyBEbyBub3QgZXhwb3NlIGluc3RhbmNlcyBvZiBJbnB1dFR5
cGUgYW5kIGNsYXNzZXMgZGVyaXZlZCBmcm9tIGl0IHRvIGNsYXNzZXMKIC8vIG90aGVyIHRoYW4g
SFRNTElucHV0RWxlbWVudC4KQEAgLTE4NSw3ICsxNzYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlQ2xpY2tFdmVudChNb3VzZUV2ZW50Kik7CiAgICAgdmlydHVhbCB2b2lk
IGhhbmRsZU1vdXNlRG93bkV2ZW50KE1vdXNlRXZlbnQqKTsKLSAgICB2aXJ0dWFsIE93blB0cjxD
bGlja0hhbmRsaW5nU3RhdGU+IHdpbGxEaXNwYXRjaENsaWNrKCk7CisgICAgdmlydHVhbCB2b2lk
IHdpbGxEaXNwYXRjaENsaWNrKENsaWNrSGFuZGxpbmdTdGF0ZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWREaXNwYXRjaENsaWNrKEV2ZW50KiwgY29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJik7CiAg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQqKTsKICAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAxNTY3NTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1
LDcgKzE0NSw3IEBAIGJvb2wgUmFkaW9JbnB1dFR5cGU6OnNob3VsZFNlbmRDaGFuZ2VFdmUKICAg
ICByZXR1cm4gZWxlbWVudCgpLmNoZWNrZWQoKTsKIH0KIAotT3duUHRyPENsaWNrSGFuZGxpbmdT
dGF0ZT4gUmFkaW9JbnB1dFR5cGU6OndpbGxEaXNwYXRjaENsaWNrKCkKK3ZvaWQgUmFkaW9JbnB1
dFR5cGU6OndpbGxEaXNwYXRjaENsaWNrKENsaWNrSGFuZGxpbmdTdGF0ZSYgc3RhdGUpCiB7CiAg
ICAgLy8gQW4gZXZlbnQgaGFuZGxlciBjYW4gdXNlIHByZXZlbnREZWZhdWx0IG9yICJyZXR1cm4g
ZmFsc2UiIHRvIHJldmVyc2UgdGhlIHNlbGVjdGlvbiB3ZSBkbyBoZXJlLgogICAgIC8vIFRoZSBD
bGlja0hhbmRsaW5nU3RhdGUgb2JqZWN0IGNvbnRhaW5zIHdoYXQgd2UgbmVlZCB0byB1bmRvIHdo
YXQgd2UgZGlkIGhlcmUgaW4gZGlkRGlzcGF0Y2hDbGljay4KQEAgLTE1NCwyMSArMTU0LDE3IEBA
IE93blB0cjxDbGlja0hhbmRsaW5nU3RhdGU+IFJhZGlvSW5wdXRUeXAKICAgICAvLyBUaGVyZWZv
cmUgaWYgbm90aGluZyBpcyBjdXJyZW50bHkgc2VsZWN0ZWQsIHdlIHdvbid0IGFsbG93IHRoZSB1
cGNvbWluZyBhY3Rpb24gdG8gYmUgInVuZG9uZSIsIHNpbmNlCiAgICAgLy8gd2Ugd2FudCBzb21l
IG9iamVjdCBpbiB0aGUgcmFkaW8gZ3JvdXAgdG8gYWN0dWFsbHkgZ2V0IHNlbGVjdGVkLgogCi0g
ICAgT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gc3RhdGUgPSBhZG9wdFB0cihuZXcgQ2xpY2tI
YW5kbGluZ1N0YXRlKTsKLQotICAgIHN0YXRlLT5jaGVja2VkID0gZWxlbWVudCgpLmNoZWNrZWQo
KTsKLSAgICBzdGF0ZS0+Y2hlY2tlZFJhZGlvQnV0dG9uID0gZWxlbWVudCgpLmNoZWNrZWRSYWRp
b0J1dHRvbkZvckdyb3VwKCk7CisgICAgc3RhdGUuY2hlY2tlZCA9IGVsZW1lbnQoKS5jaGVja2Vk
KCk7CisgICAgc3RhdGUuY2hlY2tlZFJhZGlvQnV0dG9uID0gZWxlbWVudCgpLmNoZWNrZWRSYWRp
b0J1dHRvbkZvckdyb3VwKCk7CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgc3RhdGUtPmluZGV0
ZXJtaW5hdGUgPSBlbGVtZW50KCkuaW5kZXRlcm1pbmF0ZSgpOworICAgIHN0YXRlLmluZGV0ZXJt
aW5hdGUgPSBlbGVtZW50KCkuaW5kZXRlcm1pbmF0ZSgpOwogCiAgICAgaWYgKGVsZW1lbnQoKS5p
bmRldGVybWluYXRlKCkpCiAgICAgICAgIGVsZW1lbnQoKS5zZXRJbmRldGVybWluYXRlKGZhbHNl
KTsKICNlbmRpZgogCiAgICAgZWxlbWVudCgpLnNldENoZWNrZWQodHJ1ZSwgRGlzcGF0Y2hDaGFu
Z2VFdmVudCk7Ci0KLSAgICByZXR1cm4gc3RhdGUucmVsZWFzZSgpOwogfQogCiB2b2lkIFJhZGlv
SW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNrKEV2ZW50KiBldmVudCwgY29uc3QgQ2xpY2tIYW5k
bGluZ1N0YXRlJiBzdGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmgJ
KHJldmlzaW9uIDE1Njc1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVLZXl1cEV2ZW50KEtleWJvYXJkRXZlbnQqKSBPVkVSUklERTsKICAgICB2aXJ0
dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFNlbmRDaGFuZ2VFdmVudEFmdGVyQ2hlY2tlZENo
YW5nZWQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIE93blB0cjxDbGlja0hhbmRsaW5nU3RhdGU+
IHdpbGxEaXNwYXRjaENsaWNrKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxEaXNw
YXRjaENsaWNrKENsaWNrSGFuZGxpbmdTdGF0ZSYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWREaXNwYXRjaENsaWNrKEV2ZW50KiwgY29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJikgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzUmFkaW9CdXR0b24oKSBjb25zdCBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbmRldGVybWluYXRlQXBwZWFyYW5jZSgpIGNvbnN0
IE9WRVJSSURFOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213149</attachid>
            <date>2013-10-01 21:01:16 -0700</date>
            <delta_ts>2013-10-02 22:49:16 -0700</delta_ts>
            <desc>More cleanups</desc>
            <filename>bug-122144-20131001210116.patch</filename>
            <type>text/plain</type>
            <size>23302</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Njc1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDEzLTEwLTAxICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEdldCByaWQgb2YgTm9kZTo6cHJl
RGlzcGF0Y2hFdmVudEhhbmRsZXIgYW5kIE5vZGU6OnBvc3REaXNwYXRjaEV2ZW50SGFuZGxlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMTQ0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR2V0IHJpZCBv
ZiBwcmUvcG9zdCBldmVudCBkaXNwYXRjaCBjYWxsYmFja3MgcHJlRGlzcGF0Y2hFdmVudEhhbmRs
ZXIgYW5kIHBvc3REaXNwYXRjaEV2ZW50SGFuZGxlciBzaW5jZQorICAgICAgICB0aGUgZm9ybWVy
IHdhcyBvbmx5IGNhbGxlZCBieSBIVE1MTWVkaWFFbGVtZW50IGFuZCBIVE1MSW5wdXRFbGVtZW50
IGFuZCB0aGUgbGF0dGVyIHdhcyBvbmx5IGNhbGxlZCBieQorICAgICAgICBIVE1MSW5wdXRFbGVt
ZW50LgorCisgICAgICAgIEV4cGxpY2l0bHkgY2FsbCBIVE1MTWVkaWFFbGVtZW50J3Mgd2lsbERp
c3BhdGNoRnVsbFNjcmVlbkNoYW5nZUV2ZW50IGluIGZ1bGxTY3JlZW5DaGFuZ2VEZWxheVRpbWVy
RmlyZWQKKyAgICAgICAgb2YgRG9jdW1lbnQgc2luY2UgdGhpcyBpcyB0aGUgb25seSBwbGFjZSB0
aGF0IGZpcmVzIHRoZSBmdWxsc2NyZWVuY2hhbmdlIGV2ZW50LgorCisgICAgICAgIEFsc28gYWRk
IGFuIGV4cGxpY2l0IGNhbGwgdG8gd2lsbERpc3BhdGNoRXZlbnQgYW5kIGRpZERpc3BhdGNoQ2xp
Y2tFdmVudCBpbiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoLgorICAgICAgICBUaGlzIGFsc28g
YWxsb3dzIHVzIHRvIHN0YWNrLWFsbG9jYXRlIElucHV0RWxlbWVudENsaWNrSGFuZGxpbmdTdGF0
ZSBpbnN0ZWFkIG9mIGhhdmluZyB3aWxsRGlzcGF0Y2hFdmVudAorICAgICAgICBoZWFwLWFsbG9j
YXRlIGl0IGFuZCBwYXNzIGl0IGFyb3VuZCBhcyB2b2lkKi4KKworICAgICAgICAqIFdlYkNvcmUu
b3JkZXI6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpmdWxsU2NyZWVuQ2hhbmdlRGVsYXlUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpkaXNwYXRjaEZ1bGxTY3JlZW5DaGFuZ2VPckVycm9yRXZlbnQpOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGRvbS9FdmVudENvbnRleHQuY3BwOgor
ICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNo
ZXI6OmNhbGxXaWxsRGlzcGF0Y2hFdmVudE9uSW5wdXRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKToKKyAgICAgICAg
KiBkb20vRXZlbnREaXNwYXRjaGVyLmg6CisgICAgICAgICogaHRtbC9DaGVja2JveElucHV0VHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2JveElucHV0VHlwZTo6d2lsbERpc3BhdGNo
Q2xpY2spOgorICAgICAgICAqIGh0bWwvQ2hlY2tib3hJbnB1dFR5cGUuaDoKKyAgICAgICAgKiBo
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6d2lsbERpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6ZGlkRGlzcGF0Y2hDbGlja0V2ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAq
IGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6d2lsbERpc3BhdGNoRnVsbFNjcmVlbkNoYW5nZUV2ZW50KTogUmVuYW1lZCBmcm9tIHBy
ZURpc3BhdGNoRXZlbnRIYW5kbGVyLgorICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnB1dFR5cGU6OndpbGxEaXNwYXRjaENsaWNrKToKKyAgICAgICAgKiBodG1sL0lucHV0
VHlwZS5oOgorICAgICAgICAqIGh0bWwvUmFkaW9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmFkaW9JbnB1dFR5cGU6OndpbGxEaXNwYXRjaENsaWNrKToKKyAgICAgICAgKiBodG1s
L1JhZGlvSW5wdXRUeXBlLmg6CisKIDIwMTMtMTAtMDEgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBDb252ZXJ0IFBhZ2VHcm91cCB0byB1c2luZyBzdGQ6OnVuaXF1ZV9w
dHIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgkocmV2aXNpb24gMTU2NzUxKQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5vcmRlcgkod29ya2luZyBjb3B5KQpAQCAtMTMyMyw3ICsxMzIzLDYgQEAg
X19aTjdXZWJDb3JlNUV2ZW50OXNldFRhcmdldEVOM1dURjEwUGFzcwogX19aTjdXZWJDb3JlNUV2
ZW50MTRyZWNlaXZlZFRhcmdldEV2CiBfX1pON1dlYkNvcmUxOFdpbmRvd0V2ZW50Q29udGV4dEMx
RVBOU181RXZlbnRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVQS05TXzEyRXZlbnRDb250
ZXh0RQogX19aTjdXZWJDb3JlMThXaW5kb3dFdmVudENvbnRleHRDMkVQTlNfNUV2ZW50RU4zV1RG
MTBQYXNzUmVmUHRySU5TXzROb2RlRUVFUEtOU18xMkV2ZW50Q29udGV4dEUKLV9fWk43V2ViQ29y
ZTROb2RlMjNwcmVEaXNwYXRjaEV2ZW50SGFuZGxlckVQTlNfNUV2ZW50RQogX19aTjdXZWJDb3Jl
MThXaW5kb3dFdmVudENvbnRleHQxN2hhbmRsZUxvY2FsRXZlbnRzRVBOU181RXZlbnRFCiBfX1pO
N1dlYkNvcmU0Tm9kZTE2ZGVyZWZFdmVudFRhcmdldEV2CiBfX1pON1dlYkNvcmUxMUV2ZW50VGFy
Z2V0MThmaXJlRXZlbnRMaXN0ZW5lcnNFUE5TXzVFdmVudEUKQEAgLTk4OTksOCArOTg5OCw2IEBA
IF9fWk43V2ViQ29yZTQwanNEb2N1bWVudFByb3RvdHlwZUZ1bmN0aW8KIF9fWk43V2ViQ29yZTVU
aW1lcklOU18xN0dlbmVyaWNFdmVudFF1ZXVlRUU1ZmlyZWRFdgogX19aTjdXZWJDb3JlMTdHZW5l
cmljRXZlbnRRdWV1ZTEwdGltZXJGaXJlZEVQTlNfNVRpbWVySVMwX0VFCiBfX1pON1dlYkNvcmUx
NkhUTUxNZWRpYUVsZW1lbnQxM2Rpc3BhdGNoRXZlbnRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNUV2
ZW50RUVFCi1fX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQyM3ByZURpc3BhdGNoRXZlbnRI
YW5kbGVyRVBOU181RXZlbnRFCi1fX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQxOWRlZmF1
bHRFdmVudEhhbmRsZXJFUE5TXzVFdmVudEUKIF9fWk43V2ViQ29yZTE2cGFyc2VIVE1MSW50ZWdl
ckVSS04zV1RGNlN0cmluZ0VSaQogX19aTjdXZWJDb3JlN0VsZW1lbnQyMXNldFRhYkluZGV4RXhw
bGljaXRseUVzCiBfX1pON1dlYkNvcmUxOFRleHRGaWVsZElucHV0VHlwZTI0cmVhZG9ubHlBdHRy
aWJ1dGVDaGFuZ2VkRXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTU2
NzUxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODUsNiArODUsNyBAQAogI2luY2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxJRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lQ29sbGVjdGlvbi5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIK
QEAgLTUzODcsMTEgKzUzODgsMTEgQEAgdm9pZCBEb2N1bWVudDo6ZnVsbFNjcmVlbkNoYW5nZURl
bGF5VGltZQogICAgIG1fZnVsbFNjcmVlbkNoYW5nZUV2ZW50VGFyZ2V0UXVldWUuc3dhcChjaGFu
Z2VRdWV1ZSk7CiAgICAgRGVxdWU8UmVmUHRyPE5vZGU+ID4gZXJyb3JRdWV1ZTsKICAgICBtX2Z1
bGxTY3JlZW5FcnJvckV2ZW50VGFyZ2V0UXVldWUuc3dhcChlcnJvclF1ZXVlKTsKLSAgICBkaXNw
YXRjaEZ1bGxTY3JlZW5DaGFuZ2VPckVycm9yRXZlbnQoY2hhbmdlUXVldWUsIGV2ZW50TmFtZXMo
KS53ZWJraXRmdWxsc2NyZWVuY2hhbmdlRXZlbnQpOwotICAgIGRpc3BhdGNoRnVsbFNjcmVlbkNo
YW5nZU9yRXJyb3JFdmVudChlcnJvclF1ZXVlLCBldmVudE5hbWVzKCkud2Via2l0ZnVsbHNjcmVl
bmVycm9yRXZlbnQpOworICAgIGRpc3BhdGNoRnVsbFNjcmVlbkNoYW5nZU9yRXJyb3JFdmVudChj
aGFuZ2VRdWV1ZSwgZXZlbnROYW1lcygpLndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2VFdmVudCwgLyog
c2hvdWxkTm90aWZ5TWVkaWFFbGVtZW50ICovIHRydWUpOworICAgIGRpc3BhdGNoRnVsbFNjcmVl
bkNoYW5nZU9yRXJyb3JFdmVudChlcnJvclF1ZXVlLCBldmVudE5hbWVzKCkud2Via2l0ZnVsbHNj
cmVlbmVycm9yRXZlbnQsIC8qIHNob3VsZE5vdGlmeU1lZGlhRWxlbWVudCAqLyBmYWxzZSk7CiB9
CiAKLXZvaWQgRG9jdW1lbnQ6OmRpc3BhdGNoRnVsbFNjcmVlbkNoYW5nZU9yRXJyb3JFdmVudChE
ZXF1ZTxSZWZQdHI8Tm9kZT4+JiBxdWV1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUp
Cit2b2lkIERvY3VtZW50OjpkaXNwYXRjaEZ1bGxTY3JlZW5DaGFuZ2VPckVycm9yRXZlbnQoRGVx
dWU8UmVmUHRyPE5vZGU+PiYgcXVldWUsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBi
b29sIHNob3VsZE5vdGlmeU1lZGlhRWxlbWVudCkKIHsKICAgICB3aGlsZSAoIXF1ZXVlLmlzRW1w
dHkoKSkgewogICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IHF1ZXVlLnRha2VGaXJzdCgpOwpA
QCAtNTQwNiw2ICs1NDA3LDggQEAgdm9pZCBEb2N1bWVudDo6ZGlzcGF0Y2hGdWxsU2NyZWVuQ2hh
bmdlTwogICAgICAgICBpZiAoIW5vZGUtPmluRG9jdW1lbnQoKSkKICAgICAgICAgICAgIHF1ZXVl
LmFwcGVuZChkb2N1bWVudEVsZW1lbnQoKSk7CiAKKyAgICAgICAgaWYgKHNob3VsZE5vdGlmeU1l
ZGlhRWxlbWVudCAmJiBpc01lZGlhRWxlbWVudChub2RlLmdldCgpKSkKKyAgICAgICAgICAgIHRv
SFRNTE1lZGlhRWxlbWVudChub2RlLmdldCgpKS0+d2lsbERpc3BhdGNoRnVsbFNjcmVlbkNoYW5n
ZUV2ZW50KCk7CiAgICAgICAgIG5vZGUtPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWUsIHRydWUsIGZhbHNlKSk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHJldmlzaW9uIDE1Njc1MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjUzLDcgKzEyNTMsNyBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8
SFRNTENvbGxlY3Rpb24+IGVuc3VyZUNhY2hlZENvbGxlY3Rpb24oQ29sbGVjdGlvblR5cGUpOwog
CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIHZvaWQgZGlzcGF0Y2hGdWxsU2NyZWVu
Q2hhbmdlT3JFcnJvckV2ZW50KERlcXVlPFJlZlB0cjxOb2RlPj4mLCBjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50TmFtZSk7CisgICAgdm9pZCBkaXNwYXRjaEZ1bGxTY3JlZW5DaGFuZ2VPckVycm9y
RXZlbnQoRGVxdWU8UmVmUHRyPE5vZGU+PiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1l
LCBib29sIHNob3VsZE5vdGlmeU1lZGlhRWxlbWVudCk7CiAgICAgdm9pZCBjbGVhckZ1bGxzY3Jl
ZW5FbGVtZW50U3RhY2soKTsKICAgICB2b2lkIHBvcEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKTsK
ICAgICB2b2lkIHB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKEVsZW1lbnQqKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCShyZXZpc2lvbiAxNTY3NTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hNZWRpYXRvci5oIgogI2luY2x1
ZGUgIkV2ZW50UmV0YXJnZXRlci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
IkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSW5zZXJ0aW9uUG9pbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaCIKQEAgLTExMSwxMiArMTEyLDE1IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aCgpCiAgICAgV2luZG93RXZlbnRDb250ZXh0IHdpbmRvd0V2ZW50Q29udGV4dChtX2V2ZW50Lmdl
dCgpLCBtX25vZGUuZ2V0KCksIHRvcEV2ZW50Q29udGV4dCgpKTsKICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
RGlzcGF0Y2hFdmVudCgmbV9ub2RlLT5kb2N1bWVudCgpLCAqbV9ldmVudCwgd2luZG93RXZlbnRD
b250ZXh0LndpbmRvdygpLCBtX25vZGUuZ2V0KCksIG1fZXZlbnRQYXRoKTsKIAotICAgIHZvaWQq
IHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0OwotICAgIGlmIChkaXNwYXRjaEV2ZW50UHJl
UHJvY2VzcyhwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCkgPT0gQ29udGludWVEaXNwYXRj
aGluZykKLSAgICAgICAgaWYgKGRpc3BhdGNoRXZlbnRBdENhcHR1cmluZyh3aW5kb3dFdmVudENv
bnRleHQpID09IENvbnRpbnVlRGlzcGF0Y2hpbmcpCisgICAgSW5wdXRFbGVtZW50Q2xpY2tIYW5k
bGluZ1N0YXRlIGlucHV0RWxlbWVudENsaWNrSGFuZGxpbmdTdGF0ZTsKKyAgICBpZiAoY2FsbFdp
bGxEaXNwYXRjaEV2ZW50T25JbnB1dEVsZW1lbnQoaW5wdXRFbGVtZW50Q2xpY2tIYW5kbGluZ1N0
YXRlKSA9PSBDb250aW51ZURpc3BhdGNoaW5nICYmICFtX2V2ZW50UGF0aC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgaWYgKGRpc3BhdGNoRXZlbnRBdENhcHR1cmluZyh3aW5kb3dFdmVudENvbnRleHQp
ID09IENvbnRpbnVlRGlzcGF0Y2hpbmcpIHsKICAgICAgICAgICAgIGlmIChkaXNwYXRjaEV2ZW50
QXRUYXJnZXQoKSA9PSBDb250aW51ZURpc3BhdGNoaW5nKQogICAgICAgICAgICAgICAgIGRpc3Bh
dGNoRXZlbnRBdEJ1YmJsaW5nKHdpbmRvd0V2ZW50Q29udGV4dCk7Ci0gICAgZGlzcGF0Y2hFdmVu
dFBvc3RQcm9jZXNzKHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2VzcyhpbnB1dEVsZW1lbnRDbGlja0hh
bmRsaW5nU3RhdGUpOwogCiAgICAgLy8gRW5zdXJlIHRoYXQgYWZ0ZXIgZXZlbnQgZGlzcGF0Y2gs
IHRoZSBldmVudCdzIHRhcmdldCBvYmplY3QgaXMgdGhlCiAgICAgLy8gb3V0ZXJtb3N0IHNoYWRv
dyBET00gYm91bmRhcnkuCkBAIC0xMjcsMTEgKzEzMSwxNCBAQCBib29sIEV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2goKQogICAgIHJldHVybiAhbV9ldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwog
fQogCi1pbmxpbmUgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoRXZlbnRQcmVQcm9jZXNzKHZvaWQqJiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3Vs
dCkKK2lubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6Y2Fs
bFdpbGxEaXNwYXRjaEV2ZW50T25JbnB1dEVsZW1lbnQoSW5wdXRFbGVtZW50Q2xpY2tIYW5kbGlu
Z1N0YXRlJiBzdGF0ZSkKIHsKLSAgICAvLyBHaXZlIHRoZSB0YXJnZXQgbm9kZSBhIGNoYW5jZSB0
byBkbyBzb21lIHdvcmsgYmVmb3JlIERPTSBldmVudCBoYW5kbGVycyBnZXQgYSBjcmFjay4KLSAg
ICBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCA9IG1fbm9kZS0+cHJlRGlzcGF0Y2hFdmVu
dEhhbmRsZXIobV9ldmVudC5nZXQoKSk7Ci0gICAgcmV0dXJuIChtX2V2ZW50UGF0aC5pc0VtcHR5
KCkgfHwgbV9ldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpID8gRG9uZURpc3BhdGNoaW5nIDog
Q29udGludWVEaXNwYXRjaGluZzsKKyAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5n
ZXQoKSkpIHsKKyAgICAgICAgdG9IVE1MSW5wdXRFbGVtZW50KG1fbm9kZS5nZXQoKSktPndpbGxE
aXNwYXRjaEV2ZW50KG1fZXZlbnQuZ2V0KCksIHN0YXRlKTsKKyAgICAgICAgaWYgKG1fZXZlbnQt
PnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuIERvbmVEaXNwYXRjaGlu
ZzsKKyAgICB9CisgICAgcmV0dXJuIENvbnRpbnVlRGlzcGF0Y2hpbmc7CiB9CiAKIGlubGluZSBF
dmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0
Q2FwdHVyaW5nKFdpbmRvd0V2ZW50Q29udGV4dCYgd2luZG93RXZlbnRDb250ZXh0KQpAQCAtMTgz
LDE0ICsxOTAsMTQgQEAgaW5saW5lIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZQog
ICAgIH0KIH0KIAotaW5saW5lIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UG9z
dFByb2Nlc3Modm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpCitpbmxpbmUgdm9p
ZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnRQb3N0UHJvY2Vzcyhjb25zdCBJbnB1dEVs
ZW1lbnRDbGlja0hhbmRsaW5nU3RhdGUmIGlucHV0RWxlbWVudENsaWNrSGFuZGxpbmdTdGF0ZSkK
IHsKICAgICBtX2V2ZW50LT5zZXRUYXJnZXQoRXZlbnRSZXRhcmdldGVyOjpldmVudFRhcmdldFJl
c3BlY3RpbmdUYXJnZXRSdWxlcyhtX25vZGUuZ2V0KCkpKTsKICAgICBtX2V2ZW50LT5zZXRDdXJy
ZW50VGFyZ2V0KDApOwogICAgIG1fZXZlbnQtPnNldEV2ZW50UGhhc2UoMCk7CiAKLSAgICAvLyBQ
YXNzIHRoZSBkYXRhIGZyb20gdGhlIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyIHRvIHRoZSBwb3N0
RGlzcGF0Y2hFdmVudEhhbmRsZXIuCi0gICAgbV9ub2RlLT5wb3N0RGlzcGF0Y2hFdmVudEhhbmRs
ZXIobV9ldmVudC5nZXQoKSwgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOworICAgIGlm
IChpbnB1dEVsZW1lbnRDbGlja0hhbmRsaW5nU3RhdGUuc3RhdGVmdWwpCisgICAgICAgIHRvSFRN
TElucHV0RWxlbWVudChtX25vZGUuZ2V0KCkpLT5kaWREaXNwYXRjaENsaWNrRXZlbnQobV9ldmVu
dC5nZXQoKSwgaW5wdXRFbGVtZW50Q2xpY2tIYW5kbGluZ1N0YXRlKTsKIAogICAgIC8vIENhbGwg
ZGVmYXVsdCBldmVudCBoYW5kbGVycy4gV2hpbGUgdGhlIERPTSBkb2VzIGhhdmUgYSBjb25jZXB0
IG9mIHByZXZlbnRpbmcKICAgICAvLyBkZWZhdWx0IGhhbmRsaW5nLCB0aGUgZGV0YWlsIG9mIHdo
aWNoIGhhbmRsZXJzIGFyZSBjYWxsZWQgaXMgYW4gaW50ZXJuYWwKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnREaXNwYXRjaGVyLmgJKHJldmlzaW9uIDE1Njc1MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudERpc3BhdGNoZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIElucHV0RWxlbWVudENsaWNrSGFuZGxpbmdT
dGF0ZTsKIGNsYXNzIEV2ZW50OwogY2xhc3MgRXZlbnREaXNwYXRjaE1lZGlhdG9yOwogY2xhc3Mg
RXZlbnRUYXJnZXQ7CkBAIC02NywxMSArNjgsMTEgQEAgcHJpdmF0ZToKICAgICBFdmVudERpc3Bh
dGNoZXIoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnQ+KTsKICAgICBjb25zdCBFdmVudENvbnRleHQq
IHRvcEV2ZW50Q29udGV4dCgpOwogCi0gICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNw
YXRjaEV2ZW50UHJlUHJvY2Vzcyh2b2lkKiYgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQp
OworICAgIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gY2FsbFdpbGxEaXNwYXRjaEV2ZW50T25J
bnB1dEVsZW1lbnQoSW5wdXRFbGVtZW50Q2xpY2tIYW5kbGluZ1N0YXRlJik7CiAgICAgRXZlbnRE
aXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoV2luZG93RXZlbnRD
b250ZXh0Jik7CiAgICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRU
YXJnZXQoKTsKICAgICB2b2lkIGRpc3BhdGNoRXZlbnRBdEJ1YmJsaW5nKFdpbmRvd0V2ZW50Q29u
dGV4dCYpOwotICAgIHZvaWQgZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKHZvaWQqIHByZURpc3Bh
dGNoRXZlbnRIYW5kbGVyUmVzdWx0KTsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2Vz
cyhjb25zdCBJbnB1dEVsZW1lbnRDbGlja0hhbmRsaW5nU3RhdGUmKTsKIAogICAgIEV2ZW50UGF0
aCBtX2V2ZW50UGF0aDsKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9DaGVja2JveElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9DaGVja2JveElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDE1Njc1MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OCwyNSArNjgsMjEgQEAgdm9pZCBDaGVja2JveElucHV0VHlwZTo6aGFuZGxlS2V5dXBFdmVu
dAogICAgIGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2tJZkFjdGl2ZShldmVudCk7CiB9CiAKLU93blB0
cjxDbGlja0hhbmRsaW5nU3RhdGU+IENoZWNrYm94SW5wdXRUeXBlOjp3aWxsRGlzcGF0Y2hDbGlj
aygpCit2b2lkIENoZWNrYm94SW5wdXRUeXBlOjp3aWxsRGlzcGF0Y2hDbGljayhJbnB1dEVsZW1l
bnRDbGlja0hhbmRsaW5nU3RhdGUmIHN0YXRlKQogewogICAgIC8vIEFuIGV2ZW50IGhhbmRsZXIg
Y2FuIHVzZSBwcmV2ZW50RGVmYXVsdCBvciAicmV0dXJuIGZhbHNlIiB0byByZXZlcnNlIHRoZSBj
aGVja2luZyB3ZSBkbyBoZXJlLgotICAgIC8vIFRoZSBDbGlja0hhbmRsaW5nU3RhdGUgb2JqZWN0
IGNvbnRhaW5zIHdoYXQgd2UgbmVlZCB0byB1bmRvIHdoYXQgd2UgZGlkIGhlcmUgaW4gZGlkRGlz
cGF0Y2hDbGljay4KKyAgICAvLyBUaGUgSW5wdXRFbGVtZW50Q2xpY2tIYW5kbGluZ1N0YXRlIG9i
amVjdCBjb250YWlucyB3aGF0IHdlIG5lZWQgdG8gdW5kbyB3aGF0IHdlIGRpZCBoZXJlIGluIGRp
ZERpc3BhdGNoQ2xpY2suCiAKLSAgICBPd25QdHI8Q2xpY2tIYW5kbGluZ1N0YXRlPiBzdGF0ZSA9
IGFkb3B0UHRyKG5ldyBDbGlja0hhbmRsaW5nU3RhdGUpOworICAgIHN0YXRlLmNoZWNrZWQgPSBl
bGVtZW50KCkuY2hlY2tlZCgpOworICAgIHN0YXRlLmluZGV0ZXJtaW5hdGUgPSBlbGVtZW50KCku
aW5kZXRlcm1pbmF0ZSgpOwogCi0gICAgc3RhdGUtPmNoZWNrZWQgPSBlbGVtZW50KCkuY2hlY2tl
ZCgpOwotICAgIHN0YXRlLT5pbmRldGVybWluYXRlID0gZWxlbWVudCgpLmluZGV0ZXJtaW5hdGUo
KTsKLQotICAgIGlmIChzdGF0ZS0+aW5kZXRlcm1pbmF0ZSkKKyAgICBpZiAoc3RhdGUuaW5kZXRl
cm1pbmF0ZSkKICAgICAgICAgZWxlbWVudCgpLnNldEluZGV0ZXJtaW5hdGUoZmFsc2UpOwogCi0g
ICAgZWxlbWVudCgpLnNldENoZWNrZWQoIXN0YXRlLT5jaGVja2VkLCBEaXNwYXRjaENoYW5nZUV2
ZW50KTsKLQotICAgIHJldHVybiBzdGF0ZS5yZWxlYXNlKCk7CisgICAgZWxlbWVudCgpLnNldENo
ZWNrZWQoIXN0YXRlLmNoZWNrZWQsIERpc3BhdGNoQ2hhbmdlRXZlbnQpOwogfQogCi12b2lkIENo
ZWNrYm94SW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNrKEV2ZW50KiBldmVudCwgY29uc3QgQ2xp
Y2tIYW5kbGluZ1N0YXRlJiBzdGF0ZSkKK3ZvaWQgQ2hlY2tib3hJbnB1dFR5cGU6OmRpZERpc3Bh
dGNoQ2xpY2soRXZlbnQqIGV2ZW50LCBjb25zdCBJbnB1dEVsZW1lbnRDbGlja0hhbmRsaW5nU3Rh
dGUmIHN0YXRlKQogewogICAgIGlmIChldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpIHx8IGV2ZW50
LT5kZWZhdWx0SGFuZGxlZCgpKSB7CiAgICAgICAgIGVsZW1lbnQoKS5zZXRJbmRldGVybWluYXRl
KHN0YXRlLmluZGV0ZXJtaW5hdGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9DaGVja2Jv
eElucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2hlY2tib3hJ
bnB1dFR5cGUuaAkocmV2aXNpb24gMTU2NzUxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9DaGVj
a2JveElucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw4IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIHZhbHVlTWlzc2luZyhjb25zdCBTdHJpbmcmKSBjb25zdCBPVkVS
UklERTsKICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZU1pc3NpbmdUZXh0KCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleXVwRXZlbnQoS2V5Ym9hcmRFdmVudCopIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gd2lsbERpc3Bh
dGNoQ2xpY2soKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRGlzcGF0Y2hDbGljayhF
dmVudCosIGNvbnN0IENsaWNrSGFuZGxpbmdTdGF0ZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCB3aWxsRGlzcGF0Y2hDbGljayhJbnB1dEVsZW1lbnRDbGlja0hhbmRsaW5nU3RhdGUmKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGlzcGF0Y2hDbGljayhFdmVudCosIGNvbnN0
IElucHV0RWxlbWVudENsaWNrSGFuZGxpbmdTdGF0ZSYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
Ym9vbCBpc0NoZWNrYm94KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzSW5kZXRlcm1pbmF0ZUFwcGVhcmFuY2UoKSBjb25zdCBPVkVSUklERTsKIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE1Njc1MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMTAsMjYgKzExMTAsMTkgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1
ZUZyb21SZW5kZQogICAgIHNldEF1dG9maWxsZWQoZmFsc2UpOwogfQogCi12b2lkKiBIVE1MSW5w
dXRFbGVtZW50OjpwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCit2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OndpbGxEaXNwYXRjaEV2ZW50KEV2ZW50KiBldmVudCwgSW5wdXRFbGVt
ZW50Q2xpY2tIYW5kbGluZ1N0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQgJiYgbV9pbnB1dFR5cGUtPnNob3VsZFN1Ym1p
dEltcGxpY2l0bHkoZXZlbnQpKSB7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLnRleHRJbnB1dEV2ZW50ICYmIG1faW5wdXRUeXBlLT5zaG91bGRTdWJtaXRJbXBsaWNpdGx5
KGV2ZW50KSkKICAgICAgICAgZXZlbnQtPnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAm
JiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50
KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgICAgICBtX2lucHV0VHlwZS0+d2lsbERp
c3BhdGNoQ2xpY2soc3RhdGUpOworICAgICAgICBzdGF0ZS5zdGF0ZWZ1bCA9IHRydWU7CiAgICAg
fQotICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCBzdGF0aWNf
Y2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSAhPSBMZWZ0QnV0dG9uKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICAvLyBGSVhNRTogQ2hlY2sgd2hldGhlciB0aGVyZSBhcmUgYW55IGNh
c2VzIHdoZXJlIHRoaXMgYWN0dWFsbHkgZW5kcyB1cCBsZWFraW5nLgotICAgIHJldHVybiBtX2lu
cHV0VHlwZS0+d2lsbERpc3BhdGNoQ2xpY2soKS5sZWFrUHRyKCk7CiB9CiAKLXZvaWQgSFRNTElu
cHV0RWxlbWVudDo6cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCwgdm9pZCog
ZGF0YUZyb21QcmVEaXNwYXRjaCkKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGlkRGlzcGF0Y2hD
bGlja0V2ZW50KEV2ZW50KiBldmVudCwgY29uc3QgSW5wdXRFbGVtZW50Q2xpY2tIYW5kbGluZ1N0
YXRlJiBzdGF0ZSkKIHsKLSAgICBPd25QdHI8Q2xpY2tIYW5kbGluZ1N0YXRlPiBzdGF0ZSA9IGFk
b3B0UHRyKHN0YXRpY19jYXN0PENsaWNrSGFuZGxpbmdTdGF0ZSo+KGRhdGFGcm9tUHJlRGlzcGF0
Y2gpKTsKLSAgICBpZiAoIXN0YXRlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pbnB1dFR5cGUt
PmRpZERpc3BhdGNoQ2xpY2soZXZlbnQsICpzdGF0ZSk7CisgICAgbV9pbnB1dFR5cGUtPmRpZERp
c3BhdGNoQ2xpY2soZXZlbnQsIHN0YXRlKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gMTU2NzUxKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDIwIEBAIGNs
YXNzIFVSTDsKIGNsYXNzIExpc3RBdHRyaWJ1dGVUYXJnZXRPYnNlcnZlcjsKIHN0cnVjdCBEYXRl
VGltZUNob29zZXJQYXJhbWV0ZXJzOwogCitjbGFzcyBJbnB1dEVsZW1lbnRDbGlja0hhbmRsaW5n
U3RhdGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIElucHV0
RWxlbWVudENsaWNrSGFuZGxpbmdTdGF0ZSgpCisgICAgOiBzdGF0ZWZ1bChmYWxzZSkKKyAgICAs
IGNoZWNrZWQoZmFsc2UpCisgICAgLCBpbmRldGVybWluYXRlKGZhbHNlKQorICAgIHsgfQorICAg
IGJvb2wgc3RhdGVmdWw7CisgICAgYm9vbCBjaGVja2VkOworICAgIGJvb2wgaW5kZXRlcm1pbmF0
ZTsKKyAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gY2hlY2tlZFJhZGlvQnV0dG9uOworfTsK
KwogY2xhc3MgSFRNTElucHV0RWxlbWVudCA6IHB1YmxpYyBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTElucHV0RWxlbWVudD4g
Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYsIEhUTUxGb3JtRWxlbWVudCos
IGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKQEAgLTIwMSw2ICsyMTUsOSBAQCBwdWJsaWM6CiAKICAg
ICBTdHJpbmcgYWx0VGV4dCgpIGNvbnN0OwogCisgICAgdm9pZCB3aWxsRGlzcGF0Y2hFdmVudChF
dmVudCosIElucHV0RWxlbWVudENsaWNrSGFuZGxpbmdTdGF0ZSYpOworICAgIHZvaWQgZGlkRGlz
cGF0Y2hDbGlja0V2ZW50KEV2ZW50KiwgY29uc3QgSW5wdXRFbGVtZW50Q2xpY2tIYW5kbGluZ1N0
YXRlJik7CisKICAgICBpbnQgbWF4UmVzdWx0cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4UmVzdWx0
czsgfQogCiAgICAgU3RyaW5nIGRlZmF1bHRWYWx1ZSgpIGNvbnN0OwpAQCAtMzU2LDkgKzM3Myw2
IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKIAotICAgIHZpcnR1YWwg
dm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50Kiwgdm9pZCogZGF0YUZyb21QcmVEaXNwYXRj
aCk7Ci0KICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJikg
Y29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzSW5SYW5nZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBpc091dE9mUmFuZ2UoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMTU2NzUxKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgyNCwx
NCArNDgyNCw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWFya0NhcHRpb25BbmRTdWIKIAog
I2VuZGlmCiAKLXZvaWQqIEhUTUxNZWRpYUVsZW1lbnQ6OnByZURpc3BhdGNoRXZlbnRIYW5kbGVy
KEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkud2Via2l0ZnVsbHNjcmVlbmNoYW5nZUV2ZW50KQotICAgICAgICBjb25maWd1cmVN
ZWRpYUNvbnRyb2xzKCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQogdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpjcmVhdGVNZWRpYVBsYXllcigpCiB7CiAjaWYgRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAxNTY3NTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgyLDYgKzM4Miw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PikgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIGJvb2wgd2lsbFJl
c3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBPVkVSUklERTsKKyAgICAKKyAgICB2b2lkIHdpbGxE
aXNwYXRjaEZ1bGxTY3JlZW5DaGFuZ2VFdmVudCgpIHsgY29uZmlndXJlTWVkaWFDb250cm9scygp
OyB9CiAKIHByb3RlY3RlZDoKICAgICBIVE1MTWVkaWFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCYsIGJvb2wpOwpAQCAtNjA3LDggKzYwOSw2IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBwcmVwYXJlTWVkaWFGcmFnbWVudFVSSSgpOwogICAgIHZvaWQgYXBwbHlNZWRpYUZyYWdt
ZW50VVJJKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyKEV2
ZW50Kik7Ci0KICAgICB2b2lkIGNoYW5nZU5ldHdvcmtTdGF0ZUZyb21Mb2FkaW5nVG9JZGxlKCk7
CiAKICAgICB2b2lkIHJlbW92ZUJlaGF2aW9yc1Jlc3RyaWN0aW9uc0FmdGVyRmlyc3RVc2VyR2Vz
dHVyZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTU2NzUx
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02ODIsMTIgKzY4MiwxMSBAQCBib29sIElucHV0VHlwZTo6Y2FuU2V0VmFsdWUoY29uc3QgU3Ry
aW5nCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU93blB0cjxDbGlja0hhbmRsaW5nU3RhdGU+IElu
cHV0VHlwZTo6d2lsbERpc3BhdGNoQ2xpY2soKQordm9pZCBJbnB1dFR5cGU6OndpbGxEaXNwYXRj
aENsaWNrKElucHV0RWxlbWVudENsaWNrSGFuZGxpbmdTdGF0ZSYpCiB7Ci0gICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLXZvaWQgSW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNrKEV2ZW50KiwgY29u
c3QgQ2xpY2tIYW5kbGluZ1N0YXRlJikKK3ZvaWQgSW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNr
KEV2ZW50KiwgY29uc3QgSW5wdXRFbGVtZW50Q2xpY2tIYW5kbGluZ1N0YXRlJikKIHsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCShyZXZpc2lvbiAxNTY3NTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ7CiBj
bGFzcyBDaHJvbWU7CitjbGFzcyBJbnB1dEVsZW1lbnRDbGlja0hhbmRsaW5nU3RhdGU7CiBjbGFz
cyBDb2xvcjsKIGNsYXNzIERhdGVDb21wb25lbnRzOwogY2xhc3MgRHJhZ0RhdGE7CkBAIC02NCwx
NSArNjUsNiBAQCBjbGFzcyBUb3VjaEV2ZW50OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2Rl
OwogCi1zdHJ1Y3QgQ2xpY2tIYW5kbGluZ1N0YXRlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgCi1wdWJsaWM6Ci0gICAgYm9vbCBjaGVja2VkOwotICAgIGJvb2wgaW5kZXRlcm1p
bmF0ZTsKLSAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gY2hlY2tlZFJhZGlvQnV0dG9uOwot
fTsKLQogLy8gQW4gSW5wdXRUeXBlIG9iamVjdCByZXByZXNlbnRzIHRoZSB0eXBlLXNwZWNpZmlj
IHBhcnQgb2YgYW4gSFRNTElucHV0RWxlbWVudC4KIC8vIERvIG5vdCBleHBvc2UgaW5zdGFuY2Vz
IG9mIElucHV0VHlwZSBhbmQgY2xhc3NlcyBkZXJpdmVkIGZyb20gaXQgdG8gY2xhc3NlcwogLy8g
b3RoZXIgdGhhbiBIVE1MSW5wdXRFbGVtZW50LgpAQCAtMTg1LDggKzE3Nyw4IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVDbGlja0V2ZW50KE1vdXNlRXZlbnQqKTsKICAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlTW91c2VEb3duRXZlbnQoTW91c2VFdmVudCopOwotICAgIHZpcnR1
YWwgT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gd2lsbERpc3BhdGNoQ2xpY2soKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkRGlzcGF0Y2hDbGljayhFdmVudCosIGNvbnN0IENsaWNrSGFuZGxpbmdT
dGF0ZSYpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsRGlzcGF0Y2hDbGljayhJbnB1dEVsZW1lbnRD
bGlja0hhbmRsaW5nU3RhdGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGlzcGF0Y2hDbGljayhF
dmVudCosIGNvbnN0IElucHV0RWxlbWVudENsaWNrSGFuZGxpbmdTdGF0ZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50Kik7CiAgICAgdmlydHVhbCB2b2lk
IGhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGhh
bmRsZUtleXByZXNzRXZlbnQoS2V5Ym9hcmRFdmVudCopOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9SYWRpb0lucHV0VHlwZS5jcHAJKHJldmlzaW9uIDE1Njc1MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMzMgKzE0NSwy
OSBAQCBib29sIFJhZGlvSW5wdXRUeXBlOjpzaG91bGRTZW5kQ2hhbmdlRXZlCiAgICAgcmV0dXJu
IGVsZW1lbnQoKS5jaGVja2VkKCk7CiB9CiAKLU93blB0cjxDbGlja0hhbmRsaW5nU3RhdGU+IFJh
ZGlvSW5wdXRUeXBlOjp3aWxsRGlzcGF0Y2hDbGljaygpCit2b2lkIFJhZGlvSW5wdXRUeXBlOjp3
aWxsRGlzcGF0Y2hDbGljayhJbnB1dEVsZW1lbnRDbGlja0hhbmRsaW5nU3RhdGUmIHN0YXRlKQog
ewogICAgIC8vIEFuIGV2ZW50IGhhbmRsZXIgY2FuIHVzZSBwcmV2ZW50RGVmYXVsdCBvciAicmV0
dXJuIGZhbHNlIiB0byByZXZlcnNlIHRoZSBzZWxlY3Rpb24gd2UgZG8gaGVyZS4KLSAgICAvLyBU
aGUgQ2xpY2tIYW5kbGluZ1N0YXRlIG9iamVjdCBjb250YWlucyB3aGF0IHdlIG5lZWQgdG8gdW5k
byB3aGF0IHdlIGRpZCBoZXJlIGluIGRpZERpc3BhdGNoQ2xpY2suCisgICAgLy8gVGhlIElucHV0
RWxlbWVudENsaWNrSGFuZGxpbmdTdGF0ZSBvYmplY3QgY29udGFpbnMgd2hhdCB3ZSBuZWVkIHRv
IHVuZG8gd2hhdCB3ZSBkaWQgaGVyZSBpbiBkaWREaXNwYXRjaENsaWNrLgogCiAgICAgLy8gV2Ug
d2FudCByYWRpbyBncm91cHMgdG8gZW5kIHVwIGluIHNhbmUgc3RhdGVzLCBpLmUuLCB0byBoYXZl
IHNvbWV0aGluZyBjaGVja2VkLgogICAgIC8vIFRoZXJlZm9yZSBpZiBub3RoaW5nIGlzIGN1cnJl
bnRseSBzZWxlY3RlZCwgd2Ugd29uJ3QgYWxsb3cgdGhlIHVwY29taW5nIGFjdGlvbiB0byBiZSAi
dW5kb25lIiwgc2luY2UKICAgICAvLyB3ZSB3YW50IHNvbWUgb2JqZWN0IGluIHRoZSByYWRpbyBn
cm91cCB0byBhY3R1YWxseSBnZXQgc2VsZWN0ZWQuCiAKLSAgICBPd25QdHI8Q2xpY2tIYW5kbGlu
Z1N0YXRlPiBzdGF0ZSA9IGFkb3B0UHRyKG5ldyBDbGlja0hhbmRsaW5nU3RhdGUpOwotCi0gICAg
c3RhdGUtPmNoZWNrZWQgPSBlbGVtZW50KCkuY2hlY2tlZCgpOwotICAgIHN0YXRlLT5jaGVja2Vk
UmFkaW9CdXR0b24gPSBlbGVtZW50KCkuY2hlY2tlZFJhZGlvQnV0dG9uRm9yR3JvdXAoKTsKKyAg
ICBzdGF0ZS5jaGVja2VkID0gZWxlbWVudCgpLmNoZWNrZWQoKTsKKyAgICBzdGF0ZS5jaGVja2Vk
UmFkaW9CdXR0b24gPSBlbGVtZW50KCkuY2hlY2tlZFJhZGlvQnV0dG9uRm9yR3JvdXAoKTsKIAog
I2lmIFBMQVRGT1JNKElPUykKLSAgICBzdGF0ZS0+aW5kZXRlcm1pbmF0ZSA9IGVsZW1lbnQoKS5p
bmRldGVybWluYXRlKCk7CisgICAgc3RhdGUuaW5kZXRlcm1pbmF0ZSA9IGVsZW1lbnQoKS5pbmRl
dGVybWluYXRlKCk7CiAKICAgICBpZiAoZWxlbWVudCgpLmluZGV0ZXJtaW5hdGUoKSkKICAgICAg
ICAgZWxlbWVudCgpLnNldEluZGV0ZXJtaW5hdGUoZmFsc2UpOwogI2VuZGlmCiAKICAgICBlbGVt
ZW50KCkuc2V0Q2hlY2tlZCh0cnVlLCBEaXNwYXRjaENoYW5nZUV2ZW50KTsKLQotICAgIHJldHVy
biBzdGF0ZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgUmFkaW9JbnB1dFR5cGU6OmRpZERpc3BhdGNo
Q2xpY2soRXZlbnQqIGV2ZW50LCBjb25zdCBDbGlja0hhbmRsaW5nU3RhdGUmIHN0YXRlKQordm9p
ZCBSYWRpb0lucHV0VHlwZTo6ZGlkRGlzcGF0Y2hDbGljayhFdmVudCogZXZlbnQsIGNvbnN0IElu
cHV0RWxlbWVudENsaWNrSGFuZGxpbmdTdGF0ZSYgc3RhdGUpCiB7CiAgICAgaWYgKGV2ZW50LT5k
ZWZhdWx0UHJldmVudGVkKCkgfHwgZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpIHsKICAgICAgICAg
Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgc2VsZWN0ZWQgcmFkaW8gYnV0dG9uIGlmIHBvc3NpYmxl
LgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuaAkocmV2aXNpb24gMTU2NzUx
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw4ICs0OSw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleXVw
RXZlbnQoS2V5Ym9hcmRFdmVudCopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJv
YXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkU2VuZENoYW5nZUV2ZW50QWZ0ZXJDaGVja2VkQ2hhbmdlZCgpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gd2lsbERpc3BhdGNoQ2xp
Y2soKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRGlzcGF0Y2hDbGljayhFdmVudCos
IGNvbnN0IENsaWNrSGFuZGxpbmdTdGF0ZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB3
aWxsRGlzcGF0Y2hDbGljayhJbnB1dEVsZW1lbnRDbGlja0hhbmRsaW5nU3RhdGUmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGlzcGF0Y2hDbGljayhFdmVudCosIGNvbnN0IElucHV0
RWxlbWVudENsaWNrSGFuZGxpbmdTdGF0ZSYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBp
c1JhZGlvQnV0dG9uKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
SW5kZXRlcm1pbmF0ZUFwcGVhcmFuY2UoKSBjb25zdCBPVkVSUklERTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213227</attachid>
            <date>2013-10-02 22:49:19 -0700</date>
            <delta_ts>2013-10-02 23:49:33 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-122144-20131002224919.patch</filename>
            <type>text/plain</type>
            <size>22688</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjgxNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDEzLTEwLTAyICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEdldCByaWQgb2YgTm9kZTo6cHJl
RGlzcGF0Y2hFdmVudEhhbmRsZXIgYW5kIE5vZGU6OnBvc3REaXNwYXRjaEV2ZW50SGFuZGxlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMTQ0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgR2V0IHJpZCBvZiBw
cmUvcG9zdCBldmVudCBkaXNwYXRjaCBjYWxsYmFja3MgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIg
YW5kIHBvc3REaXNwYXRjaEV2ZW50SGFuZGxlciBzaW5jZQorICAgICAgICB0aGUgZm9ybWVyIHdh
cyBvbmx5IGNhbGxlZCBieSBIVE1MTWVkaWFFbGVtZW50IGFuZCBIVE1MSW5wdXRFbGVtZW50IGFu
ZCB0aGUgbGF0dGVyIHdhcyBvbmx5IGNhbGxlZCBieQorICAgICAgICBIVE1MSW5wdXRFbGVtZW50
LgorCisgICAgICAgIEV4cGxpY2l0bHkgY2FsbCBIVE1MTWVkaWFFbGVtZW50J3Mgd2lsbERpc3Bh
dGNoRnVsbFNjcmVlbkNoYW5nZUV2ZW50IGluIGZ1bGxTY3JlZW5DaGFuZ2VEZWxheVRpbWVyRmly
ZWQKKyAgICAgICAgb2YgRG9jdW1lbnQgc2luY2UgdGhpcyBpcyB0aGUgb25seSBwbGFjZSB0aGF0
IGZpcmVzIHRoZSBmdWxsc2NyZWVuY2hhbmdlIGV2ZW50LgorCisgICAgICAgIEFsc28gYWRkIGFu
IGV4cGxpY2l0IGNhbGwgdG8gd2lsbERpc3BhdGNoRXZlbnQgYW5kIGRpZERpc3BhdGNoQ2xpY2tF
dmVudCBpbiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoLgorICAgICAgICBUaGlzIGFsc28gYWxs
b3dzIHVzIHRvIHN0YWNrLWFsbG9jYXRlIElucHV0RWxlbWVudENsaWNrSGFuZGxpbmdTdGF0ZSBp
bnN0ZWFkIG9mIGhhdmluZyB3aWxsRGlzcGF0Y2hFdmVudAorICAgICAgICBoZWFwLWFsbG9jYXRl
IGl0IGFuZCBwYXNzIGl0IGFyb3VuZCBhcyB2b2lkKi4KKworICAgICAgICAqIFdlYkNvcmUub3Jk
ZXI6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpmdWxsU2NyZWVuQ2hhbmdlRGVsYXlUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpkaXNwYXRjaEZ1bGxTY3JlZW5DaGFuZ2VPckVycm9yRXZlbnQpOgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGRvbS9FdmVudENvbnRleHQuY3BwOgorICAg
ICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6
OmNhbGxXaWxsRGlzcGF0Y2hFdmVudE9uSW5wdXRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKToKKyAgICAgICAgKiBk
b20vRXZlbnREaXNwYXRjaGVyLmg6CisgICAgICAgICogaHRtbC9DaGVja2JveElucHV0VHlwZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2JveElucHV0VHlwZTo6d2lsbERpc3BhdGNoQ2xp
Y2spOgorICAgICAgICAqIGh0bWwvQ2hlY2tib3hJbnB1dFR5cGUuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6d2lsbERpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6ZGlkRGlzcGF0Y2hDbGlja0V2ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0
bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6d2lsbERpc3BhdGNoRnVsbFNjcmVlbkNoYW5nZUV2ZW50KTogUmVuYW1lZCBmcm9tIHByZURp
c3BhdGNoRXZlbnRIYW5kbGVyLgorICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnB1dFR5cGU6OndpbGxEaXNwYXRjaENsaWNrKToKKyAgICAgICAgKiBodG1sL0lucHV0VHlw
ZS5oOgorICAgICAgICAqIGh0bWwvUmFkaW9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmFkaW9JbnB1dFR5cGU6OndpbGxEaXNwYXRjaENsaWNrKToKKyAgICAgICAgKiBodG1sL1Jh
ZGlvSW5wdXRUeXBlLmg6CisKIDIwMTMtMTAtMDIgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBw
bGUuY29tPgogCiAgICAgICAgIENUVEU6IERyYWcgZXZlbnRzIGFyZSBvbmx5IGRpc3BhdGNoZWQg
b24gRWxlbWVudHMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIJKHJldmlzaW9uIDE1NjgxNSkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIJKHdvcmtpbmcgY29weSkKQEAgLTEzMjMsNyAr
MTMyMyw2IEBAIF9fWk43V2ViQ29yZTVFdmVudDlzZXRUYXJnZXRFTjNXVEYxMFBhc3MKIF9fWk43
V2ViQ29yZTVFdmVudDE0cmVjZWl2ZWRUYXJnZXRFdgogX19aTjdXZWJDb3JlMThXaW5kb3dFdmVu
dENvbnRleHRDMUVQTlNfNUV2ZW50RU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFUEtOU18x
MkV2ZW50Q29udGV4dEUKIF9fWk43V2ViQ29yZTE4V2luZG93RXZlbnRDb250ZXh0QzJFUE5TXzVF
dmVudEVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRVBLTlNfMTJFdmVudENvbnRleHRFCi1f
X1pON1dlYkNvcmU0Tm9kZTIzcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJFUE5TXzVFdmVudEUKIF9f
Wk43V2ViQ29yZTE4V2luZG93RXZlbnRDb250ZXh0MTdoYW5kbGVMb2NhbEV2ZW50c0VQTlNfNUV2
ZW50RQogX19aTjdXZWJDb3JlNE5vZGUxNmRlcmVmRXZlbnRUYXJnZXRFdgogX19aTjdXZWJDb3Jl
MTFFdmVudFRhcmdldDE4ZmlyZUV2ZW50TGlzdGVuZXJzRVBOU181RXZlbnRFCkBAIC05ODk5LDgg
Kzk4OTgsNiBAQCBfX1pON1dlYkNvcmU0MGpzRG9jdW1lbnRQcm90b3R5cGVGdW5jdGlvCiBfX1pO
N1dlYkNvcmU1VGltZXJJTlNfMTdHZW5lcmljRXZlbnRRdWV1ZUVFNWZpcmVkRXYKIF9fWk43V2Vi
Q29yZTE3R2VuZXJpY0V2ZW50UXVldWUxMHRpbWVyRmlyZWRFUE5TXzVUaW1lcklTMF9FRQogX19a
TjdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTNkaXNwYXRjaEV2ZW50RU4zV1RGMTBQYXNzUmVm
UHRySU5TXzVFdmVudEVFRQotX19aTjdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MjNwcmVEaXNw
YXRjaEV2ZW50SGFuZGxlckVQTlNfNUV2ZW50RQotX19aTjdXZWJDb3JlMTZIVE1MTWVkaWFFbGVt
ZW50MTlkZWZhdWx0RXZlbnRIYW5kbGVyRVBOU181RXZlbnRFCiBfX1pON1dlYkNvcmUxNnBhcnNl
SFRNTEludGVnZXJFUktOM1dURjZTdHJpbmdFUmkKIF9fWk43V2ViQ29yZTdFbGVtZW50MjFzZXRU
YWJJbmRleEV4cGxpY2l0bHlFcwogX19aTjdXZWJDb3JlMThUZXh0RmllbGRJbnB1dFR5cGUyNHJl
YWRvbmx5QXR0cmlidXRlQ2hhbmdlZEV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJl
dmlzaW9uIDE1NjgxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAKICNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZUNv
bGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2Vy
SWRpb21zLmgiCkBAIC01Mzg3LDExICs1Mzg4LDExIEBAIHZvaWQgRG9jdW1lbnQ6OmZ1bGxTY3Jl
ZW5DaGFuZ2VEZWxheVRpbWUKICAgICBtX2Z1bGxTY3JlZW5DaGFuZ2VFdmVudFRhcmdldFF1ZXVl
LnN3YXAoY2hhbmdlUXVldWUpOwogICAgIERlcXVlPFJlZlB0cjxOb2RlPiA+IGVycm9yUXVldWU7
CiAgICAgbV9mdWxsU2NyZWVuRXJyb3JFdmVudFRhcmdldFF1ZXVlLnN3YXAoZXJyb3JRdWV1ZSk7
Ci0gICAgZGlzcGF0Y2hGdWxsU2NyZWVuQ2hhbmdlT3JFcnJvckV2ZW50KGNoYW5nZVF1ZXVlLCBl
dmVudE5hbWVzKCkud2Via2l0ZnVsbHNjcmVlbmNoYW5nZUV2ZW50KTsKLSAgICBkaXNwYXRjaEZ1
bGxTY3JlZW5DaGFuZ2VPckVycm9yRXZlbnQoZXJyb3JRdWV1ZSwgZXZlbnROYW1lcygpLndlYmtp
dGZ1bGxzY3JlZW5lcnJvckV2ZW50KTsKKyAgICBkaXNwYXRjaEZ1bGxTY3JlZW5DaGFuZ2VPckVy
cm9yRXZlbnQoY2hhbmdlUXVldWUsIGV2ZW50TmFtZXMoKS53ZWJraXRmdWxsc2NyZWVuY2hhbmdl
RXZlbnQsIC8qIHNob3VsZE5vdGlmeU1lZGlhRWxlbWVudCAqLyB0cnVlKTsKKyAgICBkaXNwYXRj
aEZ1bGxTY3JlZW5DaGFuZ2VPckVycm9yRXZlbnQoZXJyb3JRdWV1ZSwgZXZlbnROYW1lcygpLndl
YmtpdGZ1bGxzY3JlZW5lcnJvckV2ZW50LCAvKiBzaG91bGROb3RpZnlNZWRpYUVsZW1lbnQgKi8g
ZmFsc2UpOwogfQogCi12b2lkIERvY3VtZW50OjpkaXNwYXRjaEZ1bGxTY3JlZW5DaGFuZ2VPckVy
cm9yRXZlbnQoRGVxdWU8UmVmUHRyPE5vZGU+PiYgcXVldWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnROYW1lKQordm9pZCBEb2N1bWVudDo6ZGlzcGF0Y2hGdWxsU2NyZWVuQ2hhbmdlT3JFcnJv
ckV2ZW50KERlcXVlPFJlZlB0cjxOb2RlPj4mIHF1ZXVlLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50TmFtZSwgYm9vbCBzaG91bGROb3RpZnlNZWRpYUVsZW1lbnQpCiB7CiAgICAgd2hpbGUgKCFx
dWV1ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBxdWV1ZS50YWtl
Rmlyc3QoKTsKQEAgLTU0MDYsNiArNTQwNyw4IEBAIHZvaWQgRG9jdW1lbnQ6OmRpc3BhdGNoRnVs
bFNjcmVlbkNoYW5nZU8KICAgICAgICAgaWYgKCFub2RlLT5pbkRvY3VtZW50KCkpCiAgICAgICAg
ICAgICBxdWV1ZS5hcHBlbmQoZG9jdW1lbnRFbGVtZW50KCkpOwogCisgICAgICAgIGlmIChzaG91
bGROb3RpZnlNZWRpYUVsZW1lbnQgJiYgaXNNZWRpYUVsZW1lbnQobm9kZS5nZXQoKSkpCisgICAg
ICAgICAgICB0b0hUTUxNZWRpYUVsZW1lbnQobm9kZS5nZXQoKSktPmVudGVyZWRPckV4aXRlZEZ1
bGxzY3JlZW4oKTsKICAgICAgICAgbm9kZS0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZSwgdHJ1ZSwgZmFsc2UpKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAkocmV2aXNpb24gMTU2ODE1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyNTIsNyArMTI1Miw3IEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0
cjxIVE1MQ29sbGVjdGlvbj4gZW5zdXJlQ2FjaGVkQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSk7
CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgdm9pZCBkaXNwYXRjaEZ1bGxTY3Jl
ZW5DaGFuZ2VPckVycm9yRXZlbnQoRGVxdWU8UmVmUHRyPE5vZGU+PiYsIGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnROYW1lKTsKKyAgICB2b2lkIGRpc3BhdGNoRnVsbFNjcmVlbkNoYW5nZU9yRXJy
b3JFdmVudChEZXF1ZTxSZWZQdHI8Tm9kZT4+JiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5h
bWUsIGJvb2wgc2hvdWxkTm90aWZ5TWVkaWFFbGVtZW50KTsKICAgICB2b2lkIGNsZWFyRnVsbHNj
cmVlbkVsZW1lbnRTdGFjaygpOwogICAgIHZvaWQgcG9wRnVsbHNjcmVlbkVsZW1lbnRTdGFjaygp
OwogICAgIHZvaWQgcHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soRWxlbWVudCopOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAJKHJldmlzaW9uIDE1NjgxNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaE1lZGlhdG9yLmgiCiAjaW5j
bHVkZSAiRXZlbnRSZXRhcmdldGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVk
ZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNp
bmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oIgpAQCAtMTExLDEyICsxMTIsMTggQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3Bh
dGNoKCkKICAgICBXaW5kb3dFdmVudENvbnRleHQgd2luZG93RXZlbnRDb250ZXh0KG1fZXZlbnQu
Z2V0KCksIG1fbm9kZS5nZXQoKSwgdG9wRXZlbnRDb250ZXh0KCkpOwogICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxEaXNwYXRjaEV2ZW50KCZtX25vZGUtPmRvY3VtZW50KCksICptX2V2ZW50LCB3aW5kb3dFdmVu
dENvbnRleHQud2luZG93KCksIG1fbm9kZS5nZXQoKSwgbV9ldmVudFBhdGgpOwogCi0gICAgdm9p
ZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQ7Ci0gICAgaWYgKGRpc3BhdGNoRXZlbnRQ
cmVQcm9jZXNzKHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KSA9PSBDb250aW51ZURpc3Bh
dGNoaW5nKQotICAgICAgICBpZiAoZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKHdpbmRvd0V2ZW50
Q29udGV4dCkgPT0gQ29udGludWVEaXNwYXRjaGluZykKKyAgICBJbnB1dEVsZW1lbnRDbGlja1N0
YXRlIGNsaWNrSGFuZGxpbmdTdGF0ZTsKKyAgICBpZiAoaXNIVE1MSW5wdXRFbGVtZW50KG1fbm9k
ZS5nZXQoKSkpCisgICAgICAgIHRvSFRNTElucHV0RWxlbWVudChtX25vZGUuZ2V0KCkpLT53aWxs
RGlzcGF0Y2hFdmVudCgqbV9ldmVudC5nZXQoKSwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKKworICAg
IGlmICghbV9ldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgJiYgIW1fZXZlbnRQYXRoLmlzRW1w
dHkoKSkgeworICAgICAgICBpZiAoZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKHdpbmRvd0V2ZW50
Q29udGV4dCkgPT0gQ29udGludWVEaXNwYXRjaGluZykgewogICAgICAgICAgICAgaWYgKGRpc3Bh
dGNoRXZlbnRBdFRhcmdldCgpID09IENvbnRpbnVlRGlzcGF0Y2hpbmcpCiAgICAgICAgICAgICAg
ICAgZGlzcGF0Y2hFdmVudEF0QnViYmxpbmcod2luZG93RXZlbnRDb250ZXh0KTsKLSAgICBkaXNw
YXRjaEV2ZW50UG9zdFByb2Nlc3MocHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKGNsaWNrSGFuZGxp
bmdTdGF0ZSk7CiAKICAgICAvLyBFbnN1cmUgdGhhdCBhZnRlciBldmVudCBkaXNwYXRjaCwgdGhl
IGV2ZW50J3MgdGFyZ2V0IG9iamVjdCBpcyB0aGUKICAgICAvLyBvdXRlcm1vc3Qgc2hhZG93IERP
TSBib3VuZGFyeS4KQEAgLTEyNywxMyArMTM0LDYgQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoKCkKICAgICByZXR1cm4gIW1fZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKIH0KIAot
aW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aEV2ZW50UHJlUHJvY2Vzcyh2b2lkKiYgcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpCi17
Ci0gICAgLy8gR2l2ZSB0aGUgdGFyZ2V0IG5vZGUgYSBjaGFuY2UgdG8gZG8gc29tZSB3b3JrIGJl
Zm9yZSBET00gZXZlbnQgaGFuZGxlcnMgZ2V0IGEgY3JhY2suCi0gICAgcHJlRGlzcGF0Y2hFdmVu
dEhhbmRsZXJSZXN1bHQgPSBtX25vZGUtPnByZURpc3BhdGNoRXZlbnRIYW5kbGVyKG1fZXZlbnQu
Z2V0KCkpOwotICAgIHJldHVybiAobV9ldmVudFBhdGguaXNFbXB0eSgpIHx8IG1fZXZlbnQtPnBy
b3BhZ2F0aW9uU3RvcHBlZCgpKSA/IERvbmVEaXNwYXRjaGluZyA6IENvbnRpbnVlRGlzcGF0Y2hp
bmc7Ci19Ci0KIGlubGluZSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIEV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hFdmVudEF0Q2FwdHVyaW5nKFdpbmRvd0V2ZW50Q29udGV4dCYgd2luZG93RXZl
bnRDb250ZXh0KQogewogICAgIC8vIFRyaWdnZXIgY2FwdHVyaW5nIGV2ZW50IGhhbmRsZXJzLCBz
dGFydGluZyBhdCB0aGUgdG9wIGFuZCB3b3JraW5nIG91ciB3YXkgZG93bi4KQEAgLTE4MywxNCAr
MTgzLDE0IEBAIGlubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmUKICAgICB9
CiB9CiAKLWlubGluZSB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudFBvc3RQcm9j
ZXNzKHZvaWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KQoraW5saW5lIHZvaWQgRXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoY29uc3QgSW5wdXRFbGVtZW50
Q2xpY2tTdGF0ZSYgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSkKIHsKICAgICBtX2V2ZW50LT5zZXRU
YXJnZXQoRXZlbnRSZXRhcmdldGVyOjpldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyht
X25vZGUuZ2V0KCkpKTsKICAgICBtX2V2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KDApOwogICAgIG1f
ZXZlbnQtPnNldEV2ZW50UGhhc2UoMCk7CiAKLSAgICAvLyBQYXNzIHRoZSBkYXRhIGZyb20gdGhl
IHByZURpc3BhdGNoRXZlbnRIYW5kbGVyIHRvIHRoZSBwb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIu
Ci0gICAgbV9ub2RlLT5wb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIobV9ldmVudC5nZXQoKSwgcHJl
RGlzcGF0Y2hFdmVudEhhbmRsZXJSZXN1bHQpOworICAgIGlmIChJbnB1dEVsZW1lbnRDbGlja1N0
YXRlLnN0YXRlZnVsKQorICAgICAgICB0b0hUTUxJbnB1dEVsZW1lbnQobV9ub2RlLmdldCgpKS0+
ZGlkRGlzcGF0Y2hDbGlja0V2ZW50KCptX2V2ZW50LmdldCgpLCBJbnB1dEVsZW1lbnRDbGlja1N0
YXRlKTsKIAogICAgIC8vIENhbGwgZGVmYXVsdCBldmVudCBoYW5kbGVycy4gV2hpbGUgdGhlIERP
TSBkb2VzIGhhdmUgYSBjb25jZXB0IG9mIHByZXZlbnRpbmcKICAgICAvLyBkZWZhdWx0IGhhbmRs
aW5nLCB0aGUgZGV0YWlsIG9mIHdoaWNoIGhhbmRsZXJzIGFyZSBjYWxsZWQgaXMgYW4gaW50ZXJu
YWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgJKHJldmlzaW9uIDE1Njgx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNiArNDUsNyBAQCBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CiBjbGFzcyBTaGFk
b3dSb290OwogY2xhc3MgVHJlZVNjb3BlOwogY2xhc3MgV2luZG93RXZlbnRDb250ZXh0Oworc3Ry
dWN0IElucHV0RWxlbWVudENsaWNrU3RhdGU7CiAKIGVudW0gRXZlbnREaXNwYXRjaENvbnRpbnVh
dGlvbiB7CiAgICAgQ29udGludWVEaXNwYXRjaGluZywKQEAgLTY3LDExICs2OCwxMCBAQCBwcml2
YXRlOgogICAgIEV2ZW50RGlzcGF0Y2hlcihOb2RlKiwgUGFzc1JlZlB0cjxFdmVudD4pOwogICAg
IGNvbnN0IEV2ZW50Q29udGV4dCogdG9wRXZlbnRDb250ZXh0KCk7CiAKLSAgICBFdmVudERpc3Bh
dGNoQ29udGludWF0aW9uIGRpc3BhdGNoRXZlbnRQcmVQcm9jZXNzKHZvaWQqJiBwcmVEaXNwYXRj
aEV2ZW50SGFuZGxlclJlc3VsdCk7CiAgICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNw
YXRjaEV2ZW50QXRDYXB0dXJpbmcoV2luZG93RXZlbnRDb250ZXh0Jik7CiAgICAgRXZlbnREaXNw
YXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRUYXJnZXQoKTsKICAgICB2b2lkIGRpc3Bh
dGNoRXZlbnRBdEJ1YmJsaW5nKFdpbmRvd0V2ZW50Q29udGV4dCYpOwotICAgIHZvaWQgZGlzcGF0
Y2hFdmVudFBvc3RQcm9jZXNzKHZvaWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KTsK
KyAgICB2b2lkIGRpc3BhdGNoRXZlbnRQb3N0UHJvY2Vzcyhjb25zdCBJbnB1dEVsZW1lbnRDbGlj
a1N0YXRlJik7CiAKICAgICBFdmVudFBhdGggbV9ldmVudFBhdGg7CiAgICAgUmVmUHRyPE5vZGU+
IG1fbm9kZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuY3Bw
CShyZXZpc2lvbiAxNTY4MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0NoZWNrYm94SW5wdXRU
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMjUgKzY4LDIxIEBAIHZvaWQgQ2hlY2tib3hJ
bnB1dFR5cGU6OmhhbmRsZUtleXVwRXZlbnQKICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrSWZB
Y3RpdmUoZXZlbnQpOwogfQogCi1Pd25QdHI8Q2xpY2tIYW5kbGluZ1N0YXRlPiBDaGVja2JveElu
cHV0VHlwZTo6d2lsbERpc3BhdGNoQ2xpY2soKQordm9pZCBDaGVja2JveElucHV0VHlwZTo6d2ls
bERpc3BhdGNoQ2xpY2soSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8g
QW4gZXZlbnQgaGFuZGxlciBjYW4gdXNlIHByZXZlbnREZWZhdWx0IG9yICJyZXR1cm4gZmFsc2Ui
IHRvIHJldmVyc2UgdGhlIGNoZWNraW5nIHdlIGRvIGhlcmUuCi0gICAgLy8gVGhlIENsaWNrSGFu
ZGxpbmdTdGF0ZSBvYmplY3QgY29udGFpbnMgd2hhdCB3ZSBuZWVkIHRvIHVuZG8gd2hhdCB3ZSBk
aWQgaGVyZSBpbiBkaWREaXNwYXRjaENsaWNrLgorICAgIC8vIFRoZSBJbnB1dEVsZW1lbnRDbGlj
a1N0YXRlIG9iamVjdCBjb250YWlucyB3aGF0IHdlIG5lZWQgdG8gdW5kbyB3aGF0IHdlIGRpZCBo
ZXJlIGluIGRpZERpc3BhdGNoQ2xpY2suCiAKLSAgICBPd25QdHI8Q2xpY2tIYW5kbGluZ1N0YXRl
PiBzdGF0ZSA9IGFkb3B0UHRyKG5ldyBDbGlja0hhbmRsaW5nU3RhdGUpOworICAgIHN0YXRlLmNo
ZWNrZWQgPSBlbGVtZW50KCkuY2hlY2tlZCgpOworICAgIHN0YXRlLmluZGV0ZXJtaW5hdGUgPSBl
bGVtZW50KCkuaW5kZXRlcm1pbmF0ZSgpOwogCi0gICAgc3RhdGUtPmNoZWNrZWQgPSBlbGVtZW50
KCkuY2hlY2tlZCgpOwotICAgIHN0YXRlLT5pbmRldGVybWluYXRlID0gZWxlbWVudCgpLmluZGV0
ZXJtaW5hdGUoKTsKLQotICAgIGlmIChzdGF0ZS0+aW5kZXRlcm1pbmF0ZSkKKyAgICBpZiAoc3Rh
dGUuaW5kZXRlcm1pbmF0ZSkKICAgICAgICAgZWxlbWVudCgpLnNldEluZGV0ZXJtaW5hdGUoZmFs
c2UpOwogCi0gICAgZWxlbWVudCgpLnNldENoZWNrZWQoIXN0YXRlLT5jaGVja2VkLCBEaXNwYXRj
aENoYW5nZUV2ZW50KTsKLQotICAgIHJldHVybiBzdGF0ZS5yZWxlYXNlKCk7CisgICAgZWxlbWVu
dCgpLnNldENoZWNrZWQoIXN0YXRlLmNoZWNrZWQsIERpc3BhdGNoQ2hhbmdlRXZlbnQpOwogfQog
Ci12b2lkIENoZWNrYm94SW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNrKEV2ZW50KiBldmVudCwg
Y29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJiBzdGF0ZSkKK3ZvaWQgQ2hlY2tib3hJbnB1dFR5cGU6
OmRpZERpc3BhdGNoQ2xpY2soRXZlbnQqIGV2ZW50LCBjb25zdCBJbnB1dEVsZW1lbnRDbGlja1N0
YXRlJiBzdGF0ZSkKIHsKICAgICBpZiAoZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBldmVu
dC0+ZGVmYXVsdEhhbmRsZWQoKSkgewogICAgICAgICBlbGVtZW50KCkuc2V0SW5kZXRlcm1pbmF0
ZShzdGF0ZS5pbmRldGVybWluYXRlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2hlY2ti
b3hJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0NoZWNrYm94
SW5wdXRUeXBlLmgJKHJldmlzaW9uIDE1NjgxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2hl
Y2tib3hJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgYm9vbCB2YWx1ZU1pc3NpbmcoY29uc3QgU3RyaW5nJikgY29uc3QgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCBTdHJpbmcgdmFsdWVNaXNzaW5nVGV4dCgpIGNvbnN0IE9WRVJS
SURFOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXl1cEV2ZW50KEtleWJvYXJkRXZlbnQqKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIE93blB0cjxDbGlja0hhbmRsaW5nU3RhdGU+IHdpbGxEaXNw
YXRjaENsaWNrKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZERpc3BhdGNoQ2xpY2so
RXZlbnQqLCBjb25zdCBDbGlja0hhbmRsaW5nU3RhdGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgd2lsbERpc3BhdGNoQ2xpY2soSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBkaWREaXNwYXRjaENsaWNrKEV2ZW50KiwgY29uc3QgSW5wdXRF
bGVtZW50Q2xpY2tTdGF0ZSYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrYm94
KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW5kZXRlcm1pbmF0
ZUFwcGVhcmFuY2UoKSBjb25zdCBPVkVSUklERTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NjgxNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMTAsMjYg
KzExMTAsMTkgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZQogICAg
IHNldEF1dG9maWxsZWQoZmFsc2UpOwogfQogCi12b2lkKiBIVE1MSW5wdXRFbGVtZW50OjpwcmVE
aXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OndpbGxEaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCwgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1
dEV2ZW50ICYmIG1faW5wdXRUeXBlLT5zaG91bGRTdWJtaXRJbXBsaWNpdGx5KGV2ZW50KSkgewot
ICAgICAgICBldmVudC0+c3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgIHJldHVybiAwOworICAg
IGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50ICYmIG1faW5w
dXRUeXBlLT5zaG91bGRTdWJtaXRJbXBsaWNpdGx5KCZldmVudCkpCisgICAgICAgIGV2ZW50LnN0
b3BQcm9wYWdhdGlvbigpOworICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNs
aWNrRXZlbnQgJiYgZXZlbnQuaXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KCZldmVudCkt
PmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgbV9pbnB1dFR5cGUtPndpbGxEaXNw
YXRjaENsaWNrKHN0YXRlKTsKKyAgICAgICAgc3RhdGUuc3RhdGVmdWwgPSB0cnVlOwogICAgIH0K
LSAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgc3RhdGljX2Nh
c3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgIT0gTGVmdEJ1dHRvbikKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgLy8gRklYTUU6IENoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBjYXNl
cyB3aGVyZSB0aGlzIGFjdHVhbGx5IGVuZHMgdXAgbGVha2luZy4KLSAgICByZXR1cm4gbV9pbnB1
dFR5cGUtPndpbGxEaXNwYXRjaENsaWNrKCkubGVha1B0cigpOwogfQogCi12b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OnBvc3REaXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQsIHZvaWQqIGRh
dGFGcm9tUHJlRGlzcGF0Y2gpCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZERpc3BhdGNoQ2xp
Y2tFdmVudChFdmVudCYgZXZlbnQsIGNvbnN0IElucHV0RWxlbWVudENsaWNrU3RhdGUmIHN0YXRl
KQogewotICAgIE93blB0cjxDbGlja0hhbmRsaW5nU3RhdGU+IHN0YXRlID0gYWRvcHRQdHIoc3Rh
dGljX2Nhc3Q8Q2xpY2tIYW5kbGluZ1N0YXRlKj4oZGF0YUZyb21QcmVEaXNwYXRjaCkpOwotICAg
IGlmICghc3RhdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2lucHV0VHlwZS0+ZGlkRGlzcGF0
Y2hDbGljayhldmVudCwgKnN0YXRlKTsKKyAgICBtX2lucHV0VHlwZS0+ZGlkRGlzcGF0Y2hDbGlj
aygmZXZlbnQsIHN0YXRlKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuaAkocmV2aXNpb24gMTU2ODE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDE4IEBAIGNsYXNzIFVSTDsK
IGNsYXNzIExpc3RBdHRyaWJ1dGVUYXJnZXRPYnNlcnZlcjsKIHN0cnVjdCBEYXRlVGltZUNob29z
ZXJQYXJhbWV0ZXJzOwogCitzdHJ1Y3QgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSB7CisgICAgSW5w
dXRFbGVtZW50Q2xpY2tTdGF0ZSgpCisgICAgICAgIDogc3RhdGVmdWwoZmFsc2UpCisgICAgICAg
ICwgY2hlY2tlZChmYWxzZSkKKyAgICAgICAgLCBpbmRldGVybWluYXRlKGZhbHNlKQorICAgIHsg
fQorICAgIGJvb2wgc3RhdGVmdWw7CisgICAgYm9vbCBjaGVja2VkOworICAgIGJvb2wgaW5kZXRl
cm1pbmF0ZTsKKyAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gY2hlY2tlZFJhZGlvQnV0dG9u
OworfTsKKwogY2xhc3MgSFRNTElucHV0RWxlbWVudCA6IHB1YmxpYyBIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTElucHV0RWxl
bWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYsIEhUTUxGb3JtRWxl
bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKQEAgLTIwMSw2ICsyMTMsOSBAQCBwdWJsaWM6
CiAKICAgICBTdHJpbmcgYWx0VGV4dCgpIGNvbnN0OwogCisgICAgdm9pZCB3aWxsRGlzcGF0Y2hF
dmVudChFdmVudCYsIElucHV0RWxlbWVudENsaWNrU3RhdGUmKTsKKyAgICB2b2lkIGRpZERpc3Bh
dGNoQ2xpY2tFdmVudChFdmVudCYsIGNvbnN0IElucHV0RWxlbWVudENsaWNrU3RhdGUmKTsKKwog
ICAgIGludCBtYXhSZXN1bHRzKCkgY29uc3QgeyByZXR1cm4gbV9tYXhSZXN1bHRzOyB9CiAKICAg
ICBTdHJpbmcgZGVmYXVsdFZhbHVlKCkgY29uc3Q7CkBAIC0zNTYsOSArMzcxLDYgQEAgcHJpdmF0
ZToKIAogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwogCi0gICAgdmlydHVhbCB2b2lkKiBwcmVE
aXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0RGlzcGF0
Y2hFdmVudEhhbmRsZXIoRXZlbnQqLCB2b2lkKiBkYXRhRnJvbVByZURpc3BhdGNoKTsKLQogICAg
IHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmKSBjb25zdCBPVkVS
UklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNJblJhbmdlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzT3V0T2ZSYW5nZSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTY4MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODI0LDE0ICs0ODI0LDYg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptYXJrQ2FwdGlvbkFuZFN1YgogCiAjZW5kaWYKIAot
dm9pZCogSFRNTE1lZGlhRWxlbWVudDo6cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQotewotICAgIGlmIChldmVudCAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53
ZWJraXRmdWxsc2NyZWVuY2hhbmdlRXZlbnQpCi0gICAgICAgIGNvbmZpZ3VyZU1lZGlhQ29udHJv
bHMoKTsKLQotICAgIHJldHVybiAwOwotfQotCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0
ZU1lZGlhUGxheWVyKCkKIHsKICNpZiBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDE1NjgxNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODMsNiAr
MzgzLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIHdpbGxSZXNwb25kVG9Nb3VzZUNs
aWNrRXZlbnRzKCkgT1ZFUlJJREU7CiAKKyAgICB2b2lkIGVudGVyZWRPckV4aXRlZEZ1bGxzY3Jl
ZW4oKSB7IGNvbmZpZ3VyZU1lZGlhQ29udHJvbHMoKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgSFRN
TE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmLCBib29sKTsKICAg
ICB2aXJ0dWFsIH5IVE1MTWVkaWFFbGVtZW50KCk7CkBAIC02MDcsOCArNjA5LDYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHByZXBhcmVNZWRpYUZyYWdtZW50VVJJKCk7CiAgICAgdm9pZCBhcHBseU1l
ZGlhRnJhZ21lbnRVUkkoKTsKIAotICAgIHZpcnR1YWwgdm9pZCogcHJlRGlzcGF0Y2hFdmVudEhh
bmRsZXIoRXZlbnQqKTsKLQogICAgIHZvaWQgY2hhbmdlTmV0d29ya1N0YXRlRnJvbUxvYWRpbmdU
b0lkbGUoKTsKIAogICAgIHZvaWQgcmVtb3ZlQmVoYXZpb3JzUmVzdHJpY3Rpb25zQWZ0ZXJGaXJz
dFVzZXJHZXN0dXJlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCShyZXZpc2lv
biAxNTY4MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY4MiwxMiArNjgyLDExIEBAIGJvb2wgSW5wdXRUeXBlOjpjYW5TZXRWYWx1ZShj
b25zdCBTdHJpbmcKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotT3duUHRyPENsaWNrSGFuZGxpbmdT
dGF0ZT4gSW5wdXRUeXBlOjp3aWxsRGlzcGF0Y2hDbGljaygpCit2b2lkIElucHV0VHlwZTo6d2ls
bERpc3BhdGNoQ2xpY2soSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSYpCiB7Ci0gICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLXZvaWQgSW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNrKEV2ZW50KiwgY29u
c3QgQ2xpY2tIYW5kbGluZ1N0YXRlJikKK3ZvaWQgSW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNr
KEV2ZW50KiwgY29uc3QgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSYpCiB7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9JbnB1dFR5cGUuaAkocmV2aXNpb24gMTU2ODE1KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9JbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTggKzYxLDEwIEBAIGNsYXNz
IE5vZGU7CiBjbGFzcyBSZW5kZXJBcmVuYTsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgVG91
Y2hFdmVudDsKK3N0cnVjdCBJbnB1dEVsZW1lbnRDbGlja1N0YXRlOwogCiB0eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwogCi1zdHJ1Y3QgQ2xpY2tIYW5kbGluZ1N0YXRlIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLSAgCi1wdWJsaWM6Ci0gICAgYm9vbCBjaGVja2VkOwotICAgIGJv
b2wgaW5kZXRlcm1pbmF0ZTsKLSAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gY2hlY2tlZFJh
ZGlvQnV0dG9uOwotfTsKLQogLy8gQW4gSW5wdXRUeXBlIG9iamVjdCByZXByZXNlbnRzIHRoZSB0
eXBlLXNwZWNpZmljIHBhcnQgb2YgYW4gSFRNTElucHV0RWxlbWVudC4KIC8vIERvIG5vdCBleHBv
c2UgaW5zdGFuY2VzIG9mIElucHV0VHlwZSBhbmQgY2xhc3NlcyBkZXJpdmVkIGZyb20gaXQgdG8g
Y2xhc3NlcwogLy8gb3RoZXIgdGhhbiBIVE1MSW5wdXRFbGVtZW50LgpAQCAtMTg1LDggKzE3Nyw4
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVDbGlja0V2ZW50KE1vdXNlRXZl
bnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTW91c2VEb3duRXZlbnQoTW91c2VFdmVudCop
OwotICAgIHZpcnR1YWwgT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gd2lsbERpc3BhdGNoQ2xp
Y2soKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRGlzcGF0Y2hDbGljayhFdmVudCosIGNvbnN0IENs
aWNrSGFuZGxpbmdTdGF0ZSYpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsRGlzcGF0Y2hDbGljayhJ
bnB1dEVsZW1lbnRDbGlja1N0YXRlJik7CisgICAgdmlydHVhbCB2b2lkIGRpZERpc3BhdGNoQ2xp
Y2soRXZlbnQqLCBjb25zdCBJbnB1dEVsZW1lbnRDbGlja1N0YXRlJik7CiAgICAgdmlydHVhbCB2
b2lkIGhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
S2V5cHJlc3NFdmVudChLZXlib2FyZEV2ZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L1JhZGlvSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1Jh
ZGlvSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTU2ODE1KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9SYWRpb0lucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwzMyArMTQ1LDI5IEBA
IGJvb2wgUmFkaW9JbnB1dFR5cGU6OnNob3VsZFNlbmRDaGFuZ2VFdmUKICAgICByZXR1cm4gZWxl
bWVudCgpLmNoZWNrZWQoKTsKIH0KIAotT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gUmFkaW9J
bnB1dFR5cGU6OndpbGxEaXNwYXRjaENsaWNrKCkKK3ZvaWQgUmFkaW9JbnB1dFR5cGU6OndpbGxE
aXNwYXRjaENsaWNrKElucHV0RWxlbWVudENsaWNrU3RhdGUmIHN0YXRlKQogewogICAgIC8vIEFu
IGV2ZW50IGhhbmRsZXIgY2FuIHVzZSBwcmV2ZW50RGVmYXVsdCBvciAicmV0dXJuIGZhbHNlIiB0
byByZXZlcnNlIHRoZSBzZWxlY3Rpb24gd2UgZG8gaGVyZS4KLSAgICAvLyBUaGUgQ2xpY2tIYW5k
bGluZ1N0YXRlIG9iamVjdCBjb250YWlucyB3aGF0IHdlIG5lZWQgdG8gdW5kbyB3aGF0IHdlIGRp
ZCBoZXJlIGluIGRpZERpc3BhdGNoQ2xpY2suCisgICAgLy8gVGhlIElucHV0RWxlbWVudENsaWNr
U3RhdGUgb2JqZWN0IGNvbnRhaW5zIHdoYXQgd2UgbmVlZCB0byB1bmRvIHdoYXQgd2UgZGlkIGhl
cmUgaW4gZGlkRGlzcGF0Y2hDbGljay4KIAogICAgIC8vIFdlIHdhbnQgcmFkaW8gZ3JvdXBzIHRv
IGVuZCB1cCBpbiBzYW5lIHN0YXRlcywgaS5lLiwgdG8gaGF2ZSBzb21ldGhpbmcgY2hlY2tlZC4K
ICAgICAvLyBUaGVyZWZvcmUgaWYgbm90aGluZyBpcyBjdXJyZW50bHkgc2VsZWN0ZWQsIHdlIHdv
bid0IGFsbG93IHRoZSB1cGNvbWluZyBhY3Rpb24gdG8gYmUgInVuZG9uZSIsIHNpbmNlCiAgICAg
Ly8gd2Ugd2FudCBzb21lIG9iamVjdCBpbiB0aGUgcmFkaW8gZ3JvdXAgdG8gYWN0dWFsbHkgZ2V0
IHNlbGVjdGVkLgogCi0gICAgT3duUHRyPENsaWNrSGFuZGxpbmdTdGF0ZT4gc3RhdGUgPSBhZG9w
dFB0cihuZXcgQ2xpY2tIYW5kbGluZ1N0YXRlKTsKLQotICAgIHN0YXRlLT5jaGVja2VkID0gZWxl
bWVudCgpLmNoZWNrZWQoKTsKLSAgICBzdGF0ZS0+Y2hlY2tlZFJhZGlvQnV0dG9uID0gZWxlbWVu
dCgpLmNoZWNrZWRSYWRpb0J1dHRvbkZvckdyb3VwKCk7CisgICAgc3RhdGUuY2hlY2tlZCA9IGVs
ZW1lbnQoKS5jaGVja2VkKCk7CisgICAgc3RhdGUuY2hlY2tlZFJhZGlvQnV0dG9uID0gZWxlbWVu
dCgpLmNoZWNrZWRSYWRpb0J1dHRvbkZvckdyb3VwKCk7CiAKICNpZiBQTEFURk9STShJT1MpCi0g
ICAgc3RhdGUtPmluZGV0ZXJtaW5hdGUgPSBlbGVtZW50KCkuaW5kZXRlcm1pbmF0ZSgpOworICAg
IHN0YXRlLmluZGV0ZXJtaW5hdGUgPSBlbGVtZW50KCkuaW5kZXRlcm1pbmF0ZSgpOwogCiAgICAg
aWYgKGVsZW1lbnQoKS5pbmRldGVybWluYXRlKCkpCiAgICAgICAgIGVsZW1lbnQoKS5zZXRJbmRl
dGVybWluYXRlKGZhbHNlKTsKICNlbmRpZgogCiAgICAgZWxlbWVudCgpLnNldENoZWNrZWQodHJ1
ZSwgRGlzcGF0Y2hDaGFuZ2VFdmVudCk7Ci0KLSAgICByZXR1cm4gc3RhdGUucmVsZWFzZSgpOwog
fQogCi12b2lkIFJhZGlvSW5wdXRUeXBlOjpkaWREaXNwYXRjaENsaWNrKEV2ZW50KiBldmVudCwg
Y29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJiBzdGF0ZSkKK3ZvaWQgUmFkaW9JbnB1dFR5cGU6OmRp
ZERpc3BhdGNoQ2xpY2soRXZlbnQqIGV2ZW50LCBjb25zdCBJbnB1dEVsZW1lbnRDbGlja1N0YXRl
JiBzdGF0ZSkKIHsKICAgICBpZiAoZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBldmVudC0+
ZGVmYXVsdEhhbmRsZWQoKSkgewogICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBzZWxl
Y3RlZCByYWRpbyBidXR0b24gaWYgcG9zc2libGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L1JhZGlvSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9SYWRp
b0lucHV0VHlwZS5oCShyZXZpc2lvbiAxNTY4MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1Jh
ZGlvSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDggQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5dXBFdmVudChLZXlib2FyZEV2ZW50KikgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCop
IGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTZW5kQ2hhbmdlRXZlbnRB
ZnRlckNoZWNrZWRDaGFuZ2VkKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBPd25QdHI8Q2xpY2tI
YW5kbGluZ1N0YXRlPiB3aWxsRGlzcGF0Y2hDbGljaygpIE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dm9pZCBkaWREaXNwYXRjaENsaWNrKEV2ZW50KiwgY29uc3QgQ2xpY2tIYW5kbGluZ1N0YXRlJikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxEaXNwYXRjaENsaWNrKElucHV0RWxlbWVu
dENsaWNrU3RhdGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGlzcGF0Y2hDbGlj
ayhFdmVudCosIGNvbnN0IElucHV0RWxlbWVudENsaWNrU3RhdGUmKSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIGJvb2wgaXNSYWRpb0J1dHRvbigpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0luZGV0ZXJtaW5hdGVBcHBlYXJhbmNlKCkgY29uc3QgT1ZFUlJJREU7CiB9
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>