<?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>58550</bug_id>
          
          <creation_ts>2011-04-14 09:22:55 -0700</creation_ts>
          <short_desc>[Chromium] Media Stream API: add the Chromium WebKit interfaces</short_desc>
          <delta_ts>2012-01-11 23:36:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>56922</dependson>
    
    <dependson>60177</dependson>
          <blocked>56459</blocked>
    
    <blocked>56587</blocked>
    
    <blocked>71008</blocked>
    
    <blocked>76150</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Leandro Graciá Gil">leandrogracia</reporter>
          <assigned_to name="Tommy Widenflycht">tommyw</assigned_to>
          <cc>abarth</cc>
    
    <cc>adam.bergkvist</cc>
    
    <cc>adman.com</cc>
    
    <cc>danilo.eu</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>fishd</cc>
    
    <cc>grunell</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>harald</cc>
    
    <cc>tbassetto+bugzilla</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjjeon</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>385801</commentid>
    <comment_count>0</comment_count>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2011-04-14 09:22:55 -0700</bug_when>
    <thetext>Implement the WebKit Chromium code providing the client and controller interfaces for the MediaStream API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454569</commentid>
    <comment_count>1</comment_count>
      <attachid>104670</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-08-22 06:32:34 -0700</bug_when>
    <thetext>Created attachment 104670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454678</commentid>
    <comment_count>2</comment_count>
      <attachid>104670</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-22 10:40:48 -0700</bug_when>
    <thetext>Comment on attachment 104670
Patch

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

We&apos;ll need fishd to review this patch b/c of the Chromium API change.

&gt; Source/WebKit/chromium/src/MediaStreamClientProxy.cpp:52
&gt; +    if (m_client)
&gt; +        // Ownership of the WebMediaStreamController is transferred to the client.
&gt; +        m_client-&gt;setController(new WebMediaStreamController(controller));

nit: Multi-line if statements need { } even if they only contain one statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455209</commentid>
    <comment_count>3</comment_count>
      <attachid>104670</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-08-22 23:20:21 -0700</bug_when>
    <thetext>Comment on attachment 104670
Patch

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

&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:36
&gt; +enum WebGenerateStreamOptionFlag {

nit: one new header file per type.

nit: the enum name is WebFooOptionFlag, but the values are WebFooRequestX.  we have a convention of naming enums like so:

  enum WebFoo {
      WebFooX,
      WebFooY,
      WebFooZ
  };

&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:42
&gt; +typedef unsigned WebGenerateStreamOptionFlags;

we normally just accomplish this with a comment.  i&apos;d give generateStream an int
parameter with a name like optionFlags.  then, i&apos;d comment that optionFlags can
be a bit-wise combination of WebGenerateStreamOptionFlag values.

note:  If you only intend this enum to be used with this interface, then you
could just define WebMediaStreamClient::OptionFlag.

&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:48
&gt; +    // The controller is valid until mediaStreamDestroyed() is invoked.

these comments seem to contradict one another:

&quot;The controller is valid until mediaStreamDestroyed() is invoked.&quot; says that
the WebMediaStreamClient does not have ownership of the given pointer since
something else is responsible for telling you when it gets invalidated.

&quot;Ownership of the WebMediaStreamController is transferred to the client.&quot; says
exactly the opposite.

&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:51
&gt; +    virtual void mediaStreamDestroyed() = 0;

maybe this method should be named &quot;mediaStreamControllerDestroyed()&quot; to better
indicate that the WebMediaStreamController has been destroyed?

why do we need this method?  why not just have WebKit call setController(0) to
tell the client when the controller is no longer valid?

&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:53
&gt; +    virtual void generateStream(int requestId, WebGenerateStreamOptionFlags, const WebSecurityOrigin&amp;) = 0;

what is this &quot;requestId&quot;?

&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:56
&gt; +    virtual void processSignalingMessage(int peerConnectionId, const WebString&amp; message) = 0;

what is this &quot;peerConnectionId&quot;?  why do we have identifiers here and not objects?

do these identifiers exist to support chrome&apos;s multi-process architecture?

it seems like perhaps there is a peer connection interface that should be used
here?  won&apos;t we have something like these methods for direct peer connection
usage?

&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:59
&gt; +    virtual void newPeerConnection(int peerConnectionId, const WebString&amp; configuration) = 0;

what is the format of the &quot;configuration&quot; string, or how is it defined?  documentation seems to be missing.

&gt; Source/WebKit/chromium/public/WebMediaStreamController.h:45
&gt; +    // Same as WebCore::NavigatorUserMediaError::PERMISSION_DENIED.

we normally avoid comments that mention WebCore implementation details in
WebKit API headers.  no one will think to ever fix these comments when they
become untrue.  WebCore is hacked on by a lot of non-Chromium folks!!

&gt; Source/WebKit/chromium/public/WebMediaStreamController.h:50
&gt; +    WEBKIT_EXPORT void streamGenerated(int requestId, const WebString&amp; streamLabel, WebMediaStreamTrackList&amp;);

it seems like there is a whole processing model for WebMediaStreamController
and WebMediaStreamClient that could use some documentation.  it is not obvious,
if i am implementing WebMediaStreamClient, how I am to use WebMediaStreamController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456723</commentid>
    <comment_count>4</comment_count>
      <attachid>104670</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-08-25 02:30:06 -0700</bug_when>
    <thetext>Comment on attachment 104670
Patch

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

&gt;&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:36
&gt;&gt; +enum WebGenerateStreamOptionFlag {
&gt; 
&gt; nit: one new header file per type.
&gt; 
&gt; nit: the enum name is WebFooOptionFlag, but the values are WebFooRequestX.  we have a convention of naming enums like so:
&gt; 
&gt;   enum WebFoo {
&gt;       WebFooX,
&gt;       WebFooY,
&gt;       WebFooZ
&gt;   };

Fixed.

&gt;&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:42
&gt;&gt; +typedef unsigned WebGenerateStreamOptionFlags;
&gt; 
&gt; we normally just accomplish this with a comment.  i&apos;d give generateStream an int
&gt; parameter with a name like optionFlags.  then, i&apos;d comment that optionFlags can
&gt; be a bit-wise combination of WebGenerateStreamOptionFlag values.
&gt; 
&gt; note:  If you only intend this enum to be used with this interface, then you
&gt; could just define WebMediaStreamClient::OptionFlag.

Fixed.

&gt;&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:48
&gt;&gt; +    // The controller is valid until mediaStreamDestroyed() is invoked.
&gt; 
&gt; these comments seem to contradict one another:
&gt; 
&gt; &quot;The controller is valid until mediaStreamDestroyed() is invoked.&quot; says that
&gt; the WebMediaStreamClient does not have ownership of the given pointer since
&gt; something else is responsible for telling you when it gets invalidated.
&gt; 
&gt; &quot;Ownership of the WebMediaStreamController is transferred to the client.&quot; says
&gt; exactly the opposite.

Both comments are correct, the controller must be invalidated when the frame/page it is associated with disappears or moves.

&gt;&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:51
&gt;&gt; +    virtual void mediaStreamDestroyed() = 0;
&gt; 
&gt; maybe this method should be named &quot;mediaStreamControllerDestroyed()&quot; to better
&gt; indicate that the WebMediaStreamController has been destroyed?
&gt; 
&gt; why do we need this method?  why not just have WebKit call setController(0) to
&gt; tell the client when the controller is no longer valid?

One could do so, but this is related to more things than the controller. If/when the page/frame goes away all streams have to be stopped, the webcam/audio device shut down etc.
Maybe shutdown() would be better.

&gt;&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:53
&gt;&gt; +    virtual void generateStream(int requestId, WebGenerateStreamOptionFlags, const WebSecurityOrigin&amp;) = 0;
&gt; 
&gt; what is this &quot;requestId&quot;?

This requestId is for finding the original request when this asynchronous call finished. See

void WebMediaStreamController::streamGenerated(int requestId, const WebString&amp; streamLabel, WebMediaStreamTrackList&amp;);
void WebMediaStreamController::streamGenerationFailed(int requestId, Error code);

Opening a camera device etc can take a relatively long time.

&gt;&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:56
&gt;&gt; +    virtual void processSignalingMessage(int peerConnectionId, const WebString&amp; message) = 0;
&gt; 
&gt; what is this &quot;peerConnectionId&quot;?  why do we have identifiers here and not objects?
&gt; 
&gt; do these identifiers exist to support chrome&apos;s multi-process architecture?
&gt; 
&gt; it seems like perhaps there is a peer connection interface that should be used
&gt; here?  won&apos;t we have something like these methods for direct peer connection
&gt; usage?

Each WebCore peer connection object has its unique ID.
Using objects would be of no extra value in our current implementation, since all information is conveyed through the functions calls.

Also I don&apos;t understand the last paragraph.

&gt;&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:59
&gt;&gt; +    virtual void newPeerConnection(int peerConnectionId, const WebString&amp; configuration) = 0;
&gt; 
&gt; what is the format of the &quot;configuration&quot; string, or how is it defined?  documentation seems to be missing.

The configuration string is defined in the WebRtc standard here: http://www.whatwg.org/specs/web-apps/current-work/multipage/video-conferencing-and-peer-to-peer-communication.html#peerconnection

&gt;&gt; Source/WebKit/chromium/public/WebMediaStreamController.h:45
&gt;&gt; +    // Same as WebCore::NavigatorUserMediaError::PERMISSION_DENIED.
&gt; 
&gt; we normally avoid comments that mention WebCore implementation details in
&gt; WebKit API headers.  no one will think to ever fix these comments when they
&gt; become untrue.  WebCore is hacked on by a lot of non-Chromium folks!!

Fixed.

&gt;&gt; Source/WebKit/chromium/public/WebMediaStreamController.h:50
&gt;&gt; +    WEBKIT_EXPORT void streamGenerated(int requestId, const WebString&amp; streamLabel, WebMediaStreamTrackList&amp;);
&gt; 
&gt; it seems like there is a whole processing model for WebMediaStreamController
&gt; and WebMediaStreamClient that could use some documentation.  it is not obvious,
&gt; if i am implementing WebMediaStreamClient, how I am to use WebMediaStreamController.

Messages from WebCore to Chromium goes through the Client, and messages from Chromium to WebKit goes through the Controller.

Where would documentation like this ideally be placed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456724</commentid>
    <comment_count>5</comment_count>
      <attachid>105149</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-08-25 02:35:29 -0700</bug_when>
    <thetext>Created attachment 105149
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457630</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-08-26 10:43:16 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt;&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:48
&gt; &gt;&gt; +    // The controller is valid until mediaStreamDestroyed() is invoked.
&gt; &gt; 
&gt; &gt; these comments seem to contradict one another:
&gt; &gt; 
&gt; &gt; &quot;The controller is valid until mediaStreamDestroyed() is invoked.&quot; says that
&gt; &gt; the WebMediaStreamClient does not have ownership of the given pointer since
&gt; &gt; something else is responsible for telling you when it gets invalidated.
&gt; &gt; 
&gt; &gt; &quot;Ownership of the WebMediaStreamController is transferred to the client.&quot; says
&gt; &gt; exactly the opposite.
&gt; 
&gt; Both comments are correct, the controller must be invalidated when the frame/page it is associated with disappears or moves.

Then you should say that in the comments.  The comments seem to suggest that the pointer becomes invalid after mediaStreamDestroyed, but actually it requires work from the embedder to make that happen.

I think mediaStreamDestroyed sounds like a notification that a pointer has become invalid.  So, I think you probably need to rename this method.


&gt; &gt;&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:51
&gt; &gt;&gt; +    virtual void mediaStreamDestroyed() = 0;
&gt; &gt; 
&gt; &gt; maybe this method should be named &quot;mediaStreamControllerDestroyed()&quot; to better
&gt; &gt; indicate that the WebMediaStreamController has been destroyed?
&gt; &gt; 
&gt; &gt; why do we need this method?  why not just have WebKit call setController(0) to
&gt; &gt; tell the client when the controller is no longer valid?
&gt; 
&gt; One could do so, but this is related to more things than the controller. If/when the page/frame goes away all streams have to be stopped, the webcam/audio device shut down etc.
&gt; Maybe shutdown() would be better.

Maybe, yeah.  I&apos;m not sure why it is advantageous to make the embedder take ownership of the controller.


&gt; &gt;&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:53
&gt; &gt;&gt; +    virtual void generateStream(int requestId, WebGenerateStreamOptionFlags, const WebSecurityOrigin&amp;) = 0;
&gt; &gt; 
&gt; &gt; what is this &quot;requestId&quot;?
&gt; 
&gt; This requestId is for finding the original request when this asynchronous call finished. See

Right, got that part.


&gt; &gt;&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:56
&gt; &gt;&gt; +    virtual void processSignalingMessage(int peerConnectionId, const WebString&amp; message) = 0;
&gt; &gt; 
&gt; &gt; what is this &quot;peerConnectionId&quot;?  why do we have identifiers here and not objects?
&gt; &gt; 
&gt; &gt; do these identifiers exist to support chrome&apos;s multi-process architecture?
&gt; &gt; 
&gt; &gt; it seems like perhaps there is a peer connection interface that should be used
&gt; &gt; here?  won&apos;t we have something like these methods for direct peer connection
&gt; &gt; usage?
&gt; 
&gt; Each WebCore peer connection object has its unique ID.
&gt; Using objects would be of no extra value in our current implementation, since all information is conveyed through the functions calls.

I don&apos;t understand your argument.  Don&apos;t these IDs correspond to objects that WebCore knows about?  Is there not some kind of hash map from ID to object?


&gt; Also I don&apos;t understand the last paragraph.

&quot;peer connection&quot; sounds to me like the proposed PeerConnection API.  It is my understanding that PeerConnection is a proper JS API that can be used independently of WebRTC.  It seems like you are creating APIs here that would also need to exist to support using PeerConnection independently.

I think I&apos;m missing some context about what the overall architecture is for these things, which makes it nearly impossible to give you a good code review at this level.  It would be helpful to find a time to chat about this in the larger context.


&gt; &gt;&gt; Source/WebKit/chromium/public/WebMediaStreamClient.h:59
&gt; &gt;&gt; +    virtual void newPeerConnection(int peerConnectionId, const WebString&amp; configuration) = 0;
&gt; &gt; 
&gt; &gt; what is the format of the &quot;configuration&quot; string, or how is it defined?  documentation seems to be missing.
&gt; 
&gt; The configuration string is defined in the WebRtc standard here: http://www.whatwg.org/specs/web-apps/current-work/multipage/video-conferencing-and-peer-to-peer-communication.html#peerconnection

OK, I recommend indicating this in comments.


&gt; &gt;&gt; Source/WebKit/chromium/public/WebMediaStreamController.h:50
&gt; &gt;&gt; +    WEBKIT_EXPORT void streamGenerated(int requestId, const WebString&amp; streamLabel, WebMediaStreamTrackList&amp;);
&gt; &gt; 
&gt; &gt; it seems like there is a whole processing model for WebMediaStreamController
&gt; &gt; and WebMediaStreamClient that could use some documentation.  it is not obvious,
&gt; &gt; if i am implementing WebMediaStreamClient, how I am to use WebMediaStreamController.
&gt; 
&gt; Messages from WebCore to Chromium goes through the Client, and messages from Chromium to WebKit goes through the Controller.
&gt; 
&gt; Where would documentation like this ideally be placed?

Well, you could document some of this flow on the Controller interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489306</commentid>
    <comment_count>7</comment_count>
      <attachid>112181</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-24 06:51:54 -0700</bug_when>
    <thetext>Created attachment 112181
Patch

New embedders based on the current WebRTC implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489309</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-24 06:55:52 -0700</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489311</commentid>
    <comment_count>9</comment_count>
      <attachid>112181</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-10-24 06:59:01 -0700</bug_when>
    <thetext>Comment on attachment 112181
Patch

Attachment 112181 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10200823</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489375</commentid>
    <comment_count>10</comment_count>
      <attachid>112181</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-24 09:33:21 -0700</bug_when>
    <thetext>Comment on attachment 112181
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        No new tests. (OOPS!)

We&apos;ll need to remove this line from the ChangeLog in order to land this patch.  Generally it&apos;s a good idea to fill out the ChangeLog with an explanation of why you&apos;re making this change.

&gt; Source/WebCore/mediastream/PeerConnection.cpp:58
&gt; -    , m_peerHandler(PeerHandler::create(this, serverConfiguration, context-&gt;securityOrigin()-&gt;toString()))
&gt; +    , m_peerHandler(adoptPtr(PeerHandler::create(this, serverConfiguration, context-&gt;securityOrigin()-&gt;toString())))

This is wrong.  PeerHandler::create should call adoptPtr.

&gt; Source/WebCore/mediastream/PeerConnection.cpp:224
&gt; -void PeerConnection::remoteStreamRemoved(MediaStreamDescriptor* streamDescriptor)
&gt; +void PeerConnection::remoteStreamRemoved(PassRefPtr&lt;MediaStreamDescriptor&gt; prpStreamDescriptor)
&gt;  {
&gt; +    RefPtr&lt;MediaStreamDescriptor&gt; streamDescriptor = prpStreamDescriptor;

Why did you make this change?  This function does not appear to take ownership of streamDescriptor.

&gt; Source/WebCore/platform/mediastream/PeerHandler.h:45
&gt;  class PeerHandler {

This shouldn&apos;t be a virtual interface.  Any given compilation of WebKit should only have one implementation of PeerHandler, which means this doesn&apos;t need to be virtual.  We just need to link in different CPP files for different configurations.

&gt; Source/WebKit/chromium/public/WebMediaStreamDescriptor.h:43
&gt; +    WEBKIT_EXPORT void initialize(); // FIXME Add params.

You need a : after &quot;FIXME&quot;.

&gt; Source/WebKit/chromium/src/PeerHandlerChromium.cpp:46
&gt; +class PeerHandlerChromium : public WebCore::PeerHandler {

This class should be in WebCore/platform and should use PlatformSupport to reach WebKit/chromium/src.

&gt; Source/WebKit/chromium/src/PeerHandlerChromium.cpp:122
&gt; +namespace WebCore {
&gt; +
&gt; +PeerHandler* PeerHandler::create(PeerHandlerClient* client, const String&amp; serverConfiguration, const String&amp; securityOrigin)
&gt; +{
&gt; +    return new WebKit::PeerHandlerChromium(client, serverConfiguration, securityOrigin);
&gt; +}
&gt; +
&gt; +} // namespace WebCore

WebKit/chromium/src cannot contain code in the WebCore namespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489378</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-24 09:34:43 -0700</bug_when>
    <thetext>My guess is you&apos;ll want to move the existing PeerHandler.h to PeerHandlerBase.h and then make a new PeerHandler.h in Source/WebCore/platform/mediastream/chromium that is a subclass of PeerHandlerBase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489399</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-24 10:10:19 -0700</bug_when>
    <thetext>If I were writing this patch, I would also try to break it down into smaller pieces.  The patch you posed clocks in at 34.48 KB, which is pretty large.  One approach to making the patch smaller is to do the WebCore and the WebKit pieces of the patch separately.

One reason smaller patches are better is because they&apos;re easier to review and iterate on, which means we&apos;ll land the code sooner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489590</commentid>
    <comment_count>13</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-24 13:46:21 -0700</bug_when>
    <thetext>Yes, I know that this patch is on the large size but at least for the first review I needed to convey the overall design since it is non-standard. Would you be comfortable in continuing on iterating on this patch or should I split it up as you suggested?

(In reply to comment #12)
&gt; If I were writing this patch, I would also try to break it down into smaller pieces.  The patch you posed clocks in at 34.48 KB, which is pretty large.  One approach to making the patch smaller is to do the WebCore and the WebKit pieces of the patch separately.
&gt; 
&gt; One reason smaller patches are better is because they&apos;re easier to review and iterate on, which means we&apos;ll land the code sooner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489591</commentid>
    <comment_count>14</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-24 13:47:30 -0700</bug_when>
    <thetext>And keep PeerHandlerBase virtual?

(In reply to comment #11)
&gt; My guess is you&apos;ll want to move the existing PeerHandler.h to PeerHandlerBase.h and then make a new PeerHandler.h in Source/WebCore/platform/mediastream/chromium that is a subclass of PeerHandlerBase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489607</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-24 13:55:48 -0700</bug_when>
    <thetext>&gt; Yes, I know that this patch is on the large size but at least for the first review I needed to convey the overall design since it is non-standard. Would you be comfortable in continuing on iterating on this patch or should I split it up as you suggested?

Yeah, if that&apos;s how you&apos;d like to proceed, that&apos;s fine.

&gt; And keep PeerHandlerBase virtual?

Tommy and I chatted a bit, and we agreed to keep these non-virtual.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489953</commentid>
    <comment_count>16</comment_count>
      <attachid>112181</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-25 04:17:08 -0700</bug_when>
    <thetext>Comment on attachment 112181
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        No new tests. (OOPS!)
&gt; 
&gt; We&apos;ll need to remove this line from the ChangeLog in order to land this patch.  Generally it&apos;s a good idea to fill out the ChangeLog with an explanation of why you&apos;re making this change.

Done.

&gt;&gt; Source/WebCore/mediastream/PeerConnection.cpp:58
&gt;&gt; +    , m_peerHandler(adoptPtr(PeerHandler::create(this, serverConfiguration, context-&gt;securityOrigin()-&gt;toString())))
&gt; 
&gt; This is wrong.  PeerHandler::create should call adoptPtr.

Fixed.

&gt;&gt; Source/WebCore/mediastream/PeerConnection.cpp:224
&gt;&gt; +    RefPtr&lt;MediaStreamDescriptor&gt; streamDescriptor = prpStreamDescriptor;
&gt; 
&gt; Why did you make this change?  This function does not appear to take ownership of streamDescriptor.

Undone change that shouldn&apos;t have been in the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489954</commentid>
    <comment_count>17</comment_count>
      <attachid>112315</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-25 04:34:13 -0700</bug_when>
    <thetext>Created attachment 112315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489962</commentid>
    <comment_count>18</comment_count>
      <attachid>112181</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-25 04:57:19 -0700</bug_when>
    <thetext>Comment on attachment 112181
Patch

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

&gt;&gt; Source/WebCore/platform/mediastream/PeerHandler.h:45
&gt;&gt;  class PeerHandler {
&gt; 
&gt; This shouldn&apos;t be a virtual interface.  Any given compilation of WebKit should only have one implementation of PeerHandler, which means this doesn&apos;t need to be virtual.  We just need to link in different CPP files for different configurations.

By making this class virtual allows for embedders to easily inherit from this class and add their own members.

&gt;&gt; Source/WebKit/chromium/public/WebMediaStreamDescriptor.h:43
&gt;&gt; +    WEBKIT_EXPORT void initialize(); // FIXME Add params.
&gt; 
&gt; You need a : after &quot;FIXME&quot;.

Done.

&gt;&gt; Source/WebKit/chromium/src/PeerHandlerChromium.cpp:46
&gt;&gt; +class PeerHandlerChromium : public WebCore::PeerHandler {
&gt; 
&gt; This class should be in WebCore/platform and should use PlatformSupport to reach WebKit/chromium/src.

After discussion over chat we have decided that for now this class stays in WebKit but is moved to a new directory named &quot;bridge&quot;.

&gt;&gt; Source/WebKit/chromium/src/PeerHandlerChromium.cpp:122
&gt;&gt; +} // namespace WebCore
&gt; 
&gt; WebKit/chromium/src cannot contain code in the WebCore namespace.

This code needs to do the same as ResourceHandle, at least for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490099</commentid>
    <comment_count>19</comment_count>
      <attachid>112315</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-10-25 10:15:25 -0700</bug_when>
    <thetext>Comment on attachment 112315
Patch

Attachment 112315 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10211286</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490150</commentid>
    <comment_count>20</comment_count>
      <attachid>112315</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-25 11:03:20 -0700</bug_when>
    <thetext>Comment on attachment 112315
Patch

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

Looks like we&apos;re getting close.  (Of course, we&apos;ll need to go through API review also since you&apos;ve included changes to WebKit/chromium/public in here too.)  Also, this needs to build on GTK before we can land it.

&gt; Source/WebCore/mediastream/PeerConnection.cpp:58
&gt; -    , m_peerHandler(PeerHandler::create(this, serverConfiguration, context-&gt;securityOrigin()-&gt;toString()))
&gt; +    , m_peerHandler(PeerHandlerBase::create(this, serverConfiguration, context-&gt;securityOrigin()-&gt;toString()))

This should call PeerHandler::create.  That&apos;s the point of having a separate &quot;base&quot;.

&gt; Source/WebCore/mediastream/PeerConnection.h:131
&gt; -    OwnPtr&lt;PeerHandler&gt; m_peerHandler;
&gt; +    OwnPtr&lt;PeerHandlerBase&gt; m_peerHandler;

This should hold a PeerHandle.

If you look at the folks outside of the platform layer that interact with ResourceHandle, you&apos;ll see that they all use ResourceHandle as the type, not ResourceHandleBase.

&gt; Source/WebCore/platform/mediastream/PeerHandlerBase.h:57
&gt; +    virtual void produceInitialOffer(const MediaStreamDescriptorVector&amp; pendingAddStreams) = 0;
&gt; +    virtual void handleInitialOffer(const String&amp; sdp) = 0;
&gt; +    virtual void processSDP(const String&amp; sdp) = 0;
&gt; +    virtual void processPendingStreams(const MediaStreamDescriptorVector&amp; pendingAddStreams, const MediaStreamDescriptorVector&amp; pendingRemoveStreams) = 0;
&gt; +    virtual void sendDataStreamMessage(const char* data, unsigned length) = 0;
&gt; +
&gt; +    virtual void stop() = 0;

I thought we agreed that these would not be virtual.

&gt; Source/WebKit/chromium/bridge/PeerHandlerChromium.cpp:46
&gt; +class PeerHandlerChromium : public WebCore::PeerHandlerBase {

PeerHandlerChromium should just be called PeerHandler.  The declaration should live in WebCore/platform/mediastream/chromium/PeerHandle.h.

&gt; Source/WebKit/chromium/bridge/PeerHandlerChromium.cpp:62
&gt; +PeerHandlerChromium::PeerHandlerChromium(WebCore::PeerHandlerClient* client, const String&amp; serverConfiguration, const String&amp; securityOrigin)

All this code should be in the WebCore namespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490615</commentid>
    <comment_count>21</comment_count>
      <attachid>112315</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-10-26 00:09:43 -0700</bug_when>
    <thetext>Comment on attachment 112315
Patch

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

&gt; Source/WebKit/chromium/public/WebKitPlatformSupport.h:328
&gt; +    virtual WebPeerHandler* createPeerHandler(const WebPeerHandlerClient&amp;) { return 0; }

nit: we usually pass clients as non-const pointers.

&gt; Source/WebKit/chromium/public/WebMediaStreamDescriptor.h:53
&gt; +    // FIXME: Add functions.

nit: we normally add functions above the WEBKIT_IMPLEMENTATION block.  that should be the 
last part of the public section.

&gt; Source/WebKit/chromium/public/WebPeerHandler.h:37
&gt; +class WebPeerHandler {

i&apos;m a little bothered by this class name.  what is a &quot;peer handler&quot;? ... maybe if this
were called WebPeerConnectionHandler or just WebPeerConnection, the name would make
sense.

&gt; Source/WebKit/chromium/public/WebPeerHandler.h:43
&gt; +    virtual void produceInitialOffer(const WebVector&lt;WebMediaStreamDescriptor&gt;&amp; pendingAddStreams) = 0;

it seems like there is a processing model here that should be explained.  you could either refer to a document or explain it in comments.

nit: pendingAddStreams -&gt; streamsToAdd?

&gt; Source/WebKit/chromium/public/WebPeerHandler.h:45
&gt; +    virtual void processSDP(const WebString&amp; sdp) = 0;

what does SDP stand for?  maybe this should be spelled out?

&gt; Source/WebKit/chromium/public/WebPeerHandler.h:46
&gt; +    virtual void processPendingStreams(const WebVector&lt;WebMediaStreamDescriptor&gt;&amp; pendingAddStreams, const WebVector&lt;WebMediaStreamDescriptor&gt;&amp; pendingRemoveStreams) = 0;

nit: perhaps the parameters would be better named &quot;streamsToAdd&quot; and &quot;streamsToRemove&quot;

&gt; Source/WebKit/chromium/public/WebPeerHandler.h:47
&gt; +    virtual void sendDataStreamMessage(const char* data, unsigned length) = 0;

nit: use size_t instead of unsigned for byte counts

&gt; Source/WebKit/chromium/public/WebPeerHandlerClient.h:41
&gt; +class WebPeerHandlerClient : public WebNonCopyable {

it is more common for this to be an interface with pure virtual functions.  see WebURLLoaderClient for example.

it seems like the current design suggests that WebPeerHandlerClient could be copied around, meaning that we
may have a difficult time cleaning up back pointers to WebCore::PeerHandlerClient if we needed to.  i&apos;m not
sure if that is a problem.  i just observe that this is a different approach to wrapping a WebCore interface.

&gt; Source/WebKit/chromium/public/WebPeerHandlerClient.h:43
&gt; +    WEBKIT_EXPORT void iceProcessingCompleted();

nit: notifications usually take the form of {did,will}{Action}{Subject}... e.g.:
didCompleteICEProcessing
didGenerateSDP
didReceiveDataStreamMessage
didAddRemoteStream
didRemoveRemoteStream

perhaps the last two should be did{Add,Remove}MediaStream since the parameter type is Web_MediaStream_Descriptor?  it helps to use similar words when naming a method and object parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490716</commentid>
    <comment_count>22</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-10-26 03:28:36 -0700</bug_when>
    <thetext>It&apos;s nice to see a Chromium implementation of the PeerHandler interface.

What&apos;s the motivation behind having a PeerHandlerBase (without a cpp-file)? I interpret the base pattern as a way to share common code between the implementations and I don&apos;t expect PeerHandler implementations to be able to share any code. You can just add your own cpp-file for PeerHandler and opt-out from the empty implementation in PeerHandler.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490825</commentid>
    <comment_count>23</comment_count>
      <attachid>112503</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-26 07:30:19 -0700</bug_when>
    <thetext>Created attachment 112503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490826</commentid>
    <comment_count>24</comment_count>
      <attachid>112315</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-26 07:32:39 -0700</bug_when>
    <thetext>Comment on attachment 112315
Patch

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

&gt;&gt; Source/WebCore/mediastream/PeerConnection.cpp:58
&gt;&gt; +    , m_peerHandler(PeerHandlerBase::create(this, serverConfiguration, context-&gt;securityOrigin()-&gt;toString()))
&gt; 
&gt; This should call PeerHandler::create.  That&apos;s the point of having a separate &quot;base&quot;.

Fixed.

&gt;&gt; Source/WebCore/mediastream/PeerConnection.h:131
&gt;&gt; +    OwnPtr&lt;PeerHandlerBase&gt; m_peerHandler;
&gt; 
&gt; This should hold a PeerHandle.
&gt; 
&gt; If you look at the folks outside of the platform layer that interact with ResourceHandle, you&apos;ll see that they all use ResourceHandle as the type, not ResourceHandleBase.

Fixed.

&gt;&gt; Source/WebCore/platform/mediastream/PeerHandlerBase.h:57
&gt;&gt; +    virtual void stop() = 0;
&gt; 
&gt; I thought we agreed that these would not be virtual.

Fixed

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerChromium.cpp:46
&gt;&gt; +class PeerHandlerChromium : public WebCore::PeerHandlerBase {
&gt; 
&gt; PeerHandlerChromium should just be called PeerHandler.  The declaration should live in WebCore/platform/mediastream/chromium/PeerHandle.h.

Fixed.

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerChromium.cpp:62
&gt;&gt; +PeerHandlerChromium::PeerHandlerChromium(WebCore::PeerHandlerClient* client, const String&amp; serverConfiguration, const String&amp; securityOrigin)
&gt; 
&gt; All this code should be in the WebCore namespace.

Fixed.

&gt;&gt; Source/WebKit/chromium/public/WebKitPlatformSupport.h:328
&gt;&gt; +    virtual WebPeerHandler* createPeerHandler(const WebPeerHandlerClient&amp;) { return 0; }
&gt; 
&gt; nit: we usually pass clients as non-const pointers.

Fixed.

&gt;&gt; Source/WebKit/chromium/public/WebMediaStreamDescriptor.h:53
&gt;&gt; +    // FIXME: Add functions.
&gt; 
&gt; nit: we normally add functions above the WEBKIT_IMPLEMENTATION block.  that should be the 
&gt; last part of the public section.

Fixed.

&gt;&gt; Source/WebKit/chromium/public/WebPeerHandler.h:37
&gt;&gt; +class WebPeerHandler {
&gt; 
&gt; i&apos;m a little bothered by this class name.  what is a &quot;peer handler&quot;? ... maybe if this
&gt; were called WebPeerConnectionHandler or just WebPeerConnection, the name would make
&gt; sense.

I have mimicked the naming of things from their WebCore equivalents. Personally I think that it would be more confusing if function calls changed names in/out of WebKit but maybe that&apos;s not how the embedder layer works?

A PeerHandler is the handler of calls from a PeerConnection intended for the embedder, it&apos;s not a PeerConnection.

&gt;&gt; Source/WebKit/chromium/public/WebPeerHandler.h:45
&gt;&gt; +    virtual void processSDP(const WebString&amp; sdp) = 0;
&gt; 
&gt; what does SDP stand for?  maybe this should be spelled out?

SDP stands for Service Discovery Protocol. All implementers of the PeerConnection feature knows (or at least need to know) what this is and therefore in a sense it doesn&apos;t need to be spelled out.

&gt;&gt; Source/WebKit/chromium/public/WebPeerHandler.h:47
&gt;&gt; +    virtual void sendDataStreamMessage(const char* data, unsigned length) = 0;
&gt; 
&gt; nit: use size_t instead of unsigned for byte counts

Fixed.

&gt;&gt; Source/WebKit/chromium/public/WebPeerHandlerClient.h:41
&gt;&gt; +class WebPeerHandlerClient : public WebNonCopyable {
&gt; 
&gt; it is more common for this to be an interface with pure virtual functions.  see WebURLLoaderClient for example.
&gt; 
&gt; it seems like the current design suggests that WebPeerHandlerClient could be copied around, meaning that we
&gt; may have a difficult time cleaning up back pointers to WebCore::PeerHandlerClient if we needed to.  i&apos;m not
&gt; sure if that is a problem.  i just observe that this is a different approach to wrapping a WebCore interface.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490930</commentid>
    <comment_count>25</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-26 09:34:51 -0700</bug_when>
    <thetext>&gt; What&apos;s the motivation behind having a PeerHandlerBase (without a cpp-file)?

Yeah, if there&apos;s no code or declarations to share, then PeerHandlerBase doesn&apos;t serve a purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490933</commentid>
    <comment_count>26</comment_count>
      <attachid>112503</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-26 09:37:10 -0700</bug_when>
    <thetext>Comment on attachment 112503
Patch

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

&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:55
&gt; +    delete m_webHandler;

We should use OwnPtr rather than calling delete manually.  You can adoptPtr immediately after calling WebKit::webKitPlatformSupport()-&gt;createPeerHandler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490934</commentid>
    <comment_count>27</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-26 09:37:52 -0700</bug_when>
    <thetext>Thanks Tommy.  The structure of this code looks good.  Looking at the details now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490981</commentid>
    <comment_count>28</comment_count>
      <attachid>112503</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-26 10:16:42 -0700</bug_when>
    <thetext>Comment on attachment 112503
Patch

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

Below are a bunch of small nits.  Once you&apos;ve addressed them, I&apos;m happy with this patch.  Thanks for iterating!

&gt; Source/WebCore/ChangeLog:17
&gt; +        * WebCore.gypi:
&gt; +        * mediastream/PeerConnection.cpp:
&gt; +        (WebCore::PeerConnection::PeerConnection):
&gt; +        * mediastream/PeerConnection.h:
&gt; +        * platform/mediastream/PeerHandlerBase.h: Renamed from Source/WebCore/platform/mediastream/PeerHandler.h.
&gt; +        (WebCore::PeerHandlerBase::~PeerHandlerBase):
&gt; +        * platform/mediastream/PeerHandlerClient.h: Renamed from Source/WebCore/platform/mediastream/PeerHandler.cpp.
&gt; +        (WebCore::PeerHandlerClient::~PeerHandlerClient):

This information isn&apos;t accurate anymore.  You might need to run prepare-ChangeLog again.

&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:46
&gt; +PeerHandlerInternal::PeerHandlerInternal(PeerHandlerClient* client, const String&amp; serverConfiguration, const String&amp; securityOrigin) : m_client(client)

&quot;: m_client(client)&quot; should be on its own line.

&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:49
&gt; +    m_webHandler = WebKit::webKitPlatformSupport()-&gt;createPeerHandler(this);

m_webHandler = adoptPtr(WebKit::webKitPlatformSupport()-&gt;createPeerHandler(this));

&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:60
&gt; +    size_t numStreamsToAdd = pendingAddStreams.size();

numStreamsToAdd =&gt; numberOfStreamsToAdd (please use complete words in variable names)

&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:68
&gt; +void PeerHandlerInternal::handleInitialOffer(const String&amp; sdp)

sdp = ?  It would be nice to use a more descriptive variable name for us P2P noobs.

&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:83
&gt; +    size_t numStreamsToAdd = pendingAddStreams.size();
&gt; +    WebKit::WebVector&lt;WebKit::WebMediaStreamDescriptor&gt; streamsToAdd(numStreamsToAdd);
&gt; +    for (size_t i = 0 ; i &lt; numStreamsToAdd ; ++i)
&gt; +        streamsToAdd[i].assign(pendingAddStreams[i]);

This pattern seems repeated a bunch of times.  Maybe factor out into a static function in this file?

&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:111
&gt; +void PeerHandlerInternal::sdpGenerated(const WebKit::WebString&amp; sdp)
&gt; +{
&gt; +    m_client-&gt;sdpGenerated(sdp);
&gt; +}

Same comment here about sdp.

&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:125
&gt; +    m_client-&gt;remoteStreamRemoved(((PassRefPtr&lt;WebCore::MediaStreamDescriptor&gt;)webMediaStreamDescriptor).get());

This line of code is very strange.  We usually don&apos;t use C-style casts in WebKit.  Why not have an operator that returns a raw pointer?  Going through PassRefPtr seems very wrong.

&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.h:53
&gt; +    PeerHandlerInternal(PeerHandlerClient*, const String&amp; serverConfiguration, const String&amp; securityOrigin);

Why is securityOrigin a string?  It probably should be a SecurityOrigin.

&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.h:56
&gt; +    virtual void produceInitialOffer(const MediaStreamDescriptorVector&amp; Pendingaddstreams);

Pendingaddstreams =&gt; pendingAddStreams ?

&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.h:60
&gt; +    virtual void sendDataStreamMessage(const char* data, unsigned length);

unsigned =&gt; size_t ?

&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.h:71
&gt; +    WebKit::WebPeerHandler* m_webHandler;

OwnPtr

&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.h:72
&gt; +    PeerHandlerClient* m_client;

What&apos;s the ownership model for m_client ?

&gt; Source/WebKit/chromium/public/WebMediaStreamDescriptor.h:51
&gt; +    operator WTF::PassRefPtr&lt;WebCore::MediaStreamDescriptor&gt;() const;

Is this common in the API ?  It seems strange.  This doesn&apos;t take the reference out of m_private, so there&apos;s no advantage to using a PassRefPtr.  It should just use a raw pointer.

&gt; Source/WebKit/chromium/public/WebPeerHandler.h:6
&gt; +-- * are met:

This looks slightly corrupted.

&gt; Source/WebKit/chromium/public/WebPeerHandler.h:41
&gt; +    virtual void initialize(const WebString&amp; serverConfiguration, const WebString&amp; securityOrigin) = 0;

Should this be a WebSecurityOrigin ?

&gt; Source/WebKit/chromium/src/WebMediaStreamDescriptor.cpp:56
&gt; +

Looks like you have an extra blank line here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491432</commentid>
    <comment_count>29</comment_count>
      <attachid>112657</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-27 03:00:49 -0700</bug_when>
    <thetext>Created attachment 112657
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491433</commentid>
    <comment_count>30</comment_count>
      <attachid>112503</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-27 03:01:47 -0700</bug_when>
    <thetext>Comment on attachment 112503
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:17
&gt;&gt; +        (WebCore::PeerHandlerClient::~PeerHandlerClient):
&gt; 
&gt; This information isn&apos;t accurate anymore.  You might need to run prepare-ChangeLog again.

Fixed.

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:46
&gt;&gt; +PeerHandlerInternal::PeerHandlerInternal(PeerHandlerClient* client, const String&amp; serverConfiguration, const String&amp; securityOrigin) : m_client(client)
&gt; 
&gt; &quot;: m_client(client)&quot; should be on its own line.

Fixed.

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:49
&gt;&gt; +    m_webHandler = WebKit::webKitPlatformSupport()-&gt;createPeerHandler(this);
&gt; 
&gt; m_webHandler = adoptPtr(WebKit::webKitPlatformSupport()-&gt;createPeerHandler(this));

Fixed.

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:55
&gt;&gt; +    delete m_webHandler;
&gt; 
&gt; We should use OwnPtr rather than calling delete manually.  You can adoptPtr immediately after calling WebKit::webKitPlatformSupport()-&gt;createPeerHandler.

Fixed.

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:60
&gt;&gt; +    size_t numStreamsToAdd = pendingAddStreams.size();
&gt; 
&gt; numStreamsToAdd =&gt; numberOfStreamsToAdd (please use complete words in variable names)

Fixed.

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:68
&gt;&gt; +void PeerHandlerInternal::handleInitialOffer(const String&amp; sdp)
&gt; 
&gt; sdp = ?  It would be nice to use a more descriptive variable name for us P2P noobs.

SDP is short for &quot;Session Description Protocol&quot; and can contain codec, ip and/or time candidates. The naming is a bit like HTML; everyone is expected to know that it stands for &quot;HyperText Markup Language&quot;.
See http://en.wikipedia.org/wiki/Session_Description_Protocol for more info

I could rename all occurrences of sdp to [sS]essionDescriptionProtocol if you think it genuinely would help?

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:83
&gt;&gt; +        streamsToAdd[i].assign(pendingAddStreams[i]);
&gt; 
&gt; This pattern seems repeated a bunch of times.  Maybe factor out into a static function in this file?

Fixed.

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:125
&gt;&gt; +    m_client-&gt;remoteStreamRemoved(((PassRefPtr&lt;WebCore::MediaStreamDescriptor&gt;)webMediaStreamDescriptor).get());
&gt; 
&gt; This line of code is very strange.  We usually don&apos;t use C-style casts in WebKit.  Why not have an operator that returns a raw pointer?  Going through PassRefPtr seems very wrong.

Fixed.

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.h:53
&gt;&gt; +    PeerHandlerInternal(PeerHandlerClient*, const String&amp; serverConfiguration, const String&amp; securityOrigin);
&gt; 
&gt; Why is securityOrigin a string?  It probably should be a SecurityOrigin.

Fixed.

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.h:56
&gt;&gt; +    virtual void produceInitialOffer(const MediaStreamDescriptorVector&amp; Pendingaddstreams);
&gt; 
&gt; Pendingaddstreams =&gt; pendingAddStreams ?

Fixed.

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.h:60
&gt;&gt; +    virtual void sendDataStreamMessage(const char* data, unsigned length);
&gt; 
&gt; unsigned =&gt; size_t ?

Fixed.

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.h:71
&gt;&gt; +    WebKit::WebPeerHandler* m_webHandler;
&gt; 
&gt; OwnPtr

Fixed.

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.h:72
&gt;&gt; +    PeerHandlerClient* m_client;
&gt; 
&gt; What&apos;s the ownership model for m_client ?

We just hold on to the pointer, and don&apos;t own it.

&gt;&gt; Source/WebKit/chromium/public/WebMediaStreamDescriptor.h:51
&gt;&gt; +    operator WTF::PassRefPtr&lt;WebCore::MediaStreamDescriptor&gt;() const;
&gt; 
&gt; Is this common in the API ?  It seems strange.  This doesn&apos;t take the reference out of m_private, so there&apos;s no advantage to using a PassRefPtr.  It should just use a raw pointer.

It is a very common pattern in the API.

&gt;&gt; Source/WebKit/chromium/public/WebPeerHandler.h:6
&gt;&gt; +-- * are met:
&gt; 
&gt; This looks slightly corrupted.

Fixed.

&gt;&gt; Source/WebKit/chromium/public/WebPeerHandler.h:41
&gt;&gt; +    virtual void initialize(const WebString&amp; serverConfiguration, const WebString&amp; securityOrigin) = 0;
&gt; 
&gt; Should this be a WebSecurityOrigin ?

Fixed.

&gt;&gt; Source/WebKit/chromium/src/WebMediaStreamDescriptor.cpp:56
&gt;&gt; +
&gt; 
&gt; Looks like you have an extra blank line here.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491439</commentid>
    <comment_count>31</comment_count>
      <attachid>112657</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-10-27 03:24:15 -0700</bug_when>
    <thetext>Comment on attachment 112657
Patch

Attachment 112657 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10227378</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491442</commentid>
    <comment_count>32</comment_count>
      <attachid>112660</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-27 03:51:26 -0700</bug_when>
    <thetext>Created attachment 112660
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491522</commentid>
    <comment_count>33</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-10-27 06:33:11 -0700</bug_when>
    <thetext>I see two parallel PeerHandler interfaces in this patch (gstreamer + chromium). The &quot;shared header file&quot; pattern used by PeerHandler would just require a chromium cpp-file and a single ifdef&apos;ed line in PeerHandler.h for the PeerHandlerInternal private member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491744</commentid>
    <comment_count>34</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-27 11:16:41 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 112503 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112503&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:68
&gt; &gt;&gt; +void PeerHandlerInternal::handleInitialOffer(const String&amp; sdp)
&gt; &gt; 
&gt; &gt; sdp = ?  It would be nice to use a more descriptive variable name for us P2P noobs.
&gt; 
&gt; SDP is short for &quot;Session Description Protocol&quot; and can contain codec, ip and/or time candidates. The naming is a bit like HTML; everyone is expected to know that it stands for &quot;HyperText Markup Language&quot;.
&gt; See http://en.wikipedia.org/wiki/Session_Description_Protocol for more info
&gt; 
&gt; I could rename all occurrences of sdp to [sS]essionDescriptionProtocol if you think it genuinely would help?

Many add a link to the Wikipedia article for us noobs.  :)

&gt; &gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.h:72
&gt; &gt;&gt; +    PeerHandlerClient* m_client;
&gt; &gt; 
&gt; &gt; What&apos;s the ownership model for m_client ?
&gt; 
&gt; We just hold on to the pointer, and don&apos;t own it.

Who owns it?  How do we make sure we don&apos;t hold dangling pointers when it dies?

&gt; &gt;&gt; Source/WebKit/chromium/public/WebMediaStreamDescriptor.h:51
&gt; &gt;&gt; +    operator WTF::PassRefPtr&lt;WebCore::MediaStreamDescriptor&gt;() const;
&gt; &gt; 
&gt; &gt; Is this common in the API ?  It seems strange.  This doesn&apos;t take the reference out of m_private, so there&apos;s no advantage to using a PassRefPtr.  It should just use a raw pointer.
&gt; 
&gt; It is a very common pattern in the API.

Ok.  I&apos;ll leave it for fishd to review then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491762</commentid>
    <comment_count>35</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-27 11:29:34 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; I see two parallel PeerHandler interfaces in this patch (gstreamer + chromium). The &quot;shared header file&quot; pattern used by PeerHandler would just require a chromium cpp-file and a single ifdef&apos;ed line in PeerHandler.h for the PeerHandlerInternal private member.

The question is what will happent to this code over time.  ResourceHandle probably started out with just one or two ifdefs, but not it&apos;s ifdefed all over.

I don&apos;t feel strongly about that though.  It&apos;s a very revisable decision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491925</commentid>
    <comment_count>36</comment_count>
      <attachid>112660</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-27 14:06:01 -0700</bug_when>
    <thetext>Comment on attachment 112660
Patch

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

This looks good to me.  Thanks for iterating!  (If you&apos;d like to include a link to the Wikipedia article on sdp, I do think that would be helpful.)

Over to fishd for API review.

&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:60
&gt; +void PeerHandlerInternal::copyItems(WebKit::WebVector&lt;WebKit::WebMediaStreamDescriptor&gt;&amp; result, const MediaStreamDescriptorVector&amp; streams)

This can just be a free (static) function.  It doesn&apos;t interact with |this| at all.

&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:64
&gt; +    for (size_t i = 0 ; i &lt; numberOfStreams ; ++i)

0 ; =&gt; 0;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492061</commentid>
    <comment_count>37</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-10-27 16:13:26 -0700</bug_when>
    <thetext>(In reply to comment #24)
...
&gt; &gt;&gt; Source/WebKit/chromium/public/WebPeerHandler.h:37
&gt; &gt;&gt; +class WebPeerHandler {
&gt; &gt; 
&gt; &gt; i&apos;m a little bothered by this class name.  what is a &quot;peer handler&quot;? ... maybe if this
&gt; &gt; were called WebPeerConnectionHandler or just WebPeerConnection, the name would make
&gt; &gt; sense.
&gt; 
&gt; I have mimicked the naming of things from their WebCore equivalents. Personally I think that it would be more confusing if function calls changed names in/out of WebKit but maybe that&apos;s not how the embedder layer works?
&gt; 
&gt; A PeerHandler is the handler of calls from a PeerConnection intended for the embedder, it&apos;s not a PeerConnection.

It sounds like you are saying that it is a PeerConnection handler.  So, how about {Web}PeerConnectionHandler?  It isn&apos;t handling peers, it is handling connections to peers, right?


&gt; &gt;&gt; Source/WebKit/chromium/public/WebPeerHandler.h:45
&gt; &gt;&gt; +    virtual void processSDP(const WebString&amp; sdp) = 0;
&gt; &gt; 
&gt; &gt; what does SDP stand for?  maybe this should be spelled out?
&gt; 
&gt; SDP stands for Service Discovery Protocol. All implementers of the PeerConnection feature knows (or at least need to know) what this is and therefore in a sense it doesn&apos;t need to be spelled out.

I dislike uncommon acronyms, but OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492318</commentid>
    <comment_count>38</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-28 01:59:16 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; (In reply to comment #24)
&gt; ...
&gt; &gt; &gt;&gt; Source/WebKit/chromium/public/WebPeerHandler.h:37
&gt; &gt; &gt;&gt; +class WebPeerHandler {
&gt; &gt; &gt; 
&gt; &gt; &gt; i&apos;m a little bothered by this class name.  what is a &quot;peer handler&quot;? ... maybe if this
&gt; &gt; &gt; were called WebPeerConnectionHandler or just WebPeerConnection, the name would make
&gt; &gt; &gt; sense.
&gt; &gt; 
&gt; &gt; I have mimicked the naming of things from their WebCore equivalents. Personally I think that it would be more confusing if function calls changed names in/out of WebKit but maybe that&apos;s not how the embedder layer works?
&gt; &gt; 
&gt; &gt; A PeerHandler is the handler of calls from a PeerConnection intended for the embedder, it&apos;s not a PeerConnection.
&gt; 
&gt; It sounds like you are saying that it is a PeerConnection handler.  So, how about {Web}PeerConnectionHandler?  It isn&apos;t handling peers, it is handling connections to peers, right?
&gt; 
&gt; 

Much better, thanks. Will change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492326</commentid>
    <comment_count>39</comment_count>
      <attachid>112835</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-28 02:16:55 -0700</bug_when>
    <thetext>Created attachment 112835
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492327</commentid>
    <comment_count>40</comment_count>
      <attachid>112660</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-28 02:18:05 -0700</bug_when>
    <thetext>Comment on attachment 112660
Patch

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

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:60
&gt;&gt; +void PeerHandlerInternal::copyItems(WebKit::WebVector&lt;WebKit::WebMediaStreamDescriptor&gt;&amp; result, const MediaStreamDescriptorVector&amp; streams)
&gt; 
&gt; This can just be a free (static) function.  It doesn&apos;t interact with |this| at all.

Fixed.

&gt;&gt; Source/WebKit/chromium/bridge/PeerHandlerInternal.cpp:64
&gt;&gt; +    for (size_t i = 0 ; i &lt; numberOfStreams ; ++i)
&gt; 
&gt; 0 ; =&gt; 0;

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492331</commentid>
    <comment_count>41</comment_count>
      <attachid>112835</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-28 02:21:28 -0700</bug_when>
    <thetext>Comment on attachment 112835
Patch

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

&gt; Source/WebCore/GNUmakefile.list.am:2745
&gt; +	Source/WebCore/platform/mediastream/gstreamer/PeerHandler.cpp \
&gt; +	Source/WebCore/platform/mediastream/gstreamer/PeerHandler.h \

I thought you were going to rename this to PeerConnectionHandler

&gt; Source/WebKit/chromium/public/WebPeerConnectionHandler.h:47
&gt; +class WebPeerConnectionHandler {

I see, you just renamed the API names.  It&apos;s probably worth renaming the WebCore classes too.  (I completely understand if you&apos;d like to do that in a followup patch.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492335</commentid>
    <comment_count>42</comment_count>
      <attachid>112835</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-28 02:24:54 -0700</bug_when>
    <thetext>Comment on attachment 112835
Patch

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

&gt;&gt; Source/WebKit/chromium/public/WebPeerConnectionHandler.h:47
&gt;&gt; +class WebPeerConnectionHandler {
&gt; 
&gt; I see, you just renamed the API names.  It&apos;s probably worth renaming the WebCore classes too.  (I completely understand if you&apos;d like to do that in a followup patch.)

Yes, will do that asap this patch lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492455</commentid>
    <comment_count>43</comment_count>
      <attachid>112864</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-28 07:56:16 -0700</bug_when>
    <thetext>Created attachment 112864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493383</commentid>
    <comment_count>44</comment_count>
      <attachid>112864</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-10-31 10:00:56 -0700</bug_when>
    <thetext>Comment on attachment 112864
Patch

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

Here&apos;s some comments on the API.  This patch looks great overall!

&gt; Source/WebKit/chromium/bridge/PeerConnectionHandlerInternal.cpp:61
&gt; +{

Did you try just doing:  result = streams;

There&apos;s an assignment operator on WebVector that takes a generic container.  See WebVector&lt;T&gt;::operator(const C&amp;)

&gt; Source/WebKit/chromium/public/WebPeerConnectionHandlerClient.h:37
&gt; +    virtual void iceProcessingCompleted() = 0;

nit-pick:  we normally name event methods with a &quot;did&quot; or &quot;will&quot; prefix.  see WebURLLoaderClient for instance.

didCompleteICEProcessing
didGenerateSDP
didReceiveDataStreamMessage
didAddRemoteStream
didRemoveRemoteStream

For consistency with WebKit APIs, I&apos;d recommend doing the same here, even if it might seem a bit more awkward at first :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493464</commentid>
    <comment_count>45</comment_count>
      <attachid>112864</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-31 13:23:44 -0700</bug_when>
    <thetext>Comment on attachment 112864
Patch

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

&gt;&gt; Source/WebKit/chromium/bridge/PeerConnectionHandlerInternal.cpp:61

&gt; 
&gt; Did you try just doing:  result = streams;
&gt; 
&gt; There&apos;s an assignment operator on WebVector that takes a generic container.  See WebVector&lt;T&gt;::operator(const C&amp;)

Ahh, fixed.

&gt;&gt; Source/WebKit/chromium/public/WebPeerConnectionHandlerClient.h:37
&gt;&gt; +    virtual void iceProcessingCompleted() = 0;
&gt; 
&gt; nit-pick:  we normally name event methods with a &quot;did&quot; or &quot;will&quot; prefix.  see WebURLLoaderClient for instance.
&gt; 
&gt; didCompleteICEProcessing
&gt; didGenerateSDP
&gt; didReceiveDataStreamMessage
&gt; didAddRemoteStream
&gt; didRemoveRemoteStream
&gt; 
&gt; For consistency with WebKit APIs, I&apos;d recommend doing the same here, even if it might seem a bit more awkward at first :)

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493466</commentid>
    <comment_count>46</comment_count>
      <attachid>113079</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2011-10-31 13:26:38 -0700</bug_when>
    <thetext>Created attachment 113079
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493673</commentid>
    <comment_count>47</comment_count>
      <attachid>113079</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-31 17:44:04 -0700</bug_when>
    <thetext>Comment on attachment 113079
Patch

Clearing flags on attachment: 113079

Committed r98926: &lt;http://trac.webkit.org/changeset/98926&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493674</commentid>
    <comment_count>48</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-31 17:44:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104670</attachid>
            <date>2011-08-22 06:32:34 -0700</date>
            <delta_ts>2011-08-25 02:35:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58550-20110822153232.patch</filename>
            <type>text/plain</type>
            <size>26603</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM0OTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
ODQ4MGY1NGIwNTZiZjk2ZWNmYjkyMzA1NWFjZjExMGJjMjRmMzRlNi4uZTE5MTYwZmVjNWVjZTlh
ZTQxZWY1M2ViMDE2OWY5MGE3NzJiNGQ5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw1MCBAQAorMjAxMS0wOC0yMiAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29v
Z2xlLmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIE1lZGlhIFN0cmVhbSBBUEk6IEFkZCBDaHJv
bWl1bSBXZWJLaXQgaW50ZXJmYWNlcyBmb3IgQ2xpZW50LCBDb250cm9sbGVyIGFuZCBDbGllbnRQ
cm94eS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4
NTUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJNZWRpYVN0cmVhbUNsaWVudC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1DbGllbnQ6On5XZWJNZWRpYVN0cmVh
bUNsaWVudCk6CisgICAgICAgICogcHVibGljL1dlYk1lZGlhU3RyZWFtQ29udHJvbGxlci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1Db250cm9sbGVyOjpXZWJNZWRp
YVN0cmVhbUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbUNvbnRy
b2xsZXI6OmNvbnRyb2xsZXIpOgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Q2xpZW50Lmg6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnQ6Om1lZGlhU3RyZWFtQ2xpZW50KToKKyAgICAg
ICAgKiBzcmMvTWVkaWFTdHJlYW1DbGllbnRQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpNZWRpYVN0cmVhbUNsaWVudFByb3h5OjpNZWRpYVN0cmVhbUNsaWVudFByb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6TWVkaWFTdHJlYW1DbGllbnRQcm94eTo6fk1lZGlhU3RyZWFtQ2xpZW50
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVN0cmVhbUNsaWVudFByb3h5OjpzZXRDb250
cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFTdHJlYW1DbGllbnRQcm94eTo6bWVkaWFT
dHJlYW1EZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVN0cmVhbUNsaWVudFByb3h5
OjpnZW5lcmF0ZVN0cmVhbSk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU3RyZWFtQ2xpZW50UHJv
eHk6OnN0b3BHZW5lcmF0ZWRTdHJlYW0pOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVN0cmVhbUNs
aWVudFByb3h5OjpzZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6
Ok1lZGlhU3RyZWFtQ2xpZW50UHJveHk6OnByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6TWVkaWFTdHJlYW1DbGllbnRQcm94eTo6bWVzc2FnZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok1lZGlhU3RyZWFtQ2xpZW50UHJveHk6OmFkZFN0cmVhbSk6CisgICAgICAgIChXZWJL
aXQ6Ok1lZGlhU3RyZWFtQ2xpZW50UHJveHk6OnJlbW92ZVN0cmVhbSk6CisgICAgICAgIChXZWJL
aXQ6Ok1lZGlhU3RyZWFtQ2xpZW50UHJveHk6Om5ld1BlZXJDb25uZWN0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6TWVkaWFTdHJlYW1DbGllbnRQcm94eTo6Y2xvc2VQZWVyQ29ubmVjdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok1lZGlhU3RyZWFtQ2xpZW50UHJveHk6OnN0YXJ0TmVnb3RpYXRpb24p
OgorICAgICAgICAqIHNyYy9NZWRpYVN0cmVhbUNsaWVudFByb3h5Lmg6IEFkZGVkLgorICAgICAg
ICAqIHNyYy9XZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViTWVkaWFTdHJlYW1Db250cm9sbGVyOjpzdHJlYW1HZW5lcmF0ZWQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnN0cmVhbUdlbmVyYXRpb25GYWls
ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnN0cmVhbUZh
aWxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU3RyZWFtQ29udHJvbGxlcjo6b25TaWdu
YWxpbmdNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1Db250cm9sbGVy
Ojpvbk1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXI6
Om9uTmVnb3RpYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1D
b250cm9sbGVyOjpvbk5lZ290aWF0aW9uRG9uZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlh
U3RyZWFtQ29udHJvbGxlcjo6b25BZGRTdHJlYW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRp
YVN0cmVhbUNvbnRyb2xsZXI6Om9uUmVtb3ZlU3RyZWFtKToKKyAgICAgICAgKiBzcmMvV2ViVmll
d0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwpOgor
ICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorCisgICAgICAgIFRlc3RzIGZvciB0aGUgTWVk
aWEgU3RyZWFtIEFQSSB3aWxsIGJlIHByb3ZpZGVkIGJ5IHRoZSBidWcgNTY1ODcsIHBlbmRpbmcg
ZW5vdWdoIGxhbmRlZCBjb2RlLgorCiAyMDExLTA4LTIwICBOZWJvanNhIENpcmljICA8Y2lyYUBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIGRlcGVuZGVuY3kgb24gdjgtaTE4biBsaWJyYXJ5
LiBXZSB1c2VkIHY4IHJlcG9zaXRvcnkgYmVmb3JlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
CmluZGV4IDk0YWQxZmMxOWE3ZWQwMDgzZWZhZDNiOTNlZWYzYmViMTgwMjljOTAuLjhjZDU5OGRj
OWU3Y2VlNTU4ZjY2NTdkNzE2ZjEyMDVlNjIyODg0ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAKQEAgLTIxMiw2ICsyMTIsOCBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVk
aWFQbGF5ZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVBsYXllckFjdGlv
bi5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlhUGxheWVyQ2xpZW50LmgnLAor
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFTdHJlYW1DbGllbnQuaCcsCisgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJNZWRpYVN0cmVhbVRyYWNrLmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViTWVkaWFTdHJlYW1UcmFja0xpc3QuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJNZW51SXRlbUluZm8uaCcsCkBAIC0zOTUsNiArMzk3LDggQEAKICAgICAgICAgICAgICAg
ICAnc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9Mb2NhbGl6ZWRTdHJpbmdzLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9NZWRpYVBsYXll
clByaXZhdGVDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvTWVkaWFTdHJlYW1D
bGllbnRQcm94eS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvTWVkaWFTdHJlYW1DbGllbnRQ
cm94eS5oJywKICAgICAgICAgICAgICAgICAnc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwu
aCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9wYWludGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgn
LApAQCAtNTIxLDYgKzUyNSw3IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYUVsZW1l
bnQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgnLAor
ICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVN0cmVhbVRyYWNrLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJNZWRpYVN0cmVhbVRyYWNrTGlzdC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViTmFtZWROb2RlTWFwLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1DbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMTk5YmVlNDhjYWI5
Yjg4OTUxMDMwODFjMTAyOTI4Y2MxMDQxMzU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1DbGllbnQuaApAQCAtMCwwICsxLDY3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYk1lZGlhU3RyZWFtQ2xpZW50X2gKKyNkZWZp
bmUgV2ViTWVkaWFTdHJlYW1DbGllbnRfaAorCisjaW5jbHVkZSAiV2ViTWVkaWFTdHJlYW1Db250
cm9sbGVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJNZWRpYVN0cmVhbUNv
bnRyb2xsZXI7CitjbGFzcyBXZWJTZWN1cml0eU9yaWdpbjsKKworLy8gU2hvdWxkIG1pcnJvciBk
ZSB2YWx1ZXMgZGVmaW5lZCBpbiBXZWJDb3JlOjpHZW5lcmF0ZVN0cmVhbU9wdGlvbkZsYWcuCitl
bnVtIFdlYkdlbmVyYXRlU3RyZWFtT3B0aW9uRmxhZyB7CisgICAgV2ViR2VuZXJhdGVTdHJlYW1S
ZXF1ZXN0QXVkaW8gPSAxLAorICAgIFdlYkdlbmVyYXRlU3RyZWFtUmVxdWVzdFZpZGVvRmFjaW5n
VXNlciA9IDEgPDwgMSwKKyAgICBXZWJHZW5lcmF0ZVN0cmVhbVJlcXVlc3RWaWRlb0ZhY2luZ0Vu
dmlyb25tZW50ID0gMSA8PCAyLAorfTsKKwordHlwZWRlZiB1bnNpZ25lZCBXZWJHZW5lcmF0ZVN0
cmVhbU9wdGlvbkZsYWdzOworCitjbGFzcyBXZWJNZWRpYVN0cmVhbUNsaWVudCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+V2ViTWVkaWFTdHJlYW1DbGllbnQoKSB7IH0KKworICAgIC8vIFRoZSBj
b250cm9sbGVyIGlzIHZhbGlkIHVudGlsIG1lZGlhU3RyZWFtRGVzdHJveWVkKCkgaXMgaW52b2tl
ZC4KKyAgICAvLyBPd25lcnNoaXAgb2YgdGhlIFdlYk1lZGlhU3RyZWFtQ29udHJvbGxlciBpcyB0
cmFuc2ZlcnJlZCB0byB0aGUgY2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250cm9sbGVy
KFdlYk1lZGlhU3RyZWFtQ29udHJvbGxlciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbWVkaWFT
dHJlYW1EZXN0cm95ZWQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTdHJlYW0o
aW50IHJlcXVlc3RJZCwgV2ViR2VuZXJhdGVTdHJlYW1PcHRpb25GbGFncywgY29uc3QgV2ViU2Vj
dXJpdHlPcmlnaW4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BHZW5lcmF0ZWRTdHJlYW0o
Y29uc3QgV2ViU3RyaW5nJiBzdHJlYW1MYWJlbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRN
ZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChjb25zdCBXZWJTdHJpbmcmIHRyYWNrSWQsIGJvb2wgZW5h
YmxlZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZShpbnQg
cGVlckNvbm5lY3Rpb25JZCwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIG1lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFdlYlN0cmluZyYg
bWVzc2FnZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhZGRTdHJlYW0oaW50IHBlZXJDb25uZWN0
aW9uSWQsIGNvbnN0IFdlYlN0cmluZyYgc3RyZWFtTGFiZWwpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgbmV3UGVlckNvbm5lY3Rpb24oaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFdlYlN0cmlu
ZyYgY29uZmlndXJhdGlvbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZVBlZXJDb25uZWN0
aW9uKGludCBwZWVyQ29ubmVjdGlvbklkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0TmVn
b3RpYXRpb24oaW50IHBlZXJDb25uZWN0aW9uSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBXZWJTdHJpbmcmIHN0cmVhbUxh
YmVsKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYk1l
ZGlhU3RyZWFtQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYk1lZGlhU3RyZWFtQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViTWVkaWFTdHJlYW1Db250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTA4NjRiNmFmNzI4
MWQ2ZTNlYjEzY2I1NzhkMjdjYjUwMDcxMjI1OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtQ29udHJvbGxlci5oCkBAIC0wLDAg
KzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTWVkaWFTdHJlYW1Db250cm9sbGVy
X2gKKyNkZWZpbmUgV2ViTWVkaWFTdHJlYW1Db250cm9sbGVyX2gKKworI2luY2x1ZGUgIldlYkNv
bW1vbi5oIgorI2luY2x1ZGUgIldlYk5vbkNvcHlhYmxlLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIE1lZGlhU3RyZWFtQ29udHJvbGxlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYkJsb2JEYXRhOworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2ViTWVkaWFT
dHJlYW1UcmFja0xpc3Q7CisKKy8vIE5vdGUgdGhhdCB0aGUgV2ViTWVkaWFTdHJlYW1Db250cm9s
bGVyIGlzIGludmFsaWQgYWZ0ZXIgdGhlCisvLyBXZWJNZWRpYVN0cmVhbUNsaWVudDo6bWVkaWFT
dHJlYW1EZXN0cm95ZWQoKSBoYXMgYmVlbiByZWNlaXZlZC4KK2NsYXNzIFdlYk1lZGlhU3RyZWFt
Q29udHJvbGxlciA6IHB1YmxpYyBXZWJOb25Db3B5YWJsZSB7CitwdWJsaWM6CisgICAgLy8gU2Ft
ZSBhcyBXZWJDb3JlOjpOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcjo6UEVSTUlTU0lPTl9ERU5JRUQu
CisgICAgZW51bSBFcnJvciB7CisgICAgICAgIEVycm9yUGVybWlzc2lvbkRlbmllZCA9IDEKKyAg
ICB9OworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHN0cmVhbUdlbmVyYXRlZChpbnQgcmVxdWVz
dElkLCBjb25zdCBXZWJTdHJpbmcmIHN0cmVhbUxhYmVsLCBXZWJNZWRpYVN0cmVhbVRyYWNrTGlz
dCYpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzdHJlYW1HZW5lcmF0aW9uRmFpbGVkKGludCBy
ZXF1ZXN0SWQsIEVycm9yIGNvZGUpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzdHJlYW1GYWls
ZWQoY29uc3QgV2ViU3RyaW5nJiBzdHJlYW1MYWJlbCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgb25TaWduYWxpbmdNZXNzYWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBXZWJTdHJp
bmcmIG1lc3NhZ2UpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBvbk1lc3NhZ2UoaW50IHBlZXJD
b25uZWN0aW9uSWQsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSk7CisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIG9uTmVnb3RpYXRpb25TdGFydGVkKGludCBwZWVyQ29ubmVjdGlvbklkKTsKKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgb25OZWdvdGlhdGlvbkRvbmUoaW50IHBlZXJDb25uZWN0aW9uSWQp
OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBvbkFkZFN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25J
ZCwgY29uc3QgV2ViU3RyaW5nJiBzdHJlYW1MYWJlbCwgV2ViTWVkaWFTdHJlYW1UcmFja0xpc3Qm
KTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgb25SZW1vdmVTdHJlYW0oaW50IHBlZXJDb25uZWN0
aW9uSWQsIGNvbnN0IFdlYlN0cmluZyYgc3RyZWFtTGFiZWwpOworCisjaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCisgICAgV2ViTWVkaWFTdHJlYW1Db250cm9sbGVyKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtQ29udHJvbGxlciogY29udHJvbGxlcikKKyAgICAgICAgOiBtX3ByaXZhdGUoY29udHJvbGxl
cikKKyAgICB7CisgICAgfQorCisgICAgV2ViQ29yZTo6TWVkaWFTdHJlYW1Db250cm9sbGVyKiBj
b250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9wcml2YXRlOyB9CisjZW5kaWYKKworcHJpdmF0
ZToKKyAgICAvLyBObyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGRlZmF1bHQgY29uc3RydWN0b3Iu
IERlY2xhcmVkIHByaXZhdGUgdG8gZW5zdXJlIHRoYXQgbm8gaW5zdGFuY2VzCisgICAgLy8gY2Fu
IGJlIGNyZWF0ZWQgYnkgdGhlIGNvbnN1bWVycyBvZiBDaHJvbWl1bSBXZWJLaXQuCisgICAgV2Vi
TWVkaWFTdHJlYW1Db250cm9sbGVyKCk7CisKKyAgICBXZWJDb3JlOjpNZWRpYVN0cmVhbUNvbnRy
b2xsZXIqIG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gV2ViTWVkaWFTdHJlYW1Db250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlZpZXdDbGllbnQuaAppbmRleCA1MmJmYzIxNTVhNWZiNjdiODMyODQzMzkwMDNj
NDk1OThkMDdiNzliLi5mODg4YTM4MWM5ZjM3N2E3MTJhOTc5YWQyZDdiYTg3NWMyZWYwOTMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3Q2xpZW50LmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVudC5oCkBAIC01
OSw2ICs1OSw3IEBAIGNsYXNzIFdlYkljb25Mb2FkaW5nQ29tcGxldGlvbjsKIGNsYXNzIFdlYklt
YWdlOwogY2xhc3MgV2ViSW5wdXRFbGVtZW50OwogY2xhc3MgV2ViS2V5Ym9hcmRFdmVudDsKK2Ns
YXNzIFdlYk1lZGlhU3RyZWFtQ2xpZW50OwogY2xhc3MgV2ViTm9kZTsKIGNsYXNzIFdlYk5vdGlm
aWNhdGlvblByZXNlbnRlcjsKIGNsYXNzIFdlYlJhbmdlOwpAQCAtMjg4LDYgKzI4OSwxMSBAQCBw
dWJsaWM6CiAgICAgLy8gQWNjZXNzIHRoZSBlbWJlZGRlciBBUEkgZm9yIChub24tY2xpZW50LWJh
c2VkKSBnZW9sb2NhdGlvbiBzZXJ2aWNlcy4KICAgICB2aXJ0dWFsIFdlYkdlb2xvY2F0aW9uU2Vy
dmljZSogZ2VvbG9jYXRpb25TZXJ2aWNlKCkgeyByZXR1cm4gMDsgfQogCisgICAgLy8gTWVkaWFT
dHJlYW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKyAgICAvLyBBY2Nlc3MgdGhlIGVtYmVkZGVyIEFQSSBmb3IgbWVkaWEgc3RyZWFt
IHNlcnZpY2VzLgorICAgIHZpcnR1YWwgV2ViTWVkaWFTdHJlYW1DbGllbnQqIG1lZGlhU3RyZWFt
Q2xpZW50KCkgeyByZXR1cm4gMDsgfQorCiAgICAgLy8gU3BlZWNoIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBB
Y2Nlc3MgdGhlIGVtYmVkZGVyIEFQSSBmb3Igc3BlZWNoIGlucHV0IHNlcnZpY2VzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTWVkaWFTdHJlYW1DbGllbnRQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9NZWRpYVN0cmVhbUNsaWVudFByb3h5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yNWZiMjI3ZmFlNjg1NjJiZjVjYjE4OTc3YTJhYmE1MWQ1ZGVlOWJhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTWVkaWFTdHJlYW1D
bGllbnRQcm94eS5jcHAKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbUNsaWVudFByb3h5LmgiCisKKyNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKKyNpbmNsdWRl
ICJXZWJNZWRpYVN0cmVhbUNsaWVudC5oIgorI2luY2x1ZGUgIldlYk1lZGlhU3RyZWFtQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIldlYlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiV2ViU3Ry
aW5nLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitNZWRpYVN0cmVhbUNsaWVudFByb3h5OjpN
ZWRpYVN0cmVhbUNsaWVudFByb3h5KFdlYk1lZGlhU3RyZWFtQ2xpZW50KiBjbGllbnQpCisgICAg
OiBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK01lZGlhU3RyZWFtQ2xpZW50UHJveHk6On5NZWRp
YVN0cmVhbUNsaWVudFByb3h5KCkKK3sKK30KKwordm9pZCBNZWRpYVN0cmVhbUNsaWVudFByb3h5
OjpzZXRDb250cm9sbGVyKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ29udHJvbGxlciogY29udHJvbGxl
cikKK3sKKyAgICAvLyBXZSBzdXBwb3J0IHRoZXJlIG5vdCBiZWluZyBhIGNsaWVudCwgcHJvdmlk
ZWQgd2UgZG9uJ3QgZG8gYW55IG1lZGlhIHN0cmVhbWluZy4KKyAgICBpZiAobV9jbGllbnQpCisg
ICAgICAgIC8vIE93bmVyc2hpcCBvZiB0aGUgV2ViTWVkaWFTdHJlYW1Db250cm9sbGVyIGlzIHRy
YW5zZmVycmVkIHRvIHRoZSBjbGllbnQuCisgICAgICAgIG1fY2xpZW50LT5zZXRDb250cm9sbGVy
KG5ldyBXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXIoY29udHJvbGxlcikpOworfQorCit2b2lkIE1l
ZGlhU3RyZWFtQ2xpZW50UHJveHk6Om1lZGlhU3RyZWFtRGVzdHJveWVkKCkKK3sKKyAgICBpZiAo
bV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5tZWRpYVN0cmVhbURlc3Ryb3llZCgpOworfQor
Cit2b2lkIE1lZGlhU3RyZWFtQ2xpZW50UHJveHk6OmdlbmVyYXRlU3RyZWFtKGludCByZXF1ZXN0
SWQsIFdlYkNvcmU6OkdlbmVyYXRlU3RyZWFtT3B0aW9uRmxhZ3MgZmxhZ3MsIFBhc3NSZWZQdHI8
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luKQoreworICAgIGlmIChtX2Ns
aWVudCkKKyAgICAgICAgbV9jbGllbnQtPmdlbmVyYXRlU3RyZWFtKHJlcXVlc3RJZCwgc3RhdGlj
X2Nhc3Q8V2ViR2VuZXJhdGVTdHJlYW1PcHRpb25GbGFncz4oZmxhZ3MpLCBXZWJTZWN1cml0eU9y
aWdpbihzZWN1cml0eU9yaWdpbikpOworfQorCit2b2lkIE1lZGlhU3RyZWFtQ2xpZW50UHJveHk6
OnN0b3BHZW5lcmF0ZWRTdHJlYW0oY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkKK3sKKyAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5zdG9wR2VuZXJhdGVkU3RyZWFtKHN0cmVh
bUxhYmVsKTsKK30KKwordm9pZCBNZWRpYVN0cmVhbUNsaWVudFByb3h5OjpzZXRNZWRpYVN0cmVh
bVRyYWNrRW5hYmxlZChjb25zdCBTdHJpbmcmIHRyYWNrSWQsIGJvb2wgZW5hYmxlZCkKK3sKKyAg
ICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5zZXRNZWRpYVN0cmVhbVRyYWNrRW5h
YmxlZCh0cmFja0lkLCBlbmFibGVkKTsKK30KKwordm9pZCBNZWRpYVN0cmVhbUNsaWVudFByb3h5
Ojpwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnBy
b2Nlc3NTaWduYWxpbmdNZXNzYWdlKHBlZXJDb25uZWN0aW9uSWQsIG1lc3NhZ2UpOworfQorCit2
b2lkIE1lZGlhU3RyZWFtQ2xpZW50UHJveHk6Om1lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1f
Y2xpZW50LT5tZXNzYWdlKHBlZXJDb25uZWN0aW9uSWQsIG1lc3NhZ2UpOworfQorCit2b2lkIE1l
ZGlhU3RyZWFtQ2xpZW50UHJveHk6OmFkZFN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29u
c3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1f
Y2xpZW50LT5hZGRTdHJlYW0ocGVlckNvbm5lY3Rpb25JZCwgc3RyZWFtTGFiZWwpOworfQorCit2
b2lkIE1lZGlhU3RyZWFtQ2xpZW50UHJveHk6OnJlbW92ZVN0cmVhbShpbnQgcGVlckNvbm5lY3Rp
b25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisg
ICAgICAgIG1fY2xpZW50LT5yZW1vdmVTdHJlYW0ocGVlckNvbm5lY3Rpb25JZCwgc3RyZWFtTGFi
ZWwpOworfQorCit2b2lkIE1lZGlhU3RyZWFtQ2xpZW50UHJveHk6Om5ld1BlZXJDb25uZWN0aW9u
KGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24pCit7Cisg
ICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+bmV3UGVlckNvbm5lY3Rpb24ocGVl
ckNvbm5lY3Rpb25JZCwgY29uZmlndXJhdGlvbik7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1DbGll
bnRQcm94eTo6Y2xvc2VQZWVyQ29ubmVjdGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCkKK3sKKyAg
ICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5jbG9zZVBlZXJDb25uZWN0aW9uKHBl
ZXJDb25uZWN0aW9uSWQpOworfQorCit2b2lkIE1lZGlhU3RyZWFtQ2xpZW50UHJveHk6OnN0YXJ0
TmVnb3RpYXRpb24oaW50IHBlZXJDb25uZWN0aW9uSWQpCit7CisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+c3RhcnROZWdvdGlhdGlvbihwZWVyQ29ubmVjdGlvbklkKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFN
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTWVkaWFTdHJlYW1DbGll
bnRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTWVkaWFTdHJlYW1DbGllbnRQ
cm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjlmZjQ4YjM2MmJmYmJhYTEwMzUzZDE0YzM5NTc3YWMzZTQ1MzVh
Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9NZWRpYVN0
cmVhbUNsaWVudFByb3h5LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBNZWRpYVN0cmVhbUNsaWVudFByb3h5X2gKKyNkZWZpbmUgTWVkaWFTdHJlYW1DbGllbnRQcm94
eV9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1D
bGllbnQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIldlYk1lZGlh
U3RyZWFtQ29udHJvbGxlci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJNZWRpYVN0cmVhbUNsaWVudDsKK2NsYXNzIFdlYlN0
cmluZzsKKworY2xhc3MgTWVkaWFTdHJlYW1DbGllbnRQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpN
ZWRpYVN0cmVhbUNsaWVudCB7CitwdWJsaWM6CisgICAgTWVkaWFTdHJlYW1DbGllbnRQcm94eShX
ZWJNZWRpYVN0cmVhbUNsaWVudCopOworICAgIHZpcnR1YWwgfk1lZGlhU3RyZWFtQ2xpZW50UHJv
eHkoKTsKKworICAgIHZvaWQgc2V0Q29udHJvbGxlcihXZWJDb3JlOjpNZWRpYVN0cmVhbUNvbnRy
b2xsZXIqKTsKKworICAgIC8vIFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ2xpZW50IGltcGxlbWVudGF0
aW9uLgorICAgIHZpcnR1YWwgdm9pZCBtZWRpYVN0cmVhbURlc3Ryb3llZCgpOworICAgIHZpcnR1
YWwgdm9pZCBnZW5lcmF0ZVN0cmVhbShpbnQgcmVxdWVzdElkLCBXZWJDb3JlOjpHZW5lcmF0ZVN0
cmVhbU9wdGlvbkZsYWdzLCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPik7Cisg
ICAgdmlydHVhbCB2b2lkIHN0b3BHZW5lcmF0ZWRTdHJlYW0oY29uc3QgU3RyaW5nJiBzdHJlYW1M
YWJlbCk7CisgICAgdmlydHVhbCB2b2lkIHNldE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKGNvbnN0
IFN0cmluZyYgdHJhY2tJZCwgYm9vbCBlbmFibGVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vz
c1NpZ25hbGluZ01lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSk7CisgICAgdmlydHVhbCB2b2lkIG1lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgdmlydHVhbCB2b2lkIGFkZFN0cmVhbShpbnQgcGVl
ckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7CisgICAgdmlydHVhbCB2
b2lkIHJlbW92ZVN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJl
YW1MYWJlbCk7CisgICAgdmlydHVhbCB2b2lkIG5ld1BlZXJDb25uZWN0aW9uKGludCBwZWVyQ29u
bmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24pOworICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZVBlZXJDb25uZWN0aW9uKGludCBwZWVyQ29ubmVjdGlvbklkKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RhcnROZWdvdGlhdGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCk7CisKK3ByaXZhdGU6
CisgICAgV2ViTWVkaWFTdHJlYW1DbGllbnQqIG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8g
TWVkaWFTdHJlYW1DbGllbnRQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NjUxZmUx
ZDA1Y2UxZjQ0NGQzYzYwNzFjNWFlMzg3NTAzYzNkZWFkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcApAQCAt
MCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViTWVkaWFTdHJlYW1Db250cm9sbGVyLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiTWVkaWFT
dHJlYW1UcmFja0xpc3QuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvci5oIgor
I2luY2x1ZGUgIldlYk1lZGlhU3RyZWFtVHJhY2tMaXN0LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5n
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYk1lZGlhU3RyZWFtQ29udHJvbGxl
cjo6c3RyZWFtR2VuZXJhdGVkKGludCByZXF1ZXN0SWQsIGNvbnN0IFdlYlN0cmluZyYgc3RyZWFt
TGFiZWwsIFdlYk1lZGlhU3RyZWFtVHJhY2tMaXN0JiB0cmFja0xpc3QpCit7CisgICAgbV9wcml2
YXRlLT5zdHJlYW1HZW5lcmF0ZWQocmVxdWVzdElkLCBzdHJlYW1MYWJlbCwgdHJhY2tMaXN0KTsK
K30KKwordm9pZCBXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnN0cmVhbUdlbmVyYXRpb25GYWls
ZWQoaW50IHJlcXVlc3RJZCwgRXJyb3IgY29kZSkKK3sKKyAgICBtX3ByaXZhdGUtPnN0cmVhbUdl
bmVyYXRpb25GYWlsZWQocmVxdWVzdElkLCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpOYXZpZ2F0b3JV
c2VyTWVkaWFFcnJvcjo6RXJyb3JDb2RlPihjb2RlKSk7Cit9CisKK3ZvaWQgV2ViTWVkaWFTdHJl
YW1Db250cm9sbGVyOjpzdHJlYW1GYWlsZWQoY29uc3QgV2ViU3RyaW5nJiBzdHJlYW1MYWJlbCkK
K3sKKyAgICBtX3ByaXZhdGUtPnN0cmVhbUZhaWxlZChzdHJlYW1MYWJlbCk7Cit9CisKK3ZvaWQg
V2ViTWVkaWFTdHJlYW1Db250cm9sbGVyOjpvblNpZ25hbGluZ01lc3NhZ2UoaW50IHBlZXJDb25u
ZWN0aW9uSWQsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX3ByaXZhdGUtPm9u
U2lnbmFsaW5nTWVzc2FnZShwZWVyQ29ubmVjdGlvbklkLCBtZXNzYWdlKTsKK30KKwordm9pZCBX
ZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om9uTWVzc2FnZShpbnQgcGVlckNvbm5lY3Rpb25JZCwg
Y29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1fcHJpdmF0ZS0+b25NZXNzYWdlKHBl
ZXJDb25uZWN0aW9uSWQsIG1lc3NhZ2UpOworfQorCit2b2lkIFdlYk1lZGlhU3RyZWFtQ29udHJv
bGxlcjo6b25OZWdvdGlhdGlvblN0YXJ0ZWQoaW50IHBlZXJDb25uZWN0aW9uSWQpCit7CisgICAg
bV9wcml2YXRlLT5vbk5lZ290aWF0aW9uU3RhcnRlZChwZWVyQ29ubmVjdGlvbklkKTsKK30KKwor
dm9pZCBXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om9uTmVnb3RpYXRpb25Eb25lKGludCBwZWVy
Q29ubmVjdGlvbklkKQoreworICAgIG1fcHJpdmF0ZS0+b25OZWdvdGlhdGlvbkRvbmUocGVlckNv
bm5lY3Rpb25JZCk7Cit9CisKK3ZvaWQgV2ViTWVkaWFTdHJlYW1Db250cm9sbGVyOjpvbkFkZFN0
cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgV2ViU3RyaW5nJiBzdHJlYW1MYWJlbCwg
V2ViTWVkaWFTdHJlYW1UcmFja0xpc3QmIHRyYWNrTGlzdCkKK3sKKyAgICBtX3ByaXZhdGUtPm9u
QWRkU3RyZWFtKHBlZXJDb25uZWN0aW9uSWQsIHN0cmVhbUxhYmVsLCB0cmFja0xpc3QpOworfQor
Cit2b2lkIFdlYk1lZGlhU3RyZWFtQ29udHJvbGxlcjo6b25SZW1vdmVTdHJlYW0oaW50IHBlZXJD
b25uZWN0aW9uSWQsIGNvbnN0IFdlYlN0cmluZyYgc3RyZWFtTGFiZWwpCit7CisgICAgbV9wcml2
YXRlLT5vblJlbW92ZVN0cmVhbShwZWVyQ29ubmVjdGlvbklkLCBzdHJlYW1MYWJlbCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDdiMmI0
ZTQxOWNlMDA1NmNhY2VmNmIzN2VkNGQ2MmY1N2NkMzU2ZjAuLjZlZmI3ZTcxZWQzNjM1ZmQ4MTVj
OGQ3ZTViODExMWIxOGZlYjVjYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAKQEAgLTc0LDYgKzc0LDcgQEAKICNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgi
CiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9t
aXVtLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1DbGllbnRQcm94eS5oIgogI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCkBAIC0zNTIsNiArMzUzLDkgQEAgV2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdl
YlZpZXdDbGllbnQqIGNsaWVudCkKICNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVSKQogICAg
ICwgbV9nZXN0dXJlUmVjb2duaXplcihXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVy
OjpjcmVhdGUoKSkKICNlbmRpZgorI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgLCBtX21l
ZGlhU3RyZWFtQ2xpZW50UHJveHkoYWRvcHRQdHIobmV3IE1lZGlhU3RyZWFtQ2xpZW50UHJveHko
Y2xpZW50ID8gY2xpZW50LT5tZWRpYVN0cmVhbUNsaWVudCgpIDogMCkpKQorI2VuZGlmCiB7CiAg
ICAgLy8gV2ViS2l0L3dpbi9XZWJWaWV3LmNwcCBkb2VzIHRoZSBzYW1lIHRoaW5nLCBleGNlcHQg
dGhleSBjYWxsIHRoZQogICAgIC8vIEtKUyBzcGVjaWZpYyB3cmFwcGVyIGFyb3VuZCB0aGlzIG1l
dGhvZC4gV2UgbmVlZCB0byBoYXZlIHRocmVhZGluZwpAQCAtMzcxLDYgKzM3NSw5IEBAIFdlYlZp
ZXdJbXBsOjpXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50KiBjbGllbnQpCiAjaWYgRU5BQkxFKElO
UFVUX1NQRUVDSCkKICAgICBwYWdlQ2xpZW50cy5zcGVlY2hJbnB1dENsaWVudCA9IG1fc3BlZWNo
SW5wdXRDbGllbnQuZ2V0KCk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAg
IHBhZ2VDbGllbnRzLm1lZGlhU3RyZWFtQ2xpZW50ID0gbV9tZWRpYVN0cmVhbUNsaWVudFByb3h5
LmdldCgpOworI2VuZGlmCiAgICAgcGFnZUNsaWVudHMuZGV2aWNlT3JpZW50YXRpb25DbGllbnQg
PSBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50UHJveHkuZ2V0KCk7CiAgICAgcGFnZUNsaWVudHMu
Z2VvbG9jYXRpb25DbGllbnQgPSBtX2dlb2xvY2F0aW9uQ2xpZW50UHJveHkuZ2V0KCk7CiAgICAg
cGFnZUNsaWVudHMuYmFja0ZvcndhcmRDbGllbnQgPSBCYWNrRm9yd2FyZExpc3RDaHJvbWl1bTo6
Y3JlYXRlKHRoaXMpOwpAQCAtMzc4LDYgKzM4NSw5IEBAIFdlYlZpZXdJbXBsOjpXZWJWaWV3SW1w
bChXZWJWaWV3Q2xpZW50KiBjbGllbnQpCiAgICAgbV9wYWdlID0gYWRvcHRQdHIobmV3IFBhZ2Uo
cGFnZUNsaWVudHMpKTsKIAogICAgIG1fZ2VvbG9jYXRpb25DbGllbnRQcm94eS0+c2V0Q29udHJv
bGxlcihtX3BhZ2UtPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpKTsKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQorICAgIG1fbWVkaWFTdHJlYW1DbGllbnRQcm94eS0+c2V0Q29udHJvbGxlcihtX3Bh
Z2UtPm1lZGlhU3RyZWFtQ29udHJvbGxlcigpKTsKKyNlbmRpZgogCiAgICAgbV9wYWdlLT5zZXRH
cm91cE5hbWUocGFnZUdyb3VwTmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oCmluZGV4IGM3Y2QxMmI2NzA0ZGM5NTYyMDRiMTA0NzUzNmNiZGExYmIxNjY0OWMu
LmM1YTFmZjY0MTczNjYwZDZlMGNlN2M3NDVhYTEyYjFjNTJkNjk0ZDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtNzksNiArNzksNyBAQCBjbGFzcyBDb250
ZXh0TWVudUNsaWVudEltcGw7CiBjbGFzcyBEZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5Owog
Y2xhc3MgRHJhZ1Njcm9sbFRpbWVyOwogY2xhc3MgR2VvbG9jYXRpb25DbGllbnRQcm94eTsKK2Ns
YXNzIE1lZGlhU3RyZWFtQ2xpZW50UHJveHk7CiBjbGFzcyBTcGVlY2hJbnB1dENsaWVudEltcGw7
CiBjbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OwogY2xhc3MgV2ViRGV2VG9vbHNBZ2VudENs
aWVudDsKQEAgLTU5MCw2ICs1OTEsOSBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShHRVNUVVJFX1JF
Q09HTklaRVIpCiAgICAgT3duUHRyPFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI+
IG1fZ2VzdHVyZVJlY29nbml6ZXI7CiAjZW5kaWYKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQor
ICAgIE93blB0cjxNZWRpYVN0cmVhbUNsaWVudFByb3h5PiBtX21lZGlhU3RyZWFtQ2xpZW50UHJv
eHk7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105149</attachid>
            <date>2011-08-25 02:35:29 -0700</date>
            <delta_ts>2011-10-24 06:51:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58550-20110825113528.patch</filename>
            <type>text/plain</type>
            <size>26504</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM3NjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
NTRlODE2OTQ0ZDQ3OTRjY2UwMGQ4ZTAwNzNhNWE4M2VjN2E4NDdhOC4uZDdjY2UwMWJkMTM4MjQ5
M2NkNDUxMjMxNTkwMzcwZDA1ZDI1NjUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw1MCBAQAorMjAxMS0wOC0yNSAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29v
Z2xlLmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIE1lZGlhIFN0cmVhbSBBUEk6IEFkZCBDaHJv
bWl1bSBXZWJLaXQgaW50ZXJmYWNlcyBmb3IgQ2xpZW50LCBDb250cm9sbGVyIGFuZCBDbGllbnRQ
cm94eS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4
NTUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJNZWRpYVN0cmVhbUNsaWVudC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1DbGllbnQ6On5XZWJNZWRpYVN0cmVh
bUNsaWVudCk6CisgICAgICAgICogcHVibGljL1dlYk1lZGlhU3RyZWFtQ29udHJvbGxlci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1Db250cm9sbGVyOjpXZWJNZWRp
YVN0cmVhbUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbUNvbnRy
b2xsZXI6OmNvbnRyb2xsZXIpOgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Q2xpZW50Lmg6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnQ6Om1lZGlhU3RyZWFtQ2xpZW50KToKKyAgICAg
ICAgKiBzcmMvTWVkaWFTdHJlYW1DbGllbnRQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpNZWRpYVN0cmVhbUNsaWVudFByb3h5OjpNZWRpYVN0cmVhbUNsaWVudFByb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6TWVkaWFTdHJlYW1DbGllbnRQcm94eTo6fk1lZGlhU3RyZWFtQ2xpZW50
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVN0cmVhbUNsaWVudFByb3h5OjpzZXRDb250
cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFTdHJlYW1DbGllbnRQcm94eTo6bWVkaWFT
dHJlYW1EZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVN0cmVhbUNsaWVudFByb3h5
OjpnZW5lcmF0ZVN0cmVhbSk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU3RyZWFtQ2xpZW50UHJv
eHk6OnN0b3BHZW5lcmF0ZWRTdHJlYW0pOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVN0cmVhbUNs
aWVudFByb3h5OjpzZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6
Ok1lZGlhU3RyZWFtQ2xpZW50UHJveHk6OnByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6TWVkaWFTdHJlYW1DbGllbnRQcm94eTo6bWVzc2FnZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok1lZGlhU3RyZWFtQ2xpZW50UHJveHk6OmFkZFN0cmVhbSk6CisgICAgICAgIChXZWJL
aXQ6Ok1lZGlhU3RyZWFtQ2xpZW50UHJveHk6OnJlbW92ZVN0cmVhbSk6CisgICAgICAgIChXZWJL
aXQ6Ok1lZGlhU3RyZWFtQ2xpZW50UHJveHk6Om5ld1BlZXJDb25uZWN0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6TWVkaWFTdHJlYW1DbGllbnRQcm94eTo6Y2xvc2VQZWVyQ29ubmVjdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok1lZGlhU3RyZWFtQ2xpZW50UHJveHk6OnN0YXJ0TmVnb3RpYXRpb24p
OgorICAgICAgICAqIHNyYy9NZWRpYVN0cmVhbUNsaWVudFByb3h5Lmg6IEFkZGVkLgorICAgICAg
ICAqIHNyYy9XZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViTWVkaWFTdHJlYW1Db250cm9sbGVyOjpzdHJlYW1HZW5lcmF0ZWQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnN0cmVhbUdlbmVyYXRpb25GYWls
ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnN0cmVhbUZh
aWxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU3RyZWFtQ29udHJvbGxlcjo6b25TaWdu
YWxpbmdNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1Db250cm9sbGVy
Ojpvbk1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXI6
Om9uTmVnb3RpYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1D
b250cm9sbGVyOjpvbk5lZ290aWF0aW9uRG9uZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlh
U3RyZWFtQ29udHJvbGxlcjo6b25BZGRTdHJlYW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRp
YVN0cmVhbUNvbnRyb2xsZXI6Om9uUmVtb3ZlU3RyZWFtKToKKyAgICAgICAgKiBzcmMvV2ViVmll
d0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwpOgor
ICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorCisgICAgICAgIFRlc3RzIGZvciB0aGUgTWVk
aWEgU3RyZWFtIEFQSSB3aWxsIGJlIHByb3ZpZGVkIGJ5IHRoZSBidWcgNTY1ODcsIHBlbmRpbmcg
ZW5vdWdoIGxhbmRlZCBjb2RlLgorCiAyMDExLTA4LTI0ICBLZW50YXJvIEhhcmEgIDxoYXJha2Vu
QGdvb2dsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IGEga2V5cGF0aCBwYXJzZXIgc3RyaWN0
bHkgZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
aW5kZXggNmUzOTE1YTNjYjBjNzY2NmYyOTJhYmJiOWE0MmMzYWE5MTc1NWE1ZC4uZTc1YjdkZjdi
Nzc1YmMxNDczNDRjMDlkMjg5YWFjZjMyMzA0NzFjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cApAQCAtMjE0LDYgKzIxNCw4IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRp
YVBsYXllci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlhUGxheWVyQWN0aW9u
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFQbGF5ZXJDbGllbnQuaCcsCisg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVN0cmVhbUNsaWVudC5oJywKKyAgICAgICAg
ICAgICAgICAncHVibGljL1dlYk1lZGlhU3RyZWFtQ29udHJvbGxlci5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYk1lZGlhU3RyZWFtVHJhY2suaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJNZWRpYVN0cmVhbVRyYWNrTGlzdC5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYk1lbnVJdGVtSW5mby5oJywKQEAgLTM5OCw2ICs0MDAsOCBAQAogICAgICAgICAgICAgICAg
ICdzcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L0xvY2FsaXplZFN0cmluZ3MuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL01lZGlhUGxheWVy
UHJpdmF0ZUNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9NZWRpYVN0cmVhbUNs
aWVudFByb3h5LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9NZWRpYVN0cmVhbUNsaWVudFBy
b3h5LmgnLAogICAgICAgICAgICAgICAgICdzcmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5o
JywKICAgICAgICAgICAgICAgICAnc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL3BhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCcs
CkBAIC01MjQsNiArNTI4LDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhRWxlbWVu
dC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuaCcsCisg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYk1lZGlhU3RyZWFtVHJhY2suY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYk1lZGlhU3RyZWFtVHJhY2tMaXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJOYW1lZE5vZGVNYXAuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYk1lZGlhU3RyZWFtQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJNZWRpYVN0cmVhbUNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhYzA3NTgyODFiYmEy
NTViODQwYTE2NmVkNmQ1ZmEyMTg4MTk3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbUNsaWVudC5oCkBAIC0wLDAgKzEsNjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTWVkaWFTdHJlYW1DbGllbnRfaAorI2RlZmlu
ZSBXZWJNZWRpYVN0cmVhbUNsaWVudF9oCisKKyNpbmNsdWRlICJXZWJNZWRpYVN0cmVhbUNvbnRy
b2xsZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYk1lZGlhU3RyZWFtQ29u
dHJvbGxlcjsKK2NsYXNzIFdlYlNlY3VyaXR5T3JpZ2luOworCitjbGFzcyBXZWJNZWRpYVN0cmVh
bUNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gTXVzdCBtaXJyb3IgdGhlIHZhbHVlcyBkZWZpbmVk
IGluIFdlYkNvcmU6OkdlbmVyYXRlU3RyZWFtT3B0aW9uRmxhZy4KKyAgICBlbnVtIEdlbmVyYXRl
U3RyZWFtT3B0aW9uRmxhZyB7CisgICAgICAgIEdlbmVyYXRlU3RyZWFtT3B0aW9uRmxhZ1JlcXVl
c3RBdWRpbyA9IDEsCisgICAgICAgIEdlbmVyYXRlU3RyZWFtT3B0aW9uRmxhZ1JlcXVlc3RWaWRl
b0ZhY2luZ1VzZXIgPSAxIDw8IDEsCisgICAgICAgIEdlbmVyYXRlU3RyZWFtT3B0aW9uRmxhZ1Jl
cXVlc3RWaWRlb0ZhY2luZ0Vudmlyb25tZW50ID0gMSA8PCAyLAorICAgIH07CisKKyAgICB2aXJ0
dWFsIH5XZWJNZWRpYVN0cmVhbUNsaWVudCgpIHsgfQorCisgICAgLy8gT3duZXJzaGlwIG9mIHRo
ZSBXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXIgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIGNsaWVudC4K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udHJvbGxlcihXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXIq
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1lZGlhU3RyZWFtRGVzdHJveWVkKCkgPSAwOworCisg
ICAgLy8gb3B0aW9uRmxhZ3MgaXMgYSBiaXQtd2lzZSBjb21iaW5hdGlvbiBvZiBHZW5lcmF0ZVN0
cmVhbU9wdGlvbkZsYWcgdmFsdWVzLgorICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZVN0cmVhbShp
bnQgcmVxdWVzdElkLCBpbnQgb3B0aW9uRmxhZ3MsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9wR2VuZXJhdGVkU3RyZWFtKGNvbnN0IFdlYlN0cmlu
ZyYgc3RyZWFtTGFiZWwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWVkaWFTdHJlYW1UcmFj
a0VuYWJsZWQoY29uc3QgV2ViU3RyaW5nJiB0cmFja0lkLCBib29sIGVuYWJsZWQpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9u
SWQsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBtZXNz
YWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRkU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBX
ZWJTdHJpbmcmIHN0cmVhbUxhYmVsKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG5ld1BlZXJDb25u
ZWN0aW9uKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBXZWJTdHJpbmcmIGNvbmZpZ3VyYXRp
b24pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VQZWVyQ29ubmVjdGlvbihpbnQgcGVlckNv
bm5lY3Rpb25JZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFydE5lZ290aWF0aW9uKGludCBw
ZWVyQ29ubmVjdGlvbklkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVN0cmVhbShpbnQg
cGVlckNvbm5lY3Rpb25JZCwgY29uc3QgV2ViU3RyaW5nJiBzdHJlYW1MYWJlbCkgPSAwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJNZWRpYVN0cmVhbUNsaWVu
dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0
cmVhbUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlh
U3RyZWFtQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkMTIzMWE1MTkyYTU4YjNmNjRkZGJiMzg4
MmZlNGZmYWE1M2E5Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDc5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYk1lZGlhU3RyZWFtQ29udHJvbGxlcl9oCisjZGVmaW5lIFdl
Yk1lZGlhU3RyZWFtQ29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNs
dWRlICJXZWJOb25Db3B5YWJsZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBNZWRp
YVN0cmVhbUNvbnRyb2xsZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJC
bG9iRGF0YTsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYk1lZGlhU3RyZWFtVHJhY2tMaXN0
OworCisvLyBOb3RlIHRoYXQgdGhlIFdlYk1lZGlhU3RyZWFtQ29udHJvbGxlciBpcyBpbnZhbGlk
IGFmdGVyIHRoZQorLy8gV2ViTWVkaWFTdHJlYW1DbGllbnQ6Om1lZGlhU3RyZWFtRGVzdHJveWVk
KCkgaGFzIGJlZW4gcmVjZWl2ZWQuCitjbGFzcyBXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXIgOiBw
dWJsaWMgV2ViTm9uQ29weWFibGUgeworcHVibGljOgorICAgIGVudW0gRXJyb3IgeworICAgICAg
ICBFcnJvclBlcm1pc3Npb25EZW5pZWQgPSAxCisgICAgfTsKKworICAgIFdFQktJVF9FWFBPUlQg
dm9pZCBzdHJlYW1HZW5lcmF0ZWQoaW50IHJlcXVlc3RJZCwgY29uc3QgV2ViU3RyaW5nJiBzdHJl
YW1MYWJlbCwgV2ViTWVkaWFTdHJlYW1UcmFja0xpc3QmKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgc3RyZWFtR2VuZXJhdGlvbkZhaWxlZChpbnQgcmVxdWVzdElkLCBFcnJvciBjb2RlKTsKKyAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgc3RyZWFtRmFpbGVkKGNvbnN0IFdlYlN0cmluZyYgc3RyZWFt
TGFiZWwpOworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIG9uU2lnbmFsaW5nTWVzc2FnZShpbnQg
cGVlckNvbm5lY3Rpb25JZCwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKTsKKyAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgb25NZXNzYWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBXZWJTdHJp
bmcmIG1lc3NhZ2UpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBvbk5lZ290aWF0aW9uU3RhcnRl
ZChpbnQgcGVlckNvbm5lY3Rpb25JZCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIG9uTmVnb3Rp
YXRpb25Eb25lKGludCBwZWVyQ29ubmVjdGlvbklkKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
b25BZGRTdHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFdlYlN0cmluZyYgc3RyZWFt
TGFiZWwsIFdlYk1lZGlhU3RyZWFtVHJhY2tMaXN0Jik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IG9uUmVtb3ZlU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBXZWJTdHJpbmcmIHN0
cmVhbUxhYmVsKTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYk1lZGlhU3Ry
ZWFtQ29udHJvbGxlcihXZWJDb3JlOjpNZWRpYVN0cmVhbUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIp
CisgICAgICAgIDogbV9wcml2YXRlKGNvbnRyb2xsZXIpCisgICAgeworICAgIH0KKworICAgIFdl
YkNvcmU6Ok1lZGlhU3RyZWFtQ29udHJvbGxlciogY29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJu
IG1fcHJpdmF0ZTsgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgLy8gTm8gaW1wbGVtZW50YXRp
b24gZm9yIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yLiBEZWNsYXJlZCBwcml2YXRlIHRvIGVuc3Vy
ZSB0aGF0IG5vIGluc3RhbmNlcworICAgIC8vIGNhbiBiZSBjcmVhdGVkIGJ5IHRoZSBjb25zdW1l
cnMgb2YgQ2hyb21pdW0gV2ViS2l0LgorICAgIFdlYk1lZGlhU3RyZWFtQ29udHJvbGxlcigpOwor
CisgICAgV2ViQ29yZTo6TWVkaWFTdHJlYW1Db250cm9sbGVyKiBtX3ByaXZhdGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYk1lZGlhU3RyZWFtQ29udHJvbGxl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3Q2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3Q2xpZW50LmgKaW5k
ZXggNTJiZmMyMTU1YTVmYjY3YjgzMjg0MzM5MDAzYzQ5NTk4ZDA3Yjc5Yi4uZjg4OGEzODFjOWYz
NzdhNzEyYTk3OWFkMmQ3YmE4NzVjMmVmMDkzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlZpZXdDbGllbnQuaApAQCAtNTksNiArNTksNyBAQCBjbGFzcyBXZWJJY29u
TG9hZGluZ0NvbXBsZXRpb247CiBjbGFzcyBXZWJJbWFnZTsKIGNsYXNzIFdlYklucHV0RWxlbWVu
dDsKIGNsYXNzIFdlYktleWJvYXJkRXZlbnQ7CitjbGFzcyBXZWJNZWRpYVN0cmVhbUNsaWVudDsK
IGNsYXNzIFdlYk5vZGU7CiBjbGFzcyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI7CiBjbGFzcyBX
ZWJSYW5nZTsKQEAgLTI4OCw2ICsyODksMTEgQEAgcHVibGljOgogICAgIC8vIEFjY2VzcyB0aGUg
ZW1iZWRkZXIgQVBJIGZvciAobm9uLWNsaWVudC1iYXNlZCkgZ2VvbG9jYXRpb24gc2VydmljZXMu
CiAgICAgdmlydHVhbCBXZWJHZW9sb2NhdGlvblNlcnZpY2UqIGdlb2xvY2F0aW9uU2VydmljZSgp
IHsgcmV0dXJuIDA7IH0KIAorICAgIC8vIE1lZGlhU3RyZWFtIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gQWNjZXNzIHRo
ZSBlbWJlZGRlciBBUEkgZm9yIG1lZGlhIHN0cmVhbSBzZXJ2aWNlcy4KKyAgICB2aXJ0dWFsIFdl
Yk1lZGlhU3RyZWFtQ2xpZW50KiBtZWRpYVN0cmVhbUNsaWVudCgpIHsgcmV0dXJuIDA7IH0KKwog
ICAgIC8vIFNwZWVjaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgLy8gQWNjZXNzIHRoZSBlbWJlZGRlciBBUEkgZm9y
IHNwZWVjaCBpbnB1dCBzZXJ2aWNlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL01lZGlhU3RyZWFtQ2xpZW50UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvTWVkaWFTdHJlYW1DbGllbnRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmI5NjQ5Mjc1MDE2
NTQ3ZjQ0NTU2NmQxZjZlNjVhNTdkYThjY2Y5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL01lZGlhU3RyZWFtQ2xpZW50UHJveHkuY3BwCkBAIC0wLDAgKzEs
MTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVk
aWFTdHJlYW1DbGllbnRQcm94eS5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2lu
Y2x1ZGUgIk1lZGlhU3RyZWFtLmgiCisjaW5jbHVkZSAiV2ViTWVkaWFTdHJlYW1DbGllbnQuaCIK
KyNpbmNsdWRlICJXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXZWJTZWN1
cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworTWVkaWFTdHJlYW1DbGllbnRQcm94eTo6TWVkaWFTdHJlYW1DbGllbnRQcm94eShXZWJN
ZWRpYVN0cmVhbUNsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworfQor
CitNZWRpYVN0cmVhbUNsaWVudFByb3h5Ojp+TWVkaWFTdHJlYW1DbGllbnRQcm94eSgpCit7Cit9
CisKK3ZvaWQgTWVkaWFTdHJlYW1DbGllbnRQcm94eTo6c2V0Q29udHJvbGxlcihXZWJDb3JlOjpN
ZWRpYVN0cmVhbUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCit7CisgICAgLy8gV2Ugc3VwcG9ydCB0
aGVyZSBub3QgYmVpbmcgYSBjbGllbnQsIHByb3ZpZGVkIHdlIGRvbid0IGRvIGFueSBtZWRpYSBz
dHJlYW1pbmcuCisgICAgaWYgKG1fY2xpZW50KSB7CisgICAgICAgIC8vIE93bmVyc2hpcCBvZiB0
aGUgV2ViTWVkaWFTdHJlYW1Db250cm9sbGVyIGlzIHRyYW5zZmVycmVkIHRvIHRoZSBjbGllbnQu
CisgICAgICAgIG1fY2xpZW50LT5zZXRDb250cm9sbGVyKG5ldyBXZWJNZWRpYVN0cmVhbUNvbnRy
b2xsZXIoY29udHJvbGxlcikpOworICAgIH0KK30KKwordm9pZCBNZWRpYVN0cmVhbUNsaWVudFBy
b3h5OjptZWRpYVN0cmVhbURlc3Ryb3llZCgpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAg
ICBtX2NsaWVudC0+bWVkaWFTdHJlYW1EZXN0cm95ZWQoKTsKK30KKwordm9pZCBNZWRpYVN0cmVh
bUNsaWVudFByb3h5OjpnZW5lcmF0ZVN0cmVhbShpbnQgcmVxdWVzdElkLCBXZWJDb3JlOjpHZW5l
cmF0ZVN0cmVhbU9wdGlvbkZsYWdzIGZsYWdzLCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1f
Y2xpZW50LT5nZW5lcmF0ZVN0cmVhbShyZXF1ZXN0SWQsIHN0YXRpY19jYXN0PGludD4oZmxhZ3Mp
LCBXZWJTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbikpOworfQorCit2b2lkIE1lZGlhU3Ry
ZWFtQ2xpZW50UHJveHk6OnN0b3BHZW5lcmF0ZWRTdHJlYW0oY29uc3QgU3RyaW5nJiBzdHJlYW1M
YWJlbCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5zdG9wR2VuZXJh
dGVkU3RyZWFtKHN0cmVhbUxhYmVsKTsKK30KKwordm9pZCBNZWRpYVN0cmVhbUNsaWVudFByb3h5
OjpzZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChjb25zdCBTdHJpbmcmIHRyYWNrSWQsIGJvb2wg
ZW5hYmxlZCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5zZXRNZWRp
YVN0cmVhbVRyYWNrRW5hYmxlZCh0cmFja0lkLCBlbmFibGVkKTsKK30KKwordm9pZCBNZWRpYVN0
cmVhbUNsaWVudFByb3h5Ojpwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZShpbnQgcGVlckNvbm5lY3Rp
b25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgbV9jbGllbnQtPnByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKHBlZXJDb25uZWN0aW9uSWQsIG1l
c3NhZ2UpOworfQorCit2b2lkIE1lZGlhU3RyZWFtQ2xpZW50UHJveHk6Om1lc3NhZ2UoaW50IHBl
ZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAobV9jbGll
bnQpCisgICAgICAgIG1fY2xpZW50LT5tZXNzYWdlKHBlZXJDb25uZWN0aW9uSWQsIG1lc3NhZ2Up
OworfQorCit2b2lkIE1lZGlhU3RyZWFtQ2xpZW50UHJveHk6OmFkZFN0cmVhbShpbnQgcGVlckNv
bm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkKK3sKKyAgICBpZiAobV9jbGll
bnQpCisgICAgICAgIG1fY2xpZW50LT5hZGRTdHJlYW0ocGVlckNvbm5lY3Rpb25JZCwgc3RyZWFt
TGFiZWwpOworfQorCit2b2lkIE1lZGlhU3RyZWFtQ2xpZW50UHJveHk6OnJlbW92ZVN0cmVhbShp
bnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkKK3sKKyAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5yZW1vdmVTdHJlYW0ocGVlckNvbm5lY3Rp
b25JZCwgc3RyZWFtTGFiZWwpOworfQorCit2b2lkIE1lZGlhU3RyZWFtQ2xpZW50UHJveHk6Om5l
d1BlZXJDb25uZWN0aW9uKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIGNvbmZp
Z3VyYXRpb24pCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+bmV3UGVl
ckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb25JZCwgY29uZmlndXJhdGlvbik7Cit9CisKK3ZvaWQg
TWVkaWFTdHJlYW1DbGllbnRQcm94eTo6Y2xvc2VQZWVyQ29ubmVjdGlvbihpbnQgcGVlckNvbm5l
Y3Rpb25JZCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5jbG9zZVBl
ZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uSWQpOworfQorCit2b2lkIE1lZGlhU3RyZWFtQ2xp
ZW50UHJveHk6OnN0YXJ0TmVnb3RpYXRpb24oaW50IHBlZXJDb25uZWN0aW9uSWQpCit7CisgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c3RhcnROZWdvdGlhdGlvbihwZWVyQ29u
bmVjdGlvbklkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
TWVkaWFTdHJlYW1DbGllbnRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTWVk
aWFTdHJlYW1DbGllbnRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmZjQ4YjM2MmJmYmJhYTEwMzUzZDE0
YzM5NTc3YWMzZTQ1MzVhY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9NZWRpYVN0cmVhbUNsaWVudFByb3h5LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBNZWRpYVN0cmVhbUNsaWVudFByb3h5X2gKKyNkZWZpbmUgTWVkaWFT
dHJlYW1DbGllbnRQcm94eV9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVk
ZSAiTWVkaWFTdHJlYW1DbGllbnQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2lu
Y2x1ZGUgIldlYk1lZGlhU3RyZWFtQ29udHJvbGxlci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJNZWRpYVN0cmVhbUNsaWVu
dDsKK2NsYXNzIFdlYlN0cmluZzsKKworY2xhc3MgTWVkaWFTdHJlYW1DbGllbnRQcm94eSA6IHB1
YmxpYyBXZWJDb3JlOjpNZWRpYVN0cmVhbUNsaWVudCB7CitwdWJsaWM6CisgICAgTWVkaWFTdHJl
YW1DbGllbnRQcm94eShXZWJNZWRpYVN0cmVhbUNsaWVudCopOworICAgIHZpcnR1YWwgfk1lZGlh
U3RyZWFtQ2xpZW50UHJveHkoKTsKKworICAgIHZvaWQgc2V0Q29udHJvbGxlcihXZWJDb3JlOjpN
ZWRpYVN0cmVhbUNvbnRyb2xsZXIqKTsKKworICAgIC8vIFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ2xp
ZW50IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBtZWRpYVN0cmVhbURlc3Ryb3ll
ZCgpOworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZVN0cmVhbShpbnQgcmVxdWVzdElkLCBXZWJD
b3JlOjpHZW5lcmF0ZVN0cmVhbU9wdGlvbkZsYWdzLCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luPik7CisgICAgdmlydHVhbCB2b2lkIHN0b3BHZW5lcmF0ZWRTdHJlYW0oY29uc3Qg
U3RyaW5nJiBzdHJlYW1MYWJlbCk7CisgICAgdmlydHVhbCB2b2lkIHNldE1lZGlhU3RyZWFtVHJh
Y2tFbmFibGVkKGNvbnN0IFN0cmluZyYgdHJhY2tJZCwgYm9vbCBlbmFibGVkKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgdmlydHVhbCB2b2lkIG1lc3NhZ2UoaW50IHBlZXJD
b25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgdmlydHVhbCB2b2lkIGFk
ZFN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7
CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29u
c3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7CisgICAgdmlydHVhbCB2b2lkIG5ld1BlZXJDb25uZWN0
aW9uKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24pOwor
ICAgIHZpcnR1YWwgdm9pZCBjbG9zZVBlZXJDb25uZWN0aW9uKGludCBwZWVyQ29ubmVjdGlvbklk
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnROZWdvdGlhdGlvbihpbnQgcGVlckNvbm5lY3Rpb25J
ZCk7CisKK3ByaXZhdGU6CisgICAgV2ViTWVkaWFTdHJlYW1DbGllbnQqIG1fY2xpZW50OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFN
KQorCisjZW5kaWYgLy8gTWVkaWFTdHJlYW1DbGllbnRQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44NjUxZmUxZDA1Y2UxZjQ0NGQzYzYwNzFjNWFlMzg3NTAzYzNkZWFkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1Db250
cm9sbGVyLmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViTWVkaWFTdHJlYW1Db250cm9sbGVyLmgiCisKKyNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1Db250cm9sbGVyLmgiCisj
aW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja0xpc3QuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3JVc2Vy
TWVkaWFFcnJvci5oIgorI2luY2x1ZGUgIldlYk1lZGlhU3RyZWFtVHJhY2tMaXN0LmgiCisjaW5j
bHVkZSAiV2ViU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYk1lZGlh
U3RyZWFtQ29udHJvbGxlcjo6c3RyZWFtR2VuZXJhdGVkKGludCByZXF1ZXN0SWQsIGNvbnN0IFdl
YlN0cmluZyYgc3RyZWFtTGFiZWwsIFdlYk1lZGlhU3RyZWFtVHJhY2tMaXN0JiB0cmFja0xpc3Qp
Cit7CisgICAgbV9wcml2YXRlLT5zdHJlYW1HZW5lcmF0ZWQocmVxdWVzdElkLCBzdHJlYW1MYWJl
bCwgdHJhY2tMaXN0KTsKK30KKwordm9pZCBXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnN0cmVh
bUdlbmVyYXRpb25GYWlsZWQoaW50IHJlcXVlc3RJZCwgRXJyb3IgY29kZSkKK3sKKyAgICBtX3By
aXZhdGUtPnN0cmVhbUdlbmVyYXRpb25GYWlsZWQocmVxdWVzdElkLCBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcjo6RXJyb3JDb2RlPihjb2RlKSk7Cit9CisKK3Zv
aWQgV2ViTWVkaWFTdHJlYW1Db250cm9sbGVyOjpzdHJlYW1GYWlsZWQoY29uc3QgV2ViU3RyaW5n
JiBzdHJlYW1MYWJlbCkKK3sKKyAgICBtX3ByaXZhdGUtPnN0cmVhbUZhaWxlZChzdHJlYW1MYWJl
bCk7Cit9CisKK3ZvaWQgV2ViTWVkaWFTdHJlYW1Db250cm9sbGVyOjpvblNpZ25hbGluZ01lc3Nh
Z2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKK3sKKyAg
ICBtX3ByaXZhdGUtPm9uU2lnbmFsaW5nTWVzc2FnZShwZWVyQ29ubmVjdGlvbklkLCBtZXNzYWdl
KTsKK30KKwordm9pZCBXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om9uTWVzc2FnZShpbnQgcGVl
ckNvbm5lY3Rpb25JZCwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1fcHJpdmF0
ZS0+b25NZXNzYWdlKHBlZXJDb25uZWN0aW9uSWQsIG1lc3NhZ2UpOworfQorCit2b2lkIFdlYk1l
ZGlhU3RyZWFtQ29udHJvbGxlcjo6b25OZWdvdGlhdGlvblN0YXJ0ZWQoaW50IHBlZXJDb25uZWN0
aW9uSWQpCit7CisgICAgbV9wcml2YXRlLT5vbk5lZ290aWF0aW9uU3RhcnRlZChwZWVyQ29ubmVj
dGlvbklkKTsKK30KKwordm9pZCBXZWJNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om9uTmVnb3RpYXRp
b25Eb25lKGludCBwZWVyQ29ubmVjdGlvbklkKQoreworICAgIG1fcHJpdmF0ZS0+b25OZWdvdGlh
dGlvbkRvbmUocGVlckNvbm5lY3Rpb25JZCk7Cit9CisKK3ZvaWQgV2ViTWVkaWFTdHJlYW1Db250
cm9sbGVyOjpvbkFkZFN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgV2ViU3RyaW5n
JiBzdHJlYW1MYWJlbCwgV2ViTWVkaWFTdHJlYW1UcmFja0xpc3QmIHRyYWNrTGlzdCkKK3sKKyAg
ICBtX3ByaXZhdGUtPm9uQWRkU3RyZWFtKHBlZXJDb25uZWN0aW9uSWQsIHN0cmVhbUxhYmVsLCB0
cmFja0xpc3QpOworfQorCit2b2lkIFdlYk1lZGlhU3RyZWFtQ29udHJvbGxlcjo6b25SZW1vdmVT
dHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFdlYlN0cmluZyYgc3RyZWFtTGFiZWwp
Cit7CisgICAgbV9wcml2YXRlLT5vblJlbW92ZVN0cmVhbShwZWVyQ29ubmVjdGlvbklkLCBzdHJl
YW1MYWJlbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCmluZGV4IDVhY2IxN2E4ODZkOWJlOGRlZDRmOWMxN2Y3ODVkYTQ0Nzk5OTA1MDUuLjMzZDI3
NWI0MmExNDE3MWQ1MGNjYjY0YTAwZTc5OTQxYmQ3OGJlMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTc1LDYgKzc1LDcgQEAKICNpbmNsdWRlICJL
ZXlib2FyZENvZGVzLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIkxh
eWVyUGFpbnRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1DbGllbnRQcm94eS5o
IgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5
bGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC0zNTQsNiArMzU1LDkgQEAgV2ViVmlld0ltcGw6
OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVudCkKICNpZiBFTkFCTEUoR0VTVFVSRV9S
RUNPR05JWkVSKQogICAgICwgbV9nZXN0dXJlUmVjb2duaXplcihXZWJDb3JlOjpQbGF0Zm9ybUdl
c3R1cmVSZWNvZ25pemVyOjpjcmVhdGUoKSkKICNlbmRpZgorI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCisgICAgLCBtX21lZGlhU3RyZWFtQ2xpZW50UHJveHkoYWRvcHRQdHIobmV3IE1lZGlhU3Ry
ZWFtQ2xpZW50UHJveHkoY2xpZW50ID8gY2xpZW50LT5tZWRpYVN0cmVhbUNsaWVudCgpIDogMCkp
KQorI2VuZGlmCiB7CiAgICAgLy8gV2ViS2l0L3dpbi9XZWJWaWV3LmNwcCBkb2VzIHRoZSBzYW1l
IHRoaW5nLCBleGNlcHQgdGhleSBjYWxsIHRoZQogICAgIC8vIEtKUyBzcGVjaWZpYyB3cmFwcGVy
IGFyb3VuZCB0aGlzIG1ldGhvZC4gV2UgbmVlZCB0byBoYXZlIHRocmVhZGluZwpAQCAtMzczLDYg
KzM3Nyw5IEBAIFdlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50KiBjbGllbnQp
CiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICBwYWdlQ2xpZW50cy5zcGVlY2hJbnB1dENs
aWVudCA9IG1fc3BlZWNoSW5wdXRDbGllbnQuZ2V0KCk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorICAgIHBhZ2VDbGllbnRzLm1lZGlhU3RyZWFtQ2xpZW50ID0gbV9tZWRpYVN0
cmVhbUNsaWVudFByb3h5LmdldCgpOworI2VuZGlmCiAgICAgcGFnZUNsaWVudHMuZGV2aWNlT3Jp
ZW50YXRpb25DbGllbnQgPSBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50UHJveHkuZ2V0KCk7CiAg
ICAgcGFnZUNsaWVudHMuZ2VvbG9jYXRpb25DbGllbnQgPSBtX2dlb2xvY2F0aW9uQ2xpZW50UHJv
eHkuZ2V0KCk7CiAgICAgcGFnZUNsaWVudHMuYmFja0ZvcndhcmRDbGllbnQgPSBCYWNrRm9yd2Fy
ZExpc3RDaHJvbWl1bTo6Y3JlYXRlKHRoaXMpOwpAQCAtMzgwLDYgKzM4Nyw5IEBAIFdlYlZpZXdJ
bXBsOjpXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50KiBjbGllbnQpCiAgICAgbV9wYWdlID0gYWRv
cHRQdHIobmV3IFBhZ2UocGFnZUNsaWVudHMpKTsKIAogICAgIG1fZ2VvbG9jYXRpb25DbGllbnRQ
cm94eS0+c2V0Q29udHJvbGxlcihtX3BhZ2UtPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpKTsKKyNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIG1fbWVkaWFTdHJlYW1DbGllbnRQcm94eS0+c2V0
Q29udHJvbGxlcihtX3BhZ2UtPm1lZGlhU3RyZWFtQ29udHJvbGxlcigpKTsKKyNlbmRpZgogCiAg
ICAgbV9wYWdlLT5zZXRHcm91cE5hbWUocGFnZUdyb3VwTmFtZSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IDAxZmM5MTA1YzBkZjc2YTQ2YzVlMWMwZDJi
NTczMzNlZGZhMzMzN2QuLmEwZDI4NmJmNTM3ZWMxYmQyZTgxNGRkNDM3ZGQ0Y2EwZTk1YjYwMTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtNzksNiArNzks
NyBAQCBjbGFzcyBDb250ZXh0TWVudUNsaWVudEltcGw7CiBjbGFzcyBEZXZpY2VPcmllbnRhdGlv
bkNsaWVudFByb3h5OwogY2xhc3MgRHJhZ1Njcm9sbFRpbWVyOwogY2xhc3MgR2VvbG9jYXRpb25D
bGllbnRQcm94eTsKK2NsYXNzIE1lZGlhU3RyZWFtQ2xpZW50UHJveHk7CiBjbGFzcyBTcGVlY2hJ
bnB1dENsaWVudEltcGw7CiBjbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OwogY2xhc3MgV2Vi
RGV2VG9vbHNBZ2VudENsaWVudDsKQEAgLTU5Myw2ICs1OTQsOSBAQCBwcml2YXRlOgogI2lmIEVO
QUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCiAgICAgT3duUHRyPFdlYkNvcmU6OlBsYXRmb3JtR2Vz
dHVyZVJlY29nbml6ZXI+IG1fZ2VzdHVyZVJlY29nbml6ZXI7CiAjZW5kaWYKKyNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQorICAgIE93blB0cjxNZWRpYVN0cmVhbUNsaWVudFByb3h5PiBtX21lZGlh
U3RyZWFtQ2xpZW50UHJveHk7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112181</attachid>
            <date>2011-10-24 06:51:54 -0700</date>
            <delta_ts>2011-10-25 04:57:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>58550.patch</filename>
            <type>text/plain</type>
            <size>35310</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGJlOGViNjEuLjllZThmMzcgMTAwNzU1Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEx
LTEwLTI0ICBUb21teSBXaWRlbmZseWNodCAgPHRvbW15d0Bnb29nbGUuY29tPgorCisgICAgICAg
IFtjaHJvbWl1bV0gQWRkaW5nIHRoZSBDaHJvbWl1bSBlbWJlZGRlcnMgZm9yIFBlZXJIYW5kbGVy
CisKKyAgICAgICAgW0Nocm9taXVtXSBNZWRpYSBTdHJlYW0gQVBJOiBhZGQgdGhlIENocm9taXVt
IFdlYktpdCBpbnRlcmZhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01ODU1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIG1lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBlZXJDb25uZWN0aW9uOjpQZWVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtUmVtb3ZlZCk6CisgICAgICAgICogbWVkaWFz
dHJlYW0vUGVlckNvbm5lY3Rpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9Q
ZWVySGFuZGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6On5QZWVySGFuZGxl
cik6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXJDbGllbnQuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5k
bGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyQ2xpZW50Ojp+UGVlckhhbmRs
ZXJDbGllbnQpOgorCiAyMDExLTEwLTI0ICBZb3NpZnVtaSBJbm91ZSAgPHlvc2luQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbRm9ybXNdIFNldHRpbmcgZGVmYXVsdFZhbHVlIHNob3VsZCBoaWRl
IGFuIGlucHV0IHBsYWNlaG9sZGVyLgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggM2VmOWU0Yi4uODU0NDA2ZiAx
MDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC04MTcsOCArODE3LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbXBvbmVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaCcsCi0gICAgICAgICAgICAncGxh
dGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9QZWVySGFuZGxlckNsaWVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tb2Nr
L0RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9t
b2NrL0dlb2xvY2F0aW9uQ2xpZW50TW9jay5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3
b3JrL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZS5oJywKZGlmZiAtLWdpdCBTb3VyY2UvV2Vi
Q29yZS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5jcHAgU291cmNlL1dlYkNvcmUvbWVkaWFz
dHJlYW0vUGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IGFjYTFkN2MuLmZlNmMwMmIgMTAwNjQ0Ci0t
LSBTb3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5jcHAKKysrIFNvdXJj
ZS9XZWJDb3JlL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uLmNwcApAQCAtNTUsNyArNTUsNyBA
QCBQZWVyQ29ubmVjdGlvbjo6UGVlckNvbm5lY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBzZQogICAgICwgbV9pbml0aWFsTmVnb3RpYXRpb25UaW1l
cih0aGlzLCAmUGVlckNvbm5lY3Rpb246OmluaXRpYWxOZWdvdGlhdGlvblRpbWVyRmlyZWQpCiAg
ICAgLCBtX3N0cmVhbUNoYW5nZVRpbWVyKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6c3RyZWFtQ2hh
bmdlVGltZXJGaXJlZCkKICAgICAsIG1fcmVhZHlTdGF0ZUNoYW5nZVRpbWVyKHRoaXMsICZQZWVy
Q29ubmVjdGlvbjo6cmVhZHlTdGF0ZUNoYW5nZVRpbWVyRmlyZWQpCi0gICAgLCBtX3BlZXJIYW5k
bGVyKFBlZXJIYW5kbGVyOjpjcmVhdGUodGhpcywgc2VydmVyQ29uZmlndXJhdGlvbiwgY29udGV4
dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSkpCisgICAgLCBtX3BlZXJIYW5kbGVyKGFk
b3B0UHRyKFBlZXJIYW5kbGVyOjpjcmVhdGUodGhpcywgc2VydmVyQ29uZmlndXJhdGlvbiwgY29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSkpKQogewogfQogCkBAIC0yMTksOCAr
MjE5LDkgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtQWRkZWQoUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0cmVhbUQKICAgICBkaXNwYXRjaEV2ZW50KE1lZGlh
U3RyZWFtRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWRkc3RyZWFtRXZlbnQsIGZhbHNlLCBm
YWxzZSwgc3RyZWFtLnJlbGVhc2UoKSkpOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpyZW1v
dGVTdHJlYW1SZW1vdmVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtRGVzY3JpcHRvcikK
K3ZvaWQgUGVlckNvbm5lY3Rpb246OnJlbW90ZVN0cmVhbVJlbW92ZWQoUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbURlc2NyaXB0b3I+IHBycFN0cmVhbURlc2NyaXB0b3IpCiB7CisgICAgUmVmUHRyPE1l
ZGlhU3RyZWFtRGVzY3JpcHRvcj4gc3RyZWFtRGVzY3JpcHRvciA9IHBycFN0cmVhbURlc2NyaXB0
b3I7CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFk
KCkpOwogICAgIEFTU0VSVChzdHJlYW1EZXNjcmlwdG9yLT5vd25lcigpKTsKIApkaWZmIC0tZ2l0
IFNvdXJjZS9XZWJDb3JlL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uLmggU291cmNlL1dlYkNv
cmUvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uaAppbmRleCA5MjUwZmY2Li5iNTc0MzZlIDEw
MDY0NAotLS0gU291cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uaAorKysg
U291cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uaApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1MaXN0
LmgiCiAjaW5jbHVkZSAiUGVlckhhbmRsZXIuaCIKKyNpbmNsdWRlICJQZWVySGFuZGxlckNsaWVu
dC5oIgogI2luY2x1ZGUgIlNpZ25hbGluZ0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIK
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgc2RwR2VuZXJhdGVkKGNvbnN0IFN0cmluZyYgc2RwKTsKICAgICB2aXJ0dWFs
IHZvaWQgZGF0YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdGVTdHJlYW1BZGRlZChQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4pOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdGVTdHJlYW1S
ZW1vdmVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopOworICAgIHZpcnR1YWwgdm9pZCByZW1vdGVT
dHJlYW1SZW1vdmVkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPik7CiAKICAgICAv
LyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgUGVlckNvbm5lY3Rpb24qIHRvUGVlckNvbm5lY3Rp
b24oKTsKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVy
SGFuZGxlci5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRs
ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTFjOGFhLi4wMDAwMDAwCi0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEVy
aWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlICJQZWVySGFuZGxlci5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEZJWE1FOiByZW1vdmUgd2hlbiByZWFsIGltcGxlbWVu
dGF0aW9ucyBhcmUgYXZhaWxhYmxlCi0vLyBFbXB0eSBpbXBsZW1lbnRhdGlvbnMgZm9yIHBvcnRz
IHRoYXQgYnVpbGQgd2l0aCBNRURJQV9TVFJFQU0gZW5hYmxlZCBieSBkZWZhdWx0LgotUGVlckhh
bmRsZXI6OlBlZXJIYW5kbGVyKFBlZXJIYW5kbGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJikKLXsKLX0KLQotUGVlckhhbmRsZXI6On5QZWVySGFuZGxlcigpCi17Ci19Ci0K
LXZvaWQgUGVlckhhbmRsZXI6OnByb2R1Y2VJbml0aWFsT2ZmZXIoY29uc3QgTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yVmVjdG9yJikKLXsKLX0KLQotdm9pZCBQZWVySGFuZGxlcjo6aGFuZGxlSW5pdGlh
bE9mZmVyKGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgUGVlckhhbmRsZXI6OnByb2Nlc3NT
RFAoY29uc3QgU3RyaW5nJikKLXsKLX0KLQotdm9pZCBQZWVySGFuZGxlcjo6cHJvY2Vzc1BlbmRp
bmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYsIGNvbnN0IE1lZGlh
U3RyZWFtRGVzY3JpcHRvclZlY3RvciYpCi17Ci19Ci0KLXZvaWQgUGVlckhhbmRsZXI6OnNlbmRE
YXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiwgdW5zaWduZWQpCi17Ci19Ci0KLXZvaWQgUGVl
ckhhbmRsZXI6OnN0b3AoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUGVlckhhbmRsZXIuaAppbmRleCBjNjE0ZWRmLi43YzYyMzA5IDEwMDY0NAotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuaAorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuaApAQCAtNDAsMzkg
KzQwLDIwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUGVlckhhbmRsZXJDbGll
bnQgewotcHVibGljOgotICAgIHZpcnR1YWwgflBlZXJIYW5kbGVyQ2xpZW50KCkgeyB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgaWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2RwR2VuZXJhdGVkKGNvbnN0IFN0cmluZyYgc2RwKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGRhdGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbUFkZGVkKFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdGVT
dHJlYW1SZW1vdmVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopID0gMDsKLX07CitjbGFzcyBQZWVy
SGFuZGxlckNsaWVudDsKIAogY2xhc3MgUGVlckhhbmRsZXIgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFBlZXJIYW5kbGVyKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxQZWVySGFuZGxlcj4gY3JlYXRlKFBlZXJIYW5kbGVy
Q2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29uc3Qg
U3RyaW5nJiB1c2VybmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGVl
ckhhbmRsZXIoY2xpZW50LCBzZXJ2ZXJDb25maWd1cmF0aW9uLCB1c2VybmFtZSkpOwotICAgIH0K
LSAgICB2aXJ0dWFsIH5QZWVySGFuZGxlcigpOwotCi0gICAgdm9pZCBwcm9kdWNlSW5pdGlhbE9m
ZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMp
OwotICAgIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYgc2RwKTsKLSAgICB2
b2lkIHByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBzZHApOwotICAgIHZvaWQgcHJvY2Vzc1BlbmRp
bmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0
cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ1JlbW92ZVN0
cmVhbXMpOwotICAgIHZvaWQgc2VuZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB2b2lkIHN0b3AoKTsKKyAgICBzdGF0aWMgUGVlckhh
bmRsZXIqIGNyZWF0ZShQZWVySGFuZGxlckNsaWVudCosIGNvbnN0IFN0cmluZyYgc2VydmVyQ29u
ZmlndXJhdGlvbiwgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbik7CisgICAgdmlydHVhbCB+
UGVlckhhbmRsZXIoKSB7IH0KIAotcHJpdmF0ZToKLSAgICBQZWVySGFuZGxlcihQZWVySGFuZGxl
ckNsaWVudCosIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29uc3QgU3RyaW5n
JiB1c2VybmFtZSk7CisgICAgdmlydHVhbCB2b2lkIHByb2R1Y2VJbml0aWFsT2ZmZXIoY29uc3Qg
TWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcykgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVJbml0aWFsT2ZmZXIoY29uc3QgU3RyaW5nJiBzZHApID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1NEUChjb25zdCBTdHJpbmcmIHNkcCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBwcm9jZXNzUGVuZGluZ1N0cmVhbXMoY29uc3QgTWVkaWFTdHJlYW1EZXNj
cmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcywgY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlw
dG9yVmVjdG9yJiBwZW5kaW5nUmVtb3ZlU3RyZWFtcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSA9
IDA7CiAKLSAgICBQZWVySGFuZGxlckNsaWVudCogbV9jbGllbnQ7CisgICAgdmlydHVhbCB2b2lk
IHN0b3AoKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXJDbGllbnQuaCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlckNsaWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMTljY2YKLS0tIC9kZXYvbnVsbAorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXJDbGllbnQuaApA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBBQi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBlZXJIYW5kbGVyQ2xpZW50X2gKKyNkZWZpbmUg
UGVlckhhbmRsZXJDbGllbnRfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yOworCitjbGFzcyBQZWVySGFuZGxlckNsaWVudCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+UGVlckhhbmRsZXJDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBp
Y2VQcm9jZXNzaW5nQ29tcGxldGVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZHBHZW5lcmF0
ZWQoY29uc3QgU3RyaW5nJiBzZHApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGF0YVN0cmVhbU1l
c3NhZ2VSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3RlU3RyZWFtQWRkZWQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURl
c2NyaXB0b3I+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbVJlbW92ZWQoUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8g
UGVlckhhbmRsZXJDbGllbnRfaApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDExYjAwYTkuLmU1
ODU5NDEgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMS0xMC0y
NCAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hy
b21pdW1dIEFkZGluZyB0aGUgQ2hyb21pdW0gZW1iZWRkZXJzIGZvciBQZWVySGFuZGxlcgorCisg
ICAgICAgIFtDaHJvbWl1bV0gTWVkaWEgU3RyZWFtIEFQSTogYWRkIHRoZSBDaHJvbWl1bSBXZWJL
aXQgaW50ZXJmYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTg1NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYktpdFBsYXRmb3JtU3VwcG9y
dC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRQbGF0Zm9ybVN1cHBvcnQ6OmNyZWF0ZVBlZXJI
YW5kbGVyKToKKyAgICAgICAgKiBwdWJsaWMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6OldlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvcik6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjo6fldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcik6CisgICAgICAgIChXZWJLaXQ6OldlYk1l
ZGlhU3RyZWFtRGVzY3JpcHRvcjo6aXNOdWxsKToKKyAgICAgICAgKiBwdWJsaWMvV2ViUGVlckhh
bmRsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBlZXJIYW5kbGVyOjp+V2ViUGVl
ckhhbmRsZXIpOgorICAgICAgICAqIHB1YmxpYy9XZWJQZWVySGFuZGxlckNsaWVudC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBzcmMvUGVlckhhbmRsZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpQZWVySGFuZGxlckNocm9taXVtOjpQZWVySGFuZGxlckNocm9taXVtKToKKyAg
ICAgICAgKFdlYktpdDo6UGVlckhhbmRsZXJDaHJvbWl1bTo6cHJvZHVjZUluaXRpYWxPZmZlcik6
CisgICAgICAgIChXZWJLaXQ6OlBlZXJIYW5kbGVyQ2hyb21pdW06OmhhbmRsZUluaXRpYWxPZmZl
cik6CisgICAgICAgIChXZWJLaXQ6OlBlZXJIYW5kbGVyQ2hyb21pdW06OnByb2Nlc3NTRFApOgor
ICAgICAgICAoV2ViS2l0OjpQZWVySGFuZGxlckNocm9taXVtOjpwcm9jZXNzUGVuZGluZ1N0cmVh
bXMpOgorICAgICAgICAoV2ViS2l0OjpQZWVySGFuZGxlckNocm9taXVtOjpzZW5kRGF0YVN0cmVh
bU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpQZWVySGFuZGxlckNocm9taXVtOjpzdG9wKToK
KyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpjcmVhdGUpOgorICAgICAgICAqIHNyYy9X
ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnJlc2V0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0
OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJD
b3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+KToKKyAgICAgICAgKiBzcmMvV2ViUGVlckhhbmRs
ZXJDbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGll
bnQ6OldlYlBlZXJIYW5kbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGVlckhhbmRs
ZXJDbGllbnQ6Om9wZXJhdG9yIFdlYkNvcmU6OlBlZXJIYW5kbGVyQ2xpZW50Kik6CisgICAgICAg
IChXZWJLaXQ6OldlYlBlZXJIYW5kbGVyQ2xpZW50OjppY2VQcm9jZXNzaW5nQ29tcGxldGVkKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGllbnQ6OnNkcEdlbmVyYXRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBlZXJIYW5kbGVyQ2xpZW50OjpkYXRhU3RyZWFtTWVzc2FnZVJl
Y2VpdmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGllbnQ6OnJlbW90ZVN0
cmVhbUFkZGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGllbnQ6OnJlbW90
ZVN0cmVhbVJlbW92ZWQpOgorCiAyMDExLTEwLTIxICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1ha2Ugc2V0VmlzaWJpbGl0eSBleHRlbnNpb24t
IGFuZCB0aHJlYWQtY29ycmVjdApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cCBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggODg0ODU3Yi4u
Y2EwZWE3OSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0yMjgsNiArMjI4LDcgQEAKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlhUGxheWVyLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViTWVkaWFQbGF5ZXJBY3Rpb24uaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJNZWRpYVBsYXllckNsaWVudC5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYk1l
ZGlhU3RyZWFtRGVzY3JpcHRvci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lbnVJ
dGVtSW5mby5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lc3NhZ2VQb3J0Q2hhbm5l
bC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lc3NhZ2VQb3J0Q2hhbm5lbENsaWVu
dC5oJywKQEAgLTI0Nyw2ICsyNDgsOCBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGFn
ZVNlcmlhbGl6ZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQYWdlVmlz
aWJpbGl0eVN0YXRlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGFzc3dvcmRGb3Jt
RGF0YS5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlBlZXJIYW5kbGVyLmgnLAorICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViUGVlckhhbmRsZXJDbGllbnQuaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJQZXJmb3JtYW5jZS5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYlBlcm1pc3Npb25DbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQbHVn
aW4uaCcsCkBAIC00MTYsNiArNDE5LDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL3BhaW50aW5n
L0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QYWdlT3Zl
cmxheS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvUGFnZU92ZXJsYXkuaCcsCisgICAgICAg
ICAgICAgICAgJ3NyYy9QZWVySGFuZGxlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9Q
bGF0Zm9ybVN1cHBvcnQuY3BwJywKQEAgLTU1MSw2ICs1NTUsNyBAQAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViTWVkaWFFbGVtZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRp
YVBsYXllckNsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhU3RyZWFtRGVz
Y3JpcHRvci5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTmFtZWROb2RlTWFwLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOZXR3b3JrU3RhdGVOb3RpZmllci5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViTm9kZS5jcHAnLApAQCAtNTY0LDYgKzU2OSw3IEBACiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJQYXNzd29yZEZvcm1EYXRhLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJQYXNzd29yZEZvcm1VdGlscy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViUGFzc3dvcmRGb3JtVXRpbHMuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJQZWVySGFu
ZGxlckNsaWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViUGVyZm9ybWFuY2UuY3Bw
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuaCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcCcsCmRpZmYgLS1naXQg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmggU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgKaW5kZXgg
NTBlMDc5ZC4uYmM0NmZmZCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaApAQCAtNjEsNiArNjEsOCBAQCBjbGFzcyBXZWJJREJG
YWN0b3J5OwogY2xhc3MgV2ViSURCS2V5OwogY2xhc3MgV2ViTWVzc2FnZVBvcnRDaGFubmVsOwog
Y2xhc3MgV2ViTWltZVJlZ2lzdHJ5OworY2xhc3MgV2ViUGVlckhhbmRsZXI7CitjbGFzcyBXZWJQ
ZWVySGFuZGxlckNsaWVudDsKIGNsYXNzIFdlYlBsdWdpbkxpc3RCdWlsZGVyOwogY2xhc3MgV2Vi
U2FuZGJveFN1cHBvcnQ7CiBjbGFzcyBXZWJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OwpAQCAtMzIw
LDYgKzMyMiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gTXVzdCByZXR1cm4gbm9uLW51bGwuCiAgICAg
dmlydHVhbCBXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtKCkgeyByZXR1cm4gMDsgfQogCisgICAg
Ly8gV2ViUlRDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworICAgIHZpcnR1YWwgV2ViUGVlckhhbmRsZXIqIGNyZWF0ZVBlZXJIYW5k
bGVyKGNvbnN0IFdlYlBlZXJIYW5kbGVyQ2xpZW50JikgeyByZXR1cm4gMDsgfQorCiBwcm90ZWN0
ZWQ6CiAgICAgfldlYktpdFBsYXRmb3JtU3VwcG9ydCgpIHsgfQogfTsKZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzJmMzQ3Ci0tLSAvZGV2L251bGwKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5o
CkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yX2gKKyNkZWZpbmUgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yX2gKKworI2luY2x1
ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYk5vbkNvcHlhYmxlLmgiCisjaW5jbHVkZSAi
V2ViUHJpdmF0ZVB0ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBNZWRpYVN0cmVh
bURlc2NyaXB0b3I7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJNZWRpYVN0
cmVhbURlc2NyaXB0b3IgOiBwdWJsaWMgV2ViTm9uQ29weWFibGUgeworcHVibGljOgorICAgIFdl
Yk1lZGlhU3RyZWFtRGVzY3JpcHRvcigpIHsgfQorICAgIH5XZWJNZWRpYVN0cmVhbURlc2NyaXB0
b3IoKSB7IHJlc2V0KCk7IH0KKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKCk7
IC8vIEZJWE1FIEFkZCBwYXJhbXMuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7Cisg
ICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGUuaXNOdWxsKCk7IH0KKwor
I2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcihj
b25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiYpOwor
ICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0
b3I+KCkgY29uc3Q7CisgICAgdm9pZCBhc3NpZ24oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcj4mKTsKKyNlbmRpZgorCisgICAgLy8gRklYTUUgQWRk
IGZ1bmN0aW9ucy4KKworcHJpdmF0ZToKKyAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6Ok1lZGlh
U3RyZWFtRGVzY3JpcHRvcj4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3JfaApkaWZmIC0tZ2l0IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBlZXJIYW5kbGVyLmggU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViUGVlckhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4xZDg4ODNhCi0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlBlZXJIYW5kbGVyLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCistLSAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYlBlZXJIYW5kbGVyX2gKKyNkZWZpbmUgV2ViUGVlckhhbmRsZXJfaAor
CisjaW5jbHVkZSAiV2ViUGVlckhhbmRsZXIuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNp
bmNsdWRlICJXZWJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBl
ZXJIYW5kbGVyQ2xpZW50OworY2xhc3MgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOworCitjbGFz
cyBXZWJQZWVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViUGVlckhhbmRsZXIo
KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKGNvbnN0IFdlYlN0cmluZyYgc2Vy
dmVyQ29uZmlndXJhdGlvbiwgY29uc3QgV2ViU3RyaW5nJiBzZWN1cml0eU9yaWdpbikgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIHByb2R1Y2VJbml0aWFsT2ZmZXIoY29uc3QgV2ViVmVjdG9yPFdl
Yk1lZGlhU3RyZWFtRGVzY3JpcHRvcj4mIHBlbmRpbmdBZGRTdHJlYW1zKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBXZWJTdHJpbmcmIHNkcCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzU0RQKGNvbnN0IFdlYlN0cmluZyYgc2RwKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBXZWJWZWN0b3I8V2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiYgcGVuZGluZ0FkZFN0cmVhbXMsIGNvbnN0IFdlYlZlY3Rv
cjxXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I+JiBwZW5kaW5nUmVtb3ZlU3RyZWFtcykgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViUGVlckhhbmRsZXJfaApk
aWZmIC0tZ2l0IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBlZXJIYW5kbGVyQ2xp
ZW50LmggU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGVlckhhbmRsZXJDbGllbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTVkNzExCi0tLSAvZGV2L251
bGwKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBlZXJIYW5kbGVyQ2xpZW50
LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQZWVySGFuZGxl
ckNsaWVudF9oCisjZGVmaW5lIFdlYlBlZXJIYW5kbGVyQ2xpZW50X2gKKworI2luY2x1ZGUgIldl
YkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYk5vbkNvcHlhYmxlLmgiCisjaW5jbHVkZSAiV2ViUHJp
dmF0ZVB0ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQZWVySGFuZGxlckNsaWVu
dDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjsKK2NsYXNzIFdlYlN0cmluZzsKKworY2xhc3MgV2ViUGVlckhhbmRsZXJDbGllbnQgOiBw
dWJsaWMgV2ViTm9uQ29weWFibGUgeworcHVibGljOgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBp
Y2VQcm9jZXNzaW5nQ29tcGxldGVkKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNkcEdlbmVy
YXRlZChjb25zdCBXZWJTdHJpbmcmIHNkcCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGRhdGFT
dHJlYW1NZXNzYWdlUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsK
KyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVtb3RlU3RyZWFtQWRkZWQoY29uc3QgV2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yJik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlbW90ZVN0cmVhbVJl
bW92ZWQoY29uc3QgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJik7CisKKyNpZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04KKyAgICBXZWJQZWVySGFuZGxlckNsaWVudChXZWJDb3JlOjpQZWVySGFuZGxl
ckNsaWVudCopOworICAgIG9wZXJhdG9yIFdlYkNvcmU6OlBlZXJIYW5kbGVyQ2xpZW50KigpIGNv
bnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgLy8gTm8gaW1wbGVtZW50YXRpb24gZm9yIHRo
ZSBkZWZhdWx0IGNvbnN0cnVjdG9yLiBEZWNsYXJlZCBwcml2YXRlIHRvIGVuc3VyZSB0aGF0IG5v
IGluc3RhbmNlcworICAgIC8vIGNhbiBiZSBjcmVhdGVkIGJ5IHRoZSBjb25zdW1lcnMgb2YgQ2hy
b21pdW0gV2ViS2l0LgorICAgIFdlYlBlZXJIYW5kbGVyQ2xpZW50KCk7CisKKyAgICBXZWJDb3Jl
OjpQZWVySGFuZGxlckNsaWVudCogbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFdlYlBlZXJIYW5kbGVyQ2xpZW50X2gKZGlmZiAtLWdpdCBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9QZWVySGFuZGxlckNocm9taXVtLmNwcCBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9QZWVySGFuZGxlckNocm9taXVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lZDljM2E3Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1BlZXJIYW5kbGVyQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEsMTI1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29u
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNp
bmNsdWRlICJQZWVySGFuZGxlci5oIgorCisjaW5jbHVkZSAiUGVlckhhbmRsZXJDbGllbnQuaCIK
KyNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIK
KyNpbmNsdWRlICJXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJQZWVy
SGFuZGxlci5oIgorI2luY2x1ZGUgIldlYlBlZXJIYW5kbGVyQ2xpZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBQZWVySGFuZGxlckNocm9taXVtIDogcHVibGljIFdlYkNvcmU6
OlBlZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBQZWVySGFuZGxlckNocm9taXVtKFdlYkNvcmU6
OlBlZXJIYW5kbGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBj
b25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luKTsKKworICAgIHZpcnR1YWwgdm9pZCBwcm9kdWNl
SW5pdGlhbE9mZmVyKGNvbnN0IFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYg
cGVuZGluZ0FkZFN0cmVhbXMpOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVJbml0aWFsT2ZmZXIo
Y29uc3QgU3RyaW5nJiBzZHApOworICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzU0RQKGNvbnN0IFN0
cmluZyYgc2RwKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0
IFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMs
IGNvbnN0IFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ1JlbW92
ZVN0cmVhbXMpOworICAgIHZpcnR1YWwgdm9pZCBzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3Qg
Y2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7
CisKK3ByaXZhdGU6CisgICAgV2ViUGVlckhhbmRsZXIqIG1fd2ViSGFuZGxlcjsKK307CisKK1Bl
ZXJIYW5kbGVyQ2hyb21pdW06OlBlZXJIYW5kbGVyQ2hyb21pdW0oV2ViQ29yZTo6UGVlckhhbmRs
ZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBjb25z
dCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luKQoreworICAgIG1fd2ViSGFuZGxlciA9IHdlYktpdFBs
YXRmb3JtU3VwcG9ydCgpLT5jcmVhdGVQZWVySGFuZGxlcihXZWJQZWVySGFuZGxlckNsaWVudChj
bGllbnQpKTsKKyAgICBtX3dlYkhhbmRsZXItPmluaXRpYWxpemUoc2VydmVyQ29uZmlndXJhdGlv
biwgc2VjdXJpdHlPcmlnaW4pOworfQorCit2b2lkIFBlZXJIYW5kbGVyQ2hyb21pdW06OnByb2R1
Y2VJbml0aWFsT2ZmZXIoY29uc3QgV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9y
JiBwZW5kaW5nQWRkU3RyZWFtcykKK3sKKyAgICBzaXplX3QgbnVtU3RyZWFtc1RvQWRkID0gcGVu
ZGluZ0FkZFN0cmVhbXMuc2l6ZSgpOworICAgIFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbURlc2Ny
aXB0b3I+IHN0cmVhbXNUb0FkZChudW1TdHJlYW1zVG9BZGQpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwIDsgaSA8IG51bVN0cmVhbXNUb0FkZCA7ICsraSkKKyAgICAgICAgc3RyZWFtc1RvQWRkW2ld
LmFzc2lnbihwZW5kaW5nQWRkU3RyZWFtc1tpXSk7CisKKyAgICBtX3dlYkhhbmRsZXItPnByb2R1
Y2VJbml0aWFsT2ZmZXIoc3RyZWFtc1RvQWRkKTsKK30KKwordm9pZCBQZWVySGFuZGxlckNocm9t
aXVtOjpoYW5kbGVJbml0aWFsT2ZmZXIoY29uc3QgU3RyaW5nJiBzZHApCit7CisgICAgbV93ZWJI
YW5kbGVyLT5oYW5kbGVJbml0aWFsT2ZmZXIoc2RwKTsKK30KKwordm9pZCBQZWVySGFuZGxlckNo
cm9taXVtOjpwcm9jZXNzU0RQKGNvbnN0IFN0cmluZyYgc2RwKQoreworICAgIG1fd2ViSGFuZGxl
ci0+cHJvY2Vzc1NEUChzZHApOworfQorCit2b2lkIFBlZXJIYW5kbGVyQ2hyb21pdW06OnByb2Nl
c3NQZW5kaW5nU3RyZWFtcyhjb25zdCBXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0
b3ImIHBlbmRpbmdBZGRTdHJlYW1zLCBjb25zdCBXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0
b3JWZWN0b3ImIHBlbmRpbmdSZW1vdmVTdHJlYW1zKQoreworICAgIHNpemVfdCBudW1TdHJlYW1z
VG9BZGQgPSBwZW5kaW5nQWRkU3RyZWFtcy5zaXplKCk7CisgICAgV2ViVmVjdG9yPFdlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvcj4gc3RyZWFtc1RvQWRkKG51bVN0cmVhbXNUb0FkZCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDAgOyBpIDwgbnVtU3RyZWFtc1RvQWRkIDsgKytpKQorICAgICAgICBzdHJl
YW1zVG9BZGRbaV0uYXNzaWduKHBlbmRpbmdBZGRTdHJlYW1zW2ldKTsKKworICAgIHNpemVfdCBu
dW1TdHJlYW1zVG9SZW1vdmUgPSBwZW5kaW5nUmVtb3ZlU3RyZWFtcy5zaXplKCk7CisgICAgV2Vi
VmVjdG9yPFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gc3RyZWFtc1RvUmVtb3ZlKG51bVN0cmVh
bXNUb1JlbW92ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgbnVtU3RyZWFtc1RvUmVt
b3ZlIDsgKytpKQorICAgICAgICBzdHJlYW1zVG9SZW1vdmVbaV0uYXNzaWduKHBlbmRpbmdBZGRT
dHJlYW1zW2ldKTsKKworICAgIG1fd2ViSGFuZGxlci0+cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKHN0
cmVhbXNUb0FkZCwgc3RyZWFtc1RvUmVtb3ZlKTsKK30KKwordm9pZCBQZWVySGFuZGxlckNocm9t
aXVtOjpzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVu
Z3RoKQoreworICAgIG1fd2ViSGFuZGxlci0+c2VuZERhdGFTdHJlYW1NZXNzYWdlKGRhdGEsIGxl
bmd0aCk7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXJDaHJvbWl1bTo6c3RvcCgpCit7CisgICAgbV93
ZWJIYW5kbGVyLT5zdG9wKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1BlZXJIYW5kbGVyKiBQZWVySGFuZGxlcjo6Y3JlYXRlKFBlZXJIYW5k
bGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29u
c3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICByZXR1cm4gbmV3IFdlYktpdDo6UGVl
ckhhbmRsZXJDaHJvbWl1bShjbGllbnQsIHNlcnZlckNvbmZpZ3VyYXRpb24sIHNlY3VyaXR5T3Jp
Z2luKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisKKyNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1l
ZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4wYzA4MTAyCi0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
Yk1lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2lu
Y2x1ZGUgIldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgorCisjaW5jbHVkZSAiTWVkaWFTdHJl
YW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRv
cihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiYg
bWVkaWFTdHJlYW1EZXNjcmlwdG9yKQorICAgIDogbV9wcml2YXRlKG1lZGlhU3RyZWFtRGVzY3Jp
cHRvcikKK3sKK30KKwordm9pZCBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnJlc2V0KCkKK3sK
KyAgICBtX3ByaXZhdGUucmVzZXQoKTsKK30KKwordm9pZCBXZWJNZWRpYVN0cmVhbURlc2NyaXB0
b3I6OmFzc2lnbihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNj
cmlwdG9yPiYgbWVkaWFTdHJlYW1EZXNjcmlwdG9yKQoreworICAgIG1fcHJpdmF0ZSA9IG1lZGlh
U3RyZWFtRGVzY3JpcHRvcjsKK30KKworV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpvcGVyYXRv
ciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yPigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQZWVySGFuZGxlckNsaWVudC5jcHAgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUGVlckhhbmRsZXJDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNjIzOGYKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUGVlckhhbmRsZXJDbGllbnQuY3BwCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQZWVy
SGFuZGxlckNsaWVudC5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlBlZXJIYW5kbGVyQ2xpZW50Lmgi
CisjaW5jbHVkZSAiV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViU3Ry
aW5nLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJQZWVySGFuZGxlckNsaWVudDo6V2Vi
UGVlckhhbmRsZXJDbGllbnQoV2ViQ29yZTo6UGVlckhhbmRsZXJDbGllbnQqIGNsaWVudCkKKyAg
ICA6IG1fY2xpZW50KGNsaWVudCkKK3sKK30KKworV2ViUGVlckhhbmRsZXJDbGllbnQ6Om9wZXJh
dG9yIFdlYkNvcmU6OlBlZXJIYW5kbGVyQ2xpZW50KigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
Y2xpZW50OworfQorCit2b2lkIFdlYlBlZXJIYW5kbGVyQ2xpZW50OjppY2VQcm9jZXNzaW5nQ29t
cGxldGVkKCkKK3sKKyAgICBtX2NsaWVudC0+aWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpOworfQor
Cit2b2lkIFdlYlBlZXJIYW5kbGVyQ2xpZW50OjpzZHBHZW5lcmF0ZWQoY29uc3QgV2ViU3RyaW5n
JiBzZHApCit7CisgICAgbV9jbGllbnQtPnNkcEdlbmVyYXRlZChzZHApOworfQorCit2b2lkIFdl
YlBlZXJIYW5kbGVyQ2xpZW50OjpkYXRhU3RyZWFtTWVzc2FnZVJlY2VpdmVkKGNvbnN0IGNoYXIq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBtX2NsaWVudC0+ZGF0YVN0cmVhbU1lc3Nh
Z2VSZWNlaXZlZChkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFdlYlBlZXJIYW5kbGVyQ2xpZW50
OjpyZW1vdGVTdHJlYW1BZGRlZChjb25zdCBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImIG1lZGlh
U3RyZWFtRGVzY3JpcHRvcikKK3sKKyAgICBtX2NsaWVudC0+cmVtb3RlU3RyZWFtQWRkZWQobWVk
aWFTdHJlYW1EZXNjcmlwdG9yKTsKK30KKwordm9pZCBXZWJQZWVySGFuZGxlckNsaWVudDo6cmVt
b3RlU3RyZWFtUmVtb3ZlZChjb25zdCBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImIG1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcikKK3sKKyAgICBtX2NsaWVudC0+cmVtb3RlU3RyZWFtUmVtb3ZlZChtZWRp
YVN0cmVhbURlc2NyaXB0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisK
</data>
<flag name="review"
          id="110201"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112315</attachid>
            <date>2011-10-25 04:34:13 -0700</date>
            <delta_ts>2011-10-26 07:32:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>58550.patch</filename>
            <type>text/plain</type>
            <size>39816</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDZhODNmYjQuLjQwZTM4NWIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEx
LTEwLTI1ICBUb21teSBXaWRlbmZseWNodCAgPHRvbW15d0Bnb29nbGUuY29tPgorCisgICAgICAg
IFtDaHJvbWl1bV0gTWVkaWEgU3RyZWFtIEFQSTogYWRkIHRoZSBDaHJvbWl1bSBXZWJLaXQgaW50
ZXJmYWNlcyBmb3IgUGVlckhhbmRsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU4NTUwCisKKyAgICAgICAgQ2hhbmdlcyB0aGUgUGVlckhhbmRsZXIg
cGxhdGZvcm0gaW50ZXJmYWNlIHNvIHRoYXQgZW1iZWRkZXJzIGNhbiBtb3JlIGVhc2lseSB1c2Ug
aXQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OlBlZXJDb25uZWN0aW9uKToKKyAgICAg
ICAgKiBtZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL1BlZXJIYW5kbGVyQmFzZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBl
ZXJIYW5kbGVyQmFzZTo6flBlZXJIYW5kbGVyQmFzZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUGVlckhhbmRsZXJDbGllbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OlBlZXJIYW5kbGVyQ2xpZW50Ojp+UGVlckhhbmRsZXJDbGllbnQpOgorCisgICAgICAgIFRlc3Rz
IGZvciB0aGUgTWVkaWEgU3RyZWFtIEFQSSB3aWxsIGJlIHByb3ZpZGVkIGJ5IHRoZSBidWcgNTY1
ODcsIHBlbmRpbmcgZW5vdWdoIGxhbmRlZCBjb2RlLgorCiAyMDExLTEwLTI1ICBTaGVyaWZmIEJv
dCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByOTgzMDkuCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDE1ZjU5MGUu
LmZiOGI1YzYgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisr
KyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yNzI5LDggKzI3MjksNyBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtQ29tcG9uZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyQmFzZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL0RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcCBcCmRpZmYg
LS1naXQgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQppbmRleCBmY2FmY2I5Li5kMzFhMDkxIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTgxNyw4ICs4MTcs
OCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ29tcG9u
ZW50LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVz
Y3JpcHRvci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bVNvdXJjZS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxl
ci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyQ2xpZW50Lmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL21vY2svRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2Nr
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VC
YXNlLmgnLApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0
aW9uLmNwcCBTb3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5jcHAKaW5k
ZXggYWNhMWQ3Yy4uZGQ1N2NmMCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL21lZGlhc3RyZWFt
L1BlZXJDb25uZWN0aW9uLmNwcAorKysgU291cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNv
bm5lY3Rpb24uY3BwCkBAIC01NSw3ICs1NSw3IEBAIFBlZXJDb25uZWN0aW9uOjpQZWVyQ29ubmVj
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHNlCiAg
ICAgLCBtX2luaXRpYWxOZWdvdGlhdGlvblRpbWVyKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6aW5p
dGlhbE5lZ290aWF0aW9uVGltZXJGaXJlZCkKICAgICAsIG1fc3RyZWFtQ2hhbmdlVGltZXIodGhp
cywgJlBlZXJDb25uZWN0aW9uOjpzdHJlYW1DaGFuZ2VUaW1lckZpcmVkKQogICAgICwgbV9yZWFk
eVN0YXRlQ2hhbmdlVGltZXIodGhpcywgJlBlZXJDb25uZWN0aW9uOjpyZWFkeVN0YXRlQ2hhbmdl
VGltZXJGaXJlZCkKLSAgICAsIG1fcGVlckhhbmRsZXIoUGVlckhhbmRsZXI6OmNyZWF0ZSh0aGlz
LCBzZXJ2ZXJDb25maWd1cmF0aW9uLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmlu
ZygpKSkKKyAgICAsIG1fcGVlckhhbmRsZXIoUGVlckhhbmRsZXJCYXNlOjpjcmVhdGUodGhpcywg
c2VydmVyQ29uZmlndXJhdGlvbiwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmco
KSkpCiB7CiB9CiAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9QZWVyQ29u
bmVjdGlvbi5oIFNvdXJjZS9XZWJDb3JlL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uLmgKaW5k
ZXggOTI1MGZmNi4uMWUwYjkyNCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL21lZGlhc3RyZWFt
L1BlZXJDb25uZWN0aW9uLmgKKysrIFNvdXJjZS9XZWJDb3JlL21lZGlhc3RyZWFtL1BlZXJDb25u
ZWN0aW9uLmgKQEAgLTMzLDcgKzMzLDggQEAKICNpbmNsdWRlICJFeGNlcHRpb25CYXNlLmgiCiAj
aW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbUxpc3QuaCIKLSNp
bmNsdWRlICJQZWVySGFuZGxlci5oIgorI2luY2x1ZGUgIlBlZXJIYW5kbGVyQmFzZS5oIgorI2lu
Y2x1ZGUgIlBlZXJIYW5kbGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiU2lnbmFsaW5nQ2FsbGJhY2su
aCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTEyNyw3
ICsxMjgsNyBAQCBwcml2YXRlOgogICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciBtX3Bl
bmRpbmdSZW1vdmVTdHJlYW1zOwogICAgIFZlY3RvcjxSZWFkeVN0YXRlPiBtX3BlbmRpbmdSZWFk
eVN0YXRlczsKIAotICAgIE93blB0cjxQZWVySGFuZGxlcj4gbV9wZWVySGFuZGxlcjsKKyAgICBP
d25QdHI8UGVlckhhbmRsZXJCYXNlPiBtX3BlZXJIYW5kbGVyOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1BlZXJIYW5kbGVyLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVy
SGFuZGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MWM4YWEuLjAwMDAw
MDAKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4K
LSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMg
Y29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIlBlZXJIYW5kbGVyLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6IHJlbW92ZSB3aGVuIHJlYWwgaW1w
bGVtZW50YXRpb25zIGFyZSBhdmFpbGFibGUKLS8vIEVtcHR5IGltcGxlbWVudGF0aW9ucyBmb3Ig
cG9ydHMgdGhhdCBidWlsZCB3aXRoIE1FRElBX1NUUkVBTSBlbmFibGVkIGJ5IGRlZmF1bHQuCi1Q
ZWVySGFuZGxlcjo6UGVlckhhbmRsZXIoUGVlckhhbmRsZXJDbGllbnQqLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmKQotewotfQotCi1QZWVySGFuZGxlcjo6flBlZXJIYW5kbGVyKCkKLXsK
LX0KLQotdm9pZCBQZWVySGFuZGxlcjo6cHJvZHVjZUluaXRpYWxPZmZlcihjb25zdCBNZWRpYVN0
cmVhbURlc2NyaXB0b3JWZWN0b3ImKQotewotfQotCi12b2lkIFBlZXJIYW5kbGVyOjpoYW5kbGVJ
bml0aWFsT2ZmZXIoY29uc3QgU3RyaW5nJikKLXsKLX0KLQotdm9pZCBQZWVySGFuZGxlcjo6cHJv
Y2Vzc1NEUChjb25zdCBTdHJpbmcmKQotewotfQotCi12b2lkIFBlZXJIYW5kbGVyOjpwcm9jZXNz
UGVuZGluZ1N0cmVhbXMoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiwgY29uc3Qg
TWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJikKLXsKLX0KLQotdm9pZCBQZWVySGFuZGxlcjo6
c2VuZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCkKLXsKLX0KLQotdm9p
ZCBQZWVySGFuZGxlcjo6c3RvcCgpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjNjE0ZWRmLi4wMDAwMDAwCi0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9QZWVySGFuZGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAg
ZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhl
IG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIFBlZXJIYW5kbGVyX2gKLSNkZWZpbmUgUGVlckhhbmRsZXJfaAotCi0jaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgotI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGVlckhh
bmRsZXJDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgflBlZXJIYW5kbGVyQ2xpZW50KCkg
eyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2RwR2VuZXJhdGVkKGNvbnN0IFN0cmluZyYgc2RwKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRhdGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbUFkZGVk
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCByZW1vdGVTdHJlYW1SZW1vdmVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopID0gMDsKLX07Ci0K
LWNsYXNzIFBlZXJIYW5kbGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQZWVySGFuZGxl
cik7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8UGVlckhhbmRsZXI+IGNyZWF0ZShQZWVySGFuZGxlckNsaWVudCogY2xpZW50LCBj
b25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBlZXJIYW5kbGVyKGNsaWVudCwg
c2VydmVyQ29uZmlndXJhdGlvbiwgdXNlcm5hbWUpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+UGVl
ckhhbmRsZXIoKTsKLQotICAgIHZvaWQgcHJvZHVjZUluaXRpYWxPZmZlcihjb25zdCBNZWRpYVN0
cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zKTsKLSAgICB2b2lkIGhhbmRs
ZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmIHNkcCk7Ci0gICAgdm9pZCBwcm9jZXNzU0RQKGNv
bnN0IFN0cmluZyYgc2RwKTsKLSAgICB2b2lkIHByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBN
ZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zLCBjb25zdCBNZWRp
YVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKLSAgICB2b2lk
IHNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgp
OwotCi0gICAgdm9pZCBzdG9wKCk7Ci0KLXByaXZhdGU6Ci0gICAgUGVlckhhbmRsZXIoUGVlckhh
bmRsZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0
cmluZyYgdXNlcm5hbWUpOwotCi0gICAgUGVlckhhbmRsZXJDbGllbnQqIG1fY2xpZW50OwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKLQotI2VuZGlmIC8vIFBlZXJIYW5kbGVyX2gKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlckJhc2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlckJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43YjMzYzg5Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyQmFzZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBQZWVySGFuZGxlckJhc2VfaAorI2RlZmluZSBQZWVySGFuZGxlckJhc2VfaAor
CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVzY3Jp
cHRvci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUGVlckhhbmRsZXJDbGllbnQ7CisKK2NsYXNzIFBlZXJIYW5kbGVyQmFzZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGVlckhhbmRsZXJCYXNlPiBjcmVhdGUoUGVl
ckhhbmRsZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0
IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4pOworCisgICAgdmlydHVhbCB+UGVlckhhbmRsZXJCYXNl
KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJvZHVjZUluaXRpYWxPZmZlcihjb25zdCBNZWRp
YVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmIHNkcCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBwcm9jZXNzU0RQKGNvbnN0IFN0cmluZyYgc2RwKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0
b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zLCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JW
ZWN0b3ImIHBlbmRpbmdSZW1vdmVTdHJlYW1zKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNlbmRE
YXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIFBlZXJI
YW5kbGVyQmFzZV9oCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUGVlckhhbmRsZXJDbGllbnQuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9QZWVySGFuZGxlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjM5YTgwMmIKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUGVlckhhbmRsZXJDbGllbnQuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJp
YnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBl
ZXJIYW5kbGVyQ2xpZW50X2gKKyNkZWZpbmUgUGVlckhhbmRsZXJDbGllbnRfaAorCisjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOworCitjbGFzcyBQZWVy
SGFuZGxlckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UGVlckhhbmRsZXJDbGllbnQo
KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBpY2VQcm9jZXNzaW5nQ29tcGxldGVkKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZHBHZW5lcmF0ZWQoY29uc3QgU3RyaW5nJiBzZHApID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGF0YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3RlU3RyZWFtQWRk
ZWQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+KSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHJlbW90ZVN0cmVhbVJlbW92ZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKikgPSAwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKKworI2VuZGlmIC8vIFBlZXJIYW5kbGVyQ2xpZW50X2gKZGlmZiAtLWdpdCBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCA1NWZmYjdlLi5mYjI0NWFjIDEwMDY0NAotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NDcgQEAKKzIwMTEtMTAtMjUgIFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+
CisKKyAgICAgICAgW0Nocm9taXVtXSBNZWRpYSBTdHJlYW0gQVBJOiBhZGQgdGhlIENocm9taXVt
IFdlYktpdCBpbnRlcmZhY2VzIGZvciBQZWVySGFuZGxlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg1NTAKKworICAgICAgICBBZGRzIHRoZSBicmlk
Z2luZyBjb2RlICsgdGhlIG1pbmltdW0gYW1vdW50IG9mIFdlYiogc3VwcG9ydGluZyBjb2RlLgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0
Lmd5cDoKKyAgICAgICAgKiBicmlkZ2UvUGVlckhhbmRsZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpQZWVySGFuZGxlckNocm9taXVtOjpQZWVySGFuZGxlckNocm9taXVt
KToKKyAgICAgICAgKFdlYktpdDo6UGVlckhhbmRsZXJDaHJvbWl1bTo6cHJvZHVjZUluaXRpYWxP
ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlBlZXJIYW5kbGVyQ2hyb21pdW06OmhhbmRsZUluaXRp
YWxPZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlBlZXJIYW5kbGVyQ2hyb21pdW06OnByb2Nlc3NT
RFApOgorICAgICAgICAoV2ViS2l0OjpQZWVySGFuZGxlckNocm9taXVtOjpwcm9jZXNzUGVuZGlu
Z1N0cmVhbXMpOgorICAgICAgICAoV2ViS2l0OjpQZWVySGFuZGxlckNocm9taXVtOjpzZW5kRGF0
YVN0cmVhbU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpQZWVySGFuZGxlckNocm9taXVtOjpz
dG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyQmFzZTo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0Lmg6CisgICAgICAgIChXZWJLaXQ6Oldl
YktpdFBsYXRmb3JtU3VwcG9ydDo6Y3JlYXRlUGVlckhhbmRsZXIpOgorICAgICAgICAqIHB1Ymxp
Yy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
Yk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjp+V2ViTWVkaWFTdHJlYW1EZXNj
cmlwdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjppc051
bGwpOgorICAgICAgICAqIHB1YmxpYy9XZWJQZWVySGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUGVlckhhbmRsZXI6On5XZWJQZWVySGFuZGxlcik6CisgICAgICAgICogcHVi
bGljL1dlYlBlZXJIYW5kbGVyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJNZWRp
YVN0cmVhbURlc2NyaXB0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yOjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJN
ZWRpYVN0cmVhbURlc2NyaXB0b3I6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpN
ZWRpYVN0cmVhbURlc2NyaXB0b3I+KToKKyAgICAgICAgKiBzcmMvV2ViUGVlckhhbmRsZXJDbGll
bnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGllbnQ6Oldl
YlBlZXJIYW5kbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGll
bnQ6Om9wZXJhdG9yIFdlYkNvcmU6OlBlZXJIYW5kbGVyQ2xpZW50Kik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBlZXJIYW5kbGVyQ2xpZW50OjppY2VQcm9jZXNzaW5nQ29tcGxldGVkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGllbnQ6OnNkcEdlbmVyYXRlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBlZXJIYW5kbGVyQ2xpZW50OjpkYXRhU3RyZWFtTWVzc2FnZVJlY2VpdmVk
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGllbnQ6OnJlbW90ZVN0cmVhbUFk
ZGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGllbnQ6OnJlbW90ZVN0cmVh
bVJlbW92ZWQpOgorCisgICAgICAgIFRlc3RzIGZvciB0aGUgTWVkaWEgU3RyZWFtIEFQSSB3aWxs
IGJlIHByb3ZpZGVkIGJ5IHRoZSBidWcgNTY1ODcsIHBlbmRpbmcgZW5vdWdoIGxhbmRlZCBjb2Rl
LgorCiAyMDExLTEwLTI0ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVtb3ZlZCBTaGFyZWRVQ2hhciBhbmQgdGlnaHRlbmVkIGxhbmd1YWdlIGFyb3VuZCBp
dHMgcHJldmlvdXMgdXNlcwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cCBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggODg0ODU3Yi4uYTk0
OWM1MCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC05MSw2ICs5MSw3IEBACiAgICAgICAg
ICAgICAgICAgJ1dFQktJVF9JTVBMRU1FTlRBVElPTj0xJywKICAgICAgICAgICAgIF0sCiAgICAg
ICAgICAgICAnc291cmNlcyc6IFsKKyAgICAgICAgICAgICAgICAnYnJpZGdlL1BlZXJIYW5kbGVy
Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICAgICAncHVibGljL2FuZHJvaWQvV2ViU2FuZGJv
eFN1cHBvcnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9hbmRyb2lkL1dlYlRoZW1lRW5n
aW5lLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvZ3RrL1dlYklucHV0RXZlbnRGYWN0b3J5
LmgnLApAQCAtMjI4LDYgKzIyOSw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRp
YVBsYXllci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlhUGxheWVyQWN0aW9u
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFQbGF5ZXJDbGllbnQuaCcsCisg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCcsCiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZW51SXRlbUluZm8uaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJNZXNzYWdlUG9ydENoYW5uZWwuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJNZXNzYWdlUG9ydENoYW5uZWxDbGllbnQuaCcsCkBAIC0yNDcsNiArMjQ5LDggQEAKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViUGFnZVZpc2liaWxpdHlTdGF0ZS5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYlBhc3N3b3JkRm9ybURhdGEuaCcsCisgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJQZWVySGFuZGxlci5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlBlZXJI
YW5kbGVyQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGVyZm9ybWFuY2Uu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQZXJtaXNzaW9uQ2xpZW50LmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViUGx1Z2luLmgnLApAQCAtNTUxLDYgKzU1NSw3IEBACiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYUVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOYW1l
ZE5vZGVNYXAuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk5ldHdvcmtTdGF0ZU5vdGlm
aWVyLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOb2RlLmNwcCcsCkBAIC01NjQsNiAr
NTY5LDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlBhc3N3b3JkRm9ybURhdGEuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYlBhc3N3b3JkRm9ybVV0aWxzLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJQYXNzd29yZEZvcm1VdGlscy5oJywKKyAgICAgICAgICAgICAgICAn
c3JjL1dlYlBlZXJIYW5kbGVyQ2xpZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJQ
ZXJmb3JtYW5jZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViUGx1Z2luQ29udGFpbmVy
SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3Bw
JywKZGlmZiAtLWdpdCBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVySGFuZGxlckNo
cm9taXVtLmNwcCBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVySGFuZGxlckNocm9t
aXVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWZkOWMxCi0tLSAv
ZGV2L251bGwKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL1BlZXJIYW5kbGVyQ2hy
b21pdW0uY3BwCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEVy
aWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJQZWVySGFuZGxlckJhc2UuaCIK
KworI2luY2x1ZGUgIlBlZXJIYW5kbGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0LmgiCisj
aW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVkZSAiV2ViTWVkaWFTdHJl
YW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViUGVlckhhbmRsZXIuaCIKKyNpbmNsdWRlICJX
ZWJQZWVySGFuZGxlckNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUGVl
ckhhbmRsZXJDaHJvbWl1bSA6IHB1YmxpYyBXZWJDb3JlOjpQZWVySGFuZGxlckJhc2UgeworcHVi
bGljOgorICAgIFBlZXJIYW5kbGVyQ2hyb21pdW0oV2ViQ29yZTo6UGVlckhhbmRsZXJDbGllbnQq
LCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmluZyYgc2VjdXJp
dHlPcmlnaW4pOworCisgICAgdmlydHVhbCB2b2lkIHByb2R1Y2VJbml0aWFsT2ZmZXIoY29uc3Qg
V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcyk7
CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmIHNkcCk7
CisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBzZHApOworICAgIHZp
cnR1YWwgdm9pZCBwcm9jZXNzUGVuZGluZ1N0cmVhbXMoY29uc3QgV2ViQ29yZTo6TWVkaWFTdHJl
YW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcywgY29uc3QgV2ViQ29yZTo6TWVk
aWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nUmVtb3ZlU3RyZWFtcyk7CisgICAgdmly
dHVhbCB2b2lkIHNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgpOworCisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKworcHJpdmF0ZToKKyAgICBX
ZWJQZWVySGFuZGxlciogbV93ZWJIYW5kbGVyOworfTsKKworUGVlckhhbmRsZXJDaHJvbWl1bTo6
UGVlckhhbmRsZXJDaHJvbWl1bShXZWJDb3JlOjpQZWVySGFuZGxlckNsaWVudCogY2xpZW50LCBj
b25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlP
cmlnaW4pCit7CisgICAgbV93ZWJIYW5kbGVyID0gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNy
ZWF0ZVBlZXJIYW5kbGVyKFdlYlBlZXJIYW5kbGVyQ2xpZW50KGNsaWVudCkpOworICAgIG1fd2Vi
SGFuZGxlci0+aW5pdGlhbGl6ZShzZXJ2ZXJDb25maWd1cmF0aW9uLCBzZWN1cml0eU9yaWdpbik7
Cit9CisKK3ZvaWQgUGVlckhhbmRsZXJDaHJvbWl1bTo6cHJvZHVjZUluaXRpYWxPZmZlcihjb25z
dCBXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1z
KQoreworICAgIHNpemVfdCBudW1TdHJlYW1zVG9BZGQgPSBwZW5kaW5nQWRkU3RyZWFtcy5zaXpl
KCk7CisgICAgV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gc3RyZWFtc1RvQWRk
KG51bVN0cmVhbXNUb0FkZCk7CisgICAgZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgbnVtU3RyZWFt
c1RvQWRkIDsgKytpKQorICAgICAgICBzdHJlYW1zVG9BZGRbaV0uYXNzaWduKHBlbmRpbmdBZGRT
dHJlYW1zW2ldKTsKKworICAgIG1fd2ViSGFuZGxlci0+cHJvZHVjZUluaXRpYWxPZmZlcihzdHJl
YW1zVG9BZGQpOworfQorCit2b2lkIFBlZXJIYW5kbGVyQ2hyb21pdW06OmhhbmRsZUluaXRpYWxP
ZmZlcihjb25zdCBTdHJpbmcmIHNkcCkKK3sKKyAgICBtX3dlYkhhbmRsZXItPmhhbmRsZUluaXRp
YWxPZmZlcihzZHApOworfQorCit2b2lkIFBlZXJIYW5kbGVyQ2hyb21pdW06OnByb2Nlc3NTRFAo
Y29uc3QgU3RyaW5nJiBzZHApCit7CisgICAgbV93ZWJIYW5kbGVyLT5wcm9jZXNzU0RQKHNkcCk7
Cit9CisKK3ZvaWQgUGVlckhhbmRsZXJDaHJvbWl1bTo6cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNv
bnN0IFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVh
bXMsIGNvbnN0IFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ1Jl
bW92ZVN0cmVhbXMpCit7CisgICAgc2l6ZV90IG51bVN0cmVhbXNUb0FkZCA9IHBlbmRpbmdBZGRT
dHJlYW1zLnNpemUoKTsKKyAgICBXZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBz
dHJlYW1zVG9BZGQobnVtU3RyZWFtc1RvQWRkKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMCA7IGkg
PCBudW1TdHJlYW1zVG9BZGQgOyArK2kpCisgICAgICAgIHN0cmVhbXNUb0FkZFtpXS5hc3NpZ24o
cGVuZGluZ0FkZFN0cmVhbXNbaV0pOworCisgICAgc2l6ZV90IG51bVN0cmVhbXNUb1JlbW92ZSA9
IHBlbmRpbmdSZW1vdmVTdHJlYW1zLnNpemUoKTsKKyAgICBXZWJWZWN0b3I8V2ViTWVkaWFTdHJl
YW1EZXNjcmlwdG9yPiBzdHJlYW1zVG9SZW1vdmUobnVtU3RyZWFtc1RvUmVtb3ZlKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMCA7IGkgPCBudW1TdHJlYW1zVG9SZW1vdmUgOyArK2kpCisgICAgICAg
IHN0cmVhbXNUb1JlbW92ZVtpXS5hc3NpZ24ocGVuZGluZ0FkZFN0cmVhbXNbaV0pOworCisgICAg
bV93ZWJIYW5kbGVyLT5wcm9jZXNzUGVuZGluZ1N0cmVhbXMoc3RyZWFtc1RvQWRkLCBzdHJlYW1z
VG9SZW1vdmUpOworfQorCit2b2lkIFBlZXJIYW5kbGVyQ2hyb21pdW06OnNlbmREYXRhU3RyZWFt
TWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgbV93ZWJI
YW5kbGVyLT5zZW5kRGF0YVN0cmVhbU1lc3NhZ2UoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBQ
ZWVySGFuZGxlckNocm9taXVtOjpzdG9wKCkKK3sKKyAgICBtX3dlYkhhbmRsZXItPnN0b3AoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFz
c093blB0cjxQZWVySGFuZGxlckJhc2U+IFBlZXJIYW5kbGVyQmFzZTo6Y3JlYXRlKFBlZXJIYW5k
bGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29u
c3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdl
YktpdDo6UGVlckhhbmRsZXJDaHJvbWl1bShjbGllbnQsIHNlcnZlckNvbmZpZ3VyYXRpb24sIHNl
Y3VyaXR5T3JpZ2luKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCisjZW5kaWYg
Ly8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaAppbmRleCA0ZWFiYjNiLi4yMjMxNzA0IDEwMDY0
NAotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0
LmgKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdFBsYXRmb3JtU3VwcG9y
dC5oCkBAIC02MSw2ICs2MSw4IEBAIGNsYXNzIFdlYklEQkZhY3Rvcnk7CiBjbGFzcyBXZWJJREJL
ZXk7CiBjbGFzcyBXZWJNZXNzYWdlUG9ydENoYW5uZWw7CiBjbGFzcyBXZWJNaW1lUmVnaXN0cnk7
CitjbGFzcyBXZWJQZWVySGFuZGxlcjsKK2NsYXNzIFdlYlBlZXJIYW5kbGVyQ2xpZW50OwogY2xh
c3MgV2ViUGx1Z2luTGlzdEJ1aWxkZXI7CiBjbGFzcyBXZWJTYW5kYm94U3VwcG9ydDsKIGNsYXNz
IFdlYlNoYXJlZFdvcmtlclJlcG9zaXRvcnk7CkBAIC0zMjEsNiArMzIzLDEwIEBAIHB1YmxpYzoK
ICAgICAvLyBNdXN0IHJldHVybiBub24tbnVsbC4KICAgICB2aXJ0dWFsIFdlYkZpbGVTeXN0ZW0q
IGZpbGVTeXN0ZW0oKSB7IHJldHVybiAwOyB9CiAKKyAgICAvLyBXZWJSVEMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdmly
dHVhbCBXZWJQZWVySGFuZGxlciogY3JlYXRlUGVlckhhbmRsZXIoY29uc3QgV2ViUGVlckhhbmRs
ZXJDbGllbnQmKSB7IHJldHVybiAwOyB9CisKIHByb3RlY3RlZDoKICAgICB+V2ViS2l0UGxhdGZv
cm1TdXBwb3J0KCkgeyB9CiB9OwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjA0OGE1NGMKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgKQEAgLTAsMCArMSw2MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3JfaAorI2RlZmluZSBX
ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3JfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5j
bHVkZSAiV2ViTm9uQ29weWFibGUuaCIKKyNpbmNsdWRlICJXZWJQcml2YXRlUHRyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciA6IHB1Ymxp
YyBXZWJOb25Db3B5YWJsZSB7CitwdWJsaWM6CisgICAgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9y
KCkgeyB9CisgICAgfldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcigpIHsgcmVzZXQoKTsgfQorCisg
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxpemUoKTsgLy8gRklYTUU6IEFkZCBwYXJhbXMu
CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7CisgICAgYm9vbCBpc051bGwoKSBjb25z
dCB7IHJldHVybiBtX3ByaXZhdGUuaXNOdWxsKCk7IH0KKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorICAgIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBXVEY6OlBhc3NSZWZQdHI8
V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+KCkgY29uc3Q7CisgICAgdm9p
ZCBhc3NpZ24oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3Jp
cHRvcj4mKTsKKyNlbmRpZgorCisgICAgLy8gRklYTUU6IEFkZCBmdW5jdGlvbnMuCisKK3ByaXZh
dGU6CisgICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+IG1f
cHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yX2gKZGlmZiAtLWdpdCBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJQZWVySGFuZGxlci5oIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBl
ZXJIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4ODgzYQot
LS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQZWVySGFu
ZGxlci5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworLS0gKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQZWVy
SGFuZGxlcl9oCisjZGVmaW5lIFdlYlBlZXJIYW5kbGVyX2gKKworI2luY2x1ZGUgIldlYlBlZXJI
YW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVmVjdG9yLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQZWVySGFuZGxlckNsaWVudDsKK2Ns
YXNzIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjsKKworY2xhc3MgV2ViUGVlckhhbmRsZXIgewor
cHVibGljOgorICAgIHZpcnR1YWwgfldlYlBlZXJIYW5kbGVyKCkgeyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgaW5pdGlhbGl6ZShjb25zdCBXZWJTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNv
bnN0IFdlYlN0cmluZyYgc2VjdXJpdHlPcmlnaW4pID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBw
cm9kdWNlSW5pdGlhbE9mZmVyKGNvbnN0IFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbURlc2NyaXB0
b3I+JiBwZW5kaW5nQWRkU3RyZWFtcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVJbml0
aWFsT2ZmZXIoY29uc3QgV2ViU3RyaW5nJiBzZHApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJv
Y2Vzc1NEUChjb25zdCBXZWJTdHJpbmcmIHNkcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwcm9j
ZXNzUGVuZGluZ1N0cmVhbXMoY29uc3QgV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRv
cj4mIHBlbmRpbmdBZGRTdHJlYW1zLCBjb25zdCBXZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1EZXNj
cmlwdG9yPiYgcGVuZGluZ1JlbW92ZVN0cmVhbXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vu
ZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIFdlYlBlZXJIYW5kbGVyX2gKZGlmZiAtLWdpdCBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQZWVySGFuZGxlckNsaWVudC5oIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlBlZXJIYW5kbGVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZTE1ZDcxMQotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJQZWVySGFuZGxlckNsaWVudC5oCkBAIC0wLDAgKzEsNjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGVlckhhbmRsZXJDbGllbnRfaAorI2RlZmluZSBX
ZWJQZWVySGFuZGxlckNsaWVudF9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRl
ICJXZWJOb25Db3B5YWJsZS5oIgorI2luY2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgUGVlckhhbmRsZXJDbGllbnQ7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I7CitjbGFzcyBXZWJTdHJp
bmc7CisKK2NsYXNzIFdlYlBlZXJIYW5kbGVyQ2xpZW50IDogcHVibGljIFdlYk5vbkNvcHlhYmxl
IHsKK3B1YmxpYzoKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaWNlUHJvY2Vzc2luZ0NvbXBsZXRl
ZCgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZHBHZW5lcmF0ZWQoY29uc3QgV2ViU3RyaW5n
JiBzZHApOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBkYXRhU3RyZWFtTWVzc2FnZVJlY2VpdmVk
KGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIHJlbW90ZVN0cmVhbUFkZGVkKGNvbnN0IFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYpOwor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZW1vdGVTdHJlYW1SZW1vdmVkKGNvbnN0IFdlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvciYpOworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2Vi
UGVlckhhbmRsZXJDbGllbnQoV2ViQ29yZTo6UGVlckhhbmRsZXJDbGllbnQqKTsKKyAgICBvcGVy
YXRvciBXZWJDb3JlOjpQZWVySGFuZGxlckNsaWVudCooKSBjb25zdDsKKyNlbmRpZgorCitwcml2
YXRlOgorICAgIC8vIE5vIGltcGxlbWVudGF0aW9uIGZvciB0aGUgZGVmYXVsdCBjb25zdHJ1Y3Rv
ci4gRGVjbGFyZWQgcHJpdmF0ZSB0byBlbnN1cmUgdGhhdCBubyBpbnN0YW5jZXMKKyAgICAvLyBj
YW4gYmUgY3JlYXRlZCBieSB0aGUgY29uc3VtZXJzIG9mIENocm9taXVtIFdlYktpdC4KKyAgICBX
ZWJQZWVySGFuZGxlckNsaWVudCgpOworCisgICAgV2ViQ29yZTo6UGVlckhhbmRsZXJDbGllbnQq
IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJQ
ZWVySGFuZGxlckNsaWVudF9oCmRpZmYgLS1naXQgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcCBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjBjMDgxMDIKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcApAQCAtMCwwICsxLDYwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQor
CisjaW5jbHVkZSAiV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisKKyNpbmNsdWRlICJNZWRp
YVN0cmVhbURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6V2ViTWVkaWFTdHJlYW1EZXNj
cmlwdG9yKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0
b3I+JiBtZWRpYVN0cmVhbURlc2NyaXB0b3IpCisgICAgOiBtX3ByaXZhdGUobWVkaWFTdHJlYW1E
ZXNjcmlwdG9yKQoreworfQorCit2b2lkIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6cmVzZXQo
KQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgpOworfQorCit2b2lkIFdlYk1lZGlhU3RyZWFtRGVz
Y3JpcHRvcjo6YXNzaWduKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVh
bURlc2NyaXB0b3I+JiBtZWRpYVN0cmVhbURlc2NyaXB0b3IpCit7CisgICAgbV9wcml2YXRlID0g
bWVkaWFTdHJlYW1EZXNjcmlwdG9yOworfQorCitXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6Om9w
ZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQorCisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKwpkaWZmIC0tZ2l0
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBlZXJIYW5kbGVyQ2xpZW50LmNwcCBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQZWVySGFuZGxlckNsaWVudC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2YTllNQotLS0gL2Rldi9udWxsCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQZWVySGFuZGxlckNsaWVudC5jcHAKQEAgLTAsMCAr
MSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YlBlZXJIYW5kbGVyQ2xpZW50LmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5j
bHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiUGVlckhhbmRsZXJDbGll
bnQuaCIKKyNpbmNsdWRlICJXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJX
ZWJTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlBlZXJIYW5kbGVyQ2xpZW50
OjpXZWJQZWVySGFuZGxlckNsaWVudChXZWJDb3JlOjpQZWVySGFuZGxlckNsaWVudCogY2xpZW50
KQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworfQorCitXZWJQZWVySGFuZGxlckNsaWVudDo6
b3BlcmF0b3IgV2ViQ29yZTo6UGVlckhhbmRsZXJDbGllbnQqKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9jbGllbnQ7Cit9CisKK3ZvaWQgV2ViUGVlckhhbmRsZXJDbGllbnQ6OmljZVByb2Nlc3Np
bmdDb21wbGV0ZWQoKQoreworICAgIG1fY2xpZW50LT5pY2VQcm9jZXNzaW5nQ29tcGxldGVkKCk7
Cit9CisKK3ZvaWQgV2ViUGVlckhhbmRsZXJDbGllbnQ6OnNkcEdlbmVyYXRlZChjb25zdCBXZWJT
dHJpbmcmIHNkcCkKK3sKKyAgICBtX2NsaWVudC0+c2RwR2VuZXJhdGVkKHNkcCk7Cit9CisKK3Zv
aWQgV2ViUGVlckhhbmRsZXJDbGllbnQ6OmRhdGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQoY29uc3Qg
Y2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIG1fY2xpZW50LT5kYXRhU3RyZWFt
TWVzc2FnZVJlY2VpdmVkKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgV2ViUGVlckhhbmRsZXJD
bGllbnQ6OnJlbW90ZVN0cmVhbUFkZGVkKGNvbnN0IFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYg
bWVkaWFTdHJlYW1EZXNjcmlwdG9yKQoreworICAgIG1fY2xpZW50LT5yZW1vdGVTdHJlYW1BZGRl
ZChtZWRpYVN0cmVhbURlc2NyaXB0b3IpOworfQorCit2b2lkIFdlYlBlZXJIYW5kbGVyQ2xpZW50
OjpyZW1vdGVTdHJlYW1SZW1vdmVkKGNvbnN0IFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYgbWVk
aWFTdHJlYW1EZXNjcmlwdG9yKQoreworICAgIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRp
YVN0cmVhbURlc2NyaXB0b3I+IHBycE1lZGlhU3RyZWFtRGVzY3JpcHRvciA9IG1lZGlhU3RyZWFt
RGVzY3JpcHRvcjsKKyAgICBtX2NsaWVudC0+cmVtb3RlU3RyZWFtUmVtb3ZlZChwcnBNZWRpYVN0
cmVhbURlc2NyaXB0b3IuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112503</attachid>
            <date>2011-10-26 07:30:19 -0700</date>
            <delta_ts>2011-10-27 03:01:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58550-20111026163017.patch</filename>
            <type>text/plain</type>
            <size>50286</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg0NjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiMDU0ZDYwMDBlM2Q5ZTM4
N2U3OWEwNDZjM2Q2Y2I1MzVjZDUyYTM3Li41MmQ4NzQ5ZTRiNDNkY2VmMGZlYjdjYjgzZGQzMWY1
YTdjMjdlOGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMTAtMjUgIFRvbW15
IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBN
ZWRpYSBTdHJlYW0gQVBJOiBhZGQgdGhlIENocm9taXVtIFdlYktpdCBpbnRlcmZhY2VzIGZvciBQ
ZWVySGFuZGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTg1NTAKKworICAgICAgICBDaGFuZ2VzIHRoZSBQZWVySGFuZGxlciBwbGF0Zm9ybSBpbnRl
cmZhY2Ugc28gdGhhdCBlbWJlZGRlcnMgY2FuIG1vcmUgZWFzaWx5IHVzZSBpdC4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBtZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQZWVyQ29ubmVjdGlvbjo6UGVlckNvbm5lY3Rpb24pOgorICAgICAgICAqIG1lZGlhc3Ry
ZWFtL1BlZXJDb25uZWN0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVl
ckhhbmRsZXJCYXNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9QZWVySGFuZGxlci5oLgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXJCYXNl
Ojp+UGVlckhhbmRsZXJCYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVy
SGFuZGxlckNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUGVlckhhbmRsZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXJD
bGllbnQ6On5QZWVySGFuZGxlckNsaWVudCk6CisKKyAgICAgICAgVGVzdHMgZm9yIHRoZSBNZWRp
YSBTdHJlYW0gQVBJIHdpbGwgYmUgcHJvdmlkZWQgYnkgdGhlIGJ1ZyA1NjU4NywgcGVuZGluZyBl
bm91Z2ggbGFuZGVkIGNvZGUuCisKIDIwMTEtMTAtMjYgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6
c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFBhcmFsbGVsSm9icyBwYXRoIG9mIEZFQ29udm9sdmVN
YXRyaXggaXMgZXJyb25lb3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDQwY2NmNTkx
NjdjZjZmNjJkM2Q5NTViMTdiYTc4OGU0NjVmNmUwY2UuLjVkNmY3NjUyMzMzM2ZlOWRkMTI0NGYw
M2UwMzg4MzE4ZTNlYjlmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NDcgQEAKKzIwMTEtMTAtMjUgIFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+
CisKKyAgICAgICAgW0Nocm9taXVtXSBNZWRpYSBTdHJlYW0gQVBJOiBhZGQgdGhlIENocm9taXVt
IFdlYktpdCBpbnRlcmZhY2VzIGZvciBQZWVySGFuZGxlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg1NTAKKworICAgICAgICBBZGRzIHRoZSBicmlk
Z2luZyBjb2RlICsgdGhlIG1pbmltdW0gYW1vdW50IG9mIFdlYiogc3VwcG9ydGluZyBjb2RlLgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0
Lmd5cDoKKyAgICAgICAgKiBicmlkZ2UvUGVlckhhbmRsZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpQZWVySGFuZGxlckNocm9taXVtOjpQZWVySGFuZGxlckNocm9taXVt
KToKKyAgICAgICAgKFdlYktpdDo6UGVlckhhbmRsZXJDaHJvbWl1bTo6cHJvZHVjZUluaXRpYWxP
ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlBlZXJIYW5kbGVyQ2hyb21pdW06OmhhbmRsZUluaXRp
YWxPZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlBlZXJIYW5kbGVyQ2hyb21pdW06OnByb2Nlc3NT
RFApOgorICAgICAgICAoV2ViS2l0OjpQZWVySGFuZGxlckNocm9taXVtOjpwcm9jZXNzUGVuZGlu
Z1N0cmVhbXMpOgorICAgICAgICAoV2ViS2l0OjpQZWVySGFuZGxlckNocm9taXVtOjpzZW5kRGF0
YVN0cmVhbU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpQZWVySGFuZGxlckNocm9taXVtOjpz
dG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyQmFzZTo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0Lmg6CisgICAgICAgIChXZWJLaXQ6Oldl
YktpdFBsYXRmb3JtU3VwcG9ydDo6Y3JlYXRlUGVlckhhbmRsZXIpOgorICAgICAgICAqIHB1Ymxp
Yy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
Yk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjp+V2ViTWVkaWFTdHJlYW1EZXNj
cmlwdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjppc051
bGwpOgorICAgICAgICAqIHB1YmxpYy9XZWJQZWVySGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUGVlckhhbmRsZXI6On5XZWJQZWVySGFuZGxlcik6CisgICAgICAgICogcHVi
bGljL1dlYlBlZXJIYW5kbGVyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJNZWRp
YVN0cmVhbURlc2NyaXB0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yOjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJN
ZWRpYVN0cmVhbURlc2NyaXB0b3I6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpN
ZWRpYVN0cmVhbURlc2NyaXB0b3I+KToKKyAgICAgICAgKiBzcmMvV2ViUGVlckhhbmRsZXJDbGll
bnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGllbnQ6Oldl
YlBlZXJIYW5kbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGll
bnQ6Om9wZXJhdG9yIFdlYkNvcmU6OlBlZXJIYW5kbGVyQ2xpZW50Kik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBlZXJIYW5kbGVyQ2xpZW50OjppY2VQcm9jZXNzaW5nQ29tcGxldGVkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGllbnQ6OnNkcEdlbmVyYXRlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBlZXJIYW5kbGVyQ2xpZW50OjpkYXRhU3RyZWFtTWVzc2FnZVJlY2VpdmVk
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGllbnQ6OnJlbW90ZVN0cmVhbUFk
ZGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGllbnQ6OnJlbW90ZVN0cmVh
bVJlbW92ZWQpOgorCisgICAgICAgIFRlc3RzIGZvciB0aGUgTWVkaWEgU3RyZWFtIEFQSSB3aWxs
IGJlIHByb3ZpZGVkIGJ5IHRoZSBidWcgNTY1ODcsIHBlbmRpbmcgZW5vdWdoIGxhbmRlZCBjb2Rl
LgorCiAyMDExLTEwLTI2ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTgzOTMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IDBjOWYzMGNlMTViOTFhY2IwMjMzMzdmNDNiZTFjZDA0MmY2NTkzYmEuLmQz
NmUxMzRmYzdmNTIzNmEzNmQ2YTk0NzgzZDRiNWY4ZmE3MTEyMjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCkBAIC02MSw2ICs2MSw3IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIp
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZyBcCiAJLUkkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYiBcCiAJLUkkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0gXAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lciBcCiAJLUkkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbW9jayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDM1MTE2MmQ2ZGZjMmVkZTc1NWYy
MjExZTc2NjdiZjBmYTk5YjY1YWIuLjM3MDY5MGFlZGJiYzYwM2NiMTJjNTA1NTE4MDk0NzU4MTc0
NjA3ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysr
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjczMSw4ICsyNzMxLDgg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbUNvbXBvbmVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUGVlckhhbmRsZXIuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUGVlckhhbmRsZXIuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9EZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0RldmljZU9yaWVudGF0aW9uQ2xpZW50
TW9jay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0dlb2xvY2F0aW9uQ2xpZW50
TW9jay5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCAxMTA1
ZWI5MzQwOWEzN2MxNDc2NTIyN2RjMjM5OTczYTJmMDNjOGEyLi5mNTAyZTMwMjhmNTg1YWZkODE0
NTU5NTk0ZmUxYTljYTZkNmFhMGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cApAQCAtMTk0LDYgKzE5NCw3IEBACiAgICAgICAnLi4vcGxhdGZvcm0vaW1hZ2UtZW5jb2Rl
cnMvc2tpYScsCiAgICAgICAnLi4vcGxhdGZvcm0vbGV2ZWxkYicsCiAgICAgICAnLi4vcGxhdGZv
cm0vbWVkaWFzdHJlYW0nLAorICAgICAgJy4uL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVt
JywKICAgICAgICcuLi9wbGF0Zm9ybS9tb2NrJywKICAgICAgICcuLi9wbGF0Zm9ybS9uZXR3b3Jr
JywKICAgICAgICcuLi9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpp
bmRleCAwZmE5NjkyZTUwM2I2NzA0MzZiYTNiZGU3ODJhMGUzZjBhMDhjYThkLi43ZjkwM2MxOTc2
M2JjYjM4YWU0ZGQzMzMwMWRhZjdiMWE2OTkyODlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC04MTcs
OCArODE3LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bUNvbXBvbmVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbURlc2NyaXB0b3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1Tb3VyY2UuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVl
ckhhbmRsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFu
ZGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlckNs
aWVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tb2NrL0RldmljZU9yaWVudGF0aW9uQ2xp
ZW50TW9jay5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tb2NrL0dlb2xvY2F0aW9uQ2xpZW50
TW9jay5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlQmFzZS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL21lZGlhc3RyZWFtL1Bl
ZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlv
bi5oCmluZGV4IDdmNGIyZjVhNjZhYzRkZmY4MzYwZDgwNThlYzEwMGYwYWNjMDE2ZWQuLmViNTAw
YTBkNmM5NDA3MDMxZWIwNTJmMTlhOGM0ODVjYTQ5OTNmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1MaXN0LmgiCiAjaW5jbHVkZSAi
UGVlckhhbmRsZXIuaCIKKyNpbmNsdWRlICJQZWVySGFuZGxlckNsaWVudC5oIgogI2luY2x1ZGUg
IlNpZ25hbGluZ0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9QZWVySGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9Q
ZWVySGFuZGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MWM4YWFkZDc4
MGNiZDVmN2FmZDFlYjBiOTY5NGVlYWJjNGYwZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UGVlckhhbmRsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAg
ZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhl
IG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAi
UGVlckhhbmRsZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTogcmVtb3Zl
IHdoZW4gcmVhbCBpbXBsZW1lbnRhdGlvbnMgYXJlIGF2YWlsYWJsZQotLy8gRW1wdHkgaW1wbGVt
ZW50YXRpb25zIGZvciBwb3J0cyB0aGF0IGJ1aWxkIHdpdGggTUVESUFfU1RSRUFNIGVuYWJsZWQg
YnkgZGVmYXVsdC4KLVBlZXJIYW5kbGVyOjpQZWVySGFuZGxlcihQZWVySGFuZGxlckNsaWVudCos
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLVBlZXJIYW5kbGVyOjp+UGVl
ckhhbmRsZXIoKQotewotfQotCi12b2lkIFBlZXJIYW5kbGVyOjpwcm9kdWNlSW5pdGlhbE9mZmVy
KGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYpCi17Ci19Ci0KLXZvaWQgUGVlckhh
bmRsZXI6OmhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmKQotewotfQotCi12b2lkIFBl
ZXJIYW5kbGVyOjpwcm9jZXNzU0RQKGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgUGVlckhh
bmRsZXI6OnByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JW
ZWN0b3ImLCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImKQotewotfQotCi12b2lk
IFBlZXJIYW5kbGVyOjpzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciosIHVuc2lnbmVk
KQotewotfQotCi12b2lkIFBlZXJIYW5kbGVyOjpzdG9wKCkKLXsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjNjE0ZWRmOWIxN2NmZjZiMjIyMTBkMzUzZjIyY2EyODhiODUz
ZTViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFC
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwot
ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGVlckhhbmRsZXJfaAotI2RlZmluZSBQ
ZWVySGFuZGxlcl9oCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiTWVk
aWFTdHJlYW1EZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBQZWVySGFuZGxlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB+UGVlckhhbmRsZXJDbGllbnQoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBpY2VQ
cm9jZXNzaW5nQ29tcGxldGVkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZHBHZW5lcmF0ZWQo
Y29uc3QgU3RyaW5nJiBzZHApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGF0YVN0cmVhbU1lc3Nh
Z2VSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVtb3RlU3RyZWFtQWRkZWQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2Ny
aXB0b3I+KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbVJlbW92ZWQoTWVkaWFT
dHJlYW1EZXNjcmlwdG9yKikgPSAwOwotfTsKLQotY2xhc3MgUGVlckhhbmRsZXIgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFBlZXJIYW5kbGVyKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxQZWVySGFuZGxlcj4gY3JlYXRl
KFBlZXJIYW5kbGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJh
dGlvbiwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgUGVlckhhbmRsZXIoY2xpZW50LCBzZXJ2ZXJDb25maWd1cmF0aW9uLCB1c2VybmFt
ZSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5QZWVySGFuZGxlcigpOwotCi0gICAgdm9pZCBwcm9k
dWNlSW5pdGlhbE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGlu
Z0FkZFN0cmVhbXMpOwotICAgIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYg
c2RwKTsKLSAgICB2b2lkIHByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBzZHApOwotICAgIHZvaWQg
cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYg
cGVuZGluZ0FkZFN0cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVu
ZGluZ1JlbW92ZVN0cmVhbXMpOwotICAgIHZvaWQgc2VuZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0
IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB2b2lkIHN0b3AoKTsKLQotcHJp
dmF0ZToKLSAgICBQZWVySGFuZGxlcihQZWVySGFuZGxlckNsaWVudCosIGNvbnN0IFN0cmluZyYg
c2VydmVyQ29uZmlndXJhdGlvbiwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSk7Ci0KLSAgICBQZWVy
SGFuZGxlckNsaWVudCogbV9jbGllbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jZW5kaWYgLy8gUGVlckhhbmRsZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhh
bmRsZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJI
YW5kbGVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRlMDgzODYyMzViOTZkNzViM2QxNWQ5NWNhNDA0
MDFmNTk2YTM2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1BlZXJIYW5kbGVyQ2xpZW50LmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBQZWVySGFuZGxlckNsaWVudF9oCisjZGVmaW5lIFBlZXJIYW5kbGVyQ2xpZW50X2gKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjsKKworY2xhc3MgUGVlckhhbmRsZXJDbGllbnQgewor
cHVibGljOgorICAgIHZpcnR1YWwgflBlZXJIYW5kbGVyQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgaWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2RwR2VuZXJhdGVkKGNvbnN0IFN0cmluZyYgc2RwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRh
dGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3Ro
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbUFkZGVkKFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW1EZXNjcmlwdG9yPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdGVTdHJlYW1S
ZW1vdmVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBQ
ZWVySGFuZGxlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9jaHJvbWl1bS9QZWVySGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vUGVlckhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NmY0YjNl
YmJiZjNkZTExNWRkMjM5ZjdjOTNlZmNmZGM4YjUyMmE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vUGVlckhhbmRsZXIuaApA
QCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGVlckhhbmRsZXJfaAorI2RlZmluZSBQZWVy
SGFuZGxlcl9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFT
dHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBQZWVySGFuZGxlckNsaWVudDsKK2NsYXNzIFBlZXJIYW5kbGVy
SW50ZXJuYWw7CisKK2NsYXNzIFBlZXJIYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShQZWVySGFuZGxlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8UGVlckhhbmRsZXI+IGNyZWF0ZShQZWVySGFuZGxlckNsaWVu
dCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmlu
ZyYgc2VjdXJpdHlDb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQ
ZWVySGFuZGxlcihjbGllbnQsIHNlcnZlckNvbmZpZ3VyYXRpb24sIHNlY3VyaXR5Q29udGV4dCkp
OworICAgIH0KKyAgICB+UGVlckhhbmRsZXIoKTsKKworICAgIHZvaWQgcHJvZHVjZUluaXRpYWxP
ZmZlcihjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1z
KTsKKyAgICB2b2lkIGhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmIHNkcCk7CisgICAg
dm9pZCBwcm9jZXNzU0RQKGNvbnN0IFN0cmluZyYgc2RwKTsKKyAgICB2b2lkIHByb2Nlc3NQZW5k
aW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRT
dHJlYW1zLCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdSZW1vdmVT
dHJlYW1zKTsKKyAgICB2b2lkIHNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRh
LCBzaXplX3QgbGVuZ3RoKTsKKworICAgIHZvaWQgc3RvcCgpOworCitwcml2YXRlOgorICAgIFBl
ZXJIYW5kbGVyKFBlZXJIYW5kbGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1
cmF0aW9uLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5Q29udGV4dCk7CisKKyAgICBPd25QdHI8UGVl
ckhhbmRsZXJJbnRlcm5hbD4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIFBlZXJIYW5k
bGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9QZWVySGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUGVlckhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlNDI0ZGI1MjQ0NjM5
OTExNGZiNGUxMDJlYzQyMDE4NmQ0NDZhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUGVlckhhbmRsZXIuY3BwCkBAIC0w
LDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKKworI2luY2x1ZGUgIlBlZXJIYW5kbGVyLmgiCisKKyNpbmNsdWRlICJQZWVySGFu
ZGxlckNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiByZW1vdmUg
d2hlbiByZWFsIGltcGxlbWVudGF0aW9ucyBhcmUgYXZhaWxhYmxlCisvLyBFbXB0eSBpbXBsZW1l
bnRhdGlvbnMgZm9yIHBvcnRzIHRoYXQgYnVpbGQgd2l0aCBNRURJQV9TVFJFQU0gZW5hYmxlZCBi
eSBkZWZhdWx0LgorUGVlckhhbmRsZXI6OlBlZXJIYW5kbGVyKFBlZXJIYW5kbGVyQ2xpZW50Kiwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKK30KKworUGVlckhhbmRsZXI6On5QZWVy
SGFuZGxlcigpCit7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXI6OnByb2R1Y2VJbml0aWFsT2ZmZXIo
Y29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJikKK3sKK30KKwordm9pZCBQZWVySGFu
ZGxlcjo6aGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYpCit7Cit9CisKK3ZvaWQgUGVl
ckhhbmRsZXI6OnByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJikKK3sKK30KKwordm9pZCBQZWVySGFu
ZGxlcjo6cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZl
Y3RvciYsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYpCit7Cit9CisKK3ZvaWQg
UGVlckhhbmRsZXI6OnNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiwgdW5zaWduZWQp
Cit7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXI6OnN0b3AoKQoreworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJIYW5kbGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUGVlckhh
bmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yMzNhNDU3MjQxNWIxMDJlMzMwOTIzZmEzOTQ1ZWFhNmY4MDQ5
YTU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1BlZXJIYW5kbGVyLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlz
dHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5h
bWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFBlZXJIYW5kbGVyX2gKKyNkZWZpbmUgUGVlckhhbmRsZXJfaAorCisjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGVlckhhbmRs
ZXJDbGllbnQ7CisKK2NsYXNzIFBlZXJIYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShQZWVySGFuZGxlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8UGVlckhhbmRsZXI+IGNyZWF0ZShQZWVySGFuZGxlckNsaWVu
dCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmlu
ZyYgc2VjdXJpdHlDb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQ
ZWVySGFuZGxlcihjbGllbnQsIHNlcnZlckNvbmZpZ3VyYXRpb24sIHNlY3VyaXR5Q29udGV4dCkp
OworICAgIH0KKyAgICB2aXJ0dWFsIH5QZWVySGFuZGxlcigpOworCisgICAgdm9pZCBwcm9kdWNl
SW5pdGlhbE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0Fk
ZFN0cmVhbXMpOworICAgIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYgc2Rw
KTsKKyAgICB2b2lkIHByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBzZHApOworICAgIHZvaWQgcHJv
Y2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVu
ZGluZ0FkZFN0cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGlu
Z1JlbW92ZVN0cmVhbXMpOworICAgIHZvaWQgc2VuZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOworCisgICAgdm9pZCBzdG9wKCk7CisKK3ByaXZhdGU6
CisgICAgUGVlckhhbmRsZXIoUGVlckhhbmRsZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIHNlcnZl
ckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlDb250ZXh0KTsKKworICAgIFBl
ZXJIYW5kbGVyQ2xpZW50KiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBQZWVySGFuZGxl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggYWRjM2MzYThkYTc1ZjU3ZjdkNjdj
MWQ2OGM3YTkzZGY2OGIwZjRhMC4uZTBhNjdiMWM1MzEwYTFhNGM1YWZlMThiZWI5YWFiOWVhYzRl
M2VkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtOTEsNiArOTEsOSBAQAogICAg
ICAgICAgICAgICAgICdXRUJLSVRfSU1QTEVNRU5UQVRJT049MScsCiAgICAgICAgICAgICBdLAog
ICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCisgICAgICAgICAgICAgICAgJ2JyaWRnZS9QZWVySGFu
ZGxlci5jcHAnLAorICAgICAgICAgICAgICAgICdicmlkZ2UvUGVlckhhbmRsZXJJbnRlcm5hbC5j
cHAnLAorICAgICAgICAgICAgICAgICdicmlkZ2UvUGVlckhhbmRsZXJJbnRlcm5hbC5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL2FuZHJvaWQvV2ViU2FuZGJveFN1cHBvcnQuaCcsCiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9hbmRyb2lkL1dlYlRoZW1lRW5naW5lLmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvZ3RrL1dlYklucHV0RXZlbnRGYWN0b3J5LmgnLApAQCAtMjI5LDYgKzIz
Miw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVBsYXllci5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYk1lZGlhUGxheWVyQWN0aW9uLmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViTWVkaWFQbGF5ZXJDbGllbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJNZW51SXRlbUluZm8uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZXNzYWdl
UG9ydENoYW5uZWwuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZXNzYWdlUG9ydENo
YW5uZWxDbGllbnQuaCcsCkBAIC0yNDgsNiArMjUyLDggQEAKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViUGFnZVZpc2liaWxpdHlTdGF0ZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlBh
c3N3b3JkRm9ybURhdGEuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQZWVySGFuZGxl
ci5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlBlZXJIYW5kbGVyQ2xpZW50LmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGVyZm9ybWFuY2UuaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJQZXJtaXNzaW9uQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViUGx1Z2luLmgnLApAQCAtNTUzLDYgKzU1OSw3IEBACiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJNZWRpYUVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFQbGF5ZXJD
bGllbnRJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFTdHJlYW1EZXNjcmlw
dG9yLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOYW1lZE5vZGVNYXAuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYk5ldHdvcmtTdGF0ZU5vdGlmaWVyLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJOb2RlLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL2JyaWRnZS9QZWVySGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2Jy
aWRnZS9QZWVySGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjUwMTBkNGQ2YThkYjZmMjViMjI1OTM2
OGU0MTU1NzQ5YzAxYWY3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vYnJpZGdlL1BlZXJIYW5kbGVyLmNwcApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1l
cyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIlBlZXJI
YW5kbGVyLmgiCisKKyNpbmNsdWRlICJQZWVySGFuZGxlckNsaWVudC5oIgorI2luY2x1ZGUgIlBl
ZXJIYW5kbGVySW50ZXJuYWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQZWVySGFuZGxl
cjo6UGVlckhhbmRsZXIoUGVlckhhbmRsZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBz
ZXJ2ZXJDb25maWd1cmF0aW9uLCBjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luKQorICAgIDog
bV9wcml2YXRlKGFkb3B0UHRyKG5ldyBQZWVySGFuZGxlckludGVybmFsKGNsaWVudCwgc2VydmVy
Q29uZmlndXJhdGlvbiwgc2VjdXJpdHlPcmlnaW4pKSkKK3sKK30KKworUGVlckhhbmRsZXI6On5Q
ZWVySGFuZGxlcigpCit7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXI6OnByb2R1Y2VJbml0aWFsT2Zm
ZXIoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcykK
K3sKKyAgICBtX3ByaXZhdGUtPnByb2R1Y2VJbml0aWFsT2ZmZXIocGVuZGluZ0FkZFN0cmVhbXMp
OworfQorCit2b2lkIFBlZXJIYW5kbGVyOjpoYW5kbGVJbml0aWFsT2ZmZXIoY29uc3QgU3RyaW5n
JiBzZHApCit7CisgICAgbV9wcml2YXRlLT5oYW5kbGVJbml0aWFsT2ZmZXIoc2RwKTsKK30KKwor
dm9pZCBQZWVySGFuZGxlcjo6cHJvY2Vzc1NEUChjb25zdCBTdHJpbmcmIHNkcCkKK3sKKyAgICBt
X3ByaXZhdGUtPnByb2Nlc3NTRFAoc2RwKTsKK30KKwordm9pZCBQZWVySGFuZGxlcjo6cHJvY2Vz
c1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGlu
Z0FkZFN0cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ1Jl
bW92ZVN0cmVhbXMpCit7CisgICAgbV9wcml2YXRlLT5wcm9jZXNzUGVuZGluZ1N0cmVhbXMocGVu
ZGluZ0FkZFN0cmVhbXMsIHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKK30KKwordm9pZCBQZWVySGFu
ZGxlcjo6c2VuZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5n
dGgpCit7CisgICAgbV9wcml2YXRlLT5zZW5kRGF0YVN0cmVhbU1lc3NhZ2UoZGF0YSwgbGVuZ3Ro
KTsKK30KKwordm9pZCBQZWVySGFuZGxlcjo6c3RvcCgpCit7CisgICAgbV9wcml2YXRlLT5zdG9w
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVy
SGFuZGxlckludGVybmFsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL1BlZXJI
YW5kbGVySW50ZXJuYWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1MTZkNWRjZTJmMjNlNzNhODliMDdmODU5
ZThlMDExODEzNzhiNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L2JyaWRnZS9QZWVySGFuZGxlckludGVybmFsLmNwcApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAg
ICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0
aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRl
ICJQZWVySGFuZGxlckludGVybmFsLmgiCisKKyNpbmNsdWRlICJQZWVySGFuZGxlckNsaWVudC5o
IgorI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5o
IgorI2luY2x1ZGUgIldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYlBl
ZXJIYW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViUGVlckhhbmRsZXJDbGllbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitQZWVySGFuZGxlckludGVybmFsOjpQZWVySGFuZGxlckludGVybmFs
KFBlZXJIYW5kbGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJh
dGlvbiwgY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbikgOiBtX2NsaWVudChjbGllbnQpCit7
CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX3dlYkhhbmRsZXIgPSBXZWJLaXQ6OndlYktp
dFBsYXRmb3JtU3VwcG9ydCgpLT5jcmVhdGVQZWVySGFuZGxlcih0aGlzKTsKKyAgICBtX3dlYkhh
bmRsZXItPmluaXRpYWxpemUoc2VydmVyQ29uZmlndXJhdGlvbiwgc2VjdXJpdHlPcmlnaW4pOwor
fQorCitQZWVySGFuZGxlckludGVybmFsOjp+UGVlckhhbmRsZXJJbnRlcm5hbCgpCit7CisgICAg
ZGVsZXRlIG1fd2ViSGFuZGxlcjsKK30KKwordm9pZCBQZWVySGFuZGxlckludGVybmFsOjpwcm9k
dWNlSW5pdGlhbE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGlu
Z0FkZFN0cmVhbXMpCit7CisgICAgc2l6ZV90IG51bVN0cmVhbXNUb0FkZCA9IHBlbmRpbmdBZGRT
dHJlYW1zLnNpemUoKTsKKyAgICBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYk1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcj4gc3RyZWFtc1RvQWRkKG51bVN0cmVhbXNUb0FkZCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDAgOyBpIDwgbnVtU3RyZWFtc1RvQWRkIDsgKytpKQorICAgICAgICBzdHJlYW1z
VG9BZGRbaV0uYXNzaWduKHBlbmRpbmdBZGRTdHJlYW1zW2ldKTsKKworICAgIG1fd2ViSGFuZGxl
ci0+cHJvZHVjZUluaXRpYWxPZmZlcihzdHJlYW1zVG9BZGQpOworfQorCit2b2lkIFBlZXJIYW5k
bGVySW50ZXJuYWw6OmhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmIHNkcCkKK3sKKyAg
ICBtX3dlYkhhbmRsZXItPmhhbmRsZUluaXRpYWxPZmZlcihzZHApOworfQorCit2b2lkIFBlZXJI
YW5kbGVySW50ZXJuYWw6OnByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBzZHApCit7CisgICAgbV93
ZWJIYW5kbGVyLT5wcm9jZXNzU0RQKHNkcCk7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXJJbnRlcm5h
bDo6cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3Rv
ciYgcGVuZGluZ0FkZFN0cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYg
cGVuZGluZ1JlbW92ZVN0cmVhbXMpCit7CisgICAgc2l6ZV90IG51bVN0cmVhbXNUb0FkZCA9IHBl
bmRpbmdBZGRTdHJlYW1zLnNpemUoKTsKKyAgICBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6Oldl
Yk1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gc3RyZWFtc1RvQWRkKG51bVN0cmVhbXNUb0FkZCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgbnVtU3RyZWFtc1RvQWRkIDsgKytpKQorICAgICAg
ICBzdHJlYW1zVG9BZGRbaV0uYXNzaWduKHBlbmRpbmdBZGRTdHJlYW1zW2ldKTsKKworICAgIHNp
emVfdCBudW1TdHJlYW1zVG9SZW1vdmUgPSBwZW5kaW5nUmVtb3ZlU3RyZWFtcy5zaXplKCk7Cisg
ICAgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0
cmVhbXNUb1JlbW92ZShudW1TdHJlYW1zVG9SZW1vdmUpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
IDsgaSA8IG51bVN0cmVhbXNUb1JlbW92ZSA7ICsraSkKKyAgICAgICAgc3RyZWFtc1RvUmVtb3Zl
W2ldLmFzc2lnbihwZW5kaW5nQWRkU3RyZWFtc1tpXSk7CisKKyAgICBtX3dlYkhhbmRsZXItPnBy
b2Nlc3NQZW5kaW5nU3RyZWFtcyhzdHJlYW1zVG9BZGQsIHN0cmVhbXNUb1JlbW92ZSk7Cit9CisK
K3ZvaWQgUGVlckhhbmRsZXJJbnRlcm5hbDo6c2VuZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNo
YXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBtX3dlYkhhbmRsZXItPnNlbmREYXRh
U3RyZWFtTWVzc2FnZShkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFBlZXJIYW5kbGVySW50ZXJu
YWw6OnN0b3AoKQoreworICAgIG1fd2ViSGFuZGxlci0+c3RvcCgpOworfQorCit2b2lkIFBlZXJI
YW5kbGVySW50ZXJuYWw6OmljZVByb2Nlc3NpbmdDb21wbGV0ZWQoKQoreworICAgIG1fY2xpZW50
LT5pY2VQcm9jZXNzaW5nQ29tcGxldGVkKCk7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXJJbnRlcm5h
bDo6c2RwR2VuZXJhdGVkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBzZHApCit7CisgICAgbV9j
bGllbnQtPnNkcEdlbmVyYXRlZChzZHApOworfQorCit2b2lkIFBlZXJIYW5kbGVySW50ZXJuYWw6
OmRhdGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0
aCkKK3sKKyAgICBtX2NsaWVudC0+ZGF0YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZChkYXRhLCBsZW5n
dGgpOworfQorCit2b2lkIFBlZXJIYW5kbGVySW50ZXJuYWw6OnJlbW90ZVN0cmVhbUFkZGVkKGNv
bnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJiB3ZWJNZWRpYVN0cmVhbURlc2Ny
aXB0b3IpCit7CisgICAgbV9jbGllbnQtPnJlbW90ZVN0cmVhbUFkZGVkKHdlYk1lZGlhU3RyZWFt
RGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXJJbnRlcm5hbDo6cmVtb3RlU3RyZWFt
UmVtb3ZlZChjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYgd2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yKQoreworICAgIG1fY2xpZW50LT5yZW1vdGVTdHJlYW1SZW1vdmVkKCgo
UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+KXdlYk1lZGlhU3RyZWFt
RGVzY3JpcHRvcikuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9icmlkZ2UvUGVlckhhbmRsZXJJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9icmlkZ2UvUGVlckhhbmRsZXJJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiMjgxZWQxNWQ0OTE0
N2EwYzg4OGU1YjM1ZjMwMGMxMGYyMWZiYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL2JyaWRnZS9QZWVySGFuZGxlckludGVybmFsLmgKQEAgLTAsMCArMSw3OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNz
c29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgUGVlckhhbmRsZXJJbnRlcm5hbF9oCisjZGVmaW5lIFBlZXJIYW5kbGVy
SW50ZXJuYWxfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIk1lZGlh
U3RyZWFtRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYlBlZXJIYW5kbGVyQ2xpZW50LmgiCisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBlZXJIYW5kbGVyOworY2xhc3MgV2ViU3Ry
aW5nOworY2xhc3MgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOworfQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFBlZXJIYW5kbGVyQ2xpZW50OworCitjbGFzcyBQZWVySGFuZGxlcklu
dGVybmFsIDogcHVibGljIFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGllbnQgeworcHVibGljOgor
ICAgIFBlZXJIYW5kbGVySW50ZXJuYWwoUGVlckhhbmRsZXJDbGllbnQqLCBjb25zdCBTdHJpbmcm
IHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4pOworICAg
IH5QZWVySGFuZGxlckludGVybmFsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJvZHVjZUluaXRp
YWxPZmZlcihjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIFBlbmRpbmdhZGRzdHJl
YW1zKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYg
c2RwKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1NEUChjb25zdCBTdHJpbmcmIHNkcCk7Cisg
ICAgdmlydHVhbCB2b2lkIHByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURl
c2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zLCBjb25zdCBNZWRpYVN0cmVhbURlc2Ny
aXB0b3JWZWN0b3ImIHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vu
ZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKworICAgIC8vIFdlYktpdDo6V2ViUGVlckhhbmRsZXJD
bGllbnQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIGljZVByb2Nlc3NpbmdDb21w
bGV0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2RwR2VuZXJhdGVkKGNvbnN0IFdlYktpdDo6V2Vi
U3RyaW5nJiBzZHApOworICAgIHZpcnR1YWwgdm9pZCBkYXRhU3RyZWFtTWVzc2FnZVJlY2VpdmVk
KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCByZW1v
dGVTdHJlYW1BZGRlZChjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYpOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdGVTdHJlYW1SZW1vdmVkKGNvbnN0IFdlYktpdDo6V2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yJik7CisKK3ByaXZhdGU6CisgICAgV2ViS2l0OjpXZWJQZWVySGFu
ZGxlciogbV93ZWJIYW5kbGVyOworICAgIFBlZXJIYW5kbGVyQ2xpZW50KiBtX2NsaWVudDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pCisKKyNlbmRpZiAvLyBQZWVySGFuZGxlckludGVybmFsX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgKaW5kZXggNGVh
YmIzYmE0NzAzNTNlNjZhN2I0NWEzM2ZhM2UyMzA3YzhjY2VlMC4uNTU5YWEyYzhhYWVjODBmNjZm
ZDUxYTIwNmE3MzZkNmI2Nzk3ZjhlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgKQEAgLTYxLDYgKzYxLDggQEAgY2xh
c3MgV2ViSURCRmFjdG9yeTsKIGNsYXNzIFdlYklEQktleTsKIGNsYXNzIFdlYk1lc3NhZ2VQb3J0
Q2hhbm5lbDsKIGNsYXNzIFdlYk1pbWVSZWdpc3RyeTsKK2NsYXNzIFdlYlBlZXJIYW5kbGVyOwor
Y2xhc3MgV2ViUGVlckhhbmRsZXJDbGllbnQ7CiBjbGFzcyBXZWJQbHVnaW5MaXN0QnVpbGRlcjsK
IGNsYXNzIFdlYlNhbmRib3hTdXBwb3J0OwogY2xhc3MgV2ViU2hhcmVkV29ya2VyUmVwb3NpdG9y
eTsKQEAgLTMyMSw2ICszMjMsMTAgQEAgcHVibGljOgogICAgIC8vIE11c3QgcmV0dXJuIG5vbi1u
dWxsLgogICAgIHZpcnR1YWwgV2ViRmlsZVN5c3RlbSogZmlsZVN5c3RlbSgpIHsgcmV0dXJuIDA7
IH0KIAorICAgIC8vIFdlYlJUQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICB2aXJ0dWFsIFdlYlBlZXJIYW5kbGVyKiBjcmVh
dGVQZWVySGFuZGxlcihXZWJQZWVySGFuZGxlckNsaWVudCopIHsgcmV0dXJuIDA7IH0KKwogcHJv
dGVjdGVkOgogICAgIH5XZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKSB7IH0KIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3Iu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRv
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmIwOWMwNWZmOTVlYmFkM2E5OTFlODYyNTJlMzJhMTMwNTQwYWY4YjIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRp
YVN0cmVhbURlc2NyaXB0b3IuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcl9oCisjZGVmaW5lIFdlYk1lZGlhU3RyZWFtRGVz
Y3JpcHRvcl9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJOb25Db3B5
YWJsZS5oIgorI2luY2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yIDogcHVibGljIFdlYk5vbkNvcHlhYmxl
IHsKK3B1YmxpYzoKKyAgICBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IoKSB7IH0KKyAgICB+V2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yKCkgeyByZXNldCgpOyB9CisKKyAgICBXRUJLSVRfRVhQT1JU
IHZvaWQgaW5pdGlhbGl6ZSgpOyAvLyBGSVhNRTogQWRkIHBhcmFtcy4KKyAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgcmVzZXQoKTsKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJp
dmF0ZS5pc051bGwoKTsgfQorCisgICAgLy8gRklYTUU6IEFkZCBmdW5jdGlvbnMuCisKKyNpZiBX
RUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IoY29uc3Qg
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcj4mKTsKKyAgICBv
cGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yPigp
IGNvbnN0OworICAgIHZvaWQgYXNzaWduKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpN
ZWRpYVN0cmVhbURlc2NyaXB0b3I+Jik7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBXZWJQcml2
YXRlUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gbV9wcml2YXRlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0
b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGVlckhh
bmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBlZXJIYW5kbGVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmRiNGYzMjcwYTk4ZmMzMGE5ZGM0NTkxNGU3Nzk4NTAxNmI3ZTdjOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBlZXJIYW5k
bGVyLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CistLSAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBlZXJI
YW5kbGVyX2gKKyNkZWZpbmUgV2ViUGVlckhhbmRsZXJfaAorCisjaW5jbHVkZSAiV2ViUGVlckhh
bmRsZXIuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBlZXJIYW5kbGVyQ2xpZW50OworY2xh
c3MgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOworCitjbGFzcyBXZWJQZWVySGFuZGxlciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+V2ViUGVlckhhbmRsZXIoKSB7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBpbml0aWFsaXplKGNvbnN0IFdlYlN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29u
c3QgV2ViU3RyaW5nJiBzZWN1cml0eU9yaWdpbikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHBy
b2R1Y2VJbml0aWFsT2ZmZXIoY29uc3QgV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRv
cj4mIHBlbmRpbmdBZGRTdHJlYW1zKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUluaXRp
YWxPZmZlcihjb25zdCBXZWJTdHJpbmcmIHNkcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwcm9j
ZXNzU0RQKGNvbnN0IFdlYlN0cmluZyYgc2RwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHByb2Nl
c3NQZW5kaW5nU3RyZWFtcyhjb25zdCBXZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9y
PiYgcGVuZGluZ0FkZFN0cmVhbXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbURlc2Ny
aXB0b3I+JiBwZW5kaW5nUmVtb3ZlU3RyZWFtcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZW5k
RGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFdlYlBlZXJIYW5kbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlBlZXJIYW5kbGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJQZWVySGFuZGxlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwMDU3
NWY0NWIxMTFlMTIwZDFkNmU3Y2M0NDgwNTMxMWFkOTM4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQZWVySGFuZGxlckNsaWVudC5oCkBAIC0w
LDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGVlckhhbmRsZXJDbGllbnRf
aAorI2RlZmluZSBXZWJQZWVySGFuZGxlckNsaWVudF9oCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I7CitjbGFzcyBXZWJTdHJpbmc7CisKK2Ns
YXNzIFdlYlBlZXJIYW5kbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJQZWVy
SGFuZGxlckNsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGljZVByb2Nlc3NpbmdDb21w
bGV0ZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNkcEdlbmVyYXRlZChjb25zdCBXZWJTdHJp
bmcmIHNkcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkYXRhU3RyZWFtTWVzc2FnZVJlY2VpdmVk
KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3RlU3RyZWFtQWRkZWQoY29uc3QgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdGVTdHJlYW1SZW1vdmVkKGNvbnN0IFdlYk1lZGlhU3RyZWFt
RGVzY3JpcHRvciYpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gV2ViUGVlckhhbmRsZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGMwODEw
MjQzM2I0NjBjMTMwODU1MzcwZDRkMzNhZjI5MTkxOGJhMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKQEAg
LTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIldlYk1lZGlhU3RyZWFtRGVzY3JpcHRv
ci5oIgorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2Vi
U3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJNZWRpYVN0cmVhbURlc2NyaXB0
b3I6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29y
ZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiYgbWVkaWFTdHJlYW1EZXNjcmlwdG9yKQorICAgIDog
bV9wcml2YXRlKG1lZGlhU3RyZWFtRGVzY3JpcHRvcikKK3sKK30KKwordm9pZCBXZWJNZWRpYVN0
cmVhbURlc2NyaXB0b3I6OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoKTsKK30KKwor
dm9pZCBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFzc2lnbihjb25zdCBXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiYgbWVkaWFTdHJlYW1EZXNjcmlwdG9y
KQoreworICAgIG1fcHJpdmF0ZSA9IG1lZGlhU3RyZWFtRGVzY3JpcHRvcjsKK30KKworV2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yOjpvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVk
aWFTdHJlYW1EZXNjcmlwdG9yPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQo
KTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112657</attachid>
            <date>2011-10-27 03:00:49 -0700</date>
            <delta_ts>2011-10-27 03:51:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58550-20111027120047.patch</filename>
            <type>text/plain</type>
            <size>53403</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg1MzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjZTJlMjE0OGNiODE5ZGEz
NzM0MzhiYTk3NTlhMzNjOGMzOTZmNzhjLi42YjA3NTg1ZjU2YjRjYTYzZDE4MzM0NzY0YWRhMDU4
YTQ1MTIxNDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMTAtMjcgIFRvbW15
IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBN
ZWRpYSBTdHJlYW0gQVBJOiBhZGQgdGhlIENocm9taXVtIFdlYktpdCBpbnRlcmZhY2VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODU1MAorCisgICAg
ICAgIENoYW5nZXMgdGhlIFBlZXJIYW5kbGVyIHBsYXRmb3JtIGludGVyZmFjZSBzbyB0aGF0IGVt
YmVkZGVycyBjYW4gbW9yZSBlYXNpbHkgdXNlIGl0LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OlBlZXJDb25uZWN0aW9u
KToKKyAgICAgICAgKiBtZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5oOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyQ2xpZW50Lmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OlBlZXJIYW5kbGVyQ2xpZW50Ojp+UGVlckhhbmRsZXJDbGllbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1BlZXJIYW5kbGVyLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmguCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJIYW5kbGVyLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRs
ZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OlBlZXJIYW5kbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjp+UGVlckhhbmRsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UGVlckhhbmRsZXI6OnByb2R1Y2VJbml0aWFsT2ZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UGVlckhhbmRsZXI6OmhhbmRsZUluaXRpYWxPZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpQ
ZWVySGFuZGxlcjo6cHJvY2Vzc1NEUCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6
cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpz
ZW5kRGF0YVN0cmVhbU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OnN0
b3ApOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9QZWVySGFuZGxl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVy
SGFuZGxlci5oLgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OmNyZWF0ZSk6CisKKyAg
ICAgICAgVGVzdHMgZm9yIHRoZSBNZWRpYSBTdHJlYW0gQVBJIHdpbGwgYmUgcHJvdmlkZWQgYnkg
dGhlIGJ1ZyA1NjU4NywgcGVuZGluZyBlbm91Z2ggbGFuZGVkIGNvZGUuCisKIDIwMTEtMTAtMjYg
IFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXNvdXJj
ZUVycm9yIGRvZXNuJ3Qgc3VwcG9ydCBjdXN0b20gZG9tYWlucyBvbiBXaW5kb3dzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IDRmOGYyMGIzOTA1YjIxOTRlY2E0YTgwOTJjNTllN2JiZDRi
ZDZkNDAuLjgwMDYxNTU0NTlkNWRkMjJjODVjMzQzOTcyYTM2YmM1ZmU3NTU3MmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMTAtMjcgIFRvbW15IFdp
ZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBNZWRp
YSBTdHJlYW0gQVBJOiBhZGQgdGhlIENocm9taXVtIFdlYktpdCBpbnRlcmZhY2VzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODU1MAorCisgICAgICAg
IEFkZHMgdGhlIGJyaWRnaW5nIGNvZGUgKyB0aGUgbWluaW11bSBhbW91bnQgb2YgV2ViKiBzdXBw
b3J0aW5nIGNvZGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIGJyaWRnZS9QZWVySGFuZGxlci5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxl
ci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpQZWVySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQ
ZWVySGFuZGxlcjo6flBlZXJIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVy
Ojpwcm9kdWNlSW5pdGlhbE9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpo
YW5kbGVJbml0aWFsT2ZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OnByb2Nl
c3NTRFApOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OnByb2Nlc3NQZW5kaW5nU3Ry
ZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6c2VuZERhdGFTdHJlYW1NZXNz
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpzdG9wKToKKyAgICAgICAgKiBi
cmlkZ2UvUGVlckhhbmRsZXJJbnRlcm5hbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UGVlckhhbmRsZXJJbnRlcm5hbDo6UGVlckhhbmRsZXJJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpQZWVySGFuZGxlckludGVybmFsOjp+UGVlckhhbmRsZXJJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpQZWVySGFuZGxlckludGVybmFsOjpwcm9kdWNlSW5pdGlhbE9mZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVySW50ZXJuYWw6OmhhbmRsZUluaXRpYWxPZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlckludGVybmFsOjpwcm9jZXNzU0RQKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVySW50ZXJuYWw6OnByb2Nlc3NQZW5kaW5nU3RyZWFt
cyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlckludGVybmFsOjpzZW5kRGF0YVN0cmVh
bU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXJJbnRlcm5hbDo6c3RvcCk6
CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlckludGVybmFsOjppY2VQcm9jZXNzaW5nQ29t
cGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVySW50ZXJuYWw6OnNkcEdlbmVy
YXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlckludGVybmFsOjpkYXRhU3RyZWFt
TWVzc2FnZVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVySW50ZXJuYWw6
OnJlbW90ZVN0cmVhbUFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVySW50ZXJu
YWw6OnJlbW90ZVN0cmVhbVJlbW92ZWQpOgorICAgICAgICAqIGJyaWRnZS9QZWVySGFuZGxlcklu
dGVybmFsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9QZWVySGFuZGxlci5oLgorICAgICAgICAqIHB1YmxpYy9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQu
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UGxhdGZvcm1TdXBwb3J0OjpjcmVhdGVQZWVySGFu
ZGxlcik6CisgICAgICAgICogcHVibGljL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpXZWJNZWRpYVN0
cmVhbURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0
b3I6On5XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRp
YVN0cmVhbURlc2NyaXB0b3I6OmlzTnVsbCk6CisgICAgICAgICogcHVibGljL1dlYlBlZXJIYW5k
bGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQZWVySGFuZGxlcjo6fldlYlBlZXJI
YW5kbGVyKToKKyAgICAgICAgKiBwdWJsaWMvV2ViUGVlckhhbmRsZXJDbGllbnQuaDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlBlZXJIYW5kbGVyQ2xpZW50Ojp+V2ViUGVlckhhbmRsZXJD
bGllbnQpOgorICAgICAgICAqIHNyYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpXZWJNZWRpYVN0
cmVhbURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0
b3I6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpv
cGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6Om9w
ZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+KToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpvcGVyYXRvciBXZWJD
b3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3IqKToKKworICAgICAgICBUZXN0cyBmb3IgdGhlIE1l
ZGlhIFN0cmVhbSBBUEkgd2lsbCBiZSBwcm92aWRlZCBieSB0aGUgYnVnIDU2NTg3LCBwZW5kaW5n
IGVub3VnaCBsYW5kZWQgY29kZS4KKwogMjAxMS0xMC0yNiAgQ2hyaXMgUm9nZXJzICA8Y3JvZ2Vy
c0Bnb29nbGUuY29tPgogCiAgICAgICAgIEFkZCBjaHJvbWl1bSBicmlkZ2luZyBmb3IgQXVkaW9T
b3VyY2VQcm92aWRlckNsaWVudCBhbmQgc2V0Rm9ybWF0KCkgbWV0aG9kIHNvIHdlIGNhbiBrbm93
IGF1ZGlvIHN0cmVhbSBmb3JtYXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggOWMyZjBkMDVmMGQw
ODlhMzA0NDFiYTkwODUyMzQxNDFkNTAzYTIyNy4uZjA2ZTkwM2JhZjdhZDc1ZTQzOGUzMDhiYzUx
NDFmYTk0NTNkMDQ2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
KysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTYxLDYgKzYxLDcgQEAgd2Vi
Y29yZV9jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9sZXZlbGRiIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbSBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrIFwK
IAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrIFwKIAktSSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KaW5kZXggMzUxMTYyZDZkZmMyZWRlNzU1ZjIyMTFlNzY2N2JmMGZhOTliNjVhYi4uMzcw
NjkwYWVkYmJjNjAzY2IxMmM1MDU1MTgwOTQ3NTgxNzQ2MDdlOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCkBAIC0yNzMxLDggKzI3MzEsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ29tcG9uZW50
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVz
Y3JpcHRvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVNvdXJjZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVy
SGFuZGxlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJI
YW5kbGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9QZWVySGFuZGxlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9QZWVySGFuZGxlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2Nr
L0RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IDExMDVlYjkzNDA5YTM3YzE0NzY1MjI3ZGMyMzk5
NzNhMmYwM2M4YTIuLmY1MDJlMzAyOGY1ODVhZmQ4MTQ1NTk1OTRmZTFhOWNhNmQ2YWEwZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0xOTQsNiArMTk0LDcgQEAK
ICAgICAgICcuLi9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhJywKICAgICAgICcuLi9wbGF0
Zm9ybS9sZXZlbGRiJywKICAgICAgICcuLi9wbGF0Zm9ybS9tZWRpYXN0cmVhbScsCisgICAgICAn
Li4vcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0nLAogICAgICAgJy4uL3BsYXRmb3JtL21v
Y2snLAogICAgICAgJy4uL3BsYXRmb3JtL25ldHdvcmsnLAogICAgICAgJy4uL3BsYXRmb3JtL25l
dHdvcmsvY2hyb21pdW0nLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDM3ZWFlYmY5MDc4ODdlMjEyODcw
ZTU1Y2EwY2YwMmM5NTg5NDg5YzAuLmY3NDI3ODJkNzNhNjc4MDFlNjQ1ZjY4OTg1OWZkMTI4ZWNj
NjkzYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTgxNyw4ICs4MTcsOCBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ29tcG9uZW50LmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5oJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyQ2xpZW50LmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL21vY2svRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL25ldHdvcmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmgnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IDdiNWFlNjcyMGMy
NzNkODVlODkwZTZjOWRiOTQzNzZjYmE4ZjNjNGYuLjE3MjE5Njc2NjY1NGUxNDAyMGM4N2NiZGI0
NGYyZjc2ZThhODczNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL21lZGlhc3RyZWFtL1Bl
ZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9QZWVyQ29u
bmVjdGlvbi5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgUGVlckNvbm5lY3Rpb246OlBlZXJDb25uZWN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc2UKICAg
ICAsIG1faW5pdGlhbE5lZ290aWF0aW9uVGltZXIodGhpcywgJlBlZXJDb25uZWN0aW9uOjppbml0
aWFsTmVnb3RpYXRpb25UaW1lckZpcmVkKQogICAgICwgbV9zdHJlYW1DaGFuZ2VUaW1lcih0aGlz
LCAmUGVlckNvbm5lY3Rpb246OnN0cmVhbUNoYW5nZVRpbWVyRmlyZWQpCiAgICAgLCBtX3JlYWR5
U3RhdGVDaGFuZ2VUaW1lcih0aGlzLCAmUGVlckNvbm5lY3Rpb246OnJlYWR5U3RhdGVDaGFuZ2VU
aW1lckZpcmVkKQotICAgICwgbV9wZWVySGFuZGxlcihQZWVySGFuZGxlcjo6Y3JlYXRlKHRoaXMs
IHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5n
KCkpKQorICAgICwgbV9wZWVySGFuZGxlcihQZWVySGFuZGxlcjo6Y3JlYXRlKHRoaXMsIHNlcnZl
ckNvbmZpZ3VyYXRpb24sIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkpKQogewogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uaAppbmRleCA3ZjRiMmY1YTY2
YWM0ZGZmODM2MGQ4MDU4ZWMxMDBmMGFjYzAxNmVkLi5lYjUwMGEwZDZjOTQwNzAzMWViMDUyZjE5
YThjNDg1Y2E0OTkzZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9Q
ZWVyQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL21lZGlhc3RyZWFtL1BlZXJDb25u
ZWN0aW9uLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgogI2lu
Y2x1ZGUgIk1lZGlhU3RyZWFtTGlzdC5oIgogI2luY2x1ZGUgIlBlZXJIYW5kbGVyLmgiCisjaW5j
bHVkZSAiUGVlckhhbmRsZXJDbGllbnQuaCIKICNpbmNsdWRlICJTaWduYWxpbmdDYWxsYmFjay5o
IgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTFjOGFhZGQ3ODBjYmQ1ZjdhZmQxZWIwYjk2OTRl
ZWFiYzRmMGQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJp
Y3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIlBlZXJIYW5kbGVyLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6IHJlbW92ZSB3aGVuIHJlYWwgaW1wbGVtZW50
YXRpb25zIGFyZSBhdmFpbGFibGUKLS8vIEVtcHR5IGltcGxlbWVudGF0aW9ucyBmb3IgcG9ydHMg
dGhhdCBidWlsZCB3aXRoIE1FRElBX1NUUkVBTSBlbmFibGVkIGJ5IGRlZmF1bHQuCi1QZWVySGFu
ZGxlcjo6UGVlckhhbmRsZXIoUGVlckhhbmRsZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmKQotewotfQotCi1QZWVySGFuZGxlcjo6flBlZXJIYW5kbGVyKCkKLXsKLX0KLQot
dm9pZCBQZWVySGFuZGxlcjo6cHJvZHVjZUluaXRpYWxPZmZlcihjb25zdCBNZWRpYVN0cmVhbURl
c2NyaXB0b3JWZWN0b3ImKQotewotfQotCi12b2lkIFBlZXJIYW5kbGVyOjpoYW5kbGVJbml0aWFs
T2ZmZXIoY29uc3QgU3RyaW5nJikKLXsKLX0KLQotdm9pZCBQZWVySGFuZGxlcjo6cHJvY2Vzc1NE
UChjb25zdCBTdHJpbmcmKQotewotfQotCi12b2lkIFBlZXJIYW5kbGVyOjpwcm9jZXNzUGVuZGlu
Z1N0cmVhbXMoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiwgY29uc3QgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yVmVjdG9yJikKLXsKLX0KLQotdm9pZCBQZWVySGFuZGxlcjo6c2VuZERh
dGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCkKLXsKLX0KLQotdm9pZCBQZWVy
SGFuZGxlcjo6c3RvcCgpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzYxNGVkZjliMTdjZmY2YjIyMjEwZDM1M2YyMmNhMjg4Yjg1M2U1Yi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9QZWVySGFuZGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3Nv
biBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIFBlZXJIYW5kbGVyX2gKLSNkZWZpbmUgUGVlckhhbmRsZXJfaAotCi0jaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVzY3JpcHRvci5o
IgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgUGVlckhhbmRsZXJDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgflBlZXJIYW5kbGVy
Q2xpZW50KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2RwR2VuZXJhdGVkKGNvbnN0IFN0cmluZyYgc2RwKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRhdGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQoY29uc3QgY2hh
ciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0
cmVhbUFkZGVkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZW1vdGVTdHJlYW1SZW1vdmVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopID0g
MDsKLX07Ci0KLWNsYXNzIFBlZXJIYW5kbGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQ
ZWVySGFuZGxlcik7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8UGVlckhhbmRsZXI+IGNyZWF0ZShQZWVySGFuZGxlckNsaWVudCog
Y2xpZW50LCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmluZyYg
dXNlcm5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBlZXJIYW5kbGVy
KGNsaWVudCwgc2VydmVyQ29uZmlndXJhdGlvbiwgdXNlcm5hbWUpKTsKLSAgICB9Ci0gICAgdmly
dHVhbCB+UGVlckhhbmRsZXIoKTsKLQotICAgIHZvaWQgcHJvZHVjZUluaXRpYWxPZmZlcihjb25z
dCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zKTsKLSAgICB2
b2lkIGhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmIHNkcCk7Ci0gICAgdm9pZCBwcm9j
ZXNzU0RQKGNvbnN0IFN0cmluZyYgc2RwKTsKLSAgICB2b2lkIHByb2Nlc3NQZW5kaW5nU3RyZWFt
cyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zLCBj
b25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsK
LSAgICB2b2lkIHNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgpOwotCi0gICAgdm9pZCBzdG9wKCk7Ci0KLXByaXZhdGU6Ci0gICAgUGVlckhhbmRs
ZXIoUGVlckhhbmRsZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24s
IGNvbnN0IFN0cmluZyYgdXNlcm5hbWUpOwotCi0gICAgUGVlckhhbmRsZXJDbGllbnQqIG1fY2xp
ZW50OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1F
RElBX1NUUkVBTSkKLQotI2VuZGlmIC8vIFBlZXJIYW5kbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlckNsaWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZkZTA4Mzg2MjM1Yjk2ZDc1YjNkMTVkOTVjYTQwNDAxZjU5NmEzNjgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxl
ckNsaWVudC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGVlckhhbmRsZXJDbGllbnRf
aAorI2RlZmluZSBQZWVySGFuZGxlckNsaWVudF9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVN0cmVhbURlc2Ny
aXB0b3I7CisKK2NsYXNzIFBlZXJIYW5kbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5QZWVySGFuZGxlckNsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGljZVByb2Nlc3Np
bmdDb21wbGV0ZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNkcEdlbmVyYXRlZChjb25zdCBT
dHJpbmcmIHNkcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkYXRhU3RyZWFtTWVzc2FnZVJlY2Vp
dmVkKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCByZW1vdGVTdHJlYW1BZGRlZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4p
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3RlU3RyZWFtUmVtb3ZlZChNZWRpYVN0cmVhbURl
c2NyaXB0b3IqKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gUGVlckhhbmRsZXJDbGllbnRfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0v
UGVlckhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9t
aXVtL1BlZXJIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGE2ZGI1YTY1YmQ4MjA5MTFlNWU5N2FjNTA2
OWRkYThjZmQ3YTEwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2Nocm9taXVtL1BlZXJIYW5kbGVyLmgKQEAgLTAsMCArMSw3MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBu
b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFBlZXJIYW5kbGVyX2gKKyNkZWZpbmUgUGVlckhhbmRsZXJfaAorCisjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
UGVlckhhbmRsZXJDbGllbnQ7CitjbGFzcyBQZWVySGFuZGxlckludGVybmFsOworY2xhc3MgU2Vj
dXJpdHlPcmlnaW47CisKK2NsYXNzIFBlZXJIYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQZWVySGFuZGxlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGVlckhhbmRsZXI+IGNyZWF0ZShQZWVySGFuZGxlckNs
aWVudCosIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4pOworICAgIH5QZWVySGFuZGxlcigpOworCisgICAgdm9pZCBwcm9kdWNlSW5p
dGlhbE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0
cmVhbXMpOworICAgIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYgc2RwKTsK
KyAgICB2b2lkIHByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBzZHApOworICAgIHZvaWQgcHJvY2Vz
c1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGlu
Z0FkZFN0cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ1Jl
bW92ZVN0cmVhbXMpOworICAgIHZvaWQgc2VuZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBsZW5ndGgpOworCisgICAgdm9pZCBzdG9wKCk7CisKK3ByaXZhdGU6Cisg
ICAgUGVlckhhbmRsZXIoUGVlckhhbmRsZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIHNlcnZlckNv
bmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKKworICAgIE93blB0cjxQ
ZWVySGFuZGxlckludGVybmFsPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gUGVlckhh
bmRsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1BlZXJIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9QZWVySGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGYzMDAxODc0ZTcw
NTcyZmE5MjU1MzI1ZTcyODYyNGE5YTdiM2VlYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9QZWVySGFuZGxlci5jcHAKQEAg
LTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorCisjaW5jbHVkZSAiUGVlckhhbmRsZXIuaCIKKworI2luY2x1ZGUgIlBlZXJI
YW5kbGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQYXNzT3duUHRyPFBlZXJIYW5kbGVyPiBQZWVySGFuZGxlcjo6Y3JlYXRl
KFBlZXJIYW5kbGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJh
dGlvbiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4pCit7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBQZWVySGFuZGxlcihjbGllbnQsIHNlcnZlckNvbmZpZ3VyYXRp
b24sIHNlY3VyaXR5T3JpZ2luKSk7Cit9CisKKy8vIEZJWE1FOiByZW1vdmUgd2hlbiByZWFsIGlt
cGxlbWVudGF0aW9ucyBhcmUgYXZhaWxhYmxlCisvLyBFbXB0eSBpbXBsZW1lbnRhdGlvbnMgZm9y
IHBvcnRzIHRoYXQgYnVpbGQgd2l0aCBNRURJQV9TVFJFQU0gZW5hYmxlZCBieSBkZWZhdWx0Lgor
UGVlckhhbmRsZXI6OlBlZXJIYW5kbGVyKFBlZXJIYW5kbGVyQ2xpZW50KiwgY29uc3QgU3RyaW5n
JiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pCit7Cit9CisKK1BlZXJIYW5kbGVyOjp+UGVl
ckhhbmRsZXIoKQoreworfQorCit2b2lkIFBlZXJIYW5kbGVyOjpwcm9kdWNlSW5pdGlhbE9mZmVy
KGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYpCit7Cit9CisKK3ZvaWQgUGVlckhh
bmRsZXI6OmhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmKQoreworfQorCit2b2lkIFBl
ZXJIYW5kbGVyOjpwcm9jZXNzU0RQKGNvbnN0IFN0cmluZyYpCit7Cit9CisKK3ZvaWQgUGVlckhh
bmRsZXI6OnByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JW
ZWN0b3ImLCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImKQoreworfQorCit2b2lk
IFBlZXJIYW5kbGVyOjpzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciosIHVuc2lnbmVk
KQoreworfQorCit2b2lkIFBlZXJIYW5kbGVyOjpzdG9wKCkKK3sKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9QZWVySGFuZGxl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJI
YW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzg4NGI5YmU4NTE3MWM4NjhlYzUzZTUzNDQzYWQ1MzkzYzhm
NmE3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9QZWVySGFuZGxlci5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBQZWVySGFuZGxlcl9oCisjZGVmaW5lIFBlZXJIYW5kbGVyX2gKKworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBlZXJIYW5k
bGVyQ2xpZW50OworY2xhc3MgU2VjdXJpdHlPcmlnaW47CisKK2NsYXNzIFBlZXJIYW5kbGVyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQZWVySGFuZGxlcik7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGVlckhhbmRsZXI+
IGNyZWF0ZShQZWVySGFuZGxlckNsaWVudCosIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJh
dGlvbiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pOworICAgIH5QZWVySGFuZGxlcigpOwor
CisgICAgdm9pZCBwcm9kdWNlSW5pdGlhbE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRv
clZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMpOworICAgIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVy
KGNvbnN0IFN0cmluZyYgc2RwKTsKKyAgICB2b2lkIHByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBz
ZHApOworICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVz
Y3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3Jp
cHRvclZlY3RvciYgcGVuZGluZ1JlbW92ZVN0cmVhbXMpOworICAgIHZvaWQgc2VuZERhdGFTdHJl
YW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOworCisgICAgdm9pZCBz
dG9wKCk7CisKK3ByaXZhdGU6CisgICAgUGVlckhhbmRsZXIoUGVlckhhbmRsZXJDbGllbnQqLCBj
b25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+KTsKKworICAgIFBlZXJIYW5kbGVyQ2xpZW50KiBtX2NsaWVudDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRp
ZiAvLyBQZWVySGFuZGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggMWY2MGM0
ZGRmODJkNjIxNDY0M2YyOGE1NDNjMGFkOTI5YjVkOTNiMC4uNjM4MDZhYzAwOTg1NDExNjdmY2Ez
NGFkNWFjZjgyZmNhNzU1OTlkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtOTEs
NiArOTEsOSBAQAogICAgICAgICAgICAgICAgICdXRUJLSVRfSU1QTEVNRU5UQVRJT049MScsCiAg
ICAgICAgICAgICBdLAogICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCisgICAgICAgICAgICAgICAg
J2JyaWRnZS9QZWVySGFuZGxlci5jcHAnLAorICAgICAgICAgICAgICAgICdicmlkZ2UvUGVlckhh
bmRsZXJJbnRlcm5hbC5jcHAnLAorICAgICAgICAgICAgICAgICdicmlkZ2UvUGVlckhhbmRsZXJJ
bnRlcm5hbC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL2FuZHJvaWQvV2ViU2FuZGJveFN1
cHBvcnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9hbmRyb2lkL1dlYlRoZW1lRW5naW5l
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvZ3RrL1dlYklucHV0RXZlbnRGYWN0b3J5Lmgn
LApAQCAtMjMxLDYgKzIzNCw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVBs
YXllci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlhUGxheWVyQWN0aW9uLmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFQbGF5ZXJDbGllbnQuaCcsCisgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJNZW51SXRlbUluZm8uaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJNZXNzYWdlUG9ydENoYW5uZWwuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJNZXNzYWdlUG9ydENoYW5uZWxDbGllbnQuaCcsCkBAIC0yNTAsNiArMjU0LDggQEAKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViUGFnZVZpc2liaWxpdHlTdGF0ZS5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYlBhc3N3b3JkRm9ybURhdGEuaCcsCisgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJQZWVySGFuZGxlci5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlBlZXJIYW5k
bGVyQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGVyZm9ybWFuY2UuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQZXJtaXNzaW9uQ2xpZW50LmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViUGx1Z2luLmgnLApAQCAtNTU1LDYgKzU2MSw3IEBACiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYUVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOYW1lZE5v
ZGVNYXAuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk5ldHdvcmtTdGF0ZU5vdGlmaWVy
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOb2RlLmNwcCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVySGFuZGxlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL2JyaWRnZS9QZWVySGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDFlZGVkMjFl
NjU2ZThhNDI5MzRlYzc3YmY5NjJhMzhlZTFmYzA2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL1BlZXJIYW5kbGVyLmNwcApAQCAtMCwwICsxLDg5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nz
b24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKwor
I2luY2x1ZGUgIlBlZXJIYW5kbGVyLmgiCisKKyNpbmNsdWRlICJQZWVySGFuZGxlckNsaWVudC5o
IgorI2luY2x1ZGUgIlBlZXJIYW5kbGVySW50ZXJuYWwuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8UGVlckhhbmRsZXI+
IFBlZXJIYW5kbGVyOjpjcmVhdGUoUGVlckhhbmRsZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3Ry
aW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1
cml0eU9yaWdpbikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBlZXJIYW5kbGVyKGNsaWVu
dCwgc2VydmVyQ29uZmlndXJhdGlvbiwgc2VjdXJpdHlPcmlnaW4pKTsKK30KKworUGVlckhhbmRs
ZXI6OlBlZXJIYW5kbGVyKFBlZXJIYW5kbGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYg
c2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlP
cmlnaW4pCisgICAgOiBtX3ByaXZhdGUoYWRvcHRQdHIobmV3IFBlZXJIYW5kbGVySW50ZXJuYWwo
Y2xpZW50LCBzZXJ2ZXJDb25maWd1cmF0aW9uLCBzZWN1cml0eU9yaWdpbikpKQoreworfQorCitQ
ZWVySGFuZGxlcjo6flBlZXJIYW5kbGVyKCkKK3sKK30KKwordm9pZCBQZWVySGFuZGxlcjo6cHJv
ZHVjZUluaXRpYWxPZmZlcihjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRp
bmdBZGRTdHJlYW1zKQoreworICAgIG1fcHJpdmF0ZS0+cHJvZHVjZUluaXRpYWxPZmZlcihwZW5k
aW5nQWRkU3RyZWFtcyk7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXI6OmhhbmRsZUluaXRpYWxPZmZl
cihjb25zdCBTdHJpbmcmIHNkcCkKK3sKKyAgICBtX3ByaXZhdGUtPmhhbmRsZUluaXRpYWxPZmZl
cihzZHApOworfQorCit2b2lkIFBlZXJIYW5kbGVyOjpwcm9jZXNzU0RQKGNvbnN0IFN0cmluZyYg
c2RwKQoreworICAgIG1fcHJpdmF0ZS0+cHJvY2Vzc1NEUChzZHApOworfQorCit2b2lkIFBlZXJI
YW5kbGVyOjpwcm9jZXNzUGVuZGluZ1N0cmVhbXMoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9y
VmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcywgY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVj
dG9yJiBwZW5kaW5nUmVtb3ZlU3RyZWFtcykKK3sKKyAgICBtX3ByaXZhdGUtPnByb2Nlc3NQZW5k
aW5nU3RyZWFtcyhwZW5kaW5nQWRkU3RyZWFtcywgcGVuZGluZ1JlbW92ZVN0cmVhbXMpOworfQor
Cit2b2lkIFBlZXJIYW5kbGVyOjpzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0
YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBtX3ByaXZhdGUtPnNlbmREYXRhU3RyZWFtTWVzc2Fn
ZShkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFBlZXJIYW5kbGVyOjpzdG9wKCkKK3sKKyAgICBt
X3ByaXZhdGUtPnN0b3AoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vYnJpZGdlL1BlZXJIYW5kbGVySW50ZXJuYWwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9icmlkZ2UvUGVlckhhbmRsZXJJbnRlcm5hbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDk3ODdlMDk2MWU1
OWI5ZDY0ZjlmYjM2YWM1NzczNGE2ZmEzMThiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vYnJpZGdlL1BlZXJIYW5kbGVySW50ZXJuYWwuY3BwCkBAIC0wLDAgKzEs
MTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
ICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
RXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAq
ICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKKworI2luY2x1ZGUgIlBlZXJIYW5kbGVySW50ZXJuYWwuaCIKKworI2luY2x1ZGUgIlBlZXJI
YW5kbGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJX
ZWJLaXQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlICJX
ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJQZWVySGFuZGxlci5oIgor
I2luY2x1ZGUgIldlYlBlZXJIYW5kbGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQZWVySGFuZGxlckludGVybmFsOjpQZWVy
SGFuZGxlckludGVybmFsKFBlZXJIYW5kbGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYg
c2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlP
cmlnaW4pCisgICAgOiBtX2NsaWVudChjbGllbnQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50KTsK
KyAgICBtX3dlYkhhbmRsZXIgPSBhZG9wdFB0cihXZWJLaXQ6OndlYktpdFBsYXRmb3JtU3VwcG9y
dCgpLT5jcmVhdGVQZWVySGFuZGxlcih0aGlzKSk7CisgICAgbV93ZWJIYW5kbGVyLT5pbml0aWFs
aXplKHNlcnZlckNvbmZpZ3VyYXRpb24sIHNlY3VyaXR5T3JpZ2luKTsKK30KKworUGVlckhhbmRs
ZXJJbnRlcm5hbDo6flBlZXJIYW5kbGVySW50ZXJuYWwoKQoreworfQorCit2b2lkIFBlZXJIYW5k
bGVySW50ZXJuYWw6OmNvcHlJdGVtcyhXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvcj4mIHJlc3VsdCwgY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVj
dG9yJiBzdHJlYW1zKQoreworICAgIHNpemVfdCBudW1iZXJPZlN0cmVhbXMgPSBzdHJlYW1zLnNp
emUoKTsKKyAgICBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvcj4gd2ViU3RyZWFtcyhudW1iZXJPZlN0cmVhbXMpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
IDsgaSA8IG51bWJlck9mU3RyZWFtcyA7ICsraSkKKyAgICAgICAgd2ViU3RyZWFtc1tpXSA9IHN0
cmVhbXNbaV07CisgICAgcmVzdWx0LnN3YXAod2ViU3RyZWFtcyk7Cit9CisKK3ZvaWQgUGVlckhh
bmRsZXJJbnRlcm5hbDo6cHJvZHVjZUluaXRpYWxPZmZlcihjb25zdCBNZWRpYVN0cmVhbURlc2Ny
aXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zKQoreworICAgIFdlYktpdDo6V2ViVmVjdG9y
PFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1zVG9BZGQ7CisgICAgY29w
eUl0ZW1zKHN0cmVhbXNUb0FkZCwgcGVuZGluZ0FkZFN0cmVhbXMpOworICAgIG1fd2ViSGFuZGxl
ci0+cHJvZHVjZUluaXRpYWxPZmZlcihzdHJlYW1zVG9BZGQpOworfQorCit2b2lkIFBlZXJIYW5k
bGVySW50ZXJuYWw6OmhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmIHNkcCkKK3sKKyAg
ICBtX3dlYkhhbmRsZXItPmhhbmRsZUluaXRpYWxPZmZlcihzZHApOworfQorCit2b2lkIFBlZXJI
YW5kbGVySW50ZXJuYWw6OnByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBzZHApCit7CisgICAgbV93
ZWJIYW5kbGVyLT5wcm9jZXNzU0RQKHNkcCk7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXJJbnRlcm5h
bDo6cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3Rv
ciYgcGVuZGluZ0FkZFN0cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYg
cGVuZGluZ1JlbW92ZVN0cmVhbXMpCit7CisgICAgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpX
ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0cmVhbXNUb0FkZDsKKyAgICBjb3B5SXRlbXMoc3Ry
ZWFtc1RvQWRkLCBwZW5kaW5nQWRkU3RyZWFtcyk7CisgICAgV2ViS2l0OjpXZWJWZWN0b3I8V2Vi
S2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0cmVhbXNUb1JlbW92ZTsKKyAgICBjb3B5
SXRlbXMoc3RyZWFtc1RvQWRkLCBwZW5kaW5nUmVtb3ZlU3RyZWFtcyk7CisgICAgbV93ZWJIYW5k
bGVyLT5wcm9jZXNzUGVuZGluZ1N0cmVhbXMoc3RyZWFtc1RvQWRkLCBzdHJlYW1zVG9SZW1vdmUp
OworfQorCit2b2lkIFBlZXJIYW5kbGVySW50ZXJuYWw6OnNlbmREYXRhU3RyZWFtTWVzc2FnZShj
b25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIG1fd2ViSGFuZGxlci0+c2Vu
ZERhdGFTdHJlYW1NZXNzYWdlKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXJJ
bnRlcm5hbDo6c3RvcCgpCit7CisgICAgbV93ZWJIYW5kbGVyLT5zdG9wKCk7Cit9CisKK3ZvaWQg
UGVlckhhbmRsZXJJbnRlcm5hbDo6aWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpCit7CisgICAgbV9j
bGllbnQtPmljZVByb2Nlc3NpbmdDb21wbGV0ZWQoKTsKK30KKwordm9pZCBQZWVySGFuZGxlcklu
dGVybmFsOjpzZHBHZW5lcmF0ZWQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHNkcCkKK3sKKyAg
ICBtX2NsaWVudC0+c2RwR2VuZXJhdGVkKHNkcCk7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXJJbnRl
cm5hbDo6ZGF0YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qg
bGVuZ3RoKQoreworICAgIG1fY2xpZW50LT5kYXRhU3RyZWFtTWVzc2FnZVJlY2VpdmVkKGRhdGEs
IGxlbmd0aCk7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXJJbnRlcm5hbDo6cmVtb3RlU3RyZWFtQWRk
ZWQoY29uc3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImIHdlYk1lZGlhU3RyZWFt
RGVzY3JpcHRvcikKK3sKKyAgICBtX2NsaWVudC0+cmVtb3RlU3RyZWFtQWRkZWQod2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yKTsKK30KKwordm9pZCBQZWVySGFuZGxlckludGVybmFsOjpyZW1vdGVT
dHJlYW1SZW1vdmVkKGNvbnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJiB3ZWJN
ZWRpYVN0cmVhbURlc2NyaXB0b3IpCit7CisgICAgbV9jbGllbnQtPnJlbW90ZVN0cmVhbVJlbW92
ZWQod2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vYnJpZGdlL1BlZXJIYW5kbGVySW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vYnJpZGdlL1BlZXJIYW5kbGVySW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Y2I4
OTQ3OWYyZjMxMjU0ZTdjMGNhYWMyZWNiOTRhNGQ2YjkzMDczCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvUGVlckhhbmRsZXJJbnRlcm5hbC5oCkBAIC0w
LDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFt
ZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp
cworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBlZXJIYW5kbGVySW50ZXJuYWxfaAorI2RlZmluZSBQ
ZWVySGFuZGxlckludGVybmFsX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNs
dWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJQZWVySGFuZGxlckNs
aWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKK2NsYXNzIFdlYlBlZXJIYW5kbGVyOworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9y
OworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBlZXJIYW5kbGVyQ2xpZW50Owor
Y2xhc3MgU2VjdXJpdHlPcmlnaW47CisKK2NsYXNzIFBlZXJIYW5kbGVySW50ZXJuYWwgOiBwdWJs
aWMgV2ViS2l0OjpXZWJQZWVySGFuZGxlckNsaWVudCB7CitwdWJsaWM6CisgICAgUGVlckhhbmRs
ZXJJbnRlcm5hbChQZWVySGFuZGxlckNsaWVudCosIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmln
dXJhdGlvbiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pOworICAgIH5QZWVySGFuZGxlcklu
dGVybmFsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJvZHVjZUluaXRpYWxPZmZlcihjb25zdCBN
ZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zKTsKKyAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYgc2RwKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcHJvY2Vzc1NEUChjb25zdCBTdHJpbmcmIHNkcCk7CisgICAgdmlydHVhbCB2b2lk
IHByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3Im
IHBlbmRpbmdBZGRTdHJlYW1zLCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBl
bmRpbmdSZW1vdmVTdHJlYW1zKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VuZERhdGFTdHJlYW1NZXNz
YWdlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBz
dG9wKCk7CisKKyAgICAvLyBXZWJLaXQ6OldlYlBlZXJIYW5kbGVyQ2xpZW50IGltcGxlbWVudGF0
aW9uLgorICAgIHZpcnR1YWwgdm9pZCBpY2VQcm9jZXNzaW5nQ29tcGxldGVkKCk7CisgICAgdmly
dHVhbCB2b2lkIHNkcEdlbmVyYXRlZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgc2RwKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGF0YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRh
LCBzaXplX3QgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3RlU3RyZWFtQWRkZWQoY29u
c3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3RlU3RyZWFtUmVtb3ZlZChjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRv
ciYpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGNvcHlJdGVtcyhXZWJLaXQ6OldlYlZl
Y3RvcjxXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcj4mIHJlc3VsdCwgY29uc3QgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBzdHJlYW1zKTsKKworICAgIE93blB0cjxXZWJLaXQ6
OldlYlBlZXJIYW5kbGVyPiBtX3dlYkhhbmRsZXI7CisgICAgUGVlckhhbmRsZXJDbGllbnQqIG1f
Y2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIFBlZXJIYW5kbGVySW50ZXJuYWxfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQu
aAppbmRleCA0ZWFiYjNiYTQ3MDM1M2U2NmE3YjQ1YTMzZmEzZTIzMDdjOGNjZWUwLi41NTlhYTJj
OGFhZWM4MGY2NmZkNTFhMjA2YTczNmQ2YjY3OTdmOGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaApAQCAtNjEsNiAr
NjEsOCBAQCBjbGFzcyBXZWJJREJGYWN0b3J5OwogY2xhc3MgV2ViSURCS2V5OwogY2xhc3MgV2Vi
TWVzc2FnZVBvcnRDaGFubmVsOwogY2xhc3MgV2ViTWltZVJlZ2lzdHJ5OworY2xhc3MgV2ViUGVl
ckhhbmRsZXI7CitjbGFzcyBXZWJQZWVySGFuZGxlckNsaWVudDsKIGNsYXNzIFdlYlBsdWdpbkxp
c3RCdWlsZGVyOwogY2xhc3MgV2ViU2FuZGJveFN1cHBvcnQ7CiBjbGFzcyBXZWJTaGFyZWRXb3Jr
ZXJSZXBvc2l0b3J5OwpAQCAtMzIxLDYgKzMyMywxMCBAQCBwdWJsaWM6CiAgICAgLy8gTXVzdCBy
ZXR1cm4gbm9uLW51bGwuCiAgICAgdmlydHVhbCBXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtKCkg
eyByZXR1cm4gMDsgfQogCisgICAgLy8gV2ViUlRDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHZpcnR1YWwgV2ViUGVlckhh
bmRsZXIqIGNyZWF0ZVBlZXJIYW5kbGVyKFdlYlBlZXJIYW5kbGVyQ2xpZW50KikgeyByZXR1cm4g
MDsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgfldlYktpdFBsYXRmb3JtU3VwcG9ydCgpIHsgfQogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFt
RGVzY3JpcHRvci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJl
YW1EZXNjcmlwdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTAwZDY0ZGNmZTI3ZTlmYjM0MWNiNzQyMGFkNGRj
NWYwYmVkMTcyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yX2gKKyNkZWZpbmUgV2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUg
IldlYk5vbkNvcHlhYmxlLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IgOiBwdWJsaWMgV2Vi
Tm9uQ29weWFibGUgeworcHVibGljOgorICAgIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcigpIHsg
fQorICAgIH5XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IoKSB7IHJlc2V0KCk7IH0KKworICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKCk7IC8vIEZJWE1FOiBBZGQgcGFyYW1zLgorICAg
IFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOworICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcml2YXRlLmlzTnVsbCgpOyB9CisKKyAgICAvLyBGSVhNRTogQWRkIGZ1bmN0aW9u
cy4KKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvcihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9y
PiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURl
c2NyaXB0b3I+KCkgY29uc3Q7CisgICAgb3BlcmF0b3IgV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNj
cmlwdG9yKigpIGNvbnN0OworICAgIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYgb3BlcmF0b3I9
KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+Jik7
CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcj4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGVlckhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlBlZXJIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmFjNTFkZmY3YTdk
ZTZmNjJiMmU3NjUxOTAwNWYyYWM3MDJiMDZlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBlZXJIYW5kbGVyLmgKQEAgLTAsMCArMSw1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQZWVySGFuZGxlcl9oCisjZGVmaW5lIFdlYlBlZXJI
YW5kbGVyX2gKKworI2luY2x1ZGUgIldlYlBlZXJIYW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViU2Vj
dXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJWZWN0
b3IuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjsKK2NsYXNzIFdlYlBlZXJIYW5kbGVyQ2xpZW50OworCitjbGFzcyBXZWJQZWVySGFuZGxl
ciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViUGVlckhhbmRsZXIoKSB7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBpbml0aWFsaXplKGNvbnN0IFdlYlN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlv
biwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJv
ZHVjZUluaXRpYWxPZmZlcihjb25zdCBXZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9y
PiYgcGVuZGluZ0FkZFN0cmVhbXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlSW5pdGlh
bE9mZmVyKGNvbnN0IFdlYlN0cmluZyYgc2RwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHByb2Nl
c3NTRFAoY29uc3QgV2ViU3RyaW5nJiBzZHApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vz
c1BlbmRpbmdTdHJlYW1zKGNvbnN0IFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I+
JiBwZW5kaW5nQWRkU3RyZWFtcywgY29uc3QgV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvcj4mIHBlbmRpbmdSZW1vdmVTdHJlYW1zKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNlbmRE
YXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gV2ViUGVlckhhbmRsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViUGVlckhhbmRsZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlBlZXJIYW5kbGVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjAwNTc1
ZjQ1YjExMWUxMjBkMWQ2ZTdjYzQ0ODA1MzExYWQ5MzgxZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBlZXJIYW5kbGVyQ2xpZW50LmgKQEAgLTAs
MCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQZWVySGFuZGxlckNsaWVudF9o
CisjZGVmaW5lIFdlYlBlZXJIYW5kbGVyQ2xpZW50X2gKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjsKK2NsYXNzIFdlYlN0cmluZzsKKworY2xh
c3MgV2ViUGVlckhhbmRsZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYlBlZXJI
YW5kbGVyQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaWNlUHJvY2Vzc2luZ0NvbXBs
ZXRlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2RwR2VuZXJhdGVkKGNvbnN0IFdlYlN0cmlu
ZyYgc2RwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRhdGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQo
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdGVTdHJlYW1BZGRlZChjb25zdCBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbVJlbW92ZWQoY29uc3QgV2ViTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yJikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBXZWJQZWVySGFuZGxlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzY2Y2Rm
NWY3YTE2ZWJiMDMyZTc5YmQ1MTUzMzQxM2Q5MTVmYjEwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcApAQCAt
MCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9y
LmgiCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJT
dHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3Jl
OjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+JiBtZWRpYVN0cmVhbURlc2NyaXB0b3IpCisgICAgOiBt
X3ByaXZhdGUobWVkaWFTdHJlYW1EZXNjcmlwdG9yKQoreworfQorCit2b2lkIFdlYk1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgpOworfQorCitX
ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6b3BlcmF0
b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+
JiBtZWRpYVN0cmVhbURlc2NyaXB0b3IpCit7CisgICAgbV9wcml2YXRlID0gbWVkaWFTdHJlYW1E
ZXNjcmlwdG9yOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViTWVkaWFTdHJlYW1EZXNjcmlw
dG9yOjpvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlw
dG9yPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30KKworV2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yOjpvcGVyYXRvciBXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0
b3IqKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112660</attachid>
            <date>2011-10-27 03:51:26 -0700</date>
            <delta_ts>2011-10-28 02:18:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58550-20111027125124.patch</filename>
            <type>text/plain</type>
            <size>53401</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg1MzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjZTJlMjE0OGNiODE5ZGEz
NzM0MzhiYTk3NTlhMzNjOGMzOTZmNzhjLi42YjA3NTg1ZjU2YjRjYTYzZDE4MzM0NzY0YWRhMDU4
YTQ1MTIxNDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMTAtMjcgIFRvbW15
IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBN
ZWRpYSBTdHJlYW0gQVBJOiBhZGQgdGhlIENocm9taXVtIFdlYktpdCBpbnRlcmZhY2VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODU1MAorCisgICAg
ICAgIENoYW5nZXMgdGhlIFBlZXJIYW5kbGVyIHBsYXRmb3JtIGludGVyZmFjZSBzbyB0aGF0IGVt
YmVkZGVycyBjYW4gbW9yZSBlYXNpbHkgdXNlIGl0LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OlBlZXJDb25uZWN0aW9u
KToKKyAgICAgICAgKiBtZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5oOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyQ2xpZW50Lmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OlBlZXJIYW5kbGVyQ2xpZW50Ojp+UGVlckhhbmRsZXJDbGllbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1BlZXJIYW5kbGVyLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmguCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJIYW5kbGVyLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRs
ZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OlBlZXJIYW5kbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjp+UGVlckhhbmRsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UGVlckhhbmRsZXI6OnByb2R1Y2VJbml0aWFsT2ZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UGVlckhhbmRsZXI6OmhhbmRsZUluaXRpYWxPZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpQ
ZWVySGFuZGxlcjo6cHJvY2Vzc1NEUCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6
cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpz
ZW5kRGF0YVN0cmVhbU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OnN0
b3ApOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9QZWVySGFuZGxl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVy
SGFuZGxlci5oLgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OmNyZWF0ZSk6CisKKyAg
ICAgICAgVGVzdHMgZm9yIHRoZSBNZWRpYSBTdHJlYW0gQVBJIHdpbGwgYmUgcHJvdmlkZWQgYnkg
dGhlIGJ1ZyA1NjU4NywgcGVuZGluZyBlbm91Z2ggbGFuZGVkIGNvZGUuCisKIDIwMTEtMTAtMjYg
IFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXNvdXJj
ZUVycm9yIGRvZXNuJ3Qgc3VwcG9ydCBjdXN0b20gZG9tYWlucyBvbiBXaW5kb3dzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IDRmOGYyMGIzOTA1YjIxOTRlY2E0YTgwOTJjNTllN2JiZDRi
ZDZkNDAuLjgwMDYxNTU0NTlkNWRkMjJjODVjMzQzOTcyYTM2YmM1ZmU3NTU3MmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMTAtMjcgIFRvbW15IFdp
ZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBNZWRp
YSBTdHJlYW0gQVBJOiBhZGQgdGhlIENocm9taXVtIFdlYktpdCBpbnRlcmZhY2VzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODU1MAorCisgICAgICAg
IEFkZHMgdGhlIGJyaWRnaW5nIGNvZGUgKyB0aGUgbWluaW11bSBhbW91bnQgb2YgV2ViKiBzdXBw
b3J0aW5nIGNvZGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIGJyaWRnZS9QZWVySGFuZGxlci5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxl
ci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpQZWVySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQ
ZWVySGFuZGxlcjo6flBlZXJIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVy
Ojpwcm9kdWNlSW5pdGlhbE9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpo
YW5kbGVJbml0aWFsT2ZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OnByb2Nl
c3NTRFApOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OnByb2Nlc3NQZW5kaW5nU3Ry
ZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6c2VuZERhdGFTdHJlYW1NZXNz
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpzdG9wKToKKyAgICAgICAgKiBi
cmlkZ2UvUGVlckhhbmRsZXJJbnRlcm5hbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UGVlckhhbmRsZXJJbnRlcm5hbDo6UGVlckhhbmRsZXJJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpQZWVySGFuZGxlckludGVybmFsOjp+UGVlckhhbmRsZXJJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpQZWVySGFuZGxlckludGVybmFsOjpwcm9kdWNlSW5pdGlhbE9mZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVySW50ZXJuYWw6OmhhbmRsZUluaXRpYWxPZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlckludGVybmFsOjpwcm9jZXNzU0RQKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVySW50ZXJuYWw6OnByb2Nlc3NQZW5kaW5nU3RyZWFt
cyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlckludGVybmFsOjpzZW5kRGF0YVN0cmVh
bU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXJJbnRlcm5hbDo6c3RvcCk6
CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlckludGVybmFsOjppY2VQcm9jZXNzaW5nQ29t
cGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVySW50ZXJuYWw6OnNkcEdlbmVy
YXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlckludGVybmFsOjpkYXRhU3RyZWFt
TWVzc2FnZVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVySW50ZXJuYWw6
OnJlbW90ZVN0cmVhbUFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVySW50ZXJu
YWw6OnJlbW90ZVN0cmVhbVJlbW92ZWQpOgorICAgICAgICAqIGJyaWRnZS9QZWVySGFuZGxlcklu
dGVybmFsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9QZWVySGFuZGxlci5oLgorICAgICAgICAqIHB1YmxpYy9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQu
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UGxhdGZvcm1TdXBwb3J0OjpjcmVhdGVQZWVySGFu
ZGxlcik6CisgICAgICAgICogcHVibGljL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpXZWJNZWRpYVN0
cmVhbURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0
b3I6On5XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRp
YVN0cmVhbURlc2NyaXB0b3I6OmlzTnVsbCk6CisgICAgICAgICogcHVibGljL1dlYlBlZXJIYW5k
bGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQZWVySGFuZGxlcjo6fldlYlBlZXJI
YW5kbGVyKToKKyAgICAgICAgKiBwdWJsaWMvV2ViUGVlckhhbmRsZXJDbGllbnQuaDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlBlZXJIYW5kbGVyQ2xpZW50Ojp+V2ViUGVlckhhbmRsZXJD
bGllbnQpOgorICAgICAgICAqIHNyYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpXZWJNZWRpYVN0
cmVhbURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0
b3I6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpv
cGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6Om9w
ZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+KToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpvcGVyYXRvciBXZWJD
b3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3IqKToKKworICAgICAgICBUZXN0cyBmb3IgdGhlIE1l
ZGlhIFN0cmVhbSBBUEkgd2lsbCBiZSBwcm92aWRlZCBieSB0aGUgYnVnIDU2NTg3LCBwZW5kaW5n
IGVub3VnaCBsYW5kZWQgY29kZS4KKwogMjAxMS0xMC0yNiAgQ2hyaXMgUm9nZXJzICA8Y3JvZ2Vy
c0Bnb29nbGUuY29tPgogCiAgICAgICAgIEFkZCBjaHJvbWl1bSBicmlkZ2luZyBmb3IgQXVkaW9T
b3VyY2VQcm92aWRlckNsaWVudCBhbmQgc2V0Rm9ybWF0KCkgbWV0aG9kIHNvIHdlIGNhbiBrbm93
IGF1ZGlvIHN0cmVhbSBmb3JtYXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggOWMyZjBkMDVmMGQw
ODlhMzA0NDFiYTkwODUyMzQxNDFkNTAzYTIyNy4uZjA2ZTkwM2JhZjdhZDc1ZTQzOGUzMDhiYzUx
NDFmYTk0NTNkMDQ2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
KysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTYxLDYgKzYxLDcgQEAgd2Vi
Y29yZV9jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9sZXZlbGRiIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbSBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrIFwK
IAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrIFwKIAktSSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KaW5kZXggMzUxMTYyZDZkZmMyZWRlNzU1ZjIyMTFlNzY2N2JmMGZhOTliNjVhYi4uMzcw
NjkwYWVkYmJjNjAzY2IxMmM1MDU1MTgwOTQ3NTgxNzQ2MDdlOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCkBAIC0yNzMxLDggKzI3MzEsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ29tcG9uZW50
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVz
Y3JpcHRvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVNvdXJjZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVy
SGFuZGxlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJI
YW5kbGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9QZWVySGFuZGxlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9QZWVySGFuZGxlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2Nr
L0RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IDExMDVlYjkzNDA5YTM3YzE0NzY1MjI3ZGMyMzk5
NzNhMmYwM2M4YTIuLmY1MDJlMzAyOGY1ODVhZmQ4MTQ1NTk1OTRmZTFhOWNhNmQ2YWEwZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0xOTQsNiArMTk0LDcgQEAK
ICAgICAgICcuLi9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhJywKICAgICAgICcuLi9wbGF0
Zm9ybS9sZXZlbGRiJywKICAgICAgICcuLi9wbGF0Zm9ybS9tZWRpYXN0cmVhbScsCisgICAgICAn
Li4vcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0nLAogICAgICAgJy4uL3BsYXRmb3JtL21v
Y2snLAogICAgICAgJy4uL3BsYXRmb3JtL25ldHdvcmsnLAogICAgICAgJy4uL3BsYXRmb3JtL25l
dHdvcmsvY2hyb21pdW0nLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDM3ZWFlYmY5MDc4ODdlMjEyODcw
ZTU1Y2EwY2YwMmM5NTg5NDg5YzAuLmY3NDI3ODJkNzNhNjc4MDFlNjQ1ZjY4OTg1OWZkMTI4ZWNj
NjkzYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTgxNyw4ICs4MTcsOCBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ29tcG9uZW50LmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5oJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyQ2xpZW50LmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL21vY2svRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL25ldHdvcmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmgnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IDdiNWFlNjcyMGMy
NzNkODVlODkwZTZjOWRiOTQzNzZjYmE4ZjNjNGYuLjE3MjE5Njc2NjY1NGUxNDAyMGM4N2NiZGI0
NGYyZjc2ZThhODczNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL21lZGlhc3RyZWFtL1Bl
ZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9QZWVyQ29u
bmVjdGlvbi5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgUGVlckNvbm5lY3Rpb246OlBlZXJDb25uZWN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc2UKICAg
ICAsIG1faW5pdGlhbE5lZ290aWF0aW9uVGltZXIodGhpcywgJlBlZXJDb25uZWN0aW9uOjppbml0
aWFsTmVnb3RpYXRpb25UaW1lckZpcmVkKQogICAgICwgbV9zdHJlYW1DaGFuZ2VUaW1lcih0aGlz
LCAmUGVlckNvbm5lY3Rpb246OnN0cmVhbUNoYW5nZVRpbWVyRmlyZWQpCiAgICAgLCBtX3JlYWR5
U3RhdGVDaGFuZ2VUaW1lcih0aGlzLCAmUGVlckNvbm5lY3Rpb246OnJlYWR5U3RhdGVDaGFuZ2VU
aW1lckZpcmVkKQotICAgICwgbV9wZWVySGFuZGxlcihQZWVySGFuZGxlcjo6Y3JlYXRlKHRoaXMs
IHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5n
KCkpKQorICAgICwgbV9wZWVySGFuZGxlcihQZWVySGFuZGxlcjo6Y3JlYXRlKHRoaXMsIHNlcnZl
ckNvbmZpZ3VyYXRpb24sIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkpKQogewogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uaAppbmRleCA3ZjRiMmY1YTY2
YWM0ZGZmODM2MGQ4MDU4ZWMxMDBmMGFjYzAxNmVkLi5lYjUwMGEwZDZjOTQwNzAzMWViMDUyZjE5
YThjNDg1Y2E0OTkzZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9Q
ZWVyQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL21lZGlhc3RyZWFtL1BlZXJDb25u
ZWN0aW9uLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgogI2lu
Y2x1ZGUgIk1lZGlhU3RyZWFtTGlzdC5oIgogI2luY2x1ZGUgIlBlZXJIYW5kbGVyLmgiCisjaW5j
bHVkZSAiUGVlckhhbmRsZXJDbGllbnQuaCIKICNpbmNsdWRlICJTaWduYWxpbmdDYWxsYmFjay5o
IgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTFjOGFhZGQ3ODBjYmQ1ZjdhZmQxZWIwYjk2OTRl
ZWFiYzRmMGQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJp
Y3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIlBlZXJIYW5kbGVyLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6IHJlbW92ZSB3aGVuIHJlYWwgaW1wbGVtZW50
YXRpb25zIGFyZSBhdmFpbGFibGUKLS8vIEVtcHR5IGltcGxlbWVudGF0aW9ucyBmb3IgcG9ydHMg
dGhhdCBidWlsZCB3aXRoIE1FRElBX1NUUkVBTSBlbmFibGVkIGJ5IGRlZmF1bHQuCi1QZWVySGFu
ZGxlcjo6UGVlckhhbmRsZXIoUGVlckhhbmRsZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmKQotewotfQotCi1QZWVySGFuZGxlcjo6flBlZXJIYW5kbGVyKCkKLXsKLX0KLQot
dm9pZCBQZWVySGFuZGxlcjo6cHJvZHVjZUluaXRpYWxPZmZlcihjb25zdCBNZWRpYVN0cmVhbURl
c2NyaXB0b3JWZWN0b3ImKQotewotfQotCi12b2lkIFBlZXJIYW5kbGVyOjpoYW5kbGVJbml0aWFs
T2ZmZXIoY29uc3QgU3RyaW5nJikKLXsKLX0KLQotdm9pZCBQZWVySGFuZGxlcjo6cHJvY2Vzc1NE
UChjb25zdCBTdHJpbmcmKQotewotfQotCi12b2lkIFBlZXJIYW5kbGVyOjpwcm9jZXNzUGVuZGlu
Z1N0cmVhbXMoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiwgY29uc3QgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yVmVjdG9yJikKLXsKLX0KLQotdm9pZCBQZWVySGFuZGxlcjo6c2VuZERh
dGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCkKLXsKLX0KLQotdm9pZCBQZWVy
SGFuZGxlcjo6c3RvcCgpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzYxNGVkZjliMTdjZmY2YjIyMjEwZDM1M2YyMmNhMjg4Yjg1M2U1Yi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9QZWVySGFuZGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3Nv
biBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIFBlZXJIYW5kbGVyX2gKLSNkZWZpbmUgUGVlckhhbmRsZXJfaAotCi0jaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVzY3JpcHRvci5o
IgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgUGVlckhhbmRsZXJDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgflBlZXJIYW5kbGVy
Q2xpZW50KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2RwR2VuZXJhdGVkKGNvbnN0IFN0cmluZyYgc2RwKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRhdGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQoY29uc3QgY2hh
ciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0
cmVhbUFkZGVkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZW1vdGVTdHJlYW1SZW1vdmVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopID0g
MDsKLX07Ci0KLWNsYXNzIFBlZXJIYW5kbGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQ
ZWVySGFuZGxlcik7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8UGVlckhhbmRsZXI+IGNyZWF0ZShQZWVySGFuZGxlckNsaWVudCog
Y2xpZW50LCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmluZyYg
dXNlcm5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBlZXJIYW5kbGVy
KGNsaWVudCwgc2VydmVyQ29uZmlndXJhdGlvbiwgdXNlcm5hbWUpKTsKLSAgICB9Ci0gICAgdmly
dHVhbCB+UGVlckhhbmRsZXIoKTsKLQotICAgIHZvaWQgcHJvZHVjZUluaXRpYWxPZmZlcihjb25z
dCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zKTsKLSAgICB2
b2lkIGhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmIHNkcCk7Ci0gICAgdm9pZCBwcm9j
ZXNzU0RQKGNvbnN0IFN0cmluZyYgc2RwKTsKLSAgICB2b2lkIHByb2Nlc3NQZW5kaW5nU3RyZWFt
cyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zLCBj
b25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsK
LSAgICB2b2lkIHNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgpOwotCi0gICAgdm9pZCBzdG9wKCk7Ci0KLXByaXZhdGU6Ci0gICAgUGVlckhhbmRs
ZXIoUGVlckhhbmRsZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24s
IGNvbnN0IFN0cmluZyYgdXNlcm5hbWUpOwotCi0gICAgUGVlckhhbmRsZXJDbGllbnQqIG1fY2xp
ZW50OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1F
RElBX1NUUkVBTSkKLQotI2VuZGlmIC8vIFBlZXJIYW5kbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlckNsaWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZkZTA4Mzg2MjM1Yjk2ZDc1YjNkMTVkOTVjYTQwNDAxZjU5NmEzNjgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxl
ckNsaWVudC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGVlckhhbmRsZXJDbGllbnRf
aAorI2RlZmluZSBQZWVySGFuZGxlckNsaWVudF9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVN0cmVhbURlc2Ny
aXB0b3I7CisKK2NsYXNzIFBlZXJIYW5kbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5QZWVySGFuZGxlckNsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGljZVByb2Nlc3Np
bmdDb21wbGV0ZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNkcEdlbmVyYXRlZChjb25zdCBT
dHJpbmcmIHNkcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkYXRhU3RyZWFtTWVzc2FnZVJlY2Vp
dmVkKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCByZW1vdGVTdHJlYW1BZGRlZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4p
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3RlU3RyZWFtUmVtb3ZlZChNZWRpYVN0cmVhbURl
c2NyaXB0b3IqKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gUGVlckhhbmRsZXJDbGllbnRfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0v
UGVlckhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9t
aXVtL1BlZXJIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGE2ZGI1YTY1YmQ4MjA5MTFlNWU5N2FjNTA2
OWRkYThjZmQ3YTEwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2Nocm9taXVtL1BlZXJIYW5kbGVyLmgKQEAgLTAsMCArMSw3MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBu
b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFBlZXJIYW5kbGVyX2gKKyNkZWZpbmUgUGVlckhhbmRsZXJfaAorCisjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
UGVlckhhbmRsZXJDbGllbnQ7CitjbGFzcyBQZWVySGFuZGxlckludGVybmFsOworY2xhc3MgU2Vj
dXJpdHlPcmlnaW47CisKK2NsYXNzIFBlZXJIYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQZWVySGFuZGxlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGVlckhhbmRsZXI+IGNyZWF0ZShQZWVySGFuZGxlckNs
aWVudCosIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4pOworICAgIH5QZWVySGFuZGxlcigpOworCisgICAgdm9pZCBwcm9kdWNlSW5p
dGlhbE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0
cmVhbXMpOworICAgIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYgc2RwKTsK
KyAgICB2b2lkIHByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBzZHApOworICAgIHZvaWQgcHJvY2Vz
c1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGlu
Z0FkZFN0cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ1Jl
bW92ZVN0cmVhbXMpOworICAgIHZvaWQgc2VuZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBsZW5ndGgpOworCisgICAgdm9pZCBzdG9wKCk7CisKK3ByaXZhdGU6Cisg
ICAgUGVlckhhbmRsZXIoUGVlckhhbmRsZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIHNlcnZlckNv
bmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKKworICAgIE93blB0cjxQ
ZWVySGFuZGxlckludGVybmFsPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gUGVlckhh
bmRsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1BlZXJIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9QZWVySGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjlmYTMzYjczMzUy
ZWFlZjU0NWU0MmQzNzZmODdjN2NkZmI1YzM2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9QZWVySGFuZGxlci5jcHAKQEAg
LTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorCisjaW5jbHVkZSAiUGVlckhhbmRsZXIuaCIKKworI2luY2x1ZGUgIlBlZXJI
YW5kbGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQYXNzT3duUHRyPFBlZXJIYW5kbGVyPiBQZWVySGFuZGxlcjo6Y3JlYXRl
KFBlZXJIYW5kbGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJh
dGlvbiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4pCit7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBQZWVySGFuZGxlcihjbGllbnQsIHNlcnZlckNvbmZpZ3VyYXRp
b24sIHNlY3VyaXR5T3JpZ2luKSk7Cit9CisKKy8vIEZJWE1FOiByZW1vdmUgd2hlbiByZWFsIGlt
cGxlbWVudGF0aW9ucyBhcmUgYXZhaWxhYmxlCisvLyBFbXB0eSBpbXBsZW1lbnRhdGlvbnMgZm9y
IHBvcnRzIHRoYXQgYnVpbGQgd2l0aCBNRURJQV9TVFJFQU0gZW5hYmxlZCBieSBkZWZhdWx0Lgor
UGVlckhhbmRsZXI6OlBlZXJIYW5kbGVyKFBlZXJIYW5kbGVyQ2xpZW50KiwgY29uc3QgU3RyaW5n
JiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pCit7Cit9CisKK1BlZXJIYW5kbGVyOjp+UGVl
ckhhbmRsZXIoKQoreworfQorCit2b2lkIFBlZXJIYW5kbGVyOjpwcm9kdWNlSW5pdGlhbE9mZmVy
KGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYpCit7Cit9CisKK3ZvaWQgUGVlckhh
bmRsZXI6OmhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmKQoreworfQorCit2b2lkIFBl
ZXJIYW5kbGVyOjpwcm9jZXNzU0RQKGNvbnN0IFN0cmluZyYpCit7Cit9CisKK3ZvaWQgUGVlckhh
bmRsZXI6OnByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JW
ZWN0b3ImLCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImKQoreworfQorCit2b2lk
IFBlZXJIYW5kbGVyOjpzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciosIHNpemVfdCkK
K3sKK30KKwordm9pZCBQZWVySGFuZGxlcjo6c3RvcCgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUGVlckhhbmRsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9QZWVySGFu
ZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM4ODRiOWJlODUxNzFjODY4ZWM1M2U1MzQ0M2FkNTM5M2M4ZjZh
N2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvUGVlckhhbmRsZXIuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0
cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFt
ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
UGVlckhhbmRsZXJfaAorI2RlZmluZSBQZWVySGFuZGxlcl9oCisKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQZWVySGFuZGxl
ckNsaWVudDsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOworCitjbGFzcyBQZWVySGFuZGxlciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGVlckhhbmRsZXIpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFBlZXJIYW5kbGVyPiBj
cmVhdGUoUGVlckhhbmRsZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRp
b24sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKKyAgICB+UGVlckhhbmRsZXIoKTsKKwor
ICAgIHZvaWQgcHJvZHVjZUluaXRpYWxPZmZlcihjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JW
ZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zKTsKKyAgICB2b2lkIGhhbmRsZUluaXRpYWxPZmZlcihj
b25zdCBTdHJpbmcmIHNkcCk7CisgICAgdm9pZCBwcm9jZXNzU0RQKGNvbnN0IFN0cmluZyYgc2Rw
KTsKKyAgICB2b2lkIHByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2Ny
aXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zLCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0
b3JWZWN0b3ImIHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKKyAgICB2b2lkIHNlbmREYXRhU3RyZWFt
TWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKworICAgIHZvaWQgc3Rv
cCgpOworCitwcml2YXRlOgorICAgIFBlZXJIYW5kbGVyKFBlZXJIYW5kbGVyQ2xpZW50KiwgY29u
c3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
Pik7CisKKyAgICBQZWVySGFuZGxlckNsaWVudCogbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYg
Ly8gUGVlckhhbmRsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IDFmNjBjNGRk
ZjgyZDYyMTQ2NDNmMjhhNTQzYzBhZDkyOWI1ZDkzYjAuLjYzODA2YWMwMDk4NTQxMTY3ZmNhMzRh
ZDVhY2Y4MmZjYTc1NTk5ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTkxLDYg
KzkxLDkgQEAKICAgICAgICAgICAgICAgICAnV0VCS0lUX0lNUExFTUVOVEFUSU9OPTEnLAogICAg
ICAgICAgICAgXSwKICAgICAgICAgICAgICdzb3VyY2VzJzogWworICAgICAgICAgICAgICAgICdi
cmlkZ2UvUGVlckhhbmRsZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnYnJpZGdlL1BlZXJIYW5k
bGVySW50ZXJuYWwuY3BwJywKKyAgICAgICAgICAgICAgICAnYnJpZGdlL1BlZXJIYW5kbGVySW50
ZXJuYWwuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9hbmRyb2lkL1dlYlNhbmRib3hTdXBw
b3J0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvYW5kcm9pZC9XZWJUaGVtZUVuZ2luZS5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL2d0ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5oJywK
QEAgLTIzMSw2ICsyMzQsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFQbGF5
ZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVBsYXllckFjdGlvbi5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlhUGxheWVyQ2xpZW50LmgnLAorICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViTWVudUl0ZW1JbmZvLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViTWVzc2FnZVBvcnRDaGFubmVsLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
TWVzc2FnZVBvcnRDaGFubmVsQ2xpZW50LmgnLApAQCAtMjUwLDYgKzI1NCw4IEBACiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplckNsaWVudC5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYlBhZ2VWaXNpYmlsaXR5U3RhdGUuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJQYXNzd29yZEZvcm1EYXRhLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViUGVlckhhbmRsZXIuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQZWVySGFuZGxl
ckNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlBlcmZvcm1hbmNlLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGVybWlzc2lvbkNsaWVudC5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYlBsdWdpbi5oJywKQEAgLTU1NSw2ICs1NjEsNyBAQAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViTWVkaWFFbGVtZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
Yk1lZGlhUGxheWVyQ2xpZW50SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvci5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTmFtZWROb2Rl
TWFwLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOZXR3b3JrU3RhdGVOb3RpZmllci5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTm9kZS5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvUGVlckhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9icmlkZ2UvUGVlckhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxZWRlZDIxZTY1
NmU4YTQyOTM0ZWM3N2JmOTYyYTM4ZWUxZmMwNjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVySGFuZGxlci5jcHAKQEAgLTAsMCArMSw4OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29u
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNp
bmNsdWRlICJQZWVySGFuZGxlci5oIgorCisjaW5jbHVkZSAiUGVlckhhbmRsZXJDbGllbnQuaCIK
KyNpbmNsdWRlICJQZWVySGFuZGxlckludGVybmFsLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPFBlZXJIYW5kbGVyPiBQ
ZWVySGFuZGxlcjo6Y3JlYXRlKFBlZXJIYW5kbGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmlu
ZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJp
dHlPcmlnaW4pCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQZWVySGFuZGxlcihjbGllbnQs
IHNlcnZlckNvbmZpZ3VyYXRpb24sIHNlY3VyaXR5T3JpZ2luKSk7Cit9CisKK1BlZXJIYW5kbGVy
OjpQZWVySGFuZGxlcihQZWVySGFuZGxlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHNl
cnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3Jp
Z2luKQorICAgIDogbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBQZWVySGFuZGxlckludGVybmFsKGNs
aWVudCwgc2VydmVyQ29uZmlndXJhdGlvbiwgc2VjdXJpdHlPcmlnaW4pKSkKK3sKK30KKworUGVl
ckhhbmRsZXI6On5QZWVySGFuZGxlcigpCit7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXI6OnByb2R1
Y2VJbml0aWFsT2ZmZXIoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5n
QWRkU3RyZWFtcykKK3sKKyAgICBtX3ByaXZhdGUtPnByb2R1Y2VJbml0aWFsT2ZmZXIocGVuZGlu
Z0FkZFN0cmVhbXMpOworfQorCit2b2lkIFBlZXJIYW5kbGVyOjpoYW5kbGVJbml0aWFsT2ZmZXIo
Y29uc3QgU3RyaW5nJiBzZHApCit7CisgICAgbV9wcml2YXRlLT5oYW5kbGVJbml0aWFsT2ZmZXIo
c2RwKTsKK30KKwordm9pZCBQZWVySGFuZGxlcjo6cHJvY2Vzc1NEUChjb25zdCBTdHJpbmcmIHNk
cCkKK3sKKyAgICBtX3ByaXZhdGUtPnByb2Nlc3NTRFAoc2RwKTsKK30KKwordm9pZCBQZWVySGFu
ZGxlcjo6cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZl
Y3RvciYgcGVuZGluZ0FkZFN0cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3Rv
ciYgcGVuZGluZ1JlbW92ZVN0cmVhbXMpCit7CisgICAgbV9wcml2YXRlLT5wcm9jZXNzUGVuZGlu
Z1N0cmVhbXMocGVuZGluZ0FkZFN0cmVhbXMsIHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKK30KKwor
dm9pZCBQZWVySGFuZGxlcjo6c2VuZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBsZW5ndGgpCit7CisgICAgbV9wcml2YXRlLT5zZW5kRGF0YVN0cmVhbU1lc3NhZ2Uo
ZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBQZWVySGFuZGxlcjo6c3RvcCgpCit7CisgICAgbV9w
cml2YXRlLT5zdG9wKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L2JyaWRnZS9QZWVySGFuZGxlckludGVybmFsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
YnJpZGdlL1BlZXJIYW5kbGVySW50ZXJuYWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA5Nzg3ZTA5NjFlNTli
OWQ2NGY5ZmIzNmFjNTc3MzRhNmZhMzE4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL2JyaWRnZS9QZWVySGFuZGxlckludGVybmFsLmNwcApAQCAtMCwwICsxLDEz
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAg
ICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVy
aWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAg
ICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
CisKKyNpbmNsdWRlICJQZWVySGFuZGxlckludGVybmFsLmgiCisKKyNpbmNsdWRlICJQZWVySGFu
ZGxlckNsaWVudC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiV2Vi
S2l0LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVkZSAiV2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViUGVlckhhbmRsZXIuaCIKKyNp
bmNsdWRlICJXZWJQZWVySGFuZGxlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGVlckhhbmRsZXJJbnRlcm5hbDo6UGVlckhh
bmRsZXJJbnRlcm5hbChQZWVySGFuZGxlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHNl
cnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3Jp
Z2luKQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworICAgIEFTU0VSVChtX2NsaWVudCk7Cisg
ICAgbV93ZWJIYW5kbGVyID0gYWRvcHRQdHIoV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KS0+Y3JlYXRlUGVlckhhbmRsZXIodGhpcykpOworICAgIG1fd2ViSGFuZGxlci0+aW5pdGlhbGl6
ZShzZXJ2ZXJDb25maWd1cmF0aW9uLCBzZWN1cml0eU9yaWdpbik7Cit9CisKK1BlZXJIYW5kbGVy
SW50ZXJuYWw6On5QZWVySGFuZGxlckludGVybmFsKCkKK3sKK30KKwordm9pZCBQZWVySGFuZGxl
ckludGVybmFsOjpjb3B5SXRlbXMoV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJNZWRpYVN0
cmVhbURlc2NyaXB0b3I+JiByZXN1bHQsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3Rv
ciYgc3RyZWFtcykKK3sKKyAgICBzaXplX3QgbnVtYmVyT2ZTdHJlYW1zID0gc3RyZWFtcy5zaXpl
KCk7CisgICAgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0
b3I+IHdlYlN0cmVhbXMobnVtYmVyT2ZTdHJlYW1zKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMCA7
IGkgPCBudW1iZXJPZlN0cmVhbXMgOyArK2kpCisgICAgICAgIHdlYlN0cmVhbXNbaV0gPSBzdHJl
YW1zW2ldOworICAgIHJlc3VsdC5zd2FwKHdlYlN0cmVhbXMpOworfQorCit2b2lkIFBlZXJIYW5k
bGVySW50ZXJuYWw6OnByb2R1Y2VJbml0aWFsT2ZmZXIoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlw
dG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcykKK3sKKyAgICBXZWJLaXQ6OldlYlZlY3RvcjxX
ZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gc3RyZWFtc1RvQWRkOworICAgIGNvcHlJ
dGVtcyhzdHJlYW1zVG9BZGQsIHBlbmRpbmdBZGRTdHJlYW1zKTsKKyAgICBtX3dlYkhhbmRsZXIt
PnByb2R1Y2VJbml0aWFsT2ZmZXIoc3RyZWFtc1RvQWRkKTsKK30KKwordm9pZCBQZWVySGFuZGxl
ckludGVybmFsOjpoYW5kbGVJbml0aWFsT2ZmZXIoY29uc3QgU3RyaW5nJiBzZHApCit7CisgICAg
bV93ZWJIYW5kbGVyLT5oYW5kbGVJbml0aWFsT2ZmZXIoc2RwKTsKK30KKwordm9pZCBQZWVySGFu
ZGxlckludGVybmFsOjpwcm9jZXNzU0RQKGNvbnN0IFN0cmluZyYgc2RwKQoreworICAgIG1fd2Vi
SGFuZGxlci0+cHJvY2Vzc1NEUChzZHApOworfQorCit2b2lkIFBlZXJIYW5kbGVySW50ZXJuYWw6
OnByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3Im
IHBlbmRpbmdBZGRTdHJlYW1zLCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBl
bmRpbmdSZW1vdmVTdHJlYW1zKQoreworICAgIFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1zVG9BZGQ7CisgICAgY29weUl0ZW1zKHN0cmVh
bXNUb0FkZCwgcGVuZGluZ0FkZFN0cmVhbXMpOworICAgIFdlYktpdDo6V2ViVmVjdG9yPFdlYktp
dDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1zVG9SZW1vdmU7CisgICAgY29weUl0
ZW1zKHN0cmVhbXNUb0FkZCwgcGVuZGluZ1JlbW92ZVN0cmVhbXMpOworICAgIG1fd2ViSGFuZGxl
ci0+cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKHN0cmVhbXNUb0FkZCwgc3RyZWFtc1RvUmVtb3ZlKTsK
K30KKwordm9pZCBQZWVySGFuZGxlckludGVybmFsOjpzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29u
c3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBtX3dlYkhhbmRsZXItPnNlbmRE
YXRhU3RyZWFtTWVzc2FnZShkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFBlZXJIYW5kbGVySW50
ZXJuYWw6OnN0b3AoKQoreworICAgIG1fd2ViSGFuZGxlci0+c3RvcCgpOworfQorCit2b2lkIFBl
ZXJIYW5kbGVySW50ZXJuYWw6OmljZVByb2Nlc3NpbmdDb21wbGV0ZWQoKQoreworICAgIG1fY2xp
ZW50LT5pY2VQcm9jZXNzaW5nQ29tcGxldGVkKCk7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXJJbnRl
cm5hbDo6c2RwR2VuZXJhdGVkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBzZHApCit7CisgICAg
bV9jbGllbnQtPnNkcEdlbmVyYXRlZChzZHApOworfQorCit2b2lkIFBlZXJIYW5kbGVySW50ZXJu
YWw6OmRhdGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxl
bmd0aCkKK3sKKyAgICBtX2NsaWVudC0+ZGF0YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZChkYXRhLCBs
ZW5ndGgpOworfQorCit2b2lkIFBlZXJIYW5kbGVySW50ZXJuYWw6OnJlbW90ZVN0cmVhbUFkZGVk
KGNvbnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJiB3ZWJNZWRpYVN0cmVhbURl
c2NyaXB0b3IpCit7CisgICAgbV9jbGllbnQtPnJlbW90ZVN0cmVhbUFkZGVkKHdlYk1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXJJbnRlcm5hbDo6cmVtb3RlU3Ry
ZWFtUmVtb3ZlZChjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYgd2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yKQoreworICAgIG1fY2xpZW50LT5yZW1vdGVTdHJlYW1SZW1vdmVk
KHdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL2JyaWRnZS9QZWVySGFuZGxlckludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL2JyaWRnZS9QZWVySGFuZGxlckludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmNiODk0
NzlmMmYzMTI1NGU3YzBjYWFjMmVjYjk0YTRkNmI5MzA3MwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL1BlZXJIYW5kbGVySW50ZXJuYWwuaApAQCAtMCww
ICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUg
b2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMK
KyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBQZWVySGFuZGxlckludGVybmFsX2gKKyNkZWZpbmUgUGVl
ckhhbmRsZXJJbnRlcm5hbF9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVk
ZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViUGVlckhhbmRsZXJDbGll
bnQuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CitjbGFzcyBXZWJQZWVySGFuZGxlcjsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsK
K30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQZWVySGFuZGxlckNsaWVudDsKK2Ns
YXNzIFNlY3VyaXR5T3JpZ2luOworCitjbGFzcyBQZWVySGFuZGxlckludGVybmFsIDogcHVibGlj
IFdlYktpdDo6V2ViUGVlckhhbmRsZXJDbGllbnQgeworcHVibGljOgorICAgIFBlZXJIYW5kbGVy
SW50ZXJuYWwoUGVlckhhbmRsZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3Vy
YXRpb24sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKKyAgICB+UGVlckhhbmRsZXJJbnRl
cm5hbCgpOworCisgICAgdmlydHVhbCB2b2lkIHByb2R1Y2VJbml0aWFsT2ZmZXIoY29uc3QgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcyk7CisgICAgdmlydHVh
bCB2b2lkIGhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmIHNkcCk7CisgICAgdmlydHVh
bCB2b2lkIHByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBzZHApOworICAgIHZpcnR1YWwgdm9pZCBw
cm9jZXNzUGVuZGluZ1N0cmVhbXMoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBw
ZW5kaW5nQWRkU3RyZWFtcywgY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5k
aW5nUmVtb3ZlU3RyZWFtcyk7CisgICAgdmlydHVhbCB2b2lkIHNlbmREYXRhU3RyZWFtTWVzc2Fn
ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Rv
cCgpOworCisgICAgLy8gV2ViS2l0OjpXZWJQZWVySGFuZGxlckNsaWVudCBpbXBsZW1lbnRhdGlv
bi4KKyAgICB2aXJ0dWFsIHZvaWQgaWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpOworICAgIHZpcnR1
YWwgdm9pZCBzZHBHZW5lcmF0ZWQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHNkcCk7CisgICAg
dmlydHVhbCB2b2lkIGRhdGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IGxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbUFkZGVkKGNvbnN0
IFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJik7CisgICAgdmlydHVhbCB2b2lkIHJl
bW90ZVN0cmVhbVJlbW92ZWQoY29uc3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3Im
KTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBjb3B5SXRlbXMoV2ViS2l0OjpXZWJWZWN0
b3I8V2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I+JiByZXN1bHQsIGNvbnN0IE1lZGlh
U3RyZWFtRGVzY3JpcHRvclZlY3RvciYgc3RyZWFtcyk7CisKKyAgICBPd25QdHI8V2ViS2l0OjpX
ZWJQZWVySGFuZGxlcj4gbV93ZWJIYW5kbGVyOworICAgIFBlZXJIYW5kbGVyQ2xpZW50KiBtX2Ns
aWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShN
RURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBQZWVySGFuZGxlckludGVybmFsX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgK
aW5kZXggNGVhYmIzYmE0NzAzNTNlNjZhN2I0NWEzM2ZhM2UyMzA3YzhjY2VlMC4uNTU5YWEyYzhh
YWVjODBmNjZmZDUxYTIwNmE3MzZkNmI2Nzk3ZjhlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgKQEAgLTYxLDYgKzYx
LDggQEAgY2xhc3MgV2ViSURCRmFjdG9yeTsKIGNsYXNzIFdlYklEQktleTsKIGNsYXNzIFdlYk1l
c3NhZ2VQb3J0Q2hhbm5lbDsKIGNsYXNzIFdlYk1pbWVSZWdpc3RyeTsKK2NsYXNzIFdlYlBlZXJI
YW5kbGVyOworY2xhc3MgV2ViUGVlckhhbmRsZXJDbGllbnQ7CiBjbGFzcyBXZWJQbHVnaW5MaXN0
QnVpbGRlcjsKIGNsYXNzIFdlYlNhbmRib3hTdXBwb3J0OwogY2xhc3MgV2ViU2hhcmVkV29ya2Vy
UmVwb3NpdG9yeTsKQEAgLTMyMSw2ICszMjMsMTAgQEAgcHVibGljOgogICAgIC8vIE11c3QgcmV0
dXJuIG5vbi1udWxsLgogICAgIHZpcnR1YWwgV2ViRmlsZVN5c3RlbSogZmlsZVN5c3RlbSgpIHsg
cmV0dXJuIDA7IH0KIAorICAgIC8vIFdlYlJUQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICB2aXJ0dWFsIFdlYlBlZXJIYW5k
bGVyKiBjcmVhdGVQZWVySGFuZGxlcihXZWJQZWVySGFuZGxlckNsaWVudCopIHsgcmV0dXJuIDA7
IH0KKwogcHJvdGVjdGVkOgogICAgIH5XZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKSB7IH0KIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbURl
c2NyaXB0b3IuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFt
RGVzY3JpcHRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMGQ2NGRjZmUyN2U5ZmIzNDFjYjc0MjBhZDRkYzVm
MGJlZDE3MmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcl9oCisjZGVmaW5lIFdlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvcl9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJX
ZWJOb25Db3B5YWJsZS5oIgorI2luY2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yIDogcHVibGljIFdlYk5v
bkNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IoKSB7IH0K
KyAgICB+V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yKCkgeyByZXNldCgpOyB9CisKKyAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZSgpOyAvLyBGSVhNRTogQWRkIHBhcmFtcy4KKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpdmF0ZS5pc051bGwoKTsgfQorCisgICAgLy8gRklYTUU6IEFkZCBmdW5jdGlvbnMu
CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJNZWRpYVN0cmVhbURlc2NyaXB0
b3IoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcj4m
KTsKKyAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNj
cmlwdG9yPigpIGNvbnN0OworICAgIG9wZXJhdG9yIFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3Jp
cHRvciooKSBjb25zdDsKKyAgICBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImIG9wZXJhdG9yPShj
b25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiYpOwor
I2VuZGlmCisKK3ByaXZhdGU6CisgICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpNZWRpYVN0cmVh
bURlc2NyaXB0b3I+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBlZXJIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJQZWVySGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhYzUxZGZmN2E3ZGU2
ZjYyYjJlNzY1MTkwMDVmMmFjNzAyYjA2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQZWVySGFuZGxlci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViUGVlckhhbmRsZXJfaAorI2RlZmluZSBXZWJQZWVySGFu
ZGxlcl9oCisKKyNpbmNsdWRlICJXZWJQZWVySGFuZGxlci5oIgorI2luY2x1ZGUgIldlYlNlY3Vy
aXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVmVjdG9y
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0
b3I7CitjbGFzcyBXZWJQZWVySGFuZGxlckNsaWVudDsKKworY2xhc3MgV2ViUGVlckhhbmRsZXIg
eworcHVibGljOgorICAgIHZpcnR1YWwgfldlYlBlZXJIYW5kbGVyKCkgeyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBXZWJTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24s
IGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHByb2R1
Y2VJbml0aWFsT2ZmZXIoY29uc3QgV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcj4m
IHBlbmRpbmdBZGRTdHJlYW1zKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUluaXRpYWxP
ZmZlcihjb25zdCBXZWJTdHJpbmcmIHNkcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNz
U0RQKGNvbnN0IFdlYlN0cmluZyYgc2RwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NQ
ZW5kaW5nU3RyZWFtcyhjb25zdCBXZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yPiYg
cGVuZGluZ0FkZFN0cmVhbXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbURlc2NyaXB0
b3I+JiBwZW5kaW5nUmVtb3ZlU3RyZWFtcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZW5kRGF0
YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFdlYlBlZXJIYW5kbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlBlZXJIYW5kbGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJQZWVySGFuZGxlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwMDU3NWY0
NWIxMTFlMTIwZDFkNmU3Y2M0NDgwNTMxMWFkOTM4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQZWVySGFuZGxlckNsaWVudC5oCkBAIC0wLDAg
KzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGVlckhhbmRsZXJDbGllbnRfaAor
I2RlZmluZSBXZWJQZWVySGFuZGxlckNsaWVudF9oCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I7CitjbGFzcyBXZWJTdHJpbmc7CisKK2NsYXNz
IFdlYlBlZXJIYW5kbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJQZWVySGFu
ZGxlckNsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGljZVByb2Nlc3NpbmdDb21wbGV0
ZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNkcEdlbmVyYXRlZChjb25zdCBXZWJTdHJpbmcm
IHNkcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkYXRhU3RyZWFtTWVzc2FnZVJlY2VpdmVkKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVt
b3RlU3RyZWFtQWRkZWQoY29uc3QgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdGVTdHJlYW1SZW1vdmVkKGNvbnN0IFdlYk1lZGlhU3RyZWFtRGVz
Y3JpcHRvciYpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
V2ViUGVlckhhbmRsZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDM2NmNkZjVm
N2ExNmViYjAzMmU3OWJkNTE1MzM0MTNkOTE1ZmIxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKQEAgLTAs
MCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5o
IgorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViU3Ry
aW5nLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6
OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6
TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiYgbWVkaWFTdHJlYW1EZXNjcmlwdG9yKQorICAgIDogbV9w
cml2YXRlKG1lZGlhU3RyZWFtRGVzY3JpcHRvcikKK3sKK30KKwordm9pZCBXZWJNZWRpYVN0cmVh
bURlc2NyaXB0b3I6OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoKTsKK30KKworV2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yJiBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6Om9wZXJhdG9y
PShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiYg
bWVkaWFTdHJlYW1EZXNjcmlwdG9yKQoreworICAgIG1fcHJpdmF0ZSA9IG1lZGlhU3RyZWFtRGVz
Y3JpcHRvcjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRv
cj4oKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7Cit9CisKK1dlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvcjo6b3BlcmF0b3IgV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9y
KigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112835</attachid>
            <date>2011-10-28 02:16:55 -0700</date>
            <delta_ts>2011-10-28 07:56:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58550-20111028111653.patch</filename>
            <type>text/plain</type>
            <size>55122</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg3MDQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2ODljZGZkODY5NmIxYThj
YmZhYmMwMDhiMjQxYjYzZWE4NjNjOGFhLi5lZDdkZjA3Y2QyYTNkYWZkZmNlYjRkMTQyY2JlZDMw
YzlhMzMzMjAxIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMTAtMjggIFRvbW15
IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBN
ZWRpYSBTdHJlYW0gQVBJOiBhZGQgdGhlIENocm9taXVtIFdlYktpdCBpbnRlcmZhY2VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODU1MAorCisgICAg
ICAgIENoYW5nZXMgdGhlIFBlZXJIYW5kbGVyIHBsYXRmb3JtIGludGVyZmFjZSBzbyB0aGF0IGVt
YmVkZGVycyBjYW4gbW9yZSBlYXNpbHkgdXNlIGl0LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OlBlZXJDb25uZWN0aW9u
KToKKyAgICAgICAgKiBtZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5oOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyQ2xpZW50Lmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OlBlZXJIYW5kbGVyQ2xpZW50Ojp+UGVlckhhbmRsZXJDbGllbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1BlZXJIYW5kbGVyLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmguCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJIYW5kbGVyLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRs
ZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpQZWVySGFuZGxlcjo6UGVlckhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UGVlckhhbmRsZXI6On5QZWVySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxl
cjo6cHJvZHVjZUluaXRpYWxPZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6
aGFuZGxlSW5pdGlhbE9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpwcm9j
ZXNzU0RQKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpwcm9jZXNzUGVuZGluZ1N0
cmVhbXMpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OnNlbmREYXRhU3RyZWFtTWVz
c2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6c3RvcCk6CisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJIYW5kbGVyLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmguCisKKyAg
ICAgICAgVGVzdHMgZm9yIHRoZSBNZWRpYSBTdHJlYW0gQVBJIHdpbGwgYmUgcHJvdmlkZWQgYnkg
dGhlIGJ1ZyA1NjU4NywgcGVuZGluZyBlbm91Z2ggbGFuZGVkIGNvZGUuCisKIDIwMTEtMTAtMjcg
IEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZWZhY3RvciBtYWtl
X2V2ZW50X2ZhY3RvcnkucGwgdG8gdXNlIEluRmlsZXNDb21waWxlci5wbQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCA1OWNjNDA5N2I2Y2VlYTJkMTYzZjA2NzA5NjM3ZGVmNGJmNGY2ZjRk
Li5kMzNkYTkxZWUyM2I2YmJkNzAzMzU1NTcwNDAwM2UyYTdiMjY2ZWUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDExLTEwLTI4ICBUb21teSBXaWRlbmZs
eWNodCAgPHRvbW15d0Bnb29nbGUuY29tPgorCisgICAgICAgIFtDaHJvbWl1bV0gTWVkaWEgU3Ry
ZWFtIEFQSTogYWRkIHRoZSBDaHJvbWl1bSBXZWJLaXQgaW50ZXJmYWNlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg1NTAKKworICAgICAgICBBZGRz
IHRoZSBicmlkZ2luZyBjb2RlICsgdGhlIG1pbmltdW0gYW1vdW50IG9mIFdlYiogc3VwcG9ydGlu
ZyBjb2RlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBicmlkZ2UvUGVlckhhbmRsZXIuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpQZWVySGFuZGxlcjo6UGVlckhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhh
bmRsZXI6On5QZWVySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6cHJv
ZHVjZUluaXRpYWxPZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6aGFuZGxl
SW5pdGlhbE9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpwcm9jZXNzU0RQ
KToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpwcm9jZXNzUGVuZGluZ1N0cmVhbXMp
OgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OnNlbmREYXRhU3RyZWFtTWVzc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6c3RvcCk6CisgICAgICAgICogYnJpZGdl
L1BlZXJIYW5kbGVySW50ZXJuYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBlZXJI
YW5kbGVySW50ZXJuYWw6OlBlZXJIYW5kbGVySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
UGVlckhhbmRsZXJJbnRlcm5hbDo6flBlZXJIYW5kbGVySW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29weUl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVySW50ZXJuYWw6
OnByb2R1Y2VJbml0aWFsT2ZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXJJbnRl
cm5hbDo6aGFuZGxlSW5pdGlhbE9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVy
SW50ZXJuYWw6OnByb2Nlc3NTRFApOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXJJbnRl
cm5hbDo6cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5k
bGVySW50ZXJuYWw6OnNlbmREYXRhU3RyZWFtTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZWVySGFuZGxlckludGVybmFsOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVy
SW50ZXJuYWw6OmljZVByb2Nlc3NpbmdDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ckhhbmRsZXJJbnRlcm5hbDo6c2RwR2VuZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJI
YW5kbGVySW50ZXJuYWw6OmRhdGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGVlckhhbmRsZXJJbnRlcm5hbDo6cmVtb3RlU3RyZWFtQWRkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UGVlckhhbmRsZXJJbnRlcm5hbDo6cmVtb3RlU3RyZWFtUmVtb3ZlZCk6CisgICAg
ICAgICogYnJpZGdlL1BlZXJIYW5kbGVySW50ZXJuYWwuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmguCisgICAgICAgICogcHVi
bGljL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRQbGF0
Zm9ybVN1cHBvcnQ6OmNyZWF0ZVBlZXJDb25uZWN0aW9uSGFuZGxlcik6CisgICAgICAgICogcHVi
bGljL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6On5XZWJNZWRpYVN0cmVhbURl
c2NyaXB0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6Omlz
TnVsbCk6CisgICAgICAgICogcHVibGljL1dlYlBlZXJDb25uZWN0aW9uSGFuZGxlci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyOjp+V2ViUGVlckNv
bm5lY3Rpb25IYW5kbGVyKToKKyAgICAgICAgKiBwdWJsaWMvV2ViUGVlckNvbm5lY3Rpb25IYW5k
bGVyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQZWVyQ29ubmVjdGlvbkhh
bmRsZXJDbGllbnQ6On5XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQpOgorICAgICAgICAq
IHNyYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnJlc2V0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpvcGVyYXRvcj0pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6Om9wZXJhdG9yIFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+KToKKyAgICAgICAgKFdlYktpdDo6
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpvcGVyYXRvciBXZWJDb3JlOjpNZWRpYVN0cmVhbURl
c2NyaXB0b3IqKToKKworICAgICAgICBUZXN0cyBmb3IgdGhlIE1lZGlhIFN0cmVhbSBBUEkgd2ls
bCBiZSBwcm92aWRlZCBieSB0aGUgYnVnIDU2NTg3LCBwZW5kaW5nIGVub3VnaCBsYW5kZWQgY29k
ZS4KKwogMjAxMS0xMC0yNiAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZnJhbWUgcmF0ZSBjb250cm9sIHBvcnRpb25zIG9mIEND
U2NoZWR1bGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDM1ZTYzMGI5NDVhZjYxZWFiMzhhNTJi
MWQ2NjQxM2NkNjk3MzkwYzEuLjA4NGFjMDhhMjBkMjg1ZDYwMGE2YWUyMTY2NjcxOWUzN2RkNmIw
MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC02MSw2ICs2MSw3IEBAIHdlYmNvcmVfY3BwZmxh
Z3MgKz0gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3BuZyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYiBc
CiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0gXAorCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lciBc
CiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jayBcCiAJLUkkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yayBcCiAJLUkkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3FsIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4
IDc2YjA0YmQ5YjRlYmQ1YmI3NDhmYjQ1OWYxZmU5NmI4ZTdlM2I4MWEuLmFhN2FjZWQ0NDZiYWMw
YWM1NDdlZWE4ZGM5YzEzMzEyZDc1MDFkNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtMjc0MSw4ICsyNzQxLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbXBvbmVudC5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2Uu
aCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUGVlckhhbmRs
ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UGVlckhhbmRsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9EZXZpY2VPcmll
bnRhdGlvbkNsaWVudE1vY2suY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0Rl
dmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL0dlb2xvY2F0aW9uQ2xpZW50TW9jay5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9X
ZWJDb3JlLmd5cAppbmRleCAxMTA1ZWI5MzQwOWEzN2MxNDc2NTIyN2RjMjM5OTczYTJmMDNjOGEy
Li5mNTAyZTMwMjhmNTg1YWZkODE0NTU5NTk0ZmUxYTljYTZkNmFhMGVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtMTk0LDYgKzE5NCw3IEBACiAgICAgICAnLi4v
cGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYScsCiAgICAgICAnLi4vcGxhdGZvcm0vbGV2ZWxk
YicsCiAgICAgICAnLi4vcGxhdGZvcm0vbWVkaWFzdHJlYW0nLAorICAgICAgJy4uL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2Nocm9taXVtJywKICAgICAgICcuLi9wbGF0Zm9ybS9tb2NrJywKICAgICAg
ICcuLi9wbGF0Zm9ybS9uZXR3b3JrJywKICAgICAgICcuLi9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9t
aXVtJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA5MGZkMjM2OWZiZjA4ODczNzkwYmNiNzRmZjg5YTJh
ZDQzM2Q4NGQ1Li5jNTVkMTJlMzVjMmRhYTE0ZTZlZWE4OWQ1ZjgxZTMxZWJkNmMwOGQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC04MTcsOCArODE3LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbXBvbmVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaCcsCi0gICAgICAgICAgICAncGxh
dGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9QZWVySGFuZGxlckNsaWVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tb2Nr
L0RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9t
b2NrL0dlb2xvY2F0aW9uQ2xpZW50TW9jay5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3
b3JrL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL21l
ZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uLmNwcAppbmRleCA3YjVhZTY3MjBjMjczZDg1ZTg5MGU2
YzlkYjk0Mzc2Y2JhOGYzYzRmLi4xNzIxOTY3NjY2NTRlMTQwMjBjODdjYmRiNDRmMmY3NmU4YTg3
MzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uY3Bw
CkBAIC01NSw3ICs1NSw3IEBAIFBlZXJDb25uZWN0aW9uOjpQZWVyQ29ubmVjdGlvbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHNlCiAgICAgLCBtX2luaXRp
YWxOZWdvdGlhdGlvblRpbWVyKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6aW5pdGlhbE5lZ290aWF0
aW9uVGltZXJGaXJlZCkKICAgICAsIG1fc3RyZWFtQ2hhbmdlVGltZXIodGhpcywgJlBlZXJDb25u
ZWN0aW9uOjpzdHJlYW1DaGFuZ2VUaW1lckZpcmVkKQogICAgICwgbV9yZWFkeVN0YXRlQ2hhbmdl
VGltZXIodGhpcywgJlBlZXJDb25uZWN0aW9uOjpyZWFkeVN0YXRlQ2hhbmdlVGltZXJGaXJlZCkK
LSAgICAsIG1fcGVlckhhbmRsZXIoUGVlckhhbmRsZXI6OmNyZWF0ZSh0aGlzLCBzZXJ2ZXJDb25m
aWd1cmF0aW9uLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKSkKKyAgICAs
IG1fcGVlckhhbmRsZXIoUGVlckhhbmRsZXI6OmNyZWF0ZSh0aGlzLCBzZXJ2ZXJDb25maWd1cmF0
aW9uLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uLmgKaW5kZXggN2Y0YjJmNWE2NmFjNGRmZjgzNjBk
ODA1OGVjMTAwZjBhY2MwMTZlZC4uZTg3ZmQzN2FmMWI4MzQ4ZGMyN2I4NzNmMWRmZTFkZWRmYmMx
ZTI1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5oCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKICNpbmNsdWRlICJNZWRp
YVN0cmVhbUxpc3QuaCIKICNpbmNsdWRlICJQZWVySGFuZGxlci5oIgorI2luY2x1ZGUgIlBlZXJI
YW5kbGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiU2lnbmFsaW5nQ2FsbGJhY2suaCIKICNpbmNsdWRl
ICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTQxLDYgKzQyLDE1IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gTm90ZToKKy8vIFNEUCBzdGFuZHMgZm9yIFNlc3Np
b24gRGVzY3JpcHRpb24gUHJvdG9jb2wsIHdoaWNoIGlzIGludGVuZGVkIGZvciBkZXNjcmliaW5n
CisvLyBtdWx0aW1lZGlhIHNlc3Npb25zIGZvciB0aGUgcHVycG9zZXMgb2Ygc2Vzc2lvbiBhbm5v
dW5jZW1lbnQsIHNlc3Npb24KKy8vIGludml0YXRpb24sIGFuZCBvdGhlciBmb3JtcyBvZiBtdWx0
aW1lZGlhIHNlc3Npb24gaW5pdGlhdGlvbi4KKy8vCisvLyBNb3JlIGluZm9ybWF0aW9uIGNhbiBi
ZSBmb3VuZCBoZXJlOgorLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDU2NgorLy8g
aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TZXNzaW9uX0Rlc2NyaXB0aW9uX1Byb3RvY29s
CisKIGNsYXNzIFBlZXJDb25uZWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8UGVlckNvbm5lY3Rp
b24+LCBwdWJsaWMgUGVlckhhbmRsZXJDbGllbnQsIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGlj
IEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGVlckNv
bm5lY3Rpb24+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBz
ZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MWM4YWFkZDc4MGNiZDVmN2FmZDFlYjBi
OTY5NGVlYWJjNGYwZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgot
ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiUGVlckhhbmRsZXIuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTogcmVtb3ZlIHdoZW4gcmVhbCBpbXBs
ZW1lbnRhdGlvbnMgYXJlIGF2YWlsYWJsZQotLy8gRW1wdHkgaW1wbGVtZW50YXRpb25zIGZvciBw
b3J0cyB0aGF0IGJ1aWxkIHdpdGggTUVESUFfU1RSRUFNIGVuYWJsZWQgYnkgZGVmYXVsdC4KLVBl
ZXJIYW5kbGVyOjpQZWVySGFuZGxlcihQZWVySGFuZGxlckNsaWVudCosIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLVBlZXJIYW5kbGVyOjp+UGVlckhhbmRsZXIoKQotewot
fQotCi12b2lkIFBlZXJIYW5kbGVyOjpwcm9kdWNlSW5pdGlhbE9mZmVyKGNvbnN0IE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvclZlY3RvciYpCi17Ci19Ci0KLXZvaWQgUGVlckhhbmRsZXI6OmhhbmRsZUlu
aXRpYWxPZmZlcihjb25zdCBTdHJpbmcmKQotewotfQotCi12b2lkIFBlZXJIYW5kbGVyOjpwcm9j
ZXNzU0RQKGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgUGVlckhhbmRsZXI6OnByb2Nlc3NQ
ZW5kaW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImLCBjb25zdCBN
ZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImKQotewotfQotCi12b2lkIFBlZXJIYW5kbGVyOjpz
ZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciosIHVuc2lnbmVkKQotewotfQotCi12b2lk
IFBlZXJIYW5kbGVyOjpzdG9wKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjNjE0ZWRmOWIxN2NmZjZiMjIyMTBkMzUzZjIyY2EyODhiODUzZTViLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAg
ICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVy
aWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAg
ICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgUGVlckhhbmRsZXJfaAotI2RlZmluZSBQZWVySGFuZGxlcl9oCi0K
LSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlw
dG9yLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBQZWVySGFuZGxlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UGVlckhh
bmRsZXJDbGllbnQoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBpY2VQcm9jZXNzaW5nQ29tcGxl
dGVkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZHBHZW5lcmF0ZWQoY29uc3QgU3RyaW5nJiBz
ZHApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGF0YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZChjb25z
dCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVt
b3RlU3RyZWFtQWRkZWQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbVJlbW92ZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9y
KikgPSAwOwotfTsKLQotY2xhc3MgUGVlckhhbmRsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFBlZXJIYW5kbGVyKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxQZWVySGFuZGxlcj4gY3JlYXRlKFBlZXJIYW5kbGVyQ2xp
ZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29uc3QgU3Ry
aW5nJiB1c2VybmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGVlckhh
bmRsZXIoY2xpZW50LCBzZXJ2ZXJDb25maWd1cmF0aW9uLCB1c2VybmFtZSkpOwotICAgIH0KLSAg
ICB2aXJ0dWFsIH5QZWVySGFuZGxlcigpOwotCi0gICAgdm9pZCBwcm9kdWNlSW5pdGlhbE9mZmVy
KGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMpOwot
ICAgIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYgc2RwKTsKLSAgICB2b2lk
IHByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBzZHApOwotICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdT
dHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVh
bXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ1JlbW92ZVN0cmVh
bXMpOwotICAgIHZvaWQgc2VuZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB2b2lkIHN0b3AoKTsKLQotcHJpdmF0ZToKLSAgICBQZWVy
SGFuZGxlcihQZWVySGFuZGxlckNsaWVudCosIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJh
dGlvbiwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSk7Ci0KLSAgICBQZWVySGFuZGxlckNsaWVudCog
bV9jbGllbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKQotCi0jZW5kaWYgLy8gUGVlckhhbmRsZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXJDbGllbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyQ2xpZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmRlMDgzODYyMzViOTZkNzViM2QxNWQ5NWNhNDA0MDFmNTk2YTM2OAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJI
YW5kbGVyQ2xpZW50LmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQZWVySGFuZGxlckNs
aWVudF9oCisjZGVmaW5lIFBlZXJIYW5kbGVyQ2xpZW50X2gKKworI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhU3RyZWFt
RGVzY3JpcHRvcjsKKworY2xhc3MgUGVlckhhbmRsZXJDbGllbnQgeworcHVibGljOgorICAgIHZp
cnR1YWwgflBlZXJIYW5kbGVyQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaWNlUHJv
Y2Vzc2luZ0NvbXBsZXRlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2RwR2VuZXJhdGVkKGNv
bnN0IFN0cmluZyYgc2RwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRhdGFTdHJlYW1NZXNzYWdl
UmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlbW90ZVN0cmVhbUFkZGVkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlw
dG9yPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdGVTdHJlYW1SZW1vdmVkKE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvciopID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBQZWVySGFuZGxlckNsaWVu
dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJv
bWl1bS9QZWVySGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Y2hyb21pdW0vUGVlckhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYTZkYjVhNjViZDgyMDkxMWU1ZTk3
YWM1MDY5ZGRhOGNmZDdhMTAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vUGVlckhhbmRsZXIuaApAQCAtMCwwICsxLDcyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNz
c29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgUGVlckhhbmRsZXJfaAorI2RlZmluZSBQZWVySGFuZGxlcl9oCisKKyNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9y
LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBQZWVySGFuZGxlckNsaWVudDsKK2NsYXNzIFBlZXJIYW5kbGVySW50ZXJuYWw7CitjbGFz
cyBTZWN1cml0eU9yaWdpbjsKKworY2xhc3MgUGVlckhhbmRsZXIgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFBlZXJIYW5kbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxQZWVySGFuZGxlcj4gY3JlYXRlKFBlZXJIYW5k
bGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPik7CisgICAgflBlZXJIYW5kbGVyKCk7CisKKyAgICB2b2lkIHByb2R1
Y2VJbml0aWFsT2ZmZXIoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5n
QWRkU3RyZWFtcyk7CisgICAgdm9pZCBoYW5kbGVJbml0aWFsT2ZmZXIoY29uc3QgU3RyaW5nJiBz
ZHApOworICAgIHZvaWQgcHJvY2Vzc1NEUChjb25zdCBTdHJpbmcmIHNkcCk7CisgICAgdm9pZCBw
cm9jZXNzUGVuZGluZ1N0cmVhbXMoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBw
ZW5kaW5nQWRkU3RyZWFtcywgY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5k
aW5nUmVtb3ZlU3RyZWFtcyk7CisgICAgdm9pZCBzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3Qg
Y2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7CisKKyAgICB2b2lkIHN0b3AoKTsKKworcHJpdmF0
ZToKKyAgICBQZWVySGFuZGxlcihQZWVySGFuZGxlckNsaWVudCosIGNvbnN0IFN0cmluZyYgc2Vy
dmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pOworCisgICAgT3du
UHRyPFBlZXJIYW5kbGVySW50ZXJuYWw+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBQ
ZWVySGFuZGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUGVlckhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJIYW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOWZhMzNi
NzMzNTJlYWVmNTQ1ZTQyZDM3NmY4N2M3Y2RmYjVjMzYwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJIYW5kbGVyLmNw
cApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFC
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwor
ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJQZWVySGFuZGxlci5oIgorCisjaW5jbHVkZSAi
UGVlckhhbmRsZXJDbGllbnQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8UGVlckhhbmRsZXI+IFBlZXJIYW5kbGVyOjpj
cmVhdGUoUGVlckhhbmRsZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25m
aWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKK3sK
KyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBlZXJIYW5kbGVyKGNsaWVudCwgc2VydmVyQ29uZmln
dXJhdGlvbiwgc2VjdXJpdHlPcmlnaW4pKTsKK30KKworLy8gRklYTUU6IHJlbW92ZSB3aGVuIHJl
YWwgaW1wbGVtZW50YXRpb25zIGFyZSBhdmFpbGFibGUKKy8vIEVtcHR5IGltcGxlbWVudGF0aW9u
cyBmb3IgcG9ydHMgdGhhdCBidWlsZCB3aXRoIE1FRElBX1NUUkVBTSBlbmFibGVkIGJ5IGRlZmF1
bHQuCitQZWVySGFuZGxlcjo6UGVlckhhbmRsZXIoUGVlckhhbmRsZXJDbGllbnQqLCBjb25zdCBT
dHJpbmcmLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPikKK3sKK30KKworUGVlckhhbmRsZXI6
On5QZWVySGFuZGxlcigpCit7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXI6OnByb2R1Y2VJbml0aWFs
T2ZmZXIoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJikKK3sKK30KKwordm9pZCBQ
ZWVySGFuZGxlcjo6aGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYpCit7Cit9CisKK3Zv
aWQgUGVlckhhbmRsZXI6OnByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJikKK3sKK30KKwordm9pZCBQ
ZWVySGFuZGxlcjo6cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3Jp
cHRvclZlY3RvciYsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYpCit7Cit9CisK
K3ZvaWQgUGVlckhhbmRsZXI6OnNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiwgc2l6
ZV90KQoreworfQorCit2b2lkIFBlZXJIYW5kbGVyOjpzdG9wKCkKK3sKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9QZWVySGFu
ZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1Bl
ZXJIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzg4NGI5YmU4NTE3MWM4NjhlYzUzZTUzNDQzYWQ1Mzkz
YzhmNmE3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9QZWVySGFuZGxlci5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAg
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBQZWVySGFuZGxlcl9oCisjZGVmaW5lIFBlZXJIYW5kbGVyX2gKKworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBlZXJI
YW5kbGVyQ2xpZW50OworY2xhc3MgU2VjdXJpdHlPcmlnaW47CisKK2NsYXNzIFBlZXJIYW5kbGVy
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQZWVySGFuZGxlcik7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGVlckhhbmRs
ZXI+IGNyZWF0ZShQZWVySGFuZGxlckNsaWVudCosIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmln
dXJhdGlvbiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pOworICAgIH5QZWVySGFuZGxlcigp
OworCisgICAgdm9pZCBwcm9kdWNlSW5pdGlhbE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3Jp
cHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMpOworICAgIHZvaWQgaGFuZGxlSW5pdGlhbE9m
ZmVyKGNvbnN0IFN0cmluZyYgc2RwKTsKKyAgICB2b2lkIHByb2Nlc3NTRFAoY29uc3QgU3RyaW5n
JiBzZHApOworICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFt
RGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVz
Y3JpcHRvclZlY3RvciYgcGVuZGluZ1JlbW92ZVN0cmVhbXMpOworICAgIHZvaWQgc2VuZERhdGFT
dHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOworCisgICAgdm9p
ZCBzdG9wKCk7CisKK3ByaXZhdGU6CisgICAgUGVlckhhbmRsZXIoUGVlckhhbmRsZXJDbGllbnQq
LCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+KTsKKworICAgIFBlZXJIYW5kbGVyQ2xpZW50KiBtX2NsaWVudDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNl
bmRpZiAvLyBQZWVySGFuZGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggMWY2
MGM0ZGRmODJkNjIxNDY0M2YyOGE1NDNjMGFkOTI5YjVkOTNiMC4uOTVjYTI0ZTJmMGEyYjMzZGEw
MWI1YmM3ZDJkMGE3Mzk2ZDIwZDhkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAt
OTEsNiArOTEsOSBAQAogICAgICAgICAgICAgICAgICdXRUJLSVRfSU1QTEVNRU5UQVRJT049MScs
CiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCisgICAgICAgICAgICAg
ICAgJ2JyaWRnZS9QZWVySGFuZGxlci5jcHAnLAorICAgICAgICAgICAgICAgICdicmlkZ2UvUGVl
ckhhbmRsZXJJbnRlcm5hbC5jcHAnLAorICAgICAgICAgICAgICAgICdicmlkZ2UvUGVlckhhbmRs
ZXJJbnRlcm5hbC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL2FuZHJvaWQvV2ViU2FuZGJv
eFN1cHBvcnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9hbmRyb2lkL1dlYlRoZW1lRW5n
aW5lLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvZ3RrL1dlYklucHV0RXZlbnRGYWN0b3J5
LmgnLApAQCAtMjMxLDYgKzIzNCw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRp
YVBsYXllci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlhUGxheWVyQWN0aW9u
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFQbGF5ZXJDbGllbnQuaCcsCisg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCcsCiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZW51SXRlbUluZm8uaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJNZXNzYWdlUG9ydENoYW5uZWwuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJNZXNzYWdlUG9ydENoYW5uZWxDbGllbnQuaCcsCkBAIC0yNTAsNiArMjU0LDggQEAKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViUGFnZVZpc2liaWxpdHlTdGF0ZS5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYlBhc3N3b3JkRm9ybURhdGEuaCcsCisgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCcsCisgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJQZXJmb3JtYW5jZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlBlcm1p
c3Npb25DbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQbHVnaW4uaCcsCkBA
IC01NTUsNiArNTYxLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhRWxlbWVudC5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuaCcsCisgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYk5hbWVkTm9kZU1hcC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViTmV0d29ya1N0YXRlTm90aWZpZXIuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk5v
ZGUuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL1BlZXJI
YW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL1BlZXJIYW5kbGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kMWVkZWQyMWU2NTZlOGE0MjkzNGVjNzdiZjk2MmEzOGVlMWZjMDY1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvUGVlckhhbmRs
ZXIuY3BwCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVp
dGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiUGVlckhhbmRsZXIuaCIKKworI2luY2x1
ZGUgIlBlZXJIYW5kbGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiUGVlckhhbmRsZXJJbnRlcm5hbC5o
IgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGFzc093blB0cjxQZWVySGFuZGxlcj4gUGVlckhhbmRsZXI6OmNyZWF0ZShQZWVySGFuZGxlckNs
aWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luKQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgUGVlckhhbmRsZXIoY2xpZW50LCBzZXJ2ZXJDb25maWd1cmF0aW9uLCBzZWN1cml0eU9y
aWdpbikpOworfQorCitQZWVySGFuZGxlcjo6UGVlckhhbmRsZXIoUGVlckhhbmRsZXJDbGllbnQq
IGNsaWVudCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKKyAgICA6IG1fcHJpdmF0ZShhZG9wdFB0cihu
ZXcgUGVlckhhbmRsZXJJbnRlcm5hbChjbGllbnQsIHNlcnZlckNvbmZpZ3VyYXRpb24sIHNlY3Vy
aXR5T3JpZ2luKSkpCit7Cit9CisKK1BlZXJIYW5kbGVyOjp+UGVlckhhbmRsZXIoKQoreworfQor
Cit2b2lkIFBlZXJIYW5kbGVyOjpwcm9kdWNlSW5pdGlhbE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFt
RGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMpCit7CisgICAgbV9wcml2YXRlLT5w
cm9kdWNlSW5pdGlhbE9mZmVyKHBlbmRpbmdBZGRTdHJlYW1zKTsKK30KKwordm9pZCBQZWVySGFu
ZGxlcjo6aGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYgc2RwKQoreworICAgIG1fcHJp
dmF0ZS0+aGFuZGxlSW5pdGlhbE9mZmVyKHNkcCk7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXI6OnBy
b2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBzZHApCit7CisgICAgbV9wcml2YXRlLT5wcm9jZXNzU0RQ
KHNkcCk7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXI6OnByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25z
dCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zLCBjb25zdCBN
ZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdSZW1vdmVTdHJlYW1zKQoreworICAg
IG1fcHJpdmF0ZS0+cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKHBlbmRpbmdBZGRTdHJlYW1zLCBwZW5k
aW5nUmVtb3ZlU3RyZWFtcyk7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXI6OnNlbmREYXRhU3RyZWFt
TWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIG1fcHJpdmF0
ZS0+c2VuZERhdGFTdHJlYW1NZXNzYWdlKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgUGVlckhh
bmRsZXI6OnN0b3AoKQoreworICAgIG1fcHJpdmF0ZS0+c3RvcCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvUGVlckhhbmRsZXJJbnRlcm5hbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVySGFuZGxlckludGVybmFsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xZTY4NGI4Y2YxMThhNTIyNDQ1OGU2N2M0ZGUxNjZmZjgwMzBjMDI5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvUGVlckhhbmRsZXJJ
bnRlcm5hbC5jcHAKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICog
My4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiUGVlckhhbmRsZXJJbnRlcm5h
bC5oIgorCisjaW5jbHVkZSAiUGVlckhhbmRsZXJDbGllbnQuaCIKKyNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3Jt
U3VwcG9ydC5oIgorI2luY2x1ZGUgIldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgorI2luY2x1
ZGUgIldlYlBlZXJDb25uZWN0aW9uSGFuZGxlci5oIgorI2luY2x1ZGUgIldlYlBlZXJDb25uZWN0
aW9uSGFuZGxlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGVlckhhbmRsZXJJbnRlcm5hbDo6UGVlckhhbmRsZXJJbnRlcm5h
bChQZWVySGFuZGxlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3Vy
YXRpb24sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luKQorICAgIDog
bV9jbGllbnQoY2xpZW50KQoreworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV93ZWJIYW5k
bGVyID0gYWRvcHRQdHIoV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y3JlYXRlUGVl
ckNvbm5lY3Rpb25IYW5kbGVyKHRoaXMpKTsKKyAgICBtX3dlYkhhbmRsZXItPmluaXRpYWxpemUo
c2VydmVyQ29uZmlndXJhdGlvbiwgc2VjdXJpdHlPcmlnaW4pOworfQorCitQZWVySGFuZGxlcklu
dGVybmFsOjp+UGVlckhhbmRsZXJJbnRlcm5hbCgpCit7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlJ
dGVtcyhXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcj4m
IHJlc3VsdCwgY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBzdHJlYW1zKQorewor
ICAgIHNpemVfdCBudW1iZXJPZlN0cmVhbXMgPSBzdHJlYW1zLnNpemUoKTsKKyAgICBXZWJLaXQ6
OldlYlZlY3RvcjxXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gd2ViU3RyZWFtcyhu
dW1iZXJPZlN0cmVhbXMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdHJl
YW1zOyArK2kpCisgICAgICAgIHdlYlN0cmVhbXNbaV0gPSBzdHJlYW1zW2ldOworICAgIHJlc3Vs
dC5zd2FwKHdlYlN0cmVhbXMpOworfQorCit2b2lkIFBlZXJIYW5kbGVySW50ZXJuYWw6OnByb2R1
Y2VJbml0aWFsT2ZmZXIoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5n
QWRkU3RyZWFtcykKK3sKKyAgICBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYk1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcj4gc3RyZWFtc1RvQWRkOworICAgIGNvcHlJdGVtcyhzdHJlYW1zVG9BZGQs
IHBlbmRpbmdBZGRTdHJlYW1zKTsKKyAgICBtX3dlYkhhbmRsZXItPnByb2R1Y2VJbml0aWFsT2Zm
ZXIoc3RyZWFtc1RvQWRkKTsKK30KKwordm9pZCBQZWVySGFuZGxlckludGVybmFsOjpoYW5kbGVJ
bml0aWFsT2ZmZXIoY29uc3QgU3RyaW5nJiBzZHApCit7CisgICAgbV93ZWJIYW5kbGVyLT5oYW5k
bGVJbml0aWFsT2ZmZXIoc2RwKTsKK30KKwordm9pZCBQZWVySGFuZGxlckludGVybmFsOjpwcm9j
ZXNzU0RQKGNvbnN0IFN0cmluZyYgc2RwKQoreworICAgIG1fd2ViSGFuZGxlci0+cHJvY2Vzc1NE
UChzZHApOworfQorCit2b2lkIFBlZXJIYW5kbGVySW50ZXJuYWw6OnByb2Nlc3NQZW5kaW5nU3Ry
ZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1z
LCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdSZW1vdmVTdHJlYW1z
KQoreworICAgIFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlw
dG9yPiBzdHJlYW1zVG9BZGQ7CisgICAgY29weUl0ZW1zKHN0cmVhbXNUb0FkZCwgcGVuZGluZ0Fk
ZFN0cmVhbXMpOworICAgIFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yPiBzdHJlYW1zVG9SZW1vdmU7CisgICAgY29weUl0ZW1zKHN0cmVhbXNUb0FkZCwg
cGVuZGluZ1JlbW92ZVN0cmVhbXMpOworICAgIG1fd2ViSGFuZGxlci0+cHJvY2Vzc1BlbmRpbmdT
dHJlYW1zKHN0cmVhbXNUb0FkZCwgc3RyZWFtc1RvUmVtb3ZlKTsKK30KKwordm9pZCBQZWVySGFu
ZGxlckludGVybmFsOjpzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgc2l6
ZV90IGxlbmd0aCkKK3sKKyAgICBtX3dlYkhhbmRsZXItPnNlbmREYXRhU3RyZWFtTWVzc2FnZShk
YXRhLCBsZW5ndGgpOworfQorCit2b2lkIFBlZXJIYW5kbGVySW50ZXJuYWw6OnN0b3AoKQorewor
ICAgIG1fd2ViSGFuZGxlci0+c3RvcCgpOworfQorCit2b2lkIFBlZXJIYW5kbGVySW50ZXJuYWw6
OmljZVByb2Nlc3NpbmdDb21wbGV0ZWQoKQoreworICAgIG1fY2xpZW50LT5pY2VQcm9jZXNzaW5n
Q29tcGxldGVkKCk7Cit9CisKK3ZvaWQgUGVlckhhbmRsZXJJbnRlcm5hbDo6c2RwR2VuZXJhdGVk
KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBzZHApCit7CisgICAgbV9jbGllbnQtPnNkcEdlbmVy
YXRlZChzZHApOworfQorCit2b2lkIFBlZXJIYW5kbGVySW50ZXJuYWw6OmRhdGFTdHJlYW1NZXNz
YWdlUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBtX2Ns
aWVudC0+ZGF0YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZChkYXRhLCBsZW5ndGgpOworfQorCit2b2lk
IFBlZXJIYW5kbGVySW50ZXJuYWw6OnJlbW90ZVN0cmVhbUFkZGVkKGNvbnN0IFdlYktpdDo6V2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yJiB3ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IpCit7CisgICAg
bV9jbGllbnQtPnJlbW90ZVN0cmVhbUFkZGVkKHdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcik7Cit9
CisKK3ZvaWQgUGVlckhhbmRsZXJJbnRlcm5hbDo6cmVtb3RlU3RyZWFtUmVtb3ZlZChjb25zdCBX
ZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYgd2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9y
KQoreworICAgIG1fY2xpZW50LT5yZW1vdGVTdHJlYW1SZW1vdmVkKHdlYk1lZGlhU3RyZWFtRGVz
Y3JpcHRvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRn
ZS9QZWVySGFuZGxlckludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9Q
ZWVySGFuZGxlckludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWJhYmNhN2UxNTI1NDJiN2JlYjQ0OWQy
ZjA4YjU5MWIxZTIyYWM5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vYnJpZGdlL1BlZXJIYW5kbGVySW50ZXJuYWwuaApAQCAtMCwwICsxLDgxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAg
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBQZWVySGFuZGxlckludGVybmFsX2gKKyNkZWZpbmUgUGVlckhhbmRsZXJJbnRlcm5hbF9o
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNj
cmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmgiCisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3Mg
V2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyOworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBl
ZXJIYW5kbGVyQ2xpZW50OworY2xhc3MgU2VjdXJpdHlPcmlnaW47CisKK2NsYXNzIFBlZXJIYW5k
bGVySW50ZXJuYWwgOiBwdWJsaWMgV2ViS2l0OjpXZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGll
bnQgeworcHVibGljOgorICAgIFBlZXJIYW5kbGVySW50ZXJuYWwoUGVlckhhbmRsZXJDbGllbnQq
LCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+KTsKKyAgICB+UGVlckhhbmRsZXJJbnRlcm5hbCgpOworCisgICAgdmlydHVhbCB2b2lk
IHByb2R1Y2VJbml0aWFsT2ZmZXIoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBw
ZW5kaW5nQWRkU3RyZWFtcyk7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUluaXRpYWxPZmZlcihj
b25zdCBTdHJpbmcmIHNkcCk7CisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NTRFAoY29uc3QgU3Ry
aW5nJiBzZHApOworICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzUGVuZGluZ1N0cmVhbXMoY29uc3Qg
TWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcywgY29uc3QgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nUmVtb3ZlU3RyZWFtcyk7CisgICAgdmly
dHVhbCB2b2lkIHNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qg
bGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOworCisgICAgLy8gV2ViS2l0OjpXZWJQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2
b2lkIGljZVByb2Nlc3NpbmdDb21wbGV0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2RwR2VuZXJh
dGVkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBzZHApOworICAgIHZpcnR1YWwgdm9pZCBkYXRh
U3RyZWFtTWVzc2FnZVJlY2VpdmVkKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdGVTdHJlYW1BZGRlZChjb25zdCBXZWJLaXQ6OldlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvciYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdGVTdHJlYW1SZW1vdmVk
KGNvbnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJik7CisKK3ByaXZhdGU6Cisg
ICAgT3duUHRyPFdlYktpdDo6V2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyPiBtX3dlYkhhbmRsZXI7
CisgICAgUGVlckhhbmRsZXJDbGllbnQqIG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIFBl
ZXJIYW5kbGVySW50ZXJuYWxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaAppbmRleCA0ZWFiYjNiYTQ3MDM1M2U2NmE3YjQ1
YTMzZmEzZTIzMDdjOGNjZWUwLi40ZmJhZjdkM2QyMzNmMGRkZmFjYTgwNWNjMDViNTVjYjFiZjBh
NzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRQbGF0
Zm9ybVN1cHBvcnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQuaApAQCAtMTMsNyArMTMsNyBAQAogICogZGlzdHJpYnV0aW9uLgogICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwogICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5ocmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKQEAg
LTYxLDYgKzYxLDggQEAgY2xhc3MgV2ViSURCRmFjdG9yeTsKIGNsYXNzIFdlYklEQktleTsKIGNs
YXNzIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbDsKIGNsYXNzIFdlYk1pbWVSZWdpc3RyeTsKK2NsYXNz
IFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlcjsKK2NsYXNzIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxl
ckNsaWVudDsKIGNsYXNzIFdlYlBsdWdpbkxpc3RCdWlsZGVyOwogY2xhc3MgV2ViU2FuZGJveFN1
cHBvcnQ7CiBjbGFzcyBXZWJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OwpAQCAtMzIxLDYgKzMyMywx
MCBAQCBwdWJsaWM6CiAgICAgLy8gTXVzdCByZXR1cm4gbm9uLW51bGwuCiAgICAgdmlydHVhbCBX
ZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtKCkgeyByZXR1cm4gMDsgfQogCisgICAgLy8gV2ViUlRD
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgIHZpcnR1YWwgV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyKiBjcmVhdGVQZWVyQ29u
bmVjdGlvbkhhbmRsZXIoV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KikgeyByZXR1cm4g
MDsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgfldlYktpdFBsYXRmb3JtU3VwcG9ydCgpIHsgfQogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFt
RGVzY3JpcHRvci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJl
YW1EZXNjcmlwdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTAwZDY0ZGNmZTI3ZTlmYjM0MWNiNzQyMGFkNGRj
NWYwYmVkMTcyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yX2gKKyNkZWZpbmUgV2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUg
IldlYk5vbkNvcHlhYmxlLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IgOiBwdWJsaWMgV2Vi
Tm9uQ29weWFibGUgeworcHVibGljOgorICAgIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcigpIHsg
fQorICAgIH5XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IoKSB7IHJlc2V0KCk7IH0KKworICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKCk7IC8vIEZJWE1FOiBBZGQgcGFyYW1zLgorICAg
IFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOworICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcml2YXRlLmlzTnVsbCgpOyB9CisKKyAgICAvLyBGSVhNRTogQWRkIGZ1bmN0aW9u
cy4KKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvcihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9y
PiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURl
c2NyaXB0b3I+KCkgY29uc3Q7CisgICAgb3BlcmF0b3IgV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNj
cmlwdG9yKigpIGNvbnN0OworICAgIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYgb3BlcmF0b3I9
KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+Jik7
CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcj4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wZjM1NTk1NGRkODQxN2UxZjQzN2U4NmE2ZTM3YzA2NGVhMTZmNjU3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGVlckNvbm5lY3Rp
b25IYW5kbGVyLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXJfaAorI2RlZmluZSBXZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJf
aAorCisjaW5jbHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcu
aCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjsKK2NsYXNzIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxl
ckNsaWVudDsKKworLy8gTm90ZToKKy8vIFNEUCBzdGFuZHMgZm9yIFNlc3Npb24gRGVzY3JpcHRp
b24gUHJvdG9jb2wsIHdoaWNoIGlzIGludGVuZGVkIGZvciBkZXNjcmliaW5nCisvLyBtdWx0aW1l
ZGlhIHNlc3Npb25zIGZvciB0aGUgcHVycG9zZXMgb2Ygc2Vzc2lvbiBhbm5vdW5jZW1lbnQsIHNl
c3Npb24KKy8vIGludml0YXRpb24sIGFuZCBvdGhlciBmb3JtcyBvZiBtdWx0aW1lZGlhIHNlc3Np
b24gaW5pdGlhdGlvbi4KKy8vCisvLyBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBoZXJl
OgorLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDU2NgorLy8gaHR0cDovL2VuLndp
a2lwZWRpYS5vcmcvd2lraS9TZXNzaW9uX0Rlc2NyaXB0aW9uX1Byb3RvY29sCisKKworY2xhc3Mg
V2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJQZWVy
Q29ubmVjdGlvbkhhbmRsZXIoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKGNv
bnN0IFdlYlN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29uc3QgV2ViU2VjdXJpdHlPcmln
aW4mKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJvZHVjZUluaXRpYWxPZmZlcihjb25zdCBX
ZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yPiYgcGVuZGluZ0FkZFN0cmVhbXMpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFdlYlN0cmluZyYg
c2RwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NTRFAoY29uc3QgV2ViU3RyaW5nJiBz
ZHApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IFdl
YlZlY3RvcjxXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I+JiBwZW5kaW5nQWRkU3RyZWFtcywgY29u
c3QgV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcj4mIHBlbmRpbmdSZW1vdmVTdHJl
YW1zKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgp
ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViUGVlckNv
bm5lY3Rpb25IYW5kbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTA3NDcyZTMzOGFjMjFlZDljYzczMTU1NzZmMTcwMzIwNWZlNGRmNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBlZXJDb25uZWN0aW9uSGFuZGxl
ckNsaWVudC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGVl
ckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50X2gKKyNkZWZpbmUgV2ViUGVlckNvbm5lY3Rpb25IYW5k
bGVyQ2xpZW50X2gKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYk1lZGlhU3RyZWFt
RGVzY3JpcHRvcjsKK2NsYXNzIFdlYlN0cmluZzsKKworY2xhc3MgV2ViUGVlckNvbm5lY3Rpb25I
YW5kbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJQZWVyQ29ubmVjdGlvbkhh
bmRsZXJDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBpY2VQcm9jZXNzaW5nQ29tcGxl
dGVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZHBHZW5lcmF0ZWQoY29uc3QgV2ViU3RyaW5n
JiBzZHApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGF0YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZChj
b25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJl
bW90ZVN0cmVhbUFkZGVkKGNvbnN0IFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3RlU3RyZWFtUmVtb3ZlZChjb25zdCBXZWJNZWRpYVN0cmVhbURl
c2NyaXB0b3ImKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kMzY2Y2RmNWY3YTE2ZWJiMDMyZTc5YmQ1MTUzMzQxM2Q5MTVmYjEwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9y
LmNwcApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiV2ViTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yLmgiCisKKyNpbmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKKyNpbmNs
dWRlICJXZWJTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYk1lZGlhU3RyZWFt
RGVzY3JpcHRvcjo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNvbnN0IFdURjo6UGFzc1JlZlB0
cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+JiBtZWRpYVN0cmVhbURlc2NyaXB0b3Ip
CisgICAgOiBtX3ByaXZhdGUobWVkaWFTdHJlYW1EZXNjcmlwdG9yKQoreworfQorCit2b2lkIFdl
Yk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgp
OworfQorCitXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6b3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURl
c2NyaXB0b3I+JiBtZWRpYVN0cmVhbURlc2NyaXB0b3IpCit7CisgICAgbV9wcml2YXRlID0gbWVk
aWFTdHJlYW1EZXNjcmlwdG9yOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViTWVkaWFTdHJl
YW1EZXNjcmlwdG9yOjpvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJl
YW1EZXNjcmlwdG9yPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30K
KworV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpvcGVyYXRvciBXZWJDb3JlOjpNZWRpYVN0cmVh
bURlc2NyaXB0b3IqKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0p
CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112864</attachid>
            <date>2011-10-28 07:56:16 -0700</date>
            <delta_ts>2011-10-31 13:26:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58550-20111028165614.patch</filename>
            <type>text/plain</type>
            <size>56758</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg3MDQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2ODljZGZkODY5NmIxYThj
YmZhYmMwMDhiMjQxYjYzZWE4NjNjOGFhLi5lZDdkZjA3Y2QyYTNkYWZkZmNlYjRkMTQyY2JlZDMw
YzlhMzMzMjAxIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMTAtMjggIFRvbW15
IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBN
ZWRpYSBTdHJlYW0gQVBJOiBhZGQgdGhlIENocm9taXVtIFdlYktpdCBpbnRlcmZhY2VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODU1MAorCisgICAg
ICAgIENoYW5nZXMgdGhlIFBlZXJIYW5kbGVyIHBsYXRmb3JtIGludGVyZmFjZSBzbyB0aGF0IGVt
YmVkZGVycyBjYW4gbW9yZSBlYXNpbHkgdXNlIGl0LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OlBlZXJDb25uZWN0aW9u
KToKKyAgICAgICAgKiBtZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5oOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyQ2xpZW50Lmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OlBlZXJIYW5kbGVyQ2xpZW50Ojp+UGVlckhhbmRsZXJDbGllbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1BlZXJIYW5kbGVyLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmguCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJIYW5kbGVyLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRs
ZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpQZWVySGFuZGxlcjo6UGVlckhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UGVlckhhbmRsZXI6On5QZWVySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxl
cjo6cHJvZHVjZUluaXRpYWxPZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6
aGFuZGxlSW5pdGlhbE9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpwcm9j
ZXNzU0RQKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpwcm9jZXNzUGVuZGluZ1N0
cmVhbXMpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OnNlbmREYXRhU3RyZWFtTWVz
c2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6c3RvcCk6CisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJIYW5kbGVyLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmguCisKKyAg
ICAgICAgVGVzdHMgZm9yIHRoZSBNZWRpYSBTdHJlYW0gQVBJIHdpbGwgYmUgcHJvdmlkZWQgYnkg
dGhlIGJ1ZyA1NjU4NywgcGVuZGluZyBlbm91Z2ggbGFuZGVkIGNvZGUuCisKIDIwMTEtMTAtMjcg
IEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZWZhY3RvciBtYWtl
X2V2ZW50X2ZhY3RvcnkucGwgdG8gdXNlIEluRmlsZXNDb21waWxlci5wbQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCA1OWNjNDA5N2I2Y2VlYTJkMTYzZjA2NzA5NjM3ZGVmNGJmNGY2ZjRk
Li5kMzNkYTkxZWUyM2I2YmJkNzAzMzU1NTcwNDAwM2UyYTdiMjY2ZWUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDExLTEwLTI4ICBUb21teSBXaWRlbmZs
eWNodCAgPHRvbW15d0Bnb29nbGUuY29tPgorCisgICAgICAgIFtDaHJvbWl1bV0gTWVkaWEgU3Ry
ZWFtIEFQSTogYWRkIHRoZSBDaHJvbWl1bSBXZWJLaXQgaW50ZXJmYWNlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg1NTAKKworICAgICAgICBBZGRz
IHRoZSBicmlkZ2luZyBjb2RlICsgdGhlIG1pbmltdW0gYW1vdW50IG9mIFdlYiogc3VwcG9ydGlu
ZyBjb2RlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBicmlkZ2UvUGVlckhhbmRsZXIuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpQZWVySGFuZGxlcjo6UGVlckhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhh
bmRsZXI6On5QZWVySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6cHJv
ZHVjZUluaXRpYWxPZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6aGFuZGxl
SW5pdGlhbE9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpwcm9jZXNzU0RQ
KToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVyOjpwcm9jZXNzUGVuZGluZ1N0cmVhbXMp
OgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXI6OnNlbmREYXRhU3RyZWFtTWVzc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpQZWVySGFuZGxlcjo6c3RvcCk6CisgICAgICAgICogYnJpZGdl
L1BlZXJIYW5kbGVySW50ZXJuYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBlZXJI
YW5kbGVySW50ZXJuYWw6OlBlZXJIYW5kbGVySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
UGVlckhhbmRsZXJJbnRlcm5hbDo6flBlZXJIYW5kbGVySW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29weUl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVySW50ZXJuYWw6
OnByb2R1Y2VJbml0aWFsT2ZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXJJbnRl
cm5hbDo6aGFuZGxlSW5pdGlhbE9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVy
SW50ZXJuYWw6OnByb2Nlc3NTRFApOgorICAgICAgICAoV2ViQ29yZTo6UGVlckhhbmRsZXJJbnRl
cm5hbDo6cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5k
bGVySW50ZXJuYWw6OnNlbmREYXRhU3RyZWFtTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZWVySGFuZGxlckludGVybmFsOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJIYW5kbGVy
SW50ZXJuYWw6OmljZVByb2Nlc3NpbmdDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ckhhbmRsZXJJbnRlcm5hbDo6c2RwR2VuZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJI
YW5kbGVySW50ZXJuYWw6OmRhdGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGVlckhhbmRsZXJJbnRlcm5hbDo6cmVtb3RlU3RyZWFtQWRkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UGVlckhhbmRsZXJJbnRlcm5hbDo6cmVtb3RlU3RyZWFtUmVtb3ZlZCk6CisgICAg
ICAgICogYnJpZGdlL1BlZXJIYW5kbGVySW50ZXJuYWwuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmguCisgICAgICAgICogcHVi
bGljL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRQbGF0
Zm9ybVN1cHBvcnQ6OmNyZWF0ZVBlZXJDb25uZWN0aW9uSGFuZGxlcik6CisgICAgICAgICogcHVi
bGljL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6On5XZWJNZWRpYVN0cmVhbURl
c2NyaXB0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6Omlz
TnVsbCk6CisgICAgICAgICogcHVibGljL1dlYlBlZXJDb25uZWN0aW9uSGFuZGxlci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyOjp+V2ViUGVlckNv
bm5lY3Rpb25IYW5kbGVyKToKKyAgICAgICAgKiBwdWJsaWMvV2ViUGVlckNvbm5lY3Rpb25IYW5k
bGVyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQZWVyQ29ubmVjdGlvbkhh
bmRsZXJDbGllbnQ6On5XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQpOgorICAgICAgICAq
IHNyYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnJlc2V0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpvcGVyYXRvcj0pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6Om9wZXJhdG9yIFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+KToKKyAgICAgICAgKFdlYktpdDo6
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpvcGVyYXRvciBXZWJDb3JlOjpNZWRpYVN0cmVhbURl
c2NyaXB0b3IqKToKKworICAgICAgICBUZXN0cyBmb3IgdGhlIE1lZGlhIFN0cmVhbSBBUEkgd2ls
bCBiZSBwcm92aWRlZCBieSB0aGUgYnVnIDU2NTg3LCBwZW5kaW5nIGVub3VnaCBsYW5kZWQgY29k
ZS4KKwogMjAxMS0xMC0yNiAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZnJhbWUgcmF0ZSBjb250cm9sIHBvcnRpb25zIG9mIEND
U2NoZWR1bGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDM1ZTYzMGI5NDVhZjYxZWFiMzhhNTJi
MWQ2NjQxM2NkNjk3MzkwYzEuLjA4NGFjMDhhMjBkMjg1ZDYwMGE2YWUyMTY2NjcxOWUzN2RkNmIw
MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC02MSw2ICs2MSw3IEBAIHdlYmNvcmVfY3BwZmxh
Z3MgKz0gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3BuZyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYiBc
CiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0gXAorCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lciBc
CiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jayBcCiAJLUkkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yayBcCiAJLUkkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3FsIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4
IDc2YjA0YmQ5YjRlYmQ1YmI3NDhmYjQ1OWYxZmU5NmI4ZTdlM2I4MWEuLjk1NWU4ZDQ2MzVmNDEx
ZWQxZGI0OWM3ZThhNzI5YzQ0MWI3MDdiM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtMjc0MSw4ICsyNzQxLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbXBvbmVudC5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2Uu
aCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUGVlckNvbm5l
Y3Rpb25IYW5kbGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1BlZXJDb25uZWN0aW9uSGFuZGxlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL0RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IDExMDVlYjkzNDA5YTM3YzE0NzY1
MjI3ZGMyMzk5NzNhMmYwM2M4YTIuLmY1MDJlMzAyOGY1ODVhZmQ4MTQ1NTk1OTRmZTFhOWNhNmQ2
YWEwZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0xOTQsNiAr
MTk0LDcgQEAKICAgICAgICcuLi9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhJywKICAgICAg
ICcuLi9wbGF0Zm9ybS9sZXZlbGRiJywKICAgICAgICcuLi9wbGF0Zm9ybS9tZWRpYXN0cmVhbScs
CisgICAgICAnLi4vcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0nLAogICAgICAgJy4uL3Bs
YXRmb3JtL21vY2snLAogICAgICAgJy4uL3BsYXRmb3JtL25ldHdvcmsnLAogICAgICAgJy4uL3Bs
YXRmb3JtL25ldHdvcmsvY2hyb21pdW0nLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDkwZmQyMzY5ZmJm
MDg4NzM3OTBiY2I3NGZmODlhMmFkNDMzZDg0ZDUuLmEwNmRiY2U1ZWQ1MmI3ZjM5ZTQ5MDU2N2Nh
ODRiMzJmYTIxMGIyYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTgxNyw4ICs4MTcsOCBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ29tcG9uZW50LmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5o
JywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5jcHAnLAot
ICAgICAgICAgICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uSGFuZGxlci5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGll
bnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbW9jay9EZXZpY2VPcmllbnRhdGlvbkNsaWVu
dE1vY2suaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbW9jay9HZW9sb2NhdGlvbkNsaWVudE1v
Y2suaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9BdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZUJhc2UuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9QZWVy
Q29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlv
bi5jcHAKaW5kZXggN2I1YWU2NzIwYzI3M2Q4NWU4OTBlNmM5ZGI5NDM3NmNiYThmM2M0Zi4uNDFm
YmM2NTgzMmRkMTAwMDg3ZTEyNzJmZjBjNmMzOWJiZjVkZWEzMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uLmNwcApAQCAtNTUsNyArNTUsNyBAQCBQZWVy
Q29ubmVjdGlvbjo6UGVlckNvbm5lY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBzZQogICAgICwgbV9pbml0aWFsTmVnb3RpYXRpb25UaW1lcih0aGlz
LCAmUGVlckNvbm5lY3Rpb246OmluaXRpYWxOZWdvdGlhdGlvblRpbWVyRmlyZWQpCiAgICAgLCBt
X3N0cmVhbUNoYW5nZVRpbWVyKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6c3RyZWFtQ2hhbmdlVGlt
ZXJGaXJlZCkKICAgICAsIG1fcmVhZHlTdGF0ZUNoYW5nZVRpbWVyKHRoaXMsICZQZWVyQ29ubmVj
dGlvbjo6cmVhZHlTdGF0ZUNoYW5nZVRpbWVyRmlyZWQpCi0gICAgLCBtX3BlZXJIYW5kbGVyKFBl
ZXJIYW5kbGVyOjpjcmVhdGUodGhpcywgc2VydmVyQ29uZmlndXJhdGlvbiwgY29udGV4dC0+c2Vj
dXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSkpCisgICAgLCBtX3BlZXJIYW5kbGVyKFBlZXJDb25u
ZWN0aW9uSGFuZGxlcjo6Y3JlYXRlKHRoaXMsIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCkpKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9t
ZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0v
UGVlckNvbm5lY3Rpb24uaAppbmRleCA3ZjRiMmY1YTY2YWM0ZGZmODM2MGQ4MDU4ZWMxMDBmMGFj
YzAxNmVkLi41NDE2Y2VkODZlODFlNDQzNGU3OThiOTE1YzA5YzhkZWRjZTU0YjhjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uLmgKQEAgLTMzLDcgKzMzLDgg
QEAKICNpbmNsdWRlICJFeGNlcHRpb25CYXNlLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIK
ICNpbmNsdWRlICJNZWRpYVN0cmVhbUxpc3QuaCIKLSNpbmNsdWRlICJQZWVySGFuZGxlci5oIgor
I2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uSGFuZGxlci5oIgorI2luY2x1ZGUgIlBlZXJDb25uZWN0
aW9uSGFuZGxlckNsaWVudC5oIgogI2luY2x1ZGUgIlNpZ25hbGluZ0NhbGxiYWNrLmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00MSw3ICs0MiwxNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBlZXJDb25uZWN0aW9uIDogcHVibGlj
IFJlZkNvdW50ZWQ8UGVlckNvbm5lY3Rpb24+LCBwdWJsaWMgUGVlckhhbmRsZXJDbGllbnQsIHB1
YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CisvLyBOb3RlOgorLy8g
U0RQIHN0YW5kcyBmb3IgU2Vzc2lvbiBEZXNjcmlwdGlvbiBQcm90b2NvbCwgd2hpY2ggaXMgaW50
ZW5kZWQgZm9yIGRlc2NyaWJpbmcKKy8vIG11bHRpbWVkaWEgc2Vzc2lvbnMgZm9yIHRoZSBwdXJw
b3NlcyBvZiBzZXNzaW9uIGFubm91bmNlbWVudCwgc2Vzc2lvbgorLy8gaW52aXRhdGlvbiwgYW5k
IG90aGVyIGZvcm1zIG9mIG11bHRpbWVkaWEgc2Vzc2lvbiBpbml0aWF0aW9uLgorLy8KKy8vIE1v
cmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGhlcmU6CisvLyBodHRwOi8vdG9vbHMuaWV0Zi5v
cmcvaHRtbC9yZmM0NTY2CisvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Nlc3Npb25f
RGVzY3JpcHRpb25fUHJvdG9jb2wKKworY2xhc3MgUGVlckNvbm5lY3Rpb24gOiBwdWJsaWMgUmVm
Q291bnRlZDxQZWVyQ29ubmVjdGlvbj4sIHB1YmxpYyBQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGll
bnQsIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGVlckNvbm5lY3Rpb24+IGNyZWF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVm
UHRyPFNpZ25hbGluZ0NhbGxiYWNrPik7CiAgICAgflBlZXJDb25uZWN0aW9uKCk7CkBAIC03MSw3
ICs4MSw3IEBAIHB1YmxpYzoKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGFk
ZHN0cmVhbSk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihyZW1vdmVzdHJl
YW0pOwogCi0gICAgLy8gUGVlckhhbmRsZXJDbGllbnQKKyAgICAvLyBQZWVyQ29ubmVjdGlvbkhh
bmRsZXJDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgaWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZHBHZW5lcmF0ZWQoY29uc3QgU3RyaW5nJiBzZHApOwogICAgIHZp
cnR1YWwgdm9pZCBkYXRhU3RyZWFtTWVzc2FnZVJlY2VpdmVkKGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCk7CkBAIC0xMjUsNyArMTM1LDcgQEAgcHJpdmF0ZToKICAgICBNZWRpYVN0
cmVhbURlc2NyaXB0b3JWZWN0b3IgbV9wZW5kaW5nUmVtb3ZlU3RyZWFtczsKICAgICBWZWN0b3I8
UmVhZHlTdGF0ZT4gbV9wZW5kaW5nUmVhZHlTdGF0ZXM7CiAKLSAgICBPd25QdHI8UGVlckhhbmRs
ZXI+IG1fcGVlckhhbmRsZXI7CisgICAgT3duUHRyPFBlZXJDb25uZWN0aW9uSGFuZGxlcj4gbV9w
ZWVySGFuZGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uSGFuZGxlckNs
aWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rp
b25IYW5kbGVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWMxNjI0NDJmOTdjZWUzYzRlYTRmMjQ1OWI0
MWE0YzIwZjYwZjI3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oCkBAIC0wLDAgKzEsNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEFCLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNz
c29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50X2gKKyNkZWZpbmUgUGVl
ckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50X2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhU3RyZWFtRGVzY3JpcHRv
cjsKKworY2xhc3MgUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5QZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBpY2VQcm9jZXNzaW5nQ29tcGxldGVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZHBH
ZW5lcmF0ZWQoY29uc3QgU3RyaW5nJiBzZHApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGF0YVN0
cmVhbU1lc3NhZ2VSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3RlU3RyZWFtQWRkZWQoUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbURlc2NyaXB0b3I+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbVJlbW92
ZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIFBlZXJD
b25uZWN0aW9uSGFuZGxlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDM5MWM4YWFkZDc4MGNiZDVmN2FmZDFlYjBiOTY5NGVlYWJjNGYwZDQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
ICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBF
cmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotICog
ICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQotCi0jaW5jbHVkZSAiUGVlckhhbmRsZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0v
LyBGSVhNRTogcmVtb3ZlIHdoZW4gcmVhbCBpbXBsZW1lbnRhdGlvbnMgYXJlIGF2YWlsYWJsZQot
Ly8gRW1wdHkgaW1wbGVtZW50YXRpb25zIGZvciBwb3J0cyB0aGF0IGJ1aWxkIHdpdGggTUVESUFf
U1RSRUFNIGVuYWJsZWQgYnkgZGVmYXVsdC4KLVBlZXJIYW5kbGVyOjpQZWVySGFuZGxlcihQZWVy
SGFuZGxlckNsaWVudCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLVBl
ZXJIYW5kbGVyOjp+UGVlckhhbmRsZXIoKQotewotfQotCi12b2lkIFBlZXJIYW5kbGVyOjpwcm9k
dWNlSW5pdGlhbE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYpCi17Ci19
Ci0KLXZvaWQgUGVlckhhbmRsZXI6OmhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmKQot
ewotfQotCi12b2lkIFBlZXJIYW5kbGVyOjpwcm9jZXNzU0RQKGNvbnN0IFN0cmluZyYpCi17Ci19
Ci0KLXZvaWQgUGVlckhhbmRsZXI6OnByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0
cmVhbURlc2NyaXB0b3JWZWN0b3ImLCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3Im
KQotewotfQotCi12b2lkIFBlZXJIYW5kbGVyOjpzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3Qg
Y2hhciosIHVuc2lnbmVkKQotewotfQotCi12b2lkIFBlZXJIYW5kbGVyOjpzdG9wKCkKLXsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJI
YW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjE0ZWRmOWIxN2NmZjZiMjIyMTBk
MzUzZjIyY2EyODhiODUzZTViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24u
Ci0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRz
IGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGVlckhhbmRs
ZXJfaAotI2RlZmluZSBQZWVySGFuZGxlcl9oCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQot
Ci0jaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSA8d3RmL093blB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQZWVySGFuZGxlckNsaWVudCB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UGVlckhhbmRsZXJDbGllbnQoKSB7IH0KLQotICAgIHZp
cnR1YWwgdm9pZCBpY2VQcm9jZXNzaW5nQ29tcGxldGVkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZHBHZW5lcmF0ZWQoY29uc3QgU3RyaW5nJiBzZHApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGF0YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3RlU3RyZWFtQWRkZWQoUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbURlc2NyaXB0b3I+KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVh
bVJlbW92ZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKikgPSAwOwotfTsKLQotY2xhc3MgUGVlckhh
bmRsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBlZXJIYW5kbGVyKTsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxQZWVy
SGFuZGxlcj4gY3JlYXRlKFBlZXJIYW5kbGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYg
c2VydmVyQ29uZmlndXJhdGlvbiwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGVlckhhbmRsZXIoY2xpZW50LCBzZXJ2ZXJDb25maWd1
cmF0aW9uLCB1c2VybmFtZSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5QZWVySGFuZGxlcigpOwot
Ci0gICAgdm9pZCBwcm9kdWNlSW5pdGlhbE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRv
clZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMpOwotICAgIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVy
KGNvbnN0IFN0cmluZyYgc2RwKTsKLSAgICB2b2lkIHByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBz
ZHApOwotICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVz
Y3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3Jp
cHRvclZlY3RvciYgcGVuZGluZ1JlbW92ZVN0cmVhbXMpOwotICAgIHZvaWQgc2VuZERhdGFTdHJl
YW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB2b2lk
IHN0b3AoKTsKLQotcHJpdmF0ZToKLSAgICBQZWVySGFuZGxlcihQZWVySGFuZGxlckNsaWVudCos
IGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29uc3QgU3RyaW5nJiB1c2VybmFt
ZSk7Ci0KLSAgICBQZWVySGFuZGxlckNsaWVudCogbV9jbGllbnQ7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jZW5kaWYg
Ly8gUGVlckhhbmRsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vY2hyb21pdW0vUGVlckNvbm5lY3Rpb25IYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9QZWVyQ29ubmVjdGlvbkhhbmRsZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mYjA5MWVkZmMzMDVlNWNkM2RhMjZiNTZlZjA4N2Y2OWYyNjQyYzExCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21p
dW0vUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlz
dHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5h
bWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFBlZXJDb25uZWN0aW9uSGFuZGxlcl9oCisjZGVmaW5lIFBlZXJDb25uZWN0aW9uSGFuZGxlcl9o
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNj
cmlwdG9yLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQ7CitjbGFzcyBQZWVyQ29ubmVj
dGlvbkhhbmRsZXJJbnRlcm5hbDsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOworCitjbGFzcyBQZWVy
Q29ubmVjdGlvbkhhbmRsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBlZXJDb25uZWN0
aW9uSGFuZGxlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8UGVlckNvbm5lY3Rpb25IYW5kbGVyPiBjcmVhdGUoUGVlckNvbm5l
Y3Rpb25IYW5kbGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPik7CisgICAgflBlZXJDb25uZWN0aW9uSGFuZGxlcigp
OworCisgICAgdm9pZCBwcm9kdWNlSW5pdGlhbE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3Jp
cHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMpOworICAgIHZvaWQgaGFuZGxlSW5pdGlhbE9m
ZmVyKGNvbnN0IFN0cmluZyYgc2RwKTsKKyAgICB2b2lkIHByb2Nlc3NTRFAoY29uc3QgU3RyaW5n
JiBzZHApOworICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFt
RGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVz
Y3JpcHRvclZlY3RvciYgcGVuZGluZ1JlbW92ZVN0cmVhbXMpOworICAgIHZvaWQgc2VuZERhdGFT
dHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOworCisgICAgdm9p
ZCBzdG9wKCk7CisKK3ByaXZhdGU6CisgICAgUGVlckNvbm5lY3Rpb25IYW5kbGVyKFBlZXJDb25u
ZWN0aW9uSGFuZGxlckNsaWVudCosIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pOworCisgICAgT3duUHRyPFBlZXJDb25uZWN0aW9u
SGFuZGxlckludGVybmFsPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gUGVlckNvbm5l
Y3Rpb25IYW5kbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9QZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJDb25uZWN0aW9uSGFuZGxlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDU2OWI1ZmRiODAwOThjMDg3NGNmZmI5NTA1Yzg5Nzg3MDY2ZjkyNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9QZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
ICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9y
IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1
ZGUgIlBlZXJDb25uZWN0aW9uSGFuZGxlci5oIgorCisjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25I
YW5kbGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQYXNzT3duUHRyPFBlZXJDb25uZWN0aW9uSGFuZGxlcj4gUGVlckNvbm5l
Y3Rpb25IYW5kbGVyOjpjcmVhdGUoUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiBjbGllbnQs
IGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gc2VjdXJpdHlPcmlnaW4pCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQZWVyQ29u
bmVjdGlvbkhhbmRsZXIoY2xpZW50LCBzZXJ2ZXJDb25maWd1cmF0aW9uLCBzZWN1cml0eU9yaWdp
bikpOworfQorCisvLyBGSVhNRTogcmVtb3ZlIHdoZW4gcmVhbCBpbXBsZW1lbnRhdGlvbnMgYXJl
IGF2YWlsYWJsZQorLy8gRW1wdHkgaW1wbGVtZW50YXRpb25zIGZvciBwb3J0cyB0aGF0IGJ1aWxk
IHdpdGggTUVESUFfU1RSRUFNIGVuYWJsZWQgYnkgZGVmYXVsdC4KK1BlZXJDb25uZWN0aW9uSGFu
ZGxlcjo6UGVlckNvbm5lY3Rpb25IYW5kbGVyKFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCos
IGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KQoreworfQorCitQZWVy
Q29ubmVjdGlvbkhhbmRsZXI6On5QZWVyQ29ubmVjdGlvbkhhbmRsZXIoKQoreworfQorCit2b2lk
IFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6cHJvZHVjZUluaXRpYWxPZmZlcihjb25zdCBNZWRpYVN0
cmVhbURlc2NyaXB0b3JWZWN0b3ImKQoreworfQorCit2b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxl
cjo6aGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYpCit7Cit9CisKK3ZvaWQgUGVlckNv
bm5lY3Rpb25IYW5kbGVyOjpwcm9jZXNzU0RQKGNvbnN0IFN0cmluZyYpCit7Cit9CisKK3ZvaWQg
UGVlckNvbm5lY3Rpb25IYW5kbGVyOjpwcm9jZXNzUGVuZGluZ1N0cmVhbXMoY29uc3QgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yVmVjdG9yJiwgY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9y
JikKK3sKK30KKwordm9pZCBQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnNlbmREYXRhU3RyZWFtTWVz
c2FnZShjb25zdCBjaGFyKiwgc2l6ZV90KQoreworfQorCit2b2lkIFBlZXJDb25uZWN0aW9uSGFu
ZGxlcjo6c3RvcCgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUGVlckNvbm5lY3Rpb25IYW5kbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUGVlckNvbm5lY3Rpb25IYW5k
bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWEwN2Y0NWJlODA0ZDdlNzcyZTBiM2FiZTZjNzJiNzhjZWIyN2Ni
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9QZWVyQ29ubmVjdGlvbkhhbmRsZXIuaApAQCAtMCwwICsxLDcxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgUGVlckNvbm5lY3Rpb25IYW5kbGVyX2gKKyNkZWZpbmUgUGVlckNvbm5lY3Rpb25I
YW5kbGVyX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJNZWRpYVN0
cmVhbURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudDsKK2NsYXNzIFNl
Y3VyaXR5T3JpZ2luOworCitjbGFzcyBQZWVyQ29ubmVjdGlvbkhhbmRsZXIgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFBlZXJDb25uZWN0aW9uSGFuZGxlcik7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGVlckNvbm5lY3Rp
b25IYW5kbGVyPiBjcmVhdGUoUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiwgY29uc3QgU3Ry
aW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPik7Cisg
ICAgflBlZXJDb25uZWN0aW9uSGFuZGxlcigpOworCisgICAgdm9pZCBwcm9kdWNlSW5pdGlhbE9m
ZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMp
OworICAgIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYgc2RwKTsKKyAgICB2
b2lkIHByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBzZHApOworICAgIHZvaWQgcHJvY2Vzc1BlbmRp
bmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0
cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ1JlbW92ZVN0
cmVhbXMpOworICAgIHZvaWQgc2VuZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBsZW5ndGgpOworCisgICAgdm9pZCBzdG9wKCk7CisKK3ByaXZhdGU6CisgICAgUGVl
ckNvbm5lY3Rpb25IYW5kbGVyKFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCosIGNvbnN0IFN0
cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pOwor
CisgICAgUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiBtX2NsaWVudDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNl
bmRpZiAvLyBQZWVyQ29ubmVjdGlvbkhhbmRsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
CmluZGV4IDFmNjBjNGRkZjgyZDYyMTQ2NDNmMjhhNTQzYzBhZDkyOWI1ZDkzYjAuLjAzNTQzM2Rm
MTliYjI5MTY2ZGJlYWY1ODQ3ZGMxNzVkNmZjYmZiMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAKQEAgLTkxLDYgKzkxLDkgQEAKICAgICAgICAgICAgICAgICAnV0VCS0lUX0lNUExFTUVO
VEFUSU9OPTEnLAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICdzb3VyY2VzJzogWworICAg
ICAgICAgICAgICAgICdicmlkZ2UvUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcCcsCisgICAgICAg
ICAgICAgICAgJ2JyaWRnZS9QZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5jcHAnLAorICAg
ICAgICAgICAgICAgICdicmlkZ2UvUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9hbmRyb2lkL1dlYlNhbmRib3hTdXBwb3J0LmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvYW5kcm9pZC9XZWJUaGVtZUVuZ2luZS5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL2d0ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5oJywKQEAgLTIzMSw2ICsy
MzQsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFQbGF5ZXIuaCcsCiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVBsYXllckFjdGlvbi5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYk1lZGlhUGxheWVyQ2xpZW50LmgnLAorICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViTWVudUl0ZW1JbmZvLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVzc2Fn
ZVBvcnRDaGFubmVsLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVzc2FnZVBvcnRD
aGFubmVsQ2xpZW50LmgnLApAQCAtMjUwLDYgKzI1NCw4IEBACiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJQYWdlU2VyaWFsaXplckNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYlBhZ2VWaXNpYmlsaXR5U3RhdGUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQ
YXNzd29yZEZvcm1EYXRhLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGVlckNvbm5l
Y3Rpb25IYW5kbGVyLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGVlckNvbm5lY3Rp
b25IYW5kbGVyQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGVyZm9ybWFu
Y2UuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQZXJtaXNzaW9uQ2xpZW50LmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUGx1Z2luLmgnLApAQCAtNTU1LDYgKzU2MSw3IEBA
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYUVsZW1lbnQuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMv
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJO
YW1lZE5vZGVNYXAuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk5ldHdvcmtTdGF0ZU5v
dGlmaWVyLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJOb2RlLmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVyQ29ubmVjdGlvbkhhbmRsZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvUGVlckNvbm5lY3Rpb25IYW5kbGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mZjM5MzBiOWZhOTU4YTZlM2M1YjQ3MjI2NzNlMTM1ZDZhYmY3NTU2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvUGVlckNv
bm5lY3Rpb25IYW5kbGVyLmNwcApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBp
dHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIlBlZXJDb25uZWN0
aW9uSGFuZGxlci5oIgorCisjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50Lmgi
CisjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuaCIKKyNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8UGVl
ckNvbm5lY3Rpb25IYW5kbGVyPiBQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmNyZWF0ZShQZWVyQ29u
bmVjdGlvbkhhbmRsZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1
cmF0aW9uLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKK3sKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFBlZXJDb25uZWN0aW9uSGFuZGxlcihjbGllbnQsIHNlcnZl
ckNvbmZpZ3VyYXRpb24sIHNlY3VyaXR5T3JpZ2luKSk7Cit9CisKK1BlZXJDb25uZWN0aW9uSGFu
ZGxlcjo6UGVlckNvbm5lY3Rpb25IYW5kbGVyKFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCog
Y2xpZW50LCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luKQorICAgIDogbV9wcml2YXRlKGFkb3B0UHRyKG5l
dyBQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbChjbGllbnQsIHNlcnZlckNvbmZpZ3VyYXRp
b24sIHNlY3VyaXR5T3JpZ2luKSkpCit7Cit9CisKK1BlZXJDb25uZWN0aW9uSGFuZGxlcjo6flBl
ZXJDb25uZWN0aW9uSGFuZGxlcigpCit7Cit9CisKK3ZvaWQgUGVlckNvbm5lY3Rpb25IYW5kbGVy
Ojpwcm9kdWNlSW5pdGlhbE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYg
cGVuZGluZ0FkZFN0cmVhbXMpCit7CisgICAgbV9wcml2YXRlLT5wcm9kdWNlSW5pdGlhbE9mZmVy
KHBlbmRpbmdBZGRTdHJlYW1zKTsKK30KKwordm9pZCBQZWVyQ29ubmVjdGlvbkhhbmRsZXI6Omhh
bmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmIHNkcCkKK3sKKyAgICBtX3ByaXZhdGUtPmhh
bmRsZUluaXRpYWxPZmZlcihzZHApOworfQorCit2b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6
cHJvY2Vzc1NEUChjb25zdCBTdHJpbmcmIHNkcCkKK3sKKyAgICBtX3ByaXZhdGUtPnByb2Nlc3NT
RFAoc2RwKTsKK30KKwordm9pZCBQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnByb2Nlc3NQZW5kaW5n
U3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJl
YW1zLCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdSZW1vdmVTdHJl
YW1zKQoreworICAgIG1fcHJpdmF0ZS0+cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKHBlbmRpbmdBZGRT
dHJlYW1zLCBwZW5kaW5nUmVtb3ZlU3RyZWFtcyk7Cit9CisKK3ZvaWQgUGVlckNvbm5lY3Rpb25I
YW5kbGVyOjpzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxl
bmd0aCkKK3sKKyAgICBtX3ByaXZhdGUtPnNlbmREYXRhU3RyZWFtTWVzc2FnZShkYXRhLCBsZW5n
dGgpOworfQorCit2b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6c3RvcCgpCit7CisgICAgbV9w
cml2YXRlLT5zdG9wKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L2JyaWRnZS9QZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL2JyaWRnZS9QZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMDFjYTY2YmI4ZjBhZGE1NmI1MzM1OWY2MWY5MTRkZDg5OWJhMDlkMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL1BlZXJDb25uZWN0aW9uSGFu
ZGxlckludGVybmFsLmNwcApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24u
CisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRz
IGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJQZWVyQ29ubmVjdGlv
bkhhbmRsZXJJbnRlcm5hbC5oIgorCisjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xp
ZW50LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJXZWJLaXQuaCIK
KyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlICJXZWJNZWRpYVN0
cmVhbURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCIK
KyNpbmNsdWRlICJXZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BlZXJDb25uZWN0aW9u
SGFuZGxlckludGVybmFsOjpQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbChQZWVyQ29ubmVj
dGlvbkhhbmRsZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0
aW9uLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKKyAgICA6IG1f
Y2xpZW50KGNsaWVudCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fd2ViSGFuZGxl
ciA9IGFkb3B0UHRyKFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNyZWF0ZVBlZXJD
b25uZWN0aW9uSGFuZGxlcih0aGlzKSk7CisgICAgbV93ZWJIYW5kbGVyLT5pbml0aWFsaXplKHNl
cnZlckNvbmZpZ3VyYXRpb24sIHNlY3VyaXR5T3JpZ2luKTsKK30KKworUGVlckNvbm5lY3Rpb25I
YW5kbGVySW50ZXJuYWw6On5QZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbCgpCit7Cit9CisK
K3N0YXRpYyB2b2lkIGNvcHlJdGVtcyhXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvcj4mIHJlc3VsdCwgY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVj
dG9yJiBzdHJlYW1zKQoreworICAgIHNpemVfdCBudW1iZXJPZlN0cmVhbXMgPSBzdHJlYW1zLnNp
emUoKTsKKyAgICBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvcj4gd2ViU3RyZWFtcyhudW1iZXJPZlN0cmVhbXMpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZTdHJlYW1zOyArK2kpCisgICAgICAgIHdlYlN0cmVhbXNbaV0gPSBzdHJl
YW1zW2ldOworICAgIHJlc3VsdC5zd2FwKHdlYlN0cmVhbXMpOworfQorCit2b2lkIFBlZXJDb25u
ZWN0aW9uSGFuZGxlckludGVybmFsOjpwcm9kdWNlSW5pdGlhbE9mZmVyKGNvbnN0IE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMpCit7CisgICAgV2ViS2l0OjpX
ZWJWZWN0b3I8V2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0cmVhbXNUb0FkZDsK
KyAgICBjb3B5SXRlbXMoc3RyZWFtc1RvQWRkLCBwZW5kaW5nQWRkU3RyZWFtcyk7CisgICAgbV93
ZWJIYW5kbGVyLT5wcm9kdWNlSW5pdGlhbE9mZmVyKHN0cmVhbXNUb0FkZCk7Cit9CisKK3ZvaWQg
UGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OmhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBT
dHJpbmcmIHNkcCkKK3sKKyAgICBtX3dlYkhhbmRsZXItPmhhbmRsZUluaXRpYWxPZmZlcihzZHAp
OworfQorCit2b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpwcm9jZXNzU0RQKGNv
bnN0IFN0cmluZyYgc2RwKQoreworICAgIG1fd2ViSGFuZGxlci0+cHJvY2Vzc1NEUChzZHApOwor
fQorCit2b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpwcm9jZXNzUGVuZGluZ1N0
cmVhbXMoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFt
cywgY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nUmVtb3ZlU3RyZWFt
cykKK3sKKyAgICBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvcj4gc3RyZWFtc1RvQWRkOworICAgIGNvcHlJdGVtcyhzdHJlYW1zVG9BZGQsIHBlbmRpbmdB
ZGRTdHJlYW1zKTsKKyAgICBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYk1lZGlhU3RyZWFt
RGVzY3JpcHRvcj4gc3RyZWFtc1RvUmVtb3ZlOworICAgIGNvcHlJdGVtcyhzdHJlYW1zVG9BZGQs
IHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKKyAgICBtX3dlYkhhbmRsZXItPnByb2Nlc3NQZW5kaW5n
U3RyZWFtcyhzdHJlYW1zVG9BZGQsIHN0cmVhbXNUb1JlbW92ZSk7Cit9CisKK3ZvaWQgUGVlckNv
bm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OnNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFy
KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIG1fd2ViSGFuZGxlci0+c2VuZERhdGFTdHJl
YW1NZXNzYWdlKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgUGVlckNvbm5lY3Rpb25IYW5kbGVy
SW50ZXJuYWw6OnN0b3AoKQoreworICAgIG1fd2ViSGFuZGxlci0+c3RvcCgpOworfQorCit2b2lk
IFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjppY2VQcm9jZXNzaW5nQ29tcGxldGVkKCkK
K3sKKyAgICBtX2NsaWVudC0+aWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpOworfQorCit2b2lkIFBl
ZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpzZHBHZW5lcmF0ZWQoY29uc3QgV2ViS2l0OjpX
ZWJTdHJpbmcmIHNkcCkKK3sKKyAgICBtX2NsaWVudC0+c2RwR2VuZXJhdGVkKHNkcCk7Cit9CisK
K3ZvaWQgUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OmRhdGFTdHJlYW1NZXNzYWdlUmVj
ZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBtX2NsaWVudC0+
ZGF0YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZChkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFBlZXJD
b25uZWN0aW9uSGFuZGxlckludGVybmFsOjpyZW1vdGVTdHJlYW1BZGRlZChjb25zdCBXZWJLaXQ6
OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYgd2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yKQorewor
ICAgIG1fY2xpZW50LT5yZW1vdGVTdHJlYW1BZGRlZCh3ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3Ip
OworfQorCit2b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpyZW1vdGVTdHJlYW1S
ZW1vdmVkKGNvbnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJiB3ZWJNZWRpYVN0
cmVhbURlc2NyaXB0b3IpCit7CisgICAgbV9jbGllbnQtPnJlbW90ZVN0cmVhbVJlbW92ZWQod2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vYnJpZGdlL1BlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmMwNDcxOWI3NmZkZWMxOWZkMzBiMTM5MGE5ZDYzNTI0MTFlMjBhMTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVyQ29ubmVjdGlv
bkhhbmRsZXJJbnRlcm5hbC5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9u
LgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0
cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBlZXJDb25u
ZWN0aW9uSGFuZGxlckludGVybmFsX2gKKyNkZWZpbmUgUGVlckNvbm5lY3Rpb25IYW5kbGVySW50
ZXJuYWxfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIk1lZGlhU3Ry
ZWFtRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVu
dC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K2NsYXNzIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlcjsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNz
IFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQ7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsK
KworY2xhc3MgUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwgOiBwdWJsaWMgV2ViS2l0OjpX
ZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQgeworcHVibGljOgorICAgIFBlZXJDb25uZWN0
aW9uSGFuZGxlckludGVybmFsKFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCosIGNvbnN0IFN0
cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pOwor
ICAgIH5QZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbCgpOworCisgICAgdmlydHVhbCB2b2lk
IHByb2R1Y2VJbml0aWFsT2ZmZXIoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBw
ZW5kaW5nQWRkU3RyZWFtcyk7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUluaXRpYWxPZmZlcihj
b25zdCBTdHJpbmcmIHNkcCk7CisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NTRFAoY29uc3QgU3Ry
aW5nJiBzZHApOworICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzUGVuZGluZ1N0cmVhbXMoY29uc3Qg
TWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcywgY29uc3QgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nUmVtb3ZlU3RyZWFtcyk7CisgICAgdmly
dHVhbCB2b2lkIHNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qg
bGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOworCisgICAgLy8gV2ViS2l0OjpXZWJQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2
b2lkIGljZVByb2Nlc3NpbmdDb21wbGV0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2RwR2VuZXJh
dGVkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBzZHApOworICAgIHZpcnR1YWwgdm9pZCBkYXRh
U3RyZWFtTWVzc2FnZVJlY2VpdmVkKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdGVTdHJlYW1BZGRlZChjb25zdCBXZWJLaXQ6OldlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvciYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdGVTdHJlYW1SZW1vdmVk
KGNvbnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJik7CisKK3ByaXZhdGU6Cisg
ICAgT3duUHRyPFdlYktpdDo6V2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyPiBtX3dlYkhhbmRsZXI7
CisgICAgUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiBtX2NsaWVudDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNl
bmRpZiAvLyBQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oCmluZGV4IDRl
YWJiM2JhNDcwMzUzZTY2YTdiNDVhMzNmYTNlMjMwN2M4Y2NlZTAuLjUyODE0Nzk0ZDlkMjE0YWNi
YzNlOGMxNzI0YTIzZTA1YTE3ZWUyYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oCkBAIC02MSw2ICs2MSw4IEBAIGNs
YXNzIFdlYklEQkZhY3Rvcnk7CiBjbGFzcyBXZWJJREJLZXk7CiBjbGFzcyBXZWJNZXNzYWdlUG9y
dENoYW5uZWw7CiBjbGFzcyBXZWJNaW1lUmVnaXN0cnk7CitjbGFzcyBXZWJQZWVyQ29ubmVjdGlv
bkhhbmRsZXI7CitjbGFzcyBXZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQ7CiBjbGFzcyBX
ZWJQbHVnaW5MaXN0QnVpbGRlcjsKIGNsYXNzIFdlYlNhbmRib3hTdXBwb3J0OwogY2xhc3MgV2Vi
U2hhcmVkV29ya2VyUmVwb3NpdG9yeTsKQEAgLTMyMSw2ICszMjMsMTAgQEAgcHVibGljOgogICAg
IC8vIE11c3QgcmV0dXJuIG5vbi1udWxsLgogICAgIHZpcnR1YWwgV2ViRmlsZVN5c3RlbSogZmls
ZVN5c3RlbSgpIHsgcmV0dXJuIDA7IH0KIAorICAgIC8vIFdlYlJUQyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICB2aXJ0dWFs
IFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlciogY3JlYXRlUGVlckNvbm5lY3Rpb25IYW5kbGVyKFdl
YlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCopIHsgcmV0dXJuIDA7IH0KKwogcHJvdGVjdGVk
OgogICAgIH5XZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKSB7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkwMGQ2NGRjZmUyN2U5ZmIzNDFjYjc0MjBhZDRkYzVmMGJlZDE3MmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVh
bURlc2NyaXB0b3IuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
Yk1lZGlhU3RyZWFtRGVzY3JpcHRvcl9oCisjZGVmaW5lIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRv
cl9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJOb25Db3B5YWJsZS5o
IgorI2luY2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yIDogcHVibGljIFdlYk5vbkNvcHlhYmxlIHsKK3B1
YmxpYzoKKyAgICBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IoKSB7IH0KKyAgICB+V2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yKCkgeyByZXNldCgpOyB9CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
aW5pdGlhbGl6ZSgpOyAvLyBGSVhNRTogQWRkIHBhcmFtcy4KKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgcmVzZXQoKTsKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpdmF0ZS5p
c051bGwoKTsgfQorCisgICAgLy8gRklYTUU6IEFkZCBmdW5jdGlvbnMuCisKKyNpZiBXRUJLSVRf
SU1QTEVNRU5UQVRJT04KKyAgICBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IoY29uc3QgV1RGOjpQ
YXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcj4mKTsKKyAgICBvcGVyYXRv
ciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yPigpIGNvbnN0
OworICAgIG9wZXJhdG9yIFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvciooKSBjb25zdDsK
KyAgICBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiYpOworI2VuZGlmCisKK3ByaXZh
dGU6CisgICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+IG1f
cHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlBlZXJDb25uZWN0aW9uSGFuZGxlci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGYzNTU5NTRk
ZDg0MTdlMWY0MzdlODZhNmUzN2MwNjRlYTE2ZjY1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBlZXJDb25uZWN0aW9uSGFuZGxlci5oCkBAIC0w
LDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGVlckNvbm5lY3Rpb25IYW5k
bGVyX2gKKyNkZWZpbmUgV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyX2gKKworI2luY2x1ZGUgIldl
YlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2Vi
VmVjdG9yLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJNZWRpYVN0cmVhbURl
c2NyaXB0b3I7CitjbGFzcyBXZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQ7CisKKy8vIE5v
dGU6CisvLyBTRFAgc3RhbmRzIGZvciBTZXNzaW9uIERlc2NyaXB0aW9uIFByb3RvY29sLCB3aGlj
aCBpcyBpbnRlbmRlZCBmb3IgZGVzY3JpYmluZworLy8gbXVsdGltZWRpYSBzZXNzaW9ucyBmb3Ig
dGhlIHB1cnBvc2VzIG9mIHNlc3Npb24gYW5ub3VuY2VtZW50LCBzZXNzaW9uCisvLyBpbnZpdGF0
aW9uLCBhbmQgb3RoZXIgZm9ybXMgb2YgbXVsdGltZWRpYSBzZXNzaW9uIGluaXRpYXRpb24uCisv
LworLy8gTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaGVyZToKKy8vIGh0dHA6Ly90b29s
cy5pZXRmLm9yZy9odG1sL3JmYzQ1NjYKKy8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kv
U2Vzc2lvbl9EZXNjcmlwdGlvbl9Qcm90b2NvbAorCisKK2NsYXNzIFdlYlBlZXJDb25uZWN0aW9u
SGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViUGVlckNvbm5lY3Rpb25IYW5kbGVy
KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBXZWJTdHJpbmcmIHNl
cnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJikgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIHByb2R1Y2VJbml0aWFsT2ZmZXIoY29uc3QgV2ViVmVjdG9yPFdlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvcj4mIHBlbmRpbmdBZGRTdHJlYW1zKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBXZWJTdHJpbmcmIHNkcCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBwcm9jZXNzU0RQKGNvbnN0IFdlYlN0cmluZyYgc2RwKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBXZWJWZWN0b3I8V2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yPiYgcGVuZGluZ0FkZFN0cmVhbXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJN
ZWRpYVN0cmVhbURlc2NyaXB0b3I+JiBwZW5kaW5nUmVtb3ZlU3RyZWFtcykgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90
IGxlbmd0aCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQZWVyQ29ubmVj
dGlvbkhhbmRsZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBl
ZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwNzQ3MmUzMzhhYzIxZWQ5
Y2M3MzE1NTc2ZjE3MDMyMDVmZTRkZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaApAQCAtMCww
ICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxl
ckNsaWVudF9oCisjZGVmaW5lIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudF9oCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I7CitjbGFz
cyBXZWJTdHJpbmc7CisKK2NsYXNzIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+V2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KCkgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgaWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2RwR2VuZXJhdGVkKGNvbnN0IFdlYlN0cmluZyYgc2RwKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRhdGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IGxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdGVTdHJlYW1BZGRlZChj
b25zdCBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJl
bW90ZVN0cmVhbVJlbW92ZWQoY29uc3QgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJikgPSAwOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJQZWVyQ29ubmVjdGlv
bkhhbmRsZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDM2NmNkZjVmN2ExNmVi
YjAzMmU3OWJkNTE1MzM0MTNkOTE1ZmIxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKQEAgLTAsMCArMSw2
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKKworI2luY2x1ZGUgIldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgorCisj
aW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6OldlYk1l
ZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFT
dHJlYW1EZXNjcmlwdG9yPiYgbWVkaWFTdHJlYW1EZXNjcmlwdG9yKQorICAgIDogbV9wcml2YXRl
KG1lZGlhU3RyZWFtRGVzY3JpcHRvcikKK3sKK30KKwordm9pZCBXZWJNZWRpYVN0cmVhbURlc2Ny
aXB0b3I6OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoKTsKK30KKworV2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yJiBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3I6Om9wZXJhdG9yPShjb25z
dCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiYgbWVkaWFT
dHJlYW1EZXNjcmlwdG9yKQoreworICAgIG1fcHJpdmF0ZSA9IG1lZGlhU3RyZWFtRGVzY3JpcHRv
cjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6b3Bl
cmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcj4oKSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7Cit9CisKK1dlYk1lZGlhU3RyZWFt
RGVzY3JpcHRvcjo6b3BlcmF0b3IgV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yKigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113079</attachid>
            <date>2011-10-31 13:26:38 -0700</date>
            <delta_ts>2011-10-31 17:44:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58550-20111031212635.patch</filename>
            <type>text/plain</type>
            <size>58470</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg4NzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzOGRkNmQwNWFkYzg0ZjJj
YWIwOWIzYTlhM2NjMjU5MTA3MWUyMzU1Li40NDVhN2U3YjhmM2Q4MTI5MTQwNjJmNWY1ZmU4MGFi
ZGI1OWI2OGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMTAtMzEgIFRvbW15
IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVtXSBN
ZWRpYSBTdHJlYW0gQVBJOiBhZGQgdGhlIENocm9taXVtIFdlYktpdCBpbnRlcmZhY2VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODU1MAorCisgICAg
ICAgIENoYW5nZXMgdGhlIFBlZXJIYW5kbGVyIHBsYXRmb3JtIGludGVyZmFjZSBzbyB0aGF0IGVt
YmVkZGVycyBjYW4gbW9yZSBlYXNpbHkgdXNlIGl0LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OlBlZXJDb25uZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpkaWRDb21wbGV0ZUlDRVByb2Nl
c3NpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmRpZEdlbmVyYXRlU0RQ
KToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpkaWRSZWNlaXZlRGF0YVN0cmVh
bU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmRpZEFkZFJlbW90
ZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6ZGlkUmVtb3ZlUmVt
b3RlU3RyZWFtKToKKyAgICAgICAgKiBtZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5oOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFu
ZGxlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQ6
On5QZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2Nocm9taXVtL1BlZXJDb25uZWN0aW9uSGFuZGxlci5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5oLgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9QZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFu
ZGxlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OlBlZXJDb25uZWN0
aW9uSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkhhbmRsZXI6On5Q
ZWVyQ29ubmVjdGlvbkhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb25I
YW5kbGVyOjpwcm9kdWNlSW5pdGlhbE9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25u
ZWN0aW9uSGFuZGxlcjo6aGFuZGxlSW5pdGlhbE9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBl
ZXJDb25uZWN0aW9uSGFuZGxlcjo6cHJvY2Vzc1NEUCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVy
Q29ubmVjdGlvbkhhbmRsZXI6OnByb2Nlc3NQZW5kaW5nU3RyZWFtcyk6CisgICAgICAgIChXZWJD
b3JlOjpQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnNlbmREYXRhU3RyZWFtTWVzc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnN0b3ApOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9QZWVyQ29ubmVjdGlvbkhhbmRsZXIuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVy
LmguCisKKyAgICAgICAgVGVzdHMgZm9yIHRoZSBNZWRpYSBTdHJlYW0gQVBJIHdpbGwgYmUgcHJv
dmlkZWQgYnkgdGhlIGJ1ZyA1NjU4NywgcGVuZGluZyBlbm91Z2ggbGFuZGVkIGNvZGUuCisKIDIw
MTEtMTAtMzEgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIENT
U1J1bGU6IERldmlydHVhbGl6ZSBpbnNlcnRlZEludG9QYXJlbnQoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA4OGRmYjFhNjE0MzRkYTg1ZjAwNjg3ODBhYWEyYjQ4OTVjOTc2ZDBlLi40
OTllYTI2NThjYWY1MjJjZDAxY2EyZjlkYzk1YTM4N2I4YjY5MWFiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDExLTEwLTMxICBUb21teSBXaWRlbmZseWNo
dCAgPHRvbW15d0Bnb29nbGUuY29tPgorCisgICAgICAgIFtDaHJvbWl1bV0gTWVkaWEgU3RyZWFt
IEFQSTogYWRkIHRoZSBDaHJvbWl1bSBXZWJLaXQgaW50ZXJmYWNlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg1NTAKKworICAgICAgICBBZGRzIHRo
ZSBicmlkZ2luZyBjb2RlICsgdGhlIG1pbmltdW0gYW1vdW50IG9mIFdlYiogc3VwcG9ydGluZyBj
b2RlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViS2l0Lmd5cDoKKyAgICAgICAgKiBicmlkZ2UvUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5k
bGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uSGFuZGxlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uSGFuZGxlcjo6UGVlckNvbm5lY3Rp
b25IYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uSGFuZGxlcjo6flBl
ZXJDb25uZWN0aW9uSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkhh
bmRsZXI6OnByb2R1Y2VJbml0aWFsT2ZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5l
Y3Rpb25IYW5kbGVyOjpoYW5kbGVJbml0aWFsT2ZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ckNvbm5lY3Rpb25IYW5kbGVyOjpwcm9jZXNzU0RQKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJD
b25uZWN0aW9uSGFuZGxlcjo6cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKToKKyAgICAgICAgKFdlYkNv
cmU6OlBlZXJDb25uZWN0aW9uSGFuZGxlcjo6c2VuZERhdGFTdHJlYW1NZXNzYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uSGFuZGxlcjo6c3RvcCk6CisgICAgICAgICogYnJp
ZGdlL1BlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6UGVlckNvbm5lY3Rpb25IYW5k
bGVySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb25IYW5kbGVySW50
ZXJuYWw6On5QZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6cHJvZHVjZUluaXRpYWxPZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6aGFuZGxlSW5p
dGlhbE9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uSGFuZGxlckludGVy
bmFsOjpwcm9jZXNzU0RQKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uSGFuZGxl
ckludGVybmFsOjpwcm9jZXNzUGVuZGluZ1N0cmVhbXMpOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OnNlbmREYXRhU3RyZWFtTWVzc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6c3RvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6ZGlkQ29tcGxldGVJ
Q0VQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uSGFuZGxlcklu
dGVybmFsOjpkaWRHZW5lcmF0ZVNEUCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlv
bkhhbmRsZXJJbnRlcm5hbDo6ZGlkUmVjZWl2ZURhdGFTdHJlYW1NZXNzYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpkaWRBZGRSZW1vdGVTdHJl
YW0pOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OmRp
ZFJlbW92ZVJlbW90ZVN0cmVhbSk6CisgICAgICAgICogYnJpZGdlL1BlZXJDb25uZWN0aW9uSGFu
ZGxlckludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJLaXRQbGF0Zm9ybVN1
cHBvcnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UGxhdGZvcm1TdXBwb3J0OjpjcmVhdGVQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXIpOgorICAgICAgICAqIHB1YmxpYy9XZWJNZWRpYVN0cmVhbURl
c2NyaXB0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yOjp+V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yKToKKyAgICAgICAg
KFdlYktpdDo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjppc051bGwpOgorICAgICAgICAqIHB1
YmxpYy9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlBlZXJDb25uZWN0aW9uSGFuZGxlcjo6fldlYlBlZXJDb25uZWN0aW9uSGFuZGxlcik6Cisg
ICAgICAgICogcHVibGljL1dlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50Ojp+V2ViUGVl
ckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KToKKyAgICAgICAgKiBzcmMvV2ViTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVz
Y3JpcHRvcjo6V2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFT
dHJlYW1EZXNjcmlwdG9yOjpvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFT
dHJlYW1EZXNjcmlwdG9yPik6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjo6b3BlcmF0b3IgV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yKik6CisKKyAgICAg
ICAgVGVzdHMgZm9yIHRoZSBNZWRpYSBTdHJlYW0gQVBJIHdpbGwgYmUgcHJvdmlkZWQgYnkgdGhl
IGJ1ZyA1NjU4NywgcGVuZGluZyBlbm91Z2ggbGFuZGVkIGNvZGUuCisKIDIwMTEtMTAtMzEgIFBh
dmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IG1vdmUgbG9jYWxpemF0aW9uIHN1cHBvcnQgaW50byBVSVV0aWwuanMsIHJlZHVjZSBleHRl
cm5zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA3MTE2NjEyZTZjYjZhNmJjNjgzNDZiMzUzYjE0
M2Y3MmE4N2M0ZmUzLi40MjY3NTAyMmFhOTNhNzZhMmRlODkyNDI3NzRmNDU4MWZjZjA2NmQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNjEsNiArNjEsNyBAQCB3ZWJjb3JlX2NwcGZsYWdzICs9
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9w
bmcgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIgXAogCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtIFwKKwktSSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIgXAogCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sgXAogCS1JJChzcmNkaXIpL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA1ZGFj
NzMyYWYzMWVjNTI3NWJmOGU4ZTRiZmMxNGRhOWFhZGM3NzUyLi5hYjZhMTUxMTExOTcxY2I5Yzk2
OTc2MjIxNmYyY2MzNDM3MTVkNThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTI3NDMsOCArMjc0Myw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Db21wb25lbnQuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmggXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuaCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJDb25uZWN0aW9u
SGFuZGxlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9QZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bW9jay9EZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tb2NrL0RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tb2NrL0dlb2xvY2F0aW9uQ2xpZW50TW9jay5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCA5YjcxOTAyN2EyYTI1ZDVkOWQ2ODE3ZjIw
OTI2NzZkNDM3OGFlMmZlLi4wOTc0M2Y5M2IyYzA3ZDUzMTQ2YjYwZjY1ZWVkY2Q3Mjk2ZGMzNWQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtMTk0LDYgKzE5NCw3
IEBACiAgICAgICAnLi4vcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYScsCiAgICAgICAnLi4v
cGxhdGZvcm0vbGV2ZWxkYicsCiAgICAgICAnLi4vcGxhdGZvcm0vbWVkaWFzdHJlYW0nLAorICAg
ICAgJy4uL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtJywKICAgICAgICcuLi9wbGF0Zm9y
bS9tb2NrJywKICAgICAgICcuLi9wbGF0Zm9ybS9uZXR3b3JrJywKICAgICAgICcuLi9wbGF0Zm9y
bS9uZXR3b3JrL2Nocm9taXVtJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxZDY3MWZjMjE5MTg5NTY5
MDY1NDg2YjY0MWU3MjFjZWVlN2RkOWJiLi41N2E4OTEyMTlkNTZjMjU2M2RmMTBmYzZjMGRlNWEy
NDEwYzYxZGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC04MTYsOCArODE2LDggQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNvbXBvbmVudC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaCcsCi0g
ICAgICAgICAgICAncGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuY3BwJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50Lmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL21vY2svRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2Nr
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VC
YXNlLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNvbm5l
Y3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uY3Bw
CmluZGV4IDdiNWFlNjcyMGMyNzNkODVlODkwZTZjOWRiOTQzNzZjYmE4ZjNjNGYuLjhjODllMjU0
Y2QzYmRkMTRlMDBkMWU1YTgxNDlmNTI3NmVhMjQyNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9t
ZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgUGVlckNvbm5l
Y3Rpb246OlBlZXJDb25uZWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFN0cmluZyYgc2UKICAgICAsIG1faW5pdGlhbE5lZ290aWF0aW9uVGltZXIodGhpcywgJlBl
ZXJDb25uZWN0aW9uOjppbml0aWFsTmVnb3RpYXRpb25UaW1lckZpcmVkKQogICAgICwgbV9zdHJl
YW1DaGFuZ2VUaW1lcih0aGlzLCAmUGVlckNvbm5lY3Rpb246OnN0cmVhbUNoYW5nZVRpbWVyRmly
ZWQpCiAgICAgLCBtX3JlYWR5U3RhdGVDaGFuZ2VUaW1lcih0aGlzLCAmUGVlckNvbm5lY3Rpb246
OnJlYWR5U3RhdGVDaGFuZ2VUaW1lckZpcmVkKQotICAgICwgbV9wZWVySGFuZGxlcihQZWVySGFu
ZGxlcjo6Y3JlYXRlKHRoaXMsIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnRleHQtPnNlY3VyaXR5
T3JpZ2luKCktPnRvU3RyaW5nKCkpKQorICAgICwgbV9wZWVySGFuZGxlcihQZWVyQ29ubmVjdGlv
bkhhbmRsZXI6OmNyZWF0ZSh0aGlzLCBzZXJ2ZXJDb25maWd1cmF0aW9uLCBjb250ZXh0LT5zZWN1
cml0eU9yaWdpbigpKSkKIHsKIH0KIApAQCAtMTg3LDI2ICsxODcsMjYgQEAgdm9pZCBQZWVyQ29u
bmVjdGlvbjo6Y2xvc2UoRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgc3RvcCgpOwogfQogCi12b2lk
IFBlZXJDb25uZWN0aW9uOjppY2VQcm9jZXNzaW5nQ29tcGxldGVkKCkKK3ZvaWQgUGVlckNvbm5l
Y3Rpb246OmRpZENvbXBsZXRlSUNFUHJvY2Vzc2luZygpCiB7CiAgICAgQVNTRVJUKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIGNoYW5nZVJlYWR5U3Rh
dGUoQUNUSVZFKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6c2RwR2VuZXJhdGVkKGNvbnN0
IFN0cmluZyYgc2RwKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6ZGlkR2VuZXJhdGVTRFAoY29uc3Qg
U3RyaW5nJiBzZHApCiB7CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXND
b250ZXh0VGhyZWFkKCkpOwogICAgIG1fc2lnbmFsaW5nQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCJT
RFBcbiIgKyBzZHAsIHRoaXMpOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpkYXRhU3RyZWFt
TWVzc2FnZVJlY2VpdmVkKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQg
UGVlckNvbm5lY3Rpb246OmRpZFJlY2VpdmVEYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UgPSBTdHJp
bmc6OmZyb21VVEY4KGRhdGEsIGxlbmd0aCk7CiAgICAgZGlzcGF0Y2hFdmVudChNZXNzYWdlRXZl
bnQ6OmNyZWF0ZShQYXNzT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+KCksIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKG1lc3NhZ2UpKSk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnJl
bW90ZVN0cmVhbUFkZGVkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1E
ZXNjcmlwdG9yKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6ZGlkQWRkUmVtb3RlU3RyZWFtKFBhc3NS
ZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1EZXNjcmlwdG9yKQogewogICAgIEFT
U0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKIApAQCAt
MjE5LDcgKzIxOSw3IEBAIHZvaWQgUGVlckNvbm5lY3Rpb246OnJlbW90ZVN0cmVhbUFkZGVkKFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1ECiAgICAgZGlzcGF0Y2hFdmVu
dChNZWRpYVN0cmVhbUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFkZHN0cmVhbUV2ZW50LCBm
YWxzZSwgZmFsc2UsIHN0cmVhbS5yZWxlYXNlKCkpKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlv
bjo6cmVtb3RlU3RyZWFtUmVtb3ZlZChNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbURlc2Ny
aXB0b3IpCit2b2lkIFBlZXJDb25uZWN0aW9uOjpkaWRSZW1vdmVSZW1vdGVTdHJlYW0oTWVkaWFT
dHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9yKQogewogICAgIEFTU0VSVChzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBBU1NFUlQoc3RyZWFt
RGVzY3JpcHRvci0+b3duZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tZWRpYXN0
cmVhbS9QZWVyQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvbWVkaWFzdHJlYW0vUGVlckNv
bm5lY3Rpb24uaAppbmRleCA3ZjRiMmY1YTY2YWM0ZGZmODM2MGQ4MDU4ZWMxMDBmMGFjYzAxNmVk
Li5kMjlkMTYyNWZjOGYwOGFmZWI0YWYzN2FiMDI3YmY1MDU4YzU2YTA2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uLmgKQEAgLTMzLDcgKzMzLDggQEAKICNp
bmNsdWRlICJFeGNlcHRpb25CYXNlLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKICNpbmNs
dWRlICJNZWRpYVN0cmVhbUxpc3QuaCIKLSNpbmNsdWRlICJQZWVySGFuZGxlci5oIgorI2luY2x1
ZGUgIlBlZXJDb25uZWN0aW9uSGFuZGxlci5oIgorI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uSGFu
ZGxlckNsaWVudC5oIgogI2luY2x1ZGUgIlNpZ25hbGluZ0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00MSw3ICs0MiwxNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBlZXJDb25uZWN0aW9uIDogcHVibGljIFJlZkNv
dW50ZWQ8UGVlckNvbm5lY3Rpb24+LCBwdWJsaWMgUGVlckhhbmRsZXJDbGllbnQsIHB1YmxpYyBF
dmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CisvLyBOb3RlOgorLy8gU0RQIHN0
YW5kcyBmb3IgU2Vzc2lvbiBEZXNjcmlwdGlvbiBQcm90b2NvbCwgd2hpY2ggaXMgaW50ZW5kZWQg
Zm9yIGRlc2NyaWJpbmcKKy8vIG11bHRpbWVkaWEgc2Vzc2lvbnMgZm9yIHRoZSBwdXJwb3NlcyBv
ZiBzZXNzaW9uIGFubm91bmNlbWVudCwgc2Vzc2lvbgorLy8gaW52aXRhdGlvbiwgYW5kIG90aGVy
IGZvcm1zIG9mIG11bHRpbWVkaWEgc2Vzc2lvbiBpbml0aWF0aW9uLgorLy8KKy8vIE1vcmUgaW5m
b3JtYXRpb24gY2FuIGJlIGZvdW5kIGhlcmU6CisvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRt
bC9yZmM0NTY2CisvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Nlc3Npb25fRGVzY3Jp
cHRpb25fUHJvdG9jb2wKKworY2xhc3MgUGVlckNvbm5lY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRl
ZDxQZWVyQ29ubmVjdGlvbj4sIHB1YmxpYyBQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQsIHB1
YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8UGVlckNvbm5lY3Rpb24+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNp
Z25hbGluZ0NhbGxiYWNrPik7CiAgICAgflBlZXJDb25uZWN0aW9uKCk7CkBAIC03MSwxMiArODEs
MTIgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYWRkc3Ry
ZWFtKTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHJlbW92ZXN0cmVhbSk7
CiAKLSAgICAvLyBQZWVySGFuZGxlckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBpY2VQcm9jZXNz
aW5nQ29tcGxldGVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNkcEdlbmVyYXRlZChjb25zdCBTdHJp
bmcmIHNkcCk7Ci0gICAgdmlydHVhbCB2b2lkIGRhdGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQoY29u
c3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3Rl
U3RyZWFtQWRkZWQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+KTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3RlU3RyZWFtUmVtb3ZlZChNZWRpYVN0cmVhbURlc2NyaXB0b3IqKTsKKyAg
ICAvLyBQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29t
cGxldGVJQ0VQcm9jZXNzaW5nKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEdlbmVyYXRlU0RQKGNv
bnN0IFN0cmluZyYgc2RwKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGFTdHJlYW1N
ZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRBZGRSZW1vdGVTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+KTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlUmVtb3RlU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3Jp
cHRvciopOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OwpAQCAtMTI1LDcgKzEzNSw3IEBAIHByaXZhdGU6
CiAgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yIG1fcGVuZGluZ1JlbW92ZVN0cmVhbXM7
CiAgICAgVmVjdG9yPFJlYWR5U3RhdGU+IG1fcGVuZGluZ1JlYWR5U3RhdGVzOwogCi0gICAgT3du
UHRyPFBlZXJIYW5kbGVyPiBtX3BlZXJIYW5kbGVyOworICAgIE93blB0cjxQZWVyQ29ubmVjdGlv
bkhhbmRsZXI+IG1fcGVlckhhbmRsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVj
dGlvbkhhbmRsZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdkNzdiNWYwYjI1OGI2
ODUzZjFkNTk5M2JiM2Y5ZTIwNmMxYzE4MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaApA
QCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBBQi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudF9o
CisjZGVmaW5lIFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudF9oCisKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVN0
cmVhbURlc2NyaXB0b3I7CisKK2NsYXNzIFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+UGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KCkgeyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVJQ0VQcm9jZXNzaW5nKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkaWRHZW5lcmF0ZVNEUChjb25zdCBTdHJpbmcmIHNkcCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IGxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRSZW1vdGVTdHJlYW0o
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlbW92ZVJlbW90ZVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqKSA9IDA7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFN
KQorCisjZW5kaWYgLy8gUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkxYzhhYWRkNzgwY2JkNWY3YWZkMWViMGI5Njk0ZWVh
YmM0ZjBkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVySGFuZGxlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNz
c29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAzLiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlICJQZWVySGFuZGxlci5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEZJWE1FOiByZW1vdmUgd2hlbiByZWFsIGltcGxlbWVudGF0
aW9ucyBhcmUgYXZhaWxhYmxlCi0vLyBFbXB0eSBpbXBsZW1lbnRhdGlvbnMgZm9yIHBvcnRzIHRo
YXQgYnVpbGQgd2l0aCBNRURJQV9TVFJFQU0gZW5hYmxlZCBieSBkZWZhdWx0LgotUGVlckhhbmRs
ZXI6OlBlZXJIYW5kbGVyKFBlZXJIYW5kbGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJikKLXsKLX0KLQotUGVlckhhbmRsZXI6On5QZWVySGFuZGxlcigpCi17Ci19Ci0KLXZv
aWQgUGVlckhhbmRsZXI6OnByb2R1Y2VJbml0aWFsT2ZmZXIoY29uc3QgTWVkaWFTdHJlYW1EZXNj
cmlwdG9yVmVjdG9yJikKLXsKLX0KLQotdm9pZCBQZWVySGFuZGxlcjo6aGFuZGxlSW5pdGlhbE9m
ZmVyKGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgUGVlckhhbmRsZXI6OnByb2Nlc3NTRFAo
Y29uc3QgU3RyaW5nJikKLXsKLX0KLQotdm9pZCBQZWVySGFuZGxlcjo6cHJvY2Vzc1BlbmRpbmdT
dHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYsIGNvbnN0IE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvclZlY3RvciYpCi17Ci19Ci0KLXZvaWQgUGVlckhhbmRsZXI6OnNlbmREYXRh
U3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiwgdW5zaWduZWQpCi17Ci19Ci0KLXZvaWQgUGVlckhh
bmRsZXI6OnN0b3AoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vUGVlckhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1BlZXJIYW5kbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2
MTRlZGY5YjE3Y2ZmNmIyMjIxMGQzNTNmMjJjYTI4OGI4NTNlNWIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUGVlckhhbmRsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqICAgIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBQZWVySGFuZGxlcl9oCi0jZGVmaW5lIFBlZXJIYW5kbGVyX2gKLQotI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIK
LSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IFBlZXJIYW5kbGVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5QZWVySGFuZGxlckNs
aWVudCgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGljZVByb2Nlc3NpbmdDb21wbGV0ZWQoKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNkcEdlbmVyYXRlZChjb25zdCBTdHJpbmcmIHNkcCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBkYXRhU3RyZWFtTWVzc2FnZVJlY2VpdmVkKGNvbnN0IGNoYXIq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdGVTdHJl
YW1BZGRlZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4pID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3RlU3RyZWFtUmVtb3ZlZChNZWRpYVN0cmVhbURlc2NyaXB0b3IqKSA9IDA7
Ci19OwotCi1jbGFzcyBQZWVySGFuZGxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGVl
ckhhbmRsZXIpOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPFBlZXJIYW5kbGVyPiBjcmVhdGUoUGVlckhhbmRsZXJDbGllbnQqIGNs
aWVudCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBjb25zdCBTdHJpbmcmIHVz
ZXJuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQZWVySGFuZGxlcihj
bGllbnQsIHNlcnZlckNvbmZpZ3VyYXRpb24sIHVzZXJuYW1lKSk7Ci0gICAgfQotICAgIHZpcnR1
YWwgflBlZXJIYW5kbGVyKCk7Ci0KLSAgICB2b2lkIHByb2R1Y2VJbml0aWFsT2ZmZXIoY29uc3Qg
TWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcyk7Ci0gICAgdm9p
ZCBoYW5kbGVJbml0aWFsT2ZmZXIoY29uc3QgU3RyaW5nJiBzZHApOwotICAgIHZvaWQgcHJvY2Vz
c1NEUChjb25zdCBTdHJpbmcmIHNkcCk7Ci0gICAgdm9pZCBwcm9jZXNzUGVuZGluZ1N0cmVhbXMo
Y29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcywgY29u
c3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nUmVtb3ZlU3RyZWFtcyk7Ci0g
ICAgdm9pZCBzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKTsKLQotICAgIHZvaWQgc3RvcCgpOwotCi1wcml2YXRlOgotICAgIFBlZXJIYW5kbGVy
KFBlZXJIYW5kbGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBj
b25zdCBTdHJpbmcmIHVzZXJuYW1lKTsKLQotICAgIFBlZXJIYW5kbGVyQ2xpZW50KiBtX2NsaWVu
dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pCi0KLSNlbmRpZiAvLyBQZWVySGFuZGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9QZWVyQ29ubmVjdGlvbkhhbmRs
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1BlZXJD
b25uZWN0aW9uSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiMDkxZWRmYzMwNWU1Y2QzZGEyNmI1NmVm
MDg3ZjY5ZjI2NDJjMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9QZWVyQ29ubmVjdGlvbkhhbmRsZXIuaApAQCAtMCwwICsx
LDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisg
KiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgUGVlckNvbm5lY3Rpb25IYW5kbGVyX2gKKyNkZWZpbmUgUGVl
ckNvbm5lY3Rpb25IYW5kbGVyX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNs
dWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVu
dDsKK2NsYXNzIFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOworY2xhc3MgU2VjdXJpdHlP
cmlnaW47CisKK2NsYXNzIFBlZXJDb25uZWN0aW9uSGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUGVlckNvbm5lY3Rpb25IYW5kbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxQZWVyQ29ubmVjdGlvbkhhbmRs
ZXI+IGNyZWF0ZShQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIHNl
cnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKKyAgICB+UGVl
ckNvbm5lY3Rpb25IYW5kbGVyKCk7CisKKyAgICB2b2lkIHByb2R1Y2VJbml0aWFsT2ZmZXIoY29u
c3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcyk7CisgICAg
dm9pZCBoYW5kbGVJbml0aWFsT2ZmZXIoY29uc3QgU3RyaW5nJiBzZHApOworICAgIHZvaWQgcHJv
Y2Vzc1NEUChjb25zdCBTdHJpbmcmIHNkcCk7CisgICAgdm9pZCBwcm9jZXNzUGVuZGluZ1N0cmVh
bXMoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcywg
Y29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nUmVtb3ZlU3RyZWFtcyk7
CisgICAgdm9pZCBzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90
IGxlbmd0aCk7CisKKyAgICB2b2lkIHN0b3AoKTsKKworcHJpdmF0ZToKKyAgICBQZWVyQ29ubmVj
dGlvbkhhbmRsZXIoUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBz
ZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPik7CisKKyAgICBP
d25QdHI8UGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw+IG1fcHJpdmF0ZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisK
KyNlbmRpZiAvLyBQZWVyQ29ubmVjdGlvbkhhbmRsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJDb25uZWN0aW9uSGFuZGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUGVl
ckNvbm5lY3Rpb25IYW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NTY5YjVmZGI4MDA5OGMwODc0Y2Zm
Yjk1MDVjODk3ODcwNjZmOTI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAKQEAg
LTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorCisjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgiCisKKyNpbmNs
dWRlICJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8UGVlckNvbm5lY3Rp
b25IYW5kbGVyPiBQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmNyZWF0ZShQZWVyQ29ubmVjdGlvbkhh
bmRsZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFBlZXJDb25uZWN0aW9uSGFuZGxlcihjbGllbnQsIHNlcnZlckNvbmZpZ3Vy
YXRpb24sIHNlY3VyaXR5T3JpZ2luKSk7Cit9CisKKy8vIEZJWE1FOiByZW1vdmUgd2hlbiByZWFs
IGltcGxlbWVudGF0aW9ucyBhcmUgYXZhaWxhYmxlCisvLyBFbXB0eSBpbXBsZW1lbnRhdGlvbnMg
Zm9yIHBvcnRzIHRoYXQgYnVpbGQgd2l0aCBNRURJQV9TVFJFQU0gZW5hYmxlZCBieSBkZWZhdWx0
LgorUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpQZWVyQ29ubmVjdGlvbkhhbmRsZXIoUGVlckNvbm5l
Y3Rpb25IYW5kbGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4pCit7Cit9CisKK1BlZXJDb25uZWN0aW9uSGFuZGxlcjo6flBlZXJDb25uZWN0aW9uSGFu
ZGxlcigpCit7Cit9CisKK3ZvaWQgUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpwcm9kdWNlSW5pdGlh
bE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYpCit7Cit9CisKK3ZvaWQg
UGVlckNvbm5lY3Rpb25IYW5kbGVyOjpoYW5kbGVJbml0aWFsT2ZmZXIoY29uc3QgU3RyaW5nJikK
K3sKK30KKwordm9pZCBQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnByb2Nlc3NTRFAoY29uc3QgU3Ry
aW5nJikKK3sKK30KKwordm9pZCBQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnByb2Nlc3NQZW5kaW5n
U3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImLCBjb25zdCBNZWRpYVN0
cmVhbURlc2NyaXB0b3JWZWN0b3ImKQoreworfQorCit2b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxl
cjo6c2VuZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqLCBzaXplX3QpCit7Cit9CisKK3Zv
aWQgUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpzdG9wKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9QZWVyQ29ubmVjdGlv
bkhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9QZWVyQ29ubmVjdGlvbkhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YTA3ZjQ1YmU4MDRkN2U3NzJl
MGIzYWJlNmM3MmI3OGNlYjI3Y2I2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJDb25uZWN0aW9uSGFuZGxlci5oCkBA
IC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhl
IG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAg
ICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
IHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQZWVyQ29ubmVjdGlvbkhhbmRsZXJfaAorI2Rl
ZmluZSBQZWVyQ29ubmVjdGlvbkhhbmRsZXJfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
KworI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGVlckNvbm5lY3Rpb25IYW5k
bGVyQ2xpZW50OworY2xhc3MgU2VjdXJpdHlPcmlnaW47CisKK2NsYXNzIFBlZXJDb25uZWN0aW9u
SGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGVlckNvbm5lY3Rpb25IYW5kbGVy
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxQZWVyQ29ubmVjdGlvbkhhbmRsZXI+IGNyZWF0ZShQZWVyQ29ubmVjdGlvbkhhbmRs
ZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+KTsKKyAgICB+UGVlckNvbm5lY3Rpb25IYW5kbGVyKCk7CisKKyAgICB2
b2lkIHByb2R1Y2VJbml0aWFsT2ZmZXIoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9y
JiBwZW5kaW5nQWRkU3RyZWFtcyk7CisgICAgdm9pZCBoYW5kbGVJbml0aWFsT2ZmZXIoY29uc3Qg
U3RyaW5nJiBzZHApOworICAgIHZvaWQgcHJvY2Vzc1NEUChjb25zdCBTdHJpbmcmIHNkcCk7Cisg
ICAgdm9pZCBwcm9jZXNzUGVuZGluZ1N0cmVhbXMoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9y
VmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcywgY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVj
dG9yJiBwZW5kaW5nUmVtb3ZlU3RyZWFtcyk7CisgICAgdm9pZCBzZW5kRGF0YVN0cmVhbU1lc3Nh
Z2UoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7CisKKyAgICB2b2lkIHN0b3AoKTsK
KworcHJpdmF0ZToKKyAgICBQZWVyQ29ubmVjdGlvbkhhbmRsZXIoUGVlckNvbm5lY3Rpb25IYW5k
bGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPik7CisKKyAgICBQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQqIG1f
Y2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIFBlZXJDb25uZWN0aW9uSGFuZGxlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggMWY2MGM0ZGRmODJkNjIxNDY0M2YyOGE1NDNjMGFk
OTI5YjVkOTNiMC4uMDM1NDMzZGYxOWJiMjkxNjZkYmVhZjU4NDdkYzE3NWQ2ZmNiZmIxMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtOTEsNiArOTEsOSBAQAogICAgICAgICAgICAg
ICAgICdXRUJLSVRfSU1QTEVNRU5UQVRJT049MScsCiAgICAgICAgICAgICBdLAogICAgICAgICAg
ICAgJ3NvdXJjZXMnOiBbCisgICAgICAgICAgICAgICAgJ2JyaWRnZS9QZWVyQ29ubmVjdGlvbkhh
bmRsZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnYnJpZGdlL1BlZXJDb25uZWN0aW9uSGFuZGxl
ckludGVybmFsLmNwcCcsCisgICAgICAgICAgICAgICAgJ2JyaWRnZS9QZWVyQ29ubmVjdGlvbkhh
bmRsZXJJbnRlcm5hbC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL2FuZHJvaWQvV2ViU2Fu
ZGJveFN1cHBvcnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9hbmRyb2lkL1dlYlRoZW1l
RW5naW5lLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvZ3RrL1dlYklucHV0RXZlbnRGYWN0
b3J5LmgnLApAQCAtMjMxLDYgKzIzNCw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJN
ZWRpYVBsYXllci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlhUGxheWVyQWN0
aW9uLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFQbGF5ZXJDbGllbnQuaCcs
CisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZW51SXRlbUluZm8uaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJNZXNzYWdlUG9ydENoYW5uZWwuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJNZXNzYWdlUG9ydENoYW5uZWxDbGllbnQuaCcsCkBAIC0yNTAsNiArMjU0LDggQEAK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViUGFnZVZpc2liaWxpdHlTdGF0ZS5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYlBhc3N3b3JkRm9ybURhdGEuaCcsCisgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCcsCisgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJQZXJmb3JtYW5jZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlBl
cm1pc3Npb25DbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJQbHVnaW4uaCcs
CkBAIC01NTUsNiArNTYxLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhRWxlbWVu
dC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuaCcsCisg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYk5hbWVkTm9kZU1hcC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViTmV0d29ya1N0YXRlTm90aWZpZXIuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
Yk5vZGUuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL1Bl
ZXJDb25uZWN0aW9uSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9Q
ZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmMzkzMGI5ZmE5NThhNmUzYzVi
NDcyMjY3M2UxMzVkNmFiZjc1NTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL2JyaWRnZS9QZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwCkBAIC0wLDAgKzEsODkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3Nv
biBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisj
aW5jbHVkZSAiUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgiCisKKyNpbmNsdWRlICJQZWVyQ29ubmVj
dGlvbkhhbmRsZXJDbGllbnQuaCIKKyNpbmNsdWRlICJQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRl
cm5hbC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGFzc093blB0cjxQZWVyQ29ubmVjdGlvbkhhbmRsZXI+IFBlZXJDb25uZWN0aW9uSGFu
ZGxlcjo6Y3JlYXRlKFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCogY2xpZW50LCBjb25zdCBT
dHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNl
Y3VyaXR5T3JpZ2luKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGVlckNvbm5lY3Rpb25I
YW5kbGVyKGNsaWVudCwgc2VydmVyQ29uZmlndXJhdGlvbiwgc2VjdXJpdHlPcmlnaW4pKTsKK30K
KworUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpQZWVyQ29ubmVjdGlvbkhhbmRsZXIoUGVlckNvbm5l
Y3Rpb25IYW5kbGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJh
dGlvbiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4pCisgICAgOiBt
X3ByaXZhdGUoYWRvcHRQdHIobmV3IFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsKGNsaWVu
dCwgc2VydmVyQ29uZmlndXJhdGlvbiwgc2VjdXJpdHlPcmlnaW4pKSkKK3sKK30KKworUGVlckNv
bm5lY3Rpb25IYW5kbGVyOjp+UGVlckNvbm5lY3Rpb25IYW5kbGVyKCkKK3sKK30KKwordm9pZCBQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnByb2R1Y2VJbml0aWFsT2ZmZXIoY29uc3QgTWVkaWFTdHJl
YW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcykKK3sKKyAgICBtX3ByaXZhdGUt
PnByb2R1Y2VJbml0aWFsT2ZmZXIocGVuZGluZ0FkZFN0cmVhbXMpOworfQorCit2b2lkIFBlZXJD
b25uZWN0aW9uSGFuZGxlcjo6aGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYgc2RwKQor
eworICAgIG1fcHJpdmF0ZS0+aGFuZGxlSW5pdGlhbE9mZmVyKHNkcCk7Cit9CisKK3ZvaWQgUGVl
ckNvbm5lY3Rpb25IYW5kbGVyOjpwcm9jZXNzU0RQKGNvbnN0IFN0cmluZyYgc2RwKQoreworICAg
IG1fcHJpdmF0ZS0+cHJvY2Vzc1NEUChzZHApOworfQorCit2b2lkIFBlZXJDb25uZWN0aW9uSGFu
ZGxlcjo6cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZl
Y3RvciYgcGVuZGluZ0FkZFN0cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3Rv
ciYgcGVuZGluZ1JlbW92ZVN0cmVhbXMpCit7CisgICAgbV9wcml2YXRlLT5wcm9jZXNzUGVuZGlu
Z1N0cmVhbXMocGVuZGluZ0FkZFN0cmVhbXMsIHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKK30KKwor
dm9pZCBQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIG1fcHJpdmF0ZS0+c2VuZERhdGFTdHJl
YW1NZXNzYWdlKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgUGVlckNvbm5lY3Rpb25IYW5kbGVy
OjpzdG9wKCkKK3sKKyAgICBtX3ByaXZhdGUtPnN0b3AoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL1BlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL1BlZXJDb25uZWN0aW9uSGFuZGxl
ckludGVybmFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzA0MTlhMGI3MDkwYjdjNjlhYjY4MGMyMTAzNzFm
YTIwZThkMGRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlk
Z2UvUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuY3BwCkBAIC0wLDAgKzEsMTExIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQorCisjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuaCIKKworI2lu
Y2x1ZGUgIlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCisjaW5jbHVkZSAiV2ViS2l0LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1T
dXBwb3J0LmgiCisjaW5jbHVkZSAiV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVk
ZSAiV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViUGVlckNvbm5lY3Rp
b25IYW5kbGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6UGVlckNvbm5l
Y3Rpb25IYW5kbGVySW50ZXJuYWwoUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiBjbGllbnQs
IGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gc2VjdXJpdHlPcmlnaW4pCisgICAgOiBtX2NsaWVudChjbGllbnQpCit7CisgICAgQVNT
RVJUKG1fY2xpZW50KTsKKyAgICBtX3dlYkhhbmRsZXIgPSBhZG9wdFB0cihXZWJLaXQ6OndlYktp
dFBsYXRmb3JtU3VwcG9ydCgpLT5jcmVhdGVQZWVyQ29ubmVjdGlvbkhhbmRsZXIodGhpcykpOwor
ICAgIG1fd2ViSGFuZGxlci0+aW5pdGlhbGl6ZShzZXJ2ZXJDb25maWd1cmF0aW9uLCBzZWN1cml0
eU9yaWdpbik7Cit9CisKK1BlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjp+UGVlckNvbm5l
Y3Rpb25IYW5kbGVySW50ZXJuYWwoKQoreworfQorCit2b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxl
ckludGVybmFsOjpwcm9kdWNlSW5pdGlhbE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRv
clZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMpCit7CisgICAgbV93ZWJIYW5kbGVyLT5wcm9kdWNl
SW5pdGlhbE9mZmVyKHBlbmRpbmdBZGRTdHJlYW1zKTsKK30KKwordm9pZCBQZWVyQ29ubmVjdGlv
bkhhbmRsZXJJbnRlcm5hbDo6aGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYgc2RwKQor
eworICAgIG1fd2ViSGFuZGxlci0+aGFuZGxlSW5pdGlhbE9mZmVyKHNkcCk7Cit9CisKK3ZvaWQg
UGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OnByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBz
ZHApCit7CisgICAgbV93ZWJIYW5kbGVyLT5wcm9jZXNzU0RQKHNkcCk7Cit9CisKK3ZvaWQgUGVl
ckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OnByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBN
ZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zLCBjb25zdCBNZWRp
YVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdSZW1vdmVTdHJlYW1zKQoreworICAgIG1f
d2ViSGFuZGxlci0+cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKHBlbmRpbmdBZGRTdHJlYW1zLCBwZW5k
aW5nUmVtb3ZlU3RyZWFtcyk7Cit9CisKK3ZvaWQgUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJu
YWw6OnNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3Ro
KQoreworICAgIG1fd2ViSGFuZGxlci0+c2VuZERhdGFTdHJlYW1NZXNzYWdlKGRhdGEsIGxlbmd0
aCk7Cit9CisKK3ZvaWQgUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OnN0b3AoKQorewor
ICAgIG1fd2ViSGFuZGxlci0+c3RvcCgpOworfQorCit2b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxl
ckludGVybmFsOjpkaWRDb21wbGV0ZUlDRVByb2Nlc3NpbmcoKQoreworICAgIG1fY2xpZW50LT5k
aWRDb21wbGV0ZUlDRVByb2Nlc3NpbmcoKTsKK30KKwordm9pZCBQZWVyQ29ubmVjdGlvbkhhbmRs
ZXJJbnRlcm5hbDo6ZGlkR2VuZXJhdGVTRFAoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHNkcCkK
K3sKKyAgICBtX2NsaWVudC0+ZGlkR2VuZXJhdGVTRFAoc2RwKTsKK30KKwordm9pZCBQZWVyQ29u
bmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6ZGlkUmVjZWl2ZURhdGFTdHJlYW1NZXNzYWdlKGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVE
YXRhU3RyZWFtTWVzc2FnZShkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFBlZXJDb25uZWN0aW9u
SGFuZGxlckludGVybmFsOjpkaWRBZGRSZW1vdGVTdHJlYW0oY29uc3QgV2ViS2l0OjpXZWJNZWRp
YVN0cmVhbURlc2NyaXB0b3ImIHdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcikKK3sKKyAgICBtX2Ns
aWVudC0+ZGlkQWRkUmVtb3RlU3RyZWFtKHdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcik7Cit9CisK
K3ZvaWQgUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OmRpZFJlbW92ZVJlbW90ZVN0cmVh
bShjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYgd2ViTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yKQoreworICAgIG1fY2xpZW50LT5kaWRSZW1vdmVSZW1vdGVTdHJlYW0od2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vYnJpZGdlL1BlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL2JyaWRnZS9QZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmM1YTRkNjQwNjY0ZDM5MGZkNGE1MGFiNDU3NjkzN2U5NmRmMWIxODAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVyQ29ubmVjdGlvbkhh
bmRsZXJJbnRlcm5hbC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
UGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWxfaAorI2RlZmluZSBQZWVyQ29ubmVjdGlvbkhh
bmRsZXJJbnRlcm5hbF9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViUGVlckNvbm5lY3Rpb25IYW5k
bGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworY2xhc3MgV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyOworY2xhc3MgV2ViU3RyaW5n
OworY2xhc3MgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOworfQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudDsKK2NsYXNzIFNlY3VyaXR5
T3JpZ2luOworCitjbGFzcyBQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbCA6IHB1YmxpYyBX
ZWJLaXQ6OldlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCB7CitwdWJsaWM6CisgICAgUGVl
ckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwoUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50Kiwg
Y29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPik7CisgICAgflBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcHJvZHVjZUluaXRpYWxPZmZlcihjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JW
ZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlSW5pdGlh
bE9mZmVyKGNvbnN0IFN0cmluZyYgc2RwKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1NEUChj
b25zdCBTdHJpbmcmIHNkcCk7CisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NQZW5kaW5nU3RyZWFt
cyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zLCBj
b25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2VuZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisKKyAgICAvLyBXZWJL
aXQ6OldlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2
aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVJQ0VQcm9jZXNzaW5nKCk7CisgICAgdmlydHVhbCB2b2lk
IGRpZEdlbmVyYXRlU0RQKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBzZHApOworICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgc2l6
ZV90IGxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEFkZFJlbW90ZVN0cmVhbShjb25zdCBX
ZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZW1vdmVSZW1vdGVTdHJlYW0oY29uc3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3Im
KTsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8V2ViS2l0OjpXZWJQZWVyQ29ubmVjdGlvbkhhbmRs
ZXI+IG1fd2ViSGFuZGxlcjsKKyAgICBQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQqIG1fY2xp
ZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1F
RElBX1NUUkVBTSkKKworI2VuZGlmIC8vIFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdFBsYXRmb3Jt
U3VwcG9ydC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1T
dXBwb3J0LmgKaW5kZXggNGVhYmIzYmE0NzAzNTNlNjZhN2I0NWEzM2ZhM2UyMzA3YzhjY2VlMC4u
NTI4MTQ3OTRkOWQyMTRhY2JjM2U4YzE3MjRhMjNlMDVhMTdlZTJhYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgKQEAg
LTYxLDYgKzYxLDggQEAgY2xhc3MgV2ViSURCRmFjdG9yeTsKIGNsYXNzIFdlYklEQktleTsKIGNs
YXNzIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbDsKIGNsYXNzIFdlYk1pbWVSZWdpc3RyeTsKK2NsYXNz
IFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlcjsKK2NsYXNzIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxl
ckNsaWVudDsKIGNsYXNzIFdlYlBsdWdpbkxpc3RCdWlsZGVyOwogY2xhc3MgV2ViU2FuZGJveFN1
cHBvcnQ7CiBjbGFzcyBXZWJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OwpAQCAtMzIxLDYgKzMyMywx
MCBAQCBwdWJsaWM6CiAgICAgLy8gTXVzdCByZXR1cm4gbm9uLW51bGwuCiAgICAgdmlydHVhbCBX
ZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtKCkgeyByZXR1cm4gMDsgfQogCisgICAgLy8gV2ViUlRD
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgIHZpcnR1YWwgV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyKiBjcmVhdGVQZWVyQ29u
bmVjdGlvbkhhbmRsZXIoV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KikgeyByZXR1cm4g
MDsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgfldlYktpdFBsYXRmb3JtU3VwcG9ydCgpIHsgfQogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFt
RGVzY3JpcHRvci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJl
YW1EZXNjcmlwdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYThkOWEwNWU0MTA2NmFmMTUzMzliMTM4NTY1ZDdl
NTgyNDk3YjZmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yX2gKKyNkZWZpbmUgV2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUg
IldlYk5vbkNvcHlhYmxlLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3I7Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IgeworcHVibGljOgor
ICAgIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcigpIHsgfQorICAgIH5XZWJNZWRpYVN0cmVhbURl
c2NyaXB0b3IoKSB7IHJlc2V0KCk7IH0KKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFs
aXplKCk7IC8vIEZJWE1FOiBBZGQgcGFyYW1zLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNl
dCgpOworICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9wcml2YXRlLmlzTnVsbCgp
OyB9CisKKyAgICAvLyBGSVhNRTogQWRkIGZ1bmN0aW9ucy4KKworI2lmIFdFQktJVF9JTVBMRU1F
TlRBVElPTgorICAgIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiYpOworICAgIG9wZXJhdG9yIFdURjo6
UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+KCkgY29uc3Q7CisgICAg
b3BlcmF0b3IgV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yKigpIGNvbnN0OworICAgIFdl
Yk1lZGlhU3RyZWFtRGVzY3JpcHRvciYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+Jik7CisjZW5kaWYKKworcHJpdmF0ZToKKyAg
ICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gbV9wcml2YXRl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJNZWRpYVN0cmVh
bURlc2NyaXB0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjM1NTk1NGRkODQxN2Ux
ZjQzN2U4NmE2ZTM3YzA2NGVhMTZmNjU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgKQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJfaAor
I2RlZmluZSBXZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJfaAorCisjaW5jbHVkZSAiV2ViU2VjdXJp
dHlPcmlnaW4uaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3Iu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRv
cjsKK2NsYXNzIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudDsKKworLy8gTm90ZToKKy8v
IFNEUCBzdGFuZHMgZm9yIFNlc3Npb24gRGVzY3JpcHRpb24gUHJvdG9jb2wsIHdoaWNoIGlzIGlu
dGVuZGVkIGZvciBkZXNjcmliaW5nCisvLyBtdWx0aW1lZGlhIHNlc3Npb25zIGZvciB0aGUgcHVy
cG9zZXMgb2Ygc2Vzc2lvbiBhbm5vdW5jZW1lbnQsIHNlc3Npb24KKy8vIGludml0YXRpb24sIGFu
ZCBvdGhlciBmb3JtcyBvZiBtdWx0aW1lZGlhIHNlc3Npb24gaW5pdGlhdGlvbi4KKy8vCisvLyBN
b3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBoZXJlOgorLy8gaHR0cDovL3Rvb2xzLmlldGYu
b3JnL2h0bWwvcmZjNDU2NgorLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TZXNzaW9u
X0Rlc2NyaXB0aW9uX1Byb3RvY29sCisKKworY2xhc3MgV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVy
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXIoKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKGNvbnN0IFdlYlN0cmluZyYgc2VydmVyQ29u
ZmlndXJhdGlvbiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mKSA9IDA7CisKKyAgICB2aXJ0dWFs
IHZvaWQgcHJvZHVjZUluaXRpYWxPZmZlcihjb25zdCBXZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yPiYgcGVuZGluZ0FkZFN0cmVhbXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFdlYlN0cmluZyYgc2RwKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHByb2Nlc3NTRFAoY29uc3QgV2ViU3RyaW5nJiBzZHApID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbURl
c2NyaXB0b3I+JiBwZW5kaW5nQWRkU3RyZWFtcywgY29uc3QgV2ViVmVjdG9yPFdlYk1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcj4mIHBlbmRpbmdSZW1vdmVTdHJlYW1zKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNlbmREYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3Ro
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBlZXJDb25uZWN0aW9uSGFu
ZGxlckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGVlckNvbm5l
Y3Rpb25IYW5kbGVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGFjNzhkNzhiMDY3NjVjNDgzOTFjYTU3
NDFmNzBmMDRjYTU0M2JiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oCkBAIC0wLDAgKzEsNDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50
X2gKKyNkZWZpbmUgV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50X2gKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjsKK2NsYXNzIFdlYlN0
cmluZzsKKworY2xhc3MgV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQoKSB7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZUlDRVByb2Nlc3NpbmcoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRpZEdlbmVyYXRlU0RQKGNvbnN0IFdlYlN0cmluZyYgc2RwKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCBz
aXplX3QgbGVuZ3RoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEFkZFJlbW90ZVN0cmVhbShj
b25zdCBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFJlbW92ZVJlbW90ZVN0cmVhbShjb25zdCBXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImKSA9IDA7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlBlZXJDb25uZWN0
aW9uSGFuZGxlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzY2Y2RmNWY3YTE2
ZWJiMDMyZTc5YmQ1MTUzMzQxM2Q5MTVmYjEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcApAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCisK
KyNpbmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6V2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRp
YVN0cmVhbURlc2NyaXB0b3I+JiBtZWRpYVN0cmVhbURlc2NyaXB0b3IpCisgICAgOiBtX3ByaXZh
dGUobWVkaWFTdHJlYW1EZXNjcmlwdG9yKQoreworfQorCit2b2lkIFdlYk1lZGlhU3RyZWFtRGVz
Y3JpcHRvcjo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgpOworfQorCitXZWJNZWRp
YVN0cmVhbURlc2NyaXB0b3ImIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6b3BlcmF0b3I9KGNv
bnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I+JiBtZWRp
YVN0cmVhbURlc2NyaXB0b3IpCit7CisgICAgbV9wcml2YXRlID0gbWVkaWFTdHJlYW1EZXNjcmlw
dG9yOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpv
cGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yPigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30KKworV2ViTWVkaWFTdHJl
YW1EZXNjcmlwdG9yOjpvcGVyYXRvciBXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3IqKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisK
</data>

          </attachment>
      

    </bug>

</bugzilla>