<?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>52510</bug_id>
          
          <creation_ts>2011-01-15 04:31:25 -0800</creation_ts>
          <short_desc>Web Inspector: further split InspectorController meta bug.</short_desc>
          <delta_ts>2011-08-08 22:51:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>52532</dependson>
    
    <dependson>52797</dependson>
    
    <dependson>52955</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>334883</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-01-15 04:31:25 -0800</bug_when>
    <thetext>We&apos;ve done a lot of great work in splitting various aspects of InspectorController during the last year. I think it is time for another iteration and here is what I would suggest:

[PLAN]
- InspectorController gets renamed to the InspectorAgent, it gets public API defined in the Inspector.idl [domain=Inspector]. It continues to own other agents.
- New InspectorController is created, it only contains non-instrumentation methods of the InspectorController. WebCore and WebKit use this API to control inspector (show it, close it, toggle various high-level functions):

    bool enabled() const;
    void show();
    void inspect(Node*);
    void close();

    void startUserInitiatedProfiling();
    void stopUserInitiatedProfiling();
    bool profilerEnabled() const;

    void showAndEnableDebugger();
    bool debuggerEnabled() const;

    void connectFrontend();
    void reuseFrontend();
    void disconnectFrontend();

- WebCore uses only static InspectorInstrumentation:: calls for feeding instrumentation information to the inspector. Its implementation, InspectorInstrumentationImpl is aware of the agent(s) it should dispatch signals to.
- Each Agent inherits from two interfaces: one is generated from the corresponding Inspector.idl domain (and is only used for dispatching), the other is used by the internal clients: InspectorInstrumentationImpl, InspectorController and other agents. For example:

class InspectorDebuggerAgent {
public:
    void resume();
}
}

class InspectorDebuggerDispatch {
// Generate from inspector.idl...
}

class InspectorDebuggerAgentImpl : public InspectorDebuggerAgent, public InspectorDebuggerDispatch {
...
}

InspectorInstrumentationImpl and other inspector internals only see &quot;InspectorDebuggerAgent&quot; aspect.

[STEPS]
- Rename InspectorController to InspectorAgent
- Replace all the direct instrumentation calls to the inspectorController() with InspectorInstrumentation:: wrapper delegating to the new InspectorAgent instance.
- InspectorInstrumentation gets a static binding from Page to InspectorAgent (in order to hide latter from WebCore)
- Generate dispatch interfaces for all agents
- Provide inspector internals with pointers to pure agent APIs only</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335039</commentid>
    <comment_count>1</comment_count>
      <attachid>79095</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-01-16 05:42:04 -0800</bug_when>
    <thetext>Created attachment 79095
[PATCH] Proposed change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335040</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-16 05:43:22 -0800</bug_when>
    <thetext>Attachment 79095 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/inspector/InspectorInstrumentation.h:146:  The parameter name &quot;database&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorInstrumentation.h:154:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorInstrumentation.h:155:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorInstrumentation.h:254:  The parameter name &quot;database&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorController.h:157:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorController.h:157:  The parameter name &quot;world&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 6 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335058</commentid>
    <comment_count>3</comment_count>
      <attachid>79095</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-01-16 10:29:45 -0800</bug_when>
    <thetext>Comment on attachment 79095
[PATCH] Proposed change

(attached to wrong bug)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79095</attachid>
            <date>2011-01-16 05:42:04 -0800</date>
            <delta_ts>2011-01-16 10:29:45 -0800</delta_ts>
            <desc>[PATCH] Proposed change</desc>
            <filename>instrumentation</filename>
            <type>text/plain</type>
            <size>100530</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MmE2NWRjLi45MzMzNmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTc2
IEBACisyMDExLTAxLTE2ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IG1ha2UgV2ViQ29yZSB1c2UgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCisgICAgICAg
IGZvciBpbnN0cnVtZW50YXRpb24gY2FsbHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MjUzMgorCisgICAgICAgIFRoaXMgY2hhbmdlIG1ha2VzIFdl
YkNvcmUgY2xhc3NlcyBpc3N1ZSBpbnN0cnVtZW50YXRpb24gc2lnbmFscworICAgICAgICBieSBt
ZWFucyBvZiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24gaW50ZXJmYWNlLiBJdCBjb3ZlcmVkIG1p
Z3JhdGlvbgorICAgICAgICBmb3IgRG9jdW1lbnQsIEZyYW1lTG9hZGVyLCBEYXRhYmFzZSwgRE9N
U3RvcmFnZSwgZXRjLiBJdCBmaXhlZAorICAgICAgICBpbnN0cnVtZW50YXRpb24gaGFuZGxpbmcg
Zm9yIENvbnNvbGUgYXMgd2VsbC4gVGhpcyBhbGwgaXMgYSBwYXJ0CisgICAgICAgIG9mIHN0b3J5
IGRlc2NyaWJlZCBpbiB0aGUgYnVnIDUyNTEwLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpmaW5pc2hlZFBhcnNpbmcpOgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpJbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JC
cm93c2VyRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6d2lsbEluc2Vy
dERPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OndpbGxSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dz
ZXJEZWJ1Z2dlckFnZW50Ojp3aWxsTW9kaWZ5RE9NQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6ZGVzY3JpcHRpb25Gb3JET01FdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cGF1c2VPbk5h
dGl2ZUV2ZW50SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRl
YnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OnN0b3BUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
c29sZUFnZW50Ojpjb3VudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6fkluc3BlY3RvckNvbnRy
b2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aGFuZGxlTW91
c2VQcmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDbGVh
cldpbmRvd09iamVjdEluV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6UG9zdFdvcmtlck5vdGlm
aWNhdGlvblRvRnJvbnRlbmRUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kSG9zdC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZEltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptb3VzZURpZE1vdmVPdmVy
RWxlbWVudEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpoYW5kbGVNb3VzZVByZXNzSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246Om1haW5SZXNvdXJjZUZpcmVkTG9hZEV2ZW50SW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1haW5SZXNvdXJjZUZpcmVkRE9NQ29u
dGVudEV2ZW50SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmZyYW1lRGV0YWNoZWRGcm9tUGFyZW50SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENvbW1pdExvYWRJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZUltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnRJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRD
b25zb2xlVGltaW5nSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnN0b3BDb25zb2xlVGltaW5nSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVNYXJrVGltZWxpbmVJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkU3RhcnRQcm9maWxpbmdNZXNzYWdl
VG9Db25zb2xlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZE9wZW5EYXRhYmFzZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRVc2VET01TdG9yYWdlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdvcmtlckltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREZXN0cm95V29ya2VySW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdl
YlNvY2tldEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3RJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFr
ZVJlc3BvbnNlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZENsb3NlV2ViU29ja2V0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246Om5ldHdvcmtTdGF0ZUNoYW5nZWRJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1
c0ltcGwpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zcGVjdG9yQ29u
dHJvbGxlckNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjppbnNwZWN0b3JDb250cm9sbGVyRGVsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3BlY3RlZFBhZ2VEZXN0
cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
SW5zZXJ0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZEluc2VydERPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxNb2RpZnlET01BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTW9kaWZ5RE9NQXR0cik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFuZGxlTW91
c2VQcmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNo
YXJhY3RlckRhdGFNb2RpZmllZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTY2hlZHVsZVJlc291cmNlUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEluc3RhbGxUaW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlbW92ZVRp
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbENh
bGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxDaGFuZ2VYSFJSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEV2YWx1YXRlU2NyaXB0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEZpcmVU
aW1lcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxM
YXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
TG9hZFhIUik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxSZWNhbGN1bGF0ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bWFya1Jlc291cmNlQXNDYWNoZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRMb2FkUmVzb3Vy
Y2VGcm9tTWVtb3J5Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsUmVjZWl2ZVJlc291cmNlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNlaXZlUmVzb3VyY2VSZXNwb25zZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVDb250ZW50
TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
RmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZEZhaWxMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0SW1wb3J0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptYWluUmVzb3VyY2VGaXJlZExv
YWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1h
aW5SZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVEZXRhY2hlZEZyb21QYXJlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDb21taXRMb2FkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFdyaXRlSFRNTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFVzZURP
TVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRDcmVhdGVXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWREZXN0cm95V29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkQ3JlYXRlV2ViU29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdl
YlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkQ2xvc2VXZWJTb2NrZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0
YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1l
c3NhZ2VUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpjb25zb2xlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpzdGFydENvbnNvbGVUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVNYXJrVGltZWxpbmUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRTdGFydFByb2ZpbGluZ01lc3Nh
Z2VUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjppbnNwZWN0b3JDb250cm9sbGVyRm9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3BlY3RvckNvbnRyb2xsZXJGb3JGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3BlY3RvckNvbnRyb2xs
ZXJGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
aW5zcGVjdG9yQ29udHJvbGxlcldpdGhGcm9udGVuZEZvckNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0b3JDb250cm9sbGVyV2l0aEZy
b250ZW5kRm9yRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjppbnNwZWN0b3JDb250cm9sbGVyV2l0aEZyb250ZW5kRm9yRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0b3JDb250cm9sbGVy
V2l0aEZyb250ZW5kRm9yUGFnZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRl
LmNwcDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OmRldGFjaEZyb21QYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaXNwYXRjaERpZENvbW1pdExvYWQpOgorICAgICAgICAq
IHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6bW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnQpOgorICAgICAgICAqIHBhZ2UvQ29uc29sZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb25zb2xlOjphZGRNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6OmNv
dW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6Om1hcmtUaW1lbGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb25zb2xlOjpwcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6
OnRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29uc29sZTo6dGltZUVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb25zb2xlOjpncm91cCk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjpncm91
cENvbGxhcHNlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjpncm91cEVuZCk6CisgICAg
ICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojpz
ZXNzaW9uU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmxvY2FsU3RvcmFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmRpc3BhdGNoTG9hZEV2ZW50KToKKyAg
ICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6On5QYWdlKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFi
YXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpvcGVuRGF0YWJhc2UpOgorICAg
ICAgICAqIHdvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3RXb3JrZXI6Om9uRGVzdHJveVdvcmtlcik6CisgICAgICAgICogd29ya2Vycy9TaGFyZWRX
b3JrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyOjpjcmVhdGUpOgorICAg
ICAgICAqIHdvcmtlcnMvV29ya2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcDoKKwogMjAx
MS0wMS0xNCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4
IGVkNzkwOWMuLjNiODQ3MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtOTIsNyArOTIs
NiBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgogI2luY2x1ZGUgIkltYWdlTG9hZGVyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUg
IktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCkBAIC00MjU4LDEzICs0MjU3
LDcgQEAgdm9pZCBEb2N1bWVudDo6ZmluaXNoZWRQYXJzaW5nKCkKIAogICAgICAgICBmLT5sb2Fk
ZXIoKS0+ZmluaXNoZWRQYXJzaW5nKCk7CiAKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAg
ICBpZiAoIXBhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoSW5zcGVj
dG9yQ29udHJvbGxlciogY29udHJvbGxlciA9IHBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
KQotICAgICAgICAgICAgY29udHJvbGxlci0+bWFpblJlc291cmNlRmlyZWRET01Db250ZW50RXZl
bnQoZi0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCksIHVybCgpKTsKLSNlbmRpZgorICAgICAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1haW5SZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2
ZW50KGYsIHVybCgpKTsKICAgICB9CiB9CiAKQEAgLTQ4MTUsMTMgKzQ4MDgsNiBAQCBib29sIERv
Y3VtZW50Ojppc1hIVE1MTVBEb2N1bWVudCgpIGNvbnN0CiB9CiAjZW5kaWYKIAotI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi1JbnNwZWN0b3JDb250cm9sbGVyKiBEb2N1bWVudDo6aW5zcGVjdG9yQ29u
dHJvbGxlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBhZ2UoKSA/IHBhZ2UoKS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpIDogMDsKLX0KLSNlbmRpZgotCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQogdm9pZCBEb2N1bWVudDo6d2Via2l0UmVxdWVzdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1l
bnQqIGVsZW1lbnQsIHVuc2lnbmVkIHNob3J0IGZsYWdzKQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApp
bmRleCAyODYzMTc1Li5iMzhkM2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtOTEsNyArOTEs
NiBAQCBjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogY2xhc3MgSFRNTE1hcEVsZW1lbnQ7CiBjbGFz
cyBIaXRUZXN0UmVxdWVzdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7Ci1jbGFzcyBJbnNwZWN0b3JD
b250cm9sbGVyOwogY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBET01XcmFwcGVyV29ybGQ7CiBjbGFz
cyBKU05vZGU7CkBAIC01MDIsOSArNTAxLDYgQEAgcHVibGljOgogICAgIEZyYW1lKiBmcmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0gLy8gY2FuIGJlIE5VTEwKICAgICBQYWdlKiBwYWdl
KCkgY29uc3Q7IC8vIGNhbiBiZSBOVUxMCiAgICAgU2V0dGluZ3MqIHNldHRpbmdzKCkgY29uc3Q7
IC8vIGNhbiBiZSBOVUxMCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICB2aXJ0dWFsIEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIoKSBjb25zdDsgLy8gY2FuIGJlIE5V
TEwKLSNlbmRpZgogCiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gY3JlYXRlUmFuZ2UoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKaW5kZXggMTJlYjc3Ni4u
ZTQ3M2E0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
CkBAIC01Nyw5ICs1Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogICAgIGNsYXNz
IE1lc3NhZ2VQb3J0OwogICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwotI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCi0gICAgY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKLSNlbmRpZgogCiAgICAgY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB7CiAgICAgcHVibGljOgpAQCAtODcsOSArODQsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIHVzZXJBZ2VudChj
b25zdCBLVVJMJikgY29uc3QgPSAwOwogCiAgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCk7IH0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SKQotICAgICAgICB2aXJ0dWFsIEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0jZW5kaWYKIAogICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
LCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpID0gMDsKICAgICAgICAg
dmlydHVhbCB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3Nh
Z2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggZTE2ZjRl
Zi4uYTMzYmFjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC02MSw4ICs2MSw4IEBAIGNvbnN0
IGludCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdCA9IDE2OwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JCcm93c2Vy
RGVidWdnZXJBZ2VudChJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyKQotICAgIDogbV9j
b250cm9sbGVyKGNvbnRyb2xsZXIpCitJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6SW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
Q29udHJvbGxlcikKKyAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9s
bGVyKQogICAgICwgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMKGZhbHNlKQogewogfQpA
QCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRp
ZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKIAogdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdn
ZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKQogewotICAg
IE5vZGUqIG5vZGUgPSBtX2NvbnRyb2xsZXItPm1fZG9tQWdlbnQtPm5vZGVGb3JJZChub2RlSWQp
OworICAgIE5vZGUqIG5vZGUgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZG9tQWdlbnQtPm5v
ZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0x
MzAsNyArMTMwLDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6c2V0RE9N
QnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKQogCiB2b2lkIEluc3BlY3RvckJyb3dz
ZXJEZWJ1Z2dlckFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5
cGUpCiB7Ci0gICAgTm9kZSogbm9kZSA9IG1fY29udHJvbGxlci0+bV9kb21BZ2VudC0+bm9kZUZv
cklkKG5vZGVJZCk7CisgICAgTm9kZSogbm9kZSA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9k
b21BZ2VudC0+bm9kZUZvcklkKG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm47CiAKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFn
ZW50OjpyZW1vdmVET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpCiAKIHZvaWQg
SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2RlKE5vZGUqLCBO
b2RlKiBwYXJlbnQpCiB7Ci0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2Vu
dCA9IG1fY29udHJvbGxlci0+bV9kZWJ1Z2dlckFnZW50LmdldCgpOworICAgIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZGVi
dWdnZXJBZ2VudC5nZXQoKTsKICAgICBpZiAoIWRlYnVnZ2VyQWdlbnQpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OndpbGxJbnNlcnRET01Ob2RlKE5vZGUqLCBOb2RlKiBwYXJlbnQpCiAKIHZvaWQgSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiB7
Ci0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IG1fY29udHJvbGxl
ci0+bV9kZWJ1Z2dlckFnZW50LmdldCgpOworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRl
YnVnZ2VyQWdlbnQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZGVidWdnZXJBZ2VudC5nZXQo
KTsKICAgICBpZiAoIWRlYnVnZ2VyQWdlbnQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTgyLDcg
KzE4Miw3IEBAIHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVE
T01Ob2RlKE5vZGUqIG5vZGUpCiAKIHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6
OndpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IG1fY29udHJvbGxlci0+bV9kZWJ1Z2dlckFnZW50
LmdldCgpOworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPm1fZGVidWdnZXJBZ2VudC5nZXQoKTsKICAgICBpZiAoIWRlYnVn
Z2VyQWdlbnQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQgSW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSog
dGFyZ2V0LCBsb25nIGJyCiAgICAgaWYgKCgxIDw8IGJyZWFrcG9pbnRUeXBlKSAmIGluaGVyaXRh
YmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzaykgewogICAgICAgICAvLyBGb3IgaW5oZXJpdGFibGUg
YnJlYWtwb2ludCB0eXBlcywgdGFyZ2V0IG5vZGUgaXNuJ3QgYWx3YXlzIHRoZSBzYW1lIGFzIHRo
ZSBub2RlIHRoYXQgb3ducyBhIGJyZWFrcG9pbnQuCiAgICAgICAgIC8vIFRhcmdldCBub2RlIG1h
eSBiZSB1bmtub3duIHRvIGZyb250ZW5kLCBzbyB3ZSBuZWVkIHRvIHB1c2ggaXQgZmlyc3QuCi0g
ICAgICAgIGxvbmcgdGFyZ2V0Tm9kZUlkID0gbV9jb250cm9sbGVyLT5tX2RvbUFnZW50LT5wdXNo
Tm9kZVBhdGhUb0Zyb250ZW5kKHRhcmdldCk7CisgICAgICAgIGxvbmcgdGFyZ2V0Tm9kZUlkID0g
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2RvbUFnZW50LT5wdXNoTm9kZVBhdGhUb0Zyb250ZW5k
KHRhcmdldCk7CiAgICAgICAgIEFTU0VSVCh0YXJnZXROb2RlSWQpOwogICAgICAgICBkZXNjcmlw
dGlvbi0+c2V0TnVtYmVyKCJ0YXJnZXROb2RlSWQiLCB0YXJnZXROb2RlSWQpOwogCkBAIC0yMTks
NyArMjE5LDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6ZGVzY3JpcHRp
b25Gb3JET01FdmVudChOb2RlKiB0YXJnZXQsIGxvbmcgYnIKICAgICAgICAgICAgIGRlc2NyaXB0
aW9uLT5zZXRCb29sZWFuKCJpbnNlcnRpb24iLCBpbnNlcnRpb24pOwogICAgIH0KIAotICAgIGxv
bmcgYnJlYWtwb2ludE93bmVyTm9kZUlkID0gbV9jb250cm9sbGVyLT5tX2RvbUFnZW50LT5wdXNo
Tm9kZVBhdGhUb0Zyb250ZW5kKGJyZWFrcG9pbnRPd25lcik7CisgICAgbG9uZyBicmVha3BvaW50
T3duZXJOb2RlSWQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZG9tQWdlbnQtPnB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoYnJlYWtwb2ludE93bmVyKTsKICAgICBBU1NFUlQoYnJlYWtwb2ludE93
bmVyTm9kZUlkKTsKICAgICBkZXNjcmlwdGlvbi0+c2V0TnVtYmVyKCJub2RlSWQiLCBicmVha3Bv
aW50T3duZXJOb2RlSWQpOwogICAgIGRlc2NyaXB0aW9uLT5zZXROdW1iZXIoInR5cGUiLCBicmVh
a3BvaW50VHlwZSk7CkBAIC0yNTIsNyArMjUyLDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVi
dWdnZXJBZ2VudDo6dXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKE5vZGUqIG5vZGUsIHVpbnQzMl8K
IAogdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cGF1c2VPbk5hdGl2ZUV2ZW50
SWZOZWVkZWQoY29uc3QgU3RyaW5nJiBjYXRlZ29yeVR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnRO
YW1lLCBib29sIHN5bmNocm9ub3VzKQogewotICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRl
YnVnZ2VyQWdlbnQgPSBtX2NvbnRyb2xsZXItPm1fZGVidWdnZXJBZ2VudC5nZXQoKTsKKyAgICBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5tX2RlYnVnZ2VyQWdlbnQuZ2V0KCk7CiAgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQogICAg
ICAgICByZXR1cm47CiAKQEAgLTI4Nyw3ICsyODcsNyBAQCB2b2lkIEluc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50OjpyZW1vdmVYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKQogCiB2
b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0
KGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVn
Z2VyQWdlbnQgPSBtX2NvbnRyb2xsZXItPm1fZGVidWdnZXJBZ2VudC5nZXQoKTsKKyAgICBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5tX2RlYnVnZ2VyQWdlbnQuZ2V0KCk7CiAgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQogICAgICAg
ICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmgKaW5kZXggZDhhNWI3Zi4uNTM3YmRhMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50LmgKQEAgLTUwLDkgKzUwLDkgQEAgY2xhc3MgTm9kZTsKIAogY2xhc3MgSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50PiBjcmVh
dGUoSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlcikKKyAgICBzdGF0aWMgUGFzc093blB0
cjxJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3BlY3RvckNvbnRyb2xs
ZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KGNvbnRyb2xsZXIpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudChpbnNwZWN0
b3JDb250cm9sbGVyKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+SW5zcGVjdG9yQnJvd3NlckRl
YnVnZ2VyQWdlbnQoKTsKQEAgLTgzLDcgKzgzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGhhc0Jy
ZWFrcG9pbnQoTm9kZSosIGxvbmcgdHlwZSk7CiAgICAgdm9pZCBkaXNjYXJkQmluZGluZ3MoKTsK
IAotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIG1fY29udHJvbGxlcjsKKyAgICBJbnNwZWN0b3JD
b250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7CiAgICAgSGFzaE1hcDxOb2RlKiwgdWlu
dDMyX3Q+IG1fYnJlYWtwb2ludHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fZXZlbnRMaXN0ZW5l
ckJyZWFrcG9pbnRzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX1hIUkJyZWFrcG9pbnRzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcApp
bmRleCBkNWFkNDkxLi5hNTQzY2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
IlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiU2NyaXB0Q2FsbEZyYW1lLmgiCiAjaW5j
bHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtMTE2LDcgKzExNyw3IEBAIHZvaWQgSW5zcGVjdG9y
Q29uc29sZUFnZW50OjpzdGFydFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlKQogICAgIG1fdGlt
ZXMuYWRkKHRpdGxlLCBjdXJyZW50VGltZSgpICogMTAwMCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q29uc29sZUFnZW50OjpzdG9wVGltaW5nKGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxp
bmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlTmFtZSkKK3ZvaWQgSW5zcGVjdG9yQ29uc29s
ZUFnZW50OjpzdG9wVGltaW5nKGNvbnN0IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8U2NyaXB0
Q2FsbFN0YWNrPiBjYWxsU3RhY2spCiB7CiAgICAgLy8gRm9sbG93IEZpcmVidWcncyBiZWhhdmlv
ciBvZiByZXF1aXJpbmcgYSB0aXRsZSB0aGF0IGlzIG5vdCBudWxsIG9yCiAgICAgLy8gdW5kZWZp
bmVkIGZvciB0aW1pbmcgZnVuY3Rpb25zCkBAIC0xMzIsMTIgKzEzMywxOSBAQCB2b2lkIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudDo6c3RvcFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLAogCiAgICAgZG91YmxlIGVsYXBzZWQgPSBjdXJyZW50VGltZSgpICogMTAw
MCAtIHN0YXJ0VGltZTsKICAgICBTdHJpbmcgbWVzc2FnZSA9IHRpdGxlICsgU3RyaW5nOjpmb3Jt
YXQoIjogJS4wZm1zIiwgZWxhcHNlZCk7Ci0gICAgYWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3Nh
Z2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGxpbmVO
dW1iZXIsIHNvdXJjZU5hbWUpOworICAgIGNvbnN0IFNjcmlwdENhbGxGcmFtZSYgbGFzdENhbGxl
ciA9IGNhbGxTdGFjay0+YXQoMCk7CisgICAgYWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VT
b3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGxhc3RDYWxs
ZXIubGluZU51bWJlcigpLCBsYXN0Q2FsbGVyLnNvdXJjZVVSTCgpKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDb25zb2xlQWdlbnQ6OmNvdW50KGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxp
bmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpCit2b2lkIEluc3BlY3RvckNvbnNvbGVB
Z2VudDo6Y291bnQoUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgUGFzc1Jl
ZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKIHsKLSAgICBTdHJpbmcgaWRlbnRpZmll
ciA9IG1ha2VTdHJpbmcodGl0bGUsICdAJywgc291cmNlSUQsICc6JywgU3RyaW5nOjpudW1iZXIo
bGluZU51bWJlcikpOworICAgIGNvbnN0IFNjcmlwdENhbGxGcmFtZSYgbGFzdENhbGxlciA9IGNh
bGxTdGFjay0+YXQoMCk7CisgICAgLy8gRm9sbG93IEZpcmVidWcncyBiZWhhdmlvciBvZiBjb3Vu
dGluZyB3aXRoIG51bGwgYW5kIHVuZGVmaW5lZCB0aXRsZSBpbgorICAgIC8vIHRoZSBzYW1lIGJ1
Y2tldCBhcyBubyBhcmd1bWVudAorICAgIFN0cmluZyB0aXRsZTsKKyAgICBhcmd1bWVudHMtPmdl
dEZpcnN0QXJndW1lbnRBc1N0cmluZyh0aXRsZSk7CisgICAgU3RyaW5nIGlkZW50aWZpZXIgPSBt
YWtlU3RyaW5nKHRpdGxlLCAnQCcsIGxhc3RDYWxsZXIuc291cmNlVVJMKCksICc6JywgU3RyaW5n
OjpudW1iZXIobGFzdENhbGxlci5saW5lTnVtYmVyKCkpKTsKKwogICAgIEhhc2hNYXA8U3RyaW5n
LCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ID0gbV9jb3VudHMuZmluZChpZGVudGlmaWVyKTsKICAg
ICBpbnQgY291bnQ7CiAgICAgaWYgKGl0ID09IG1fY291bnRzLmVuZCgpKQpAQCAtMTUwLDcgKzE1
OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojpjb3VudChjb25zdCBTdHJpbmcmIHRp
dGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zCiAgICAgbV9jb3VudHMuYWRkKGlkZW50aWZp
ZXIsIGNvdW50KTsKIAogICAgIFN0cmluZyBtZXNzYWdlID0gbWFrZVN0cmluZyh0aXRsZSwgIjog
IiwgU3RyaW5nOjpudW1iZXIoY291bnQpKTsKLSAgICBhZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVz
c2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGlu
ZU51bWJlciwgc291cmNlSUQpOworICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291
cmNlLCBMb2dNZXNzYWdlVHlwZSwgTG9nTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBsYXN0Q2FsbGVy
LmxpbmVOdW1iZXIoKSwgbGFzdENhbGxlci5zb3VyY2VVUkwoKSk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yQ29uc29sZUFnZW50OjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QoY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2VuZFVSTCwgdW5zaWduZWQgc2VuZExpbmVOdW1i
ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29s
ZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50
LmgKaW5kZXggYjYwZDc0NS4uOTdmY2IzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaApAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBN
ZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7CiAKICAgICB2b2lkIHN0YXJ0VGltaW5nKGNvbnN0IFN0
cmluZyYgdGl0bGUpOwotICAgIHZvaWQgc3RvcFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlLCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZU5hbWUpOwotICAgIHZvaWQg
Y291bnQoY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VJRCk7CisgICAgdm9pZCBzdG9wVGltaW5nKGNvbnN0IFN0cmluZyYgdGl0bGUs
IFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPik7CisgICAgdm9pZCBjb3VudChQYXNzUmVmUHRy
PFNjcmlwdEFyZ3VtZW50cz4sIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPik7CiAKICAgICB2
b2lkIHJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgU3RyaW5nJiBzZW5kVVJMLCB1bnNpZ25lZCBzZW5kTGluZU51bWJlcik7CiAgICAgdm9p
ZCBkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKaW5kZXggYTMyNDVhYS4uNmUwN2RmYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMzgsNiArMzgsNyBA
QAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUg
IkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50
LmgiCkBAIC0xNDcsNiArMTQ4LDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29u
dHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKIHsKICAgICBBU1NF
UlRfQVJHKHBhZ2UsIHBhZ2UpOwogICAgIEFTU0VSVF9BUkcoY2xpZW50LCBjbGllbnQpOworICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zcGVjdG9yQ29udHJvbGxlckNyZWF0ZWQocGFn
ZSwgdGhpcyk7CiB9CiAKIEluc3BlY3RvckNvbnRyb2xsZXI6On5JbnNwZWN0b3JDb250cm9sbGVy
KCkKQEAgLTE3Miw3ICsxNzQsOSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3Rl
ZFBhZ2VEZXN0cm95ZWQoKQogICAgIG1fZGVidWdnZXJBZ2VudC5jbGVhcigpOwogICAgIG1fYnJv
d3NlckRlYnVnZ2VyQWdlbnQuY2xlYXIoKTsKICNlbmRpZgorCiAgICAgQVNTRVJUKG1faW5zcGVj
dGVkUGFnZSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0b3JDb250cm9s
bGVyRGVsZXRlZChtX2luc3BlY3RlZFBhZ2UpOwogICAgIG1faW5zcGVjdGVkUGFnZSA9IDA7CiAK
ICAgICBtX2NsaWVudC0+aW5zcGVjdG9yRGVzdHJveWVkKCk7CkBAIC0zMDMsMTIgKzMwNyw2IEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGlkZUhpZ2hsaWdodCgpCiAgICAgbV9jbGllbnQt
PmhpZGVIaWdobGlnaHQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjptYXJrVGlt
ZWxpbmUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICh0aW1lbGluZUFnZW50KCkp
Ci0gICAgICAgIHRpbWVsaW5lQWdlbnQoKS0+ZGlkTWFya1RpbWVsaW5lKG1lc3NhZ2UpOwotfQot
CiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkg
fHwgIXNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSkKQEAgLTMyMSwxOCArMzE5LDE3IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCB1CiAgICAgICAgIGhpZ2hsaWdodChub2RlKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpoYW5kbGVNb3VzZVByZXNzKCkKK2Jvb2wgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6aGFuZGxlTW91c2VQcmVzcygpCiB7Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkpOwotICAg
IGlmICghbV9oaWdobGlnaHRlZE5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWVuYWJs
ZWQoKSB8fCAhc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1faGlnaGxpZ2h0ZWROb2RlOwotICAgIHNldFNl
YXJjaGluZ0Zvck5vZGUoZmFsc2UpOwotICAgIGluc3BlY3Qobm9kZS5nZXQoKSk7CisgICAgaWYg
KG1faGlnaGxpZ2h0ZWROb2RlKSB7CisgICAgICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9oaWdo
bGlnaHRlZE5vZGU7CisgICAgICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZmFsc2UpOworICAgICAg
ICBpbnNwZWN0KG5vZGUuZ2V0KCkpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3du
UHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBjbGllbnQpCkBAIC0zNDEsOCArMzM4LDExIEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoUGFz
c093blB0cjxJbnNwZWN0b3JGcm9udGVuCiAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCA9
IGNsaWVudDsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRXaW5kb3dT
Y3JpcHRPYmplY3RDbGVhcmVkKEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldv
cmxkKiB3b3JsZCkKIHsKKyAgICBpZiAod29ybGQgIT0gbWFpblRocmVhZE5vcm1hbFdvcmxkKCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIC8vIElmIHRoZSBwYWdlIGlzIHN1cHBvc2VkIHRvIHNl
cnZlIGFzIEluc3BlY3RvckZyb250ZW5kIG5vdGlmeSBpbnNwZXRvciBmcm9udGVuZAogICAgIC8v
IGNsaWVudCB0aGF0IGl0J3MgY2xlYXJlZCBzbyB0aGF0IHRoZSBjbGllbnQgY2FuIGV4cG9zZSBp
bnNwZWN0b3IgYmluZGluZ3MuCiAgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgJiYg
ZnJhbWUgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkKQEAgLTY3NiwxNSArNjc2LDYg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVy
KiBsb2FkZXIpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZyYW1lRGV0
YWNoZWRGcm9tUGFyZW50KEZyYW1lKiByb290RnJhbWUpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3Jlc291cmNlQWdlbnQpCi0gICAgICAgIG1f
cmVzb3VyY2VBZ2VudC0+ZnJhbWVEZXRhY2hlZEZyb21QYXJlbnQocm9vdEZyYW1lKTsKLX0KLQog
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjptYWluUmVzb3VyY2VGaXJlZERPTUNvbnRlbnRFdmVu
dChEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgaWYgKCFl
bmFibGVkKCkgfHwgIWlzTWFpblJlc291cmNlTG9hZGVyKGxvYWRlciwgdXJsKSkKQEAgLTc4NSw4
ICs3NzYsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0KQogICAgIHsKLSAgICAgICAgaWYgKElu
c3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9IHNjcmlwdENvbnRleHQtPmluc3BlY3RvckNv
bnRyb2xsZXIoKSkKLSAgICAgICAgICAgIGluc3BlY3Rvci0+cG9zdFdvcmtlck5vdGlmaWNhdGlv
blRvRnJvbnRlbmQoKm1fd29ya2VyLCBtX2FjdGlvbik7CisgICAgICAgIGlmIChzY3JpcHRDb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVy
KiBpbnNwZWN0b3IgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlwdENvbnRleHQpLT5wYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICAgICAgICAgICAgICBpbnNwZWN0b3ItPnBv
c3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kKCptX3dvcmtlciwgbV9hY3Rpb24pOworICAg
ICAgICB9CiAgICAgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggZmQ4MGMxOS4uYjkzZGM0NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC00Niw2ICs0Niw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENhY2hlZFJlc291cmNlOwogY2xhc3MgQ2hh
cmFjdGVyRGF0YTsKIGNsYXNzIERhdGFiYXNlOworY2xhc3MgRE9NV3JhcHBlcldvcmxkOwogY2xh
c3MgRG9jdW1lbnQ7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEZsb2F0UmVjdDsKQEAg
LTE0OCwxNSArMTQ5LDE0IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2VhcmNoaW5nRm9yTm9kZUlu
UGFnZSgpIGNvbnN0OwogICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0
VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwotICAgIHZvaWQgaGFuZGxlTW91
c2VQcmVzcygpOworICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzcygpOwogCiAgICAgdm9pZCBzZXRJ
bnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50
PiBjbGllbnQpOwogICAgIGJvb2wgaGFzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSBjb25zdCB7
IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50OyB9CiAKLSAgICB2b2lkIGluc3BlY3Rl
ZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUqKTsKKyAgICB2b2lkIGRpZENsZWFyV2lu
ZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQpOwog
CiAgICAgdm9pZCBkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKik7Ci0gICAgdm9pZCBmcmFt
ZURldGFjaGVkRnJvbVBhcmVudChGcmFtZSopOwogCiAgICAgdm9pZCBzZXRFeHRyYUhlYWRlcnMo
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KTsKIApAQCAtMjAzLDggKzIwMyw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIG9wZW5Jbkluc3BlY3RlZFdpbmRvdyhjb25zdCBTdHJpbmcmIHVybCk7CiAg
ICAgdm9pZCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3Qm
IGJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIG92ZXJsYXlSZWN0LCBXZWJDb3JlOjpTZXR0
aW5ncyopIGNvbnN0OwogCi0gICAgdm9pZCBtYXJrVGltZWxpbmUoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKTsKLQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIHZvaWQgYWRkUHJv
ZmlsZShQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgYm9vbCBpc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQ
cm9maWxlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5oCmluZGV4IDllYTY5MGMuLjk3MTc1ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0xMjQsNyArMTI0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBib29sIHNob3VsZEJyZWFrT25Ob2RlUmVtb3ZhbChOb2RlKiBub2Rl
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlscyk7CiAgICAgICAgIGJvb2wgc2hv
dWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlscyk7CiAKLSAgICAgICAgLy8gTWV0aG9kcyBjYWxs
ZWQgZnJvbSB0aGUgSW5zcGVjdG9yQ29udHJvbGxlci4KKyAgICAgICAgLy8gTWV0aG9kcyBjYWxs
ZWQgZnJvbSB0aGUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLgogICAgICAgICB2b2lkIHNldERv
Y3VtZW50KERvY3VtZW50KiBkb2N1bWVudCk7CiAgICAgICAgIHZvaWQgcmVsZWFzZURhbmdsaW5n
Tm9kZXMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5oCmluZGV4IGJkZmQ3Y2IuLmYxZDRkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKQEAgLTM2LDcg
KzM2LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW5zcGVjdG9yQXJyYXk7Ci1j
bGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOwogY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlOwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBTdG9yYWdlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCmluZGV4
IDg4ZGIzYWUuLjM2YmNhYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKQEAgLTM0LDkgKzM0LDkgQEAKIAogI2luY2x1ZGUg
IkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9u
dGVuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIlNRTEVycm9y
LmgiCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50Q2FsbGJhY2suaCIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCmluZGV4IGM3M2QzYzguLmE5
ZTlhNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlQWdlbnQuaApAQCAtMzcsNyArMzcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IERhdGFiYXNlOwogY2xhc3MgSW5zcGVjdG9yQXJyYXk7Ci1jbGFzcyBJbnNwZWN0b3JDb250cm9s
bGVyOwogY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTsKIGNsYXNzIEluc3BlY3RvckZy
b250ZW5kOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZEhvc3QuY3BwCmluZGV4IDRiN2UxM2YuLjM0MmFmMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCkBAIC00MSw2ICs0MSw3
IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0Lmgi
CiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaAppbmRleCBkMzMzODkzLi4wM2M1
NWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
SG9zdC5oCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUg
IkNvbnRleHRNZW51LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVQcm92aWRlci5oIgotI2luY2x1
ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQ2LDYgKzQ1LDcgQEAgY2xhc3MgRnJv
bnRlbmRNZW51UHJvdmlkZXI7CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0
b3JGcm9udGVuZENsaWVudDsKIGNsYXNzIE5vZGU7CitjbGFzcyBQYWdlOwogCiBjbGFzcyBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JGcm9udGVuZEhv
c3Q+CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uY3BwCmluZGV4IDY3ZmE3N2UuLjM0OGU3N2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCkBAIC0z
NCw2ICszNCw3IEBACiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIK
ICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50Q29udGV4dC5oIgpAQCAtNjEsNiAr
NjIsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgY2xlYXJUaW1lckV2ZW50TmFtZSA9ICJj
bGVhclRpbWVyIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB0aW1lckZpcmVkRXZlbnROYW1l
ID0gInRpbWVyRmlyZWQiOwogCiBpbnQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzX2Zyb250
ZW5kQ291bnRlciA9IDA7CitIYXNoTWFwPFBhZ2UqLCBJbnNwZWN0b3JDb250cm9sbGVyKj4gSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzX2luc3BlY3RvckNvbnRyb2xsZXJzOwogCiBzdGF0aWMg
Ym9vbCBldmVudEhhc0xpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRE9N
V2luZG93KiB3aW5kb3csIE5vZGUqIG5vZGUsIGNvbnN0IFZlY3RvcjxFdmVudENvbnRleHQ+JiBh
bmNlc3RvcnMpCiB7CkBAIC03OSw2ICs4MSwxNiBAQCBzdGF0aWMgYm9vbCBldmVudEhhc0xpc3Rl
bmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRE9NV2luZG93KiB3aW5kb3csCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
Q2xlYXJXaW5kb3dPYmplY3RJbldvcmxkSW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0
b3JDb250cm9sbGVyLCBGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQpCit7Cisg
ICAgaW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKGZyYW1l
LCB3b3JsZCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0ZWRQ
YWdlRGVzdHJveWVkSW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVy
KQoreworICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKTsK
K30KKwogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxJbnNlcnRET01Ob2RlSW1w
bChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBOb2RlKiBub2RlLCBO
b2RlKiBwYXJlbnQpCiB7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCkBAIC0xMjks
NiArMTQxLDE2IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNb2RpZnlET01B
dHRySW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0CiAgICAgICAgIGRvbUFnZW50LT5k
aWRNb2RpZnlET01BdHRyKGVsZW1lbnQpOwogfQogCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXIsIGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQg
bW9kaWZpZXJGbGFncykKK3sKKyAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5tb3VzZURpZE1vdmVP
dmVyRWxlbWVudChyZXN1bHQsIG1vZGlmaWVyRmxhZ3MpOworfQorCitib29sIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aGFuZGxlTW91c2VQcmVzc0ltcGwoSW5zcGVjdG9yQ29udHJvbGxlciog
aW5zcGVjdG9yQ29udHJvbGxlcikKK3sKKyAgICByZXR1cm4gaW5zcGVjdG9yQ29udHJvbGxlci0+
aGFuZGxlTW91c2VQcmVzcygpOworfQorCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
Y2hhcmFjdGVyRGF0YU1vZGlmaWVkSW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JD
b250cm9sbGVyLCBDaGFyYWN0ZXJEYXRhKiBjaGFyYWN0ZXJEYXRhKQogewogICAgIGlmIChJbnNw
ZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX2RvbUFnZW50
LmdldCgpKQpAQCAtMTYzLDcgKzE4NSw2IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRSZW1vdmVUaW1lckltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yCiAgICAg
ICAgIHRpbWVsaW5lQWdlbnQtPmRpZFJlbW92ZVRpbWVyKHRpbWVySWQpOwogfQogCi0KIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxD
YWxsRnVuY3Rpb25JbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIs
IGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUpCiB7CiAgICAgaW50IHRp
bWVsaW5lQWdlbnRJZCA9IDA7CkBAIC00NTQsNiArNDc1LDI3IEBAIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpzY3JpcHRJbXBvcnRlZEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaWMs
IHVuc2lnCiAgICAgICAgIHJlc291cmNlQWdlbnQtPnNldEluaXRpYWxDb250ZW50KGlkZW50aWZp
ZXIsIHNvdXJjZVN0cmluZywgIlNjcmlwdCIpOwogfQogCit2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6bWFpblJlc291cmNlRmlyZWRMb2FkRXZlbnRJbXBsKEluc3BlY3RvckNvbnRyb2xs
ZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIEZyYW1lKiBmcmFtZSwgY29uc3QgS1VSTCYgdXJsKQor
eworICAgIGluc3BlY3RvckNvbnRyb2xsZXItPm1haW5SZXNvdXJjZUZpcmVkTG9hZEV2ZW50KGZy
YW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSwgdXJsKTsKK30KKwordm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246Om1haW5SZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2ZW50SW1wbChJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBGcmFtZSogZnJhbWUsIGNv
bnN0IEtVUkwmIHVybCkKK3sKKyAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5tYWluUmVzb3VyY2VG
aXJlZERPTUNvbnRlbnRFdmVudChmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCksIHVy
bCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZURldGFjaGVkRnJv
bVBhcmVudEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgRnJh
bWUqIGZyYW1lKQoreworICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFn
ZW50ID0gcmV0cmlldmVSZXNvdXJjZUFnZW50KGluc3BlY3RvckNvbnRyb2xsZXIpKQorICAgICAg
ICByZXNvdXJjZUFnZW50LT5mcmFtZURldGFjaGVkRnJvbVBhcmVudChmcmFtZSk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDb21taXRMb2FkSW1wbChJbnNwZWN0b3JD
b250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQor
eworICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRpZENvbW1pdExvYWQobG9hZGVyKTsKK30KKwog
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d2lsbFdyaXRlSFRNTEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxl
ciwgdW5zaWduZWQgaW50IGxlbmd0aCwgdW5zaWduZWQgaW50IHN0YXJ0TGluZSkKIHsKICAgICBp
bnQgdGltZWxpbmVBZ2VudElkID0gMDsKQEAgLTQ3MSw4MiArNTEzLDEwNyBAQCB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkV3JpdGVIVE1MSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25DbwogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRXcml0ZUhUTUwoZW5kTGlu
ZSk7CiB9CiAKLSNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCi12b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkQ3JlYXRlV2ViU29ja2V0SW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNw
ZWN0b3JDb250cm9sbGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwmIHJl
cXVlc3RVUkwsIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKQordm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXIsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBl
LCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU2NyaXB0QXJndW1l
bnRzKiBhcmd1bWVudHMsIFNjcmlwdENhbGxTdGFjayogY2FsbFN0YWNrKQogewotICAgIGluc3Bl
Y3RvckNvbnRyb2xsZXItPmRpZENyZWF0ZVdlYlNvY2tldChpZGVudGlmaWVyLCByZXF1ZXN0VVJM
LCBkb2N1bWVudFVSTCk7CisgICAgaW5zcGVjdG9yQ29udHJvbGxlci0+Y29uc29sZUFnZW50KCkt
PmFkZE1lc3NhZ2VUb0NvbnNvbGUoc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgYXJndW1l
bnRzLCBjYWxsU3RhY2spOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0SW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBp
bnNwZWN0b3JDb250cm9sbGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNv
Y2tldEhhbmRzaGFrZVJlcXVlc3QmIHJlcXVlc3QpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVj
dG9yQ29udHJvbGxlciwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1l
c3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQogewotICAgIGluc3BlY3RvckNvbnRyb2xsZXIt
PndpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdChpZGVudGlmaWVyLCByZXF1ZXN0KTsK
KyAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5jb25zb2xlQWdlbnQoKS0+YWRkTWVzc2FnZVRvQ29u
c29sZShzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlV2ViU29ja2V0
SGFuZHNoYWtlUmVzcG9uc2VJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRy
b2xsZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtl
UmVzcG9uc2UmIHJlc3BvbnNlKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNv
bGVDb3VudEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgU2Ny
aXB0QXJndW1lbnRzKiBhcmd1bWVudHMsIFNjcmlwdENhbGxTdGFjayogc3RhY2spCiB7Ci0gICAg
aW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNl
KGlkZW50aWZpZXIsIHJlc3BvbnNlKTsKKyAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5jb25zb2xl
QWdlbnQoKS0+Y291bnQoYXJndW1lbnRzLCBzdGFjayk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRDbG9zZVdlYlNvY2tldEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciog
aW5zcGVjdG9yQ29udHJvbGxlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQordm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0Q29uc29sZVRpbWluZ0ltcGwoSW5zcGVjdG9yQ29u
dHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKLSAg
ICBpbnNwZWN0b3JDb250cm9sbGVyLT5kaWRDbG9zZVdlYlNvY2tldChpZGVudGlmaWVyKTsKKyAg
ICBpbnNwZWN0b3JDb250cm9sbGVyLT5jb25zb2xlQWdlbnQoKS0+c3RhcnRUaW1pbmcodGl0bGUp
OworfQorCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcENvbnNvbGVUaW1pbmdJ
bXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUsIFNjcmlwdENhbGxTdGFjayogc3RhY2spCit7CisgICAgaW5zcGVjdG9yQ29udHJv
bGxlci0+Y29uc29sZUFnZW50KCktPnN0b3BUaW1pbmcodGl0bGUsIHN0YWNrKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVNYXJrVGltZWxpbmVJbXBsKEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIFNjcmlwdEFyZ3VtZW50cyogYXJn
dW1lbnRzKQoreworICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50
ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGluc3BlY3RvckNvbnRyb2xsZXIpKSB7CisgICAgICAg
IFN0cmluZyBtZXNzYWdlOworICAgICAgICBhcmd1bWVudHMtPmdldEZpcnN0QXJndW1lbnRBc1N0
cmluZyhtZXNzYWdlKTsKKyAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkTWFya1RpbWVsaW5lKG1l
c3NhZ2UpOworICAgIH0KK30KKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQordm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29u
c29sZUltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgY29uc3Qg
U3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwpCit7CisgICAgaWYgKEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQgPSBp
bnNwZWN0b3JDb250cm9sbGVyLT5tX3Byb2ZpbGVyQWdlbnQuZ2V0KCkpCisgICAgICAgIHByb2Zp
bGVyQWdlbnQtPmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZSh0aXRsZSwgbGluZU51
bWJlciwgc291cmNlVVJMKTsKIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQ
UExJQ0FUSU9OUykKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpuZXR3b3JrU3RhdGVD
aGFuZ2VkSW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpYykKKyNpZiBFTkFCTEUoREFUQUJBU0Up
Cit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlSW1wbChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBEYXRhYmFzZSogZGF0YWJhc2Us
IGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmVyc2lvbikKIHsKLSAgICBpZiAoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBs
aWNhdGlvbkNhY2hlQWdlbnQgPSBpYy0+YXBwbGljYXRpb25DYWNoZUFnZW50KCkpCi0gICAgICAg
IGFwcGxpY2F0aW9uQ2FjaGVBZ2VudC0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgIGluc3Bl
Y3RvckNvbnRyb2xsZXItPmRpZE9wZW5EYXRhYmFzZShkYXRhYmFzZSwgZG9tYWluLCBuYW1lLCB2
ZXJzaW9uKTsKIH0KKyNlbmRpZgogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dXBk
YXRlQXBwbGljYXRpb25DYWNoZVN0YXR1c0ltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaWMsIEZy
YW1lKiBmcmFtZSkKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCit2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkVXNlRE9NU3RvcmFnZUltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5z
cGVjdG9yQ29udHJvbGxlciwgU3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9jYWxT
dG9yYWdlLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudCogYXBwbGljYXRpb25DYWNoZUFnZW50ID0gaWMtPmFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dCgpKQotICAgICAgICBhcHBsaWNhdGlvbkNhY2hlQWdlbnQtPnVwZGF0ZUFwcGxpY2F0aW9uQ2Fj
aGVTdGF0dXMoZnJhbWUpOworICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRpZFVzZURPTVN0b3Jh
Z2Uoc3RvcmFnZUFyZWEsIGlzTG9jYWxTdG9yYWdlLCBmcmFtZSk7CiB9CiAjZW5kaWYKIAotdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSogcGFn
ZSwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBs
ZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4g
YXJndW1lbnRzLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKQorI2lmIEVO
QUJMRShXT1JLRVJTKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdv
cmtlckltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgaW50cHRy
X3QgaWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkV29ya2VyKQogewotICAgIGlm
ICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+Y29uc29sZUFnZW50KCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoc291cmNlLCB0eXBlLCBsZXZl
bCwgbWVzc2FnZSwgYXJndW1lbnRzLCBjYWxsU3RhY2spOworICAgIGluc3BlY3RvckNvbnRyb2xs
ZXItPmRpZENyZWF0ZVdvcmtlcihpZCwgdXJsLCBpc1NoYXJlZFdvcmtlcik7CiB9CiAKLXZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UqIHBhZ2Us
IE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VJRCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREZXN0cm95
V29ya2VySW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBpbnRw
dHJfdCBpZCkKIHsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBwYWdlLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPmNvbnNvbGVBZ2VudCgpLT5hZGRNZXNzYWdlVG9Db25zb2xl
KHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlEKTsKKyAg
ICBpbnNwZWN0b3JDb250cm9sbGVyLT5kaWREZXN0cm95V29ya2VyKGlkKTsKIH0KKyNlbmRpZgog
Ci12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y291bnQoUGFnZSogcGFnZSwgY29uc3Qg
U3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCkKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkQ3JlYXRlV2ViU29ja2V0SW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JD
b250cm9sbGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RV
UkwsIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKQogewotICAgIGlmICghcGFnZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y29uc29sZUFnZW50KCkt
PmNvdW50KHRpdGxlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7CisgICAgaW5zcGVjdG9yQ29udHJv
bGxlci0+ZGlkQ3JlYXRlV2ViU29ja2V0KGlkZW50aWZpZXIsIHJlcXVlc3RVUkwsIGRvY3VtZW50
VVJMKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0VGltaW5nKFBh
Z2UqIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGl0bGUpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0SW1wbChJbnNwZWN0b3JDb250
cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgaWYgKCFwYWdl
KQotICAgICAgICByZXR1cm47Ci0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jb25z
b2xlQWdlbnQoKS0+c3RhcnRUaW1pbmcodGl0bGUpOworICAgIGluc3BlY3RvckNvbnRyb2xsZXIt
PndpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdChpZGVudGlmaWVyLCByZXF1ZXN0KTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BUaW1pbmcoUGFnZSogcGFn
ZSwgY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5n
JiBzb3VyY2VOYW1lKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVX
ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZUltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVj
dG9yQ29udHJvbGxlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRI
YW5kc2hha2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jb25zb2xlQWdlbnQoKS0+
c3RvcFRpbWluZyh0aXRsZSwgbGluZU51bWJlciwgc291cmNlTmFtZSk7CisgICAgaW5zcGVjdG9y
Q29udHJvbGxlci0+ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKGlkZW50aWZp
ZXIsIHJlc3BvbnNlKTsKIH0KIAotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29u
c29sZShJbnNwZWN0b3JDb250cm9sbGVyKiBpYywgY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWdu
ZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkQ2xvc2VXZWJTb2NrZXRJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIq
IGluc3BlY3RvckNvbnRyb2xsZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKLSAgICBp
ZiAoSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2VudCA9IGljLT5tX3Byb2ZpbGVy
QWdlbnQuZ2V0KCkpCi0gICAgICAgIHByb2ZpbGVyQWdlbnQtPmFkZFN0YXJ0UHJvZmlsaW5nTWVz
c2FnZVRvQ29uc29sZSh0aXRsZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKKyAgICBpbnNwZWN0
b3JDb250cm9sbGVyLT5kaWRDbG9zZVdlYlNvY2tldChpZGVudGlmaWVyKTsKK30KKyNlbmRpZgor
CisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKK3ZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2VkSW1wbChJbnNwZWN0b3JDb250cm9sbGVy
KiBpYykKK3sKKyAgICBpZiAoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBsaWNh
dGlvbkNhY2hlQWdlbnQgPSBpYy0+YXBwbGljYXRpb25DYWNoZUFnZW50KCkpCisgICAgICAgIGFw
cGxpY2F0aW9uQ2FjaGVBZ2VudC0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworfQorCit2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1c0ltcGwo
SW5zcGVjdG9yQ29udHJvbGxlciogaWMsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBsaWNhdGlvbkNhY2hlQWdlbnQgPSBpYy0+YXBw
bGljYXRpb25DYWNoZUFnZW50KCkpCisgICAgICAgIGFwcGxpY2F0aW9uQ2FjaGVBZ2VudC0+dXBk
YXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhmcmFtZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCmluZGV4
IDdmNzQ0ZjQuLmQ5YTYxZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTMxLDE3ICszMSwyNCBAQAogI2lmbmRlZiBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25faAogI2RlZmluZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25faAogCisjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDaGFyYWN0ZXJEYXRhOworY2xhc3MgRE9NV3JhcHBlcldv
cmxkOworY2xhc3MgRGF0YWJhc2U7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7CiBj
bGFzcyBFdmVudENvbnRleHQ7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKK2NsYXNzIEhpdFRlc3RS
ZXN1bHQ7CiBjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOwogY2xhc3MgSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7CkBAIC01Miw2ICs1OSw3IEBA
IGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiBjbGFzcyBTY3JpcHRBcmd1bWVudHM7CiBjbGFzcyBT
Y3JpcHRDYWxsU3RhY2s7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgU3Rv
cmFnZUFyZWE7CiBjbGFzcyBYTUxIdHRwUmVxdWVzdDsKIAogI2lmIEVOQUJMRShXRUJfU09DS0VU
UykKQEAgLTYzLDYgKzcxLDkgQEAgdHlwZWRlZiBwYWlyPEluc3BlY3RvckNvbnRyb2xsZXIqLCBp
bnQ+IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZTsKIAogY2xhc3MgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBkaWRDbGVhcldpbmRvd09i
amVjdEluV29ybGQoRnJhbWUqLCBET01XcmFwcGVyV29ybGQqKTsKKyAgICBzdGF0aWMgdm9pZCBp
bnNwZWN0ZWRQYWdlRGVzdHJveWVkKFBhZ2UqKTsKKwogICAgIHN0YXRpYyB2b2lkIHdpbGxJbnNl
cnRET01Ob2RlKERvY3VtZW50KiwgTm9kZSosIE5vZGUqIHBhcmVudCk7CiAgICAgc3RhdGljIHZv
aWQgZGlkSW5zZXJ0RE9NTm9kZShEb2N1bWVudCosIE5vZGUqKTsKICAgICBzdGF0aWMgdm9pZCB3
aWxsUmVtb3ZlRE9NTm9kZShEb2N1bWVudCosIE5vZGUqKTsKQEAgLTcwLDYgKzgxLDkgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIGRpZE1vZGlmeURPTUF0dHIoRG9jdW1lbnQqLCBFbGVtZW50
Kik7CiAgICAgc3RhdGljIHZvaWQgY2hhcmFjdGVyRGF0YU1vZGlmaWVkKERvY3VtZW50KiwgQ2hh
cmFjdGVyRGF0YSopOwogCisgICAgc3RhdGljIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQo
UGFnZSosIGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKKyAg
ICBzdGF0aWMgYm9vbCBoYW5kbGVNb3VzZVByZXNzKFBhZ2UqKTsKKwogICAgIHN0YXRpYyB2b2lk
IHdpbGxTZW5kWE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0
cmluZyYgdXJsKTsKICAgICBzdGF0aWMgdm9pZCBkaWRTY2hlZHVsZVJlc291cmNlUmVxdWVzdChE
b2N1bWVudCosIGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICBzdGF0aWMgdm9pZCBkaWRJbnN0YWxs
VGltZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGludCB0aW1lcklkLCBpbnQgdGltZW91dCwg
Ym9vbCBzaW5nbGVTaG90KTsKQEAgLTEwOSwzMCArMTIzLDUzIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBkaWRGYWlsTG9hZGluZyhGcmFtZSosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgIHN0YXRpYyB2b2lkIHJlc291cmNlUmV0cmlldmVk
QnlYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFN0cmluZyYgc2VuZFVSTCwgdW5zaWduZWQgc2VuZExpbmVOdW1iZXIpOwogICAgIHN0
YXRpYyB2b2lkIHNjcmlwdEltcG9ydGVkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nKTsKKyAgICBzdGF0
aWMgdm9pZCBtYWluUmVzb3VyY2VGaXJlZExvYWRFdmVudChGcmFtZSosIGNvbnN0IEtVUkwmKTsK
KyAgICBzdGF0aWMgdm9pZCBtYWluUmVzb3VyY2VGaXJlZERPTUNvbnRlbnRFdmVudChGcmFtZSos
IGNvbnN0IEtVUkwmKTsKKyAgICBzdGF0aWMgdm9pZCBmcmFtZURldGFjaGVkRnJvbVBhcmVudChG
cmFtZSopOworICAgIHN0YXRpYyB2b2lkIGRpZENvbW1pdExvYWQoRnJhbWUqLCBEb2N1bWVudExv
YWRlciopOworCiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxs
V3JpdGVIVE1MKERvY3VtZW50KiwgdW5zaWduZWQgaW50IGxlbmd0aCwgdW5zaWduZWQgaW50IHN0
YXJ0TGluZSk7CiAgICAgc3RhdGljIHZvaWQgZGlkV3JpdGVIVE1MKGNvbnN0IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZSYsIHVuc2lnbmVkIGludCBlbmRMaW5lKTsKIAorICAgIHN0YXRp
YyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSosIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VU
eXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU2NyaXB0QXJndW1lbnRz
KiwgU2NyaXB0Q2FsbFN0YWNrKik7CisgICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29s
ZShQYWdlKiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmKTsKKyAg
ICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnQoUGFnZSosIFNjcmlwdEFyZ3VtZW50cyosIFNjcmlw
dENhbGxTdGFjayopOworICAgIHN0YXRpYyB2b2lkIHN0YXJ0Q29uc29sZVRpbWluZyhQYWdlKiwg
Y29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgc3RhdGljIHZvaWQgc3RvcENvbnNvbGVUaW1pbmco
UGFnZSosIGNvbnN0IFN0cmluZyYgdGl0bGUsIFNjcmlwdENhbGxTdGFjayopOworICAgIHN0YXRp
YyB2b2lkIGNvbnNvbGVNYXJrVGltZWxpbmUoUGFnZSosIFNjcmlwdEFyZ3VtZW50cyopOworCisj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgc3RhdGljIHZvaWQgYWRkU3RhcnRQ
cm9maWxpbmdNZXNzYWdlVG9Db25zb2xlKFBhZ2UqLCBjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNp
Z25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CisjZW5kaWYKKworI2lm
IEVOQUJMRShEQVRBQkFTRSkKKyAgICBzdGF0aWMgdm9pZCBkaWRPcGVuRGF0YWJhc2UoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21h
aW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKKyNlbmRpZgor
CisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIHN0YXRpYyB2b2lkIGRpZFVzZURPTVN0b3Jh
Z2UoUGFnZSosIFN0b3JhZ2VBcmVhKiwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqKTsKKyNl
bmRpZgorCisjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgc3RhdGljIHZvaWQgZGlkQ3JlYXRlV29y
a2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGludHB0cl90IGlkLCBjb25zdCBT
dHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtlcik7CisgICAgc3RhdGljIHZvaWQgZGlkRGVz
dHJveVdvcmtlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnRwdHJfdCBpZCk7
CisjZW5kaWYKKwogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKICAgICBzdGF0aWMgdm9pZCBkaWRD
cmVhdGVXZWJTb2NrZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgY29uc3QgS1VSTCYgcmVxdWVzdFVSTCwgY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwp
OwogICAgIHN0YXRpYyB2b2lkIHdpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJT
b2NrZXRIYW5kc2hha2VSZXF1ZXN0Jik7CiAgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVdlYlNv
Y2tldEhhbmRzaGFrZVJlc3BvbnNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlJik7CiAgICAg
c3RhdGljIHZvaWQgZGlkQ2xvc2VXZWJTb2NrZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CiAjZW5kaWYKKworI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCiAgICAgc3RhdGljIHZvaWQgbmV0d29ya1N0YXRlQ2hhbmdlZChQYWdl
Kik7CiAgICAgc3RhdGljIHZvaWQgdXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhGcmFtZSop
OwotCi0gICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShQYWdlKiwgTWVzc2FnZVNv
dXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQ
YXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4sIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPik7
Ci0gICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShQYWdlKiwgTWVzc2FnZVNvdXJj
ZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNp
Z25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmKTsKLQotICAgIHN0YXRpYyB2b2lkIGNvdW50
KFBhZ2UqLCBjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBT
dHJpbmcmIHNvdXJjZUlEKTsKLSAgICBzdGF0aWMgdm9pZCBzdGFydFRpbWluZyhQYWdlKiwgY29u
c3QgU3RyaW5nJiB0aXRsZSk7Ci0gICAgc3RhdGljIHZvaWQgc3RvcFRpbWluZyhQYWdlKiwgY29u
c3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VOYW1lKTsKLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIHN0YXRpYyB2
b2lkIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZShJbnNwZWN0b3JDb250cm9sbGVy
KiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIHN0YXRp
YyB2b2lkIGluc3BlY3RvckNvbnRyb2xsZXJDcmVhdGVkKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNv
bnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpIHsgc19pbnNwZWN0b3JDb250cm9sbGVycy5z
ZXQocGFnZSwgaW5zcGVjdG9yQ29udHJvbGxlcik7IH0KKyAgICBzdGF0aWMgdm9pZCBpbnNwZWN0
b3JDb250cm9sbGVyRGVsZXRlZChQYWdlKiBwYWdlKSB7IHNfaW5zcGVjdG9yQ29udHJvbGxlcnMu
cmVtb3ZlKHBhZ2UpOyB9CiAgICAgc3RhdGljIHZvaWQgZnJvbnRlbmRDcmVhdGVkKCkgeyBzX2Zy
b250ZW5kQ291bnRlciArPSAxOyB9CiAgICAgc3RhdGljIHZvaWQgZnJvbnRlbmREZWxldGVkKCkg
eyBzX2Zyb250ZW5kQ291bnRlciAtPSAxOyB9CiAgICAgc3RhdGljIGJvb2wgaGFzRnJvbnRlbmRz
KCkgeyByZXR1cm4gc19mcm9udGVuZENvdW50ZXI7IH0KQEAgLTE0Miw2ICsxNzksOSBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBzdGF0aWMgdm9pZCBk
aWRDbGVhcldpbmRvd09iamVjdEluV29ybGRJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqLCBGcmFt
ZSosIERPTVdyYXBwZXJXb3JsZCopOworICAgIHN0YXRpYyB2b2lkIGluc3BlY3RlZFBhZ2VEZXN0
cm95ZWRJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqKTsKKwogICAgIHN0YXRpYyB2b2lkIHdpbGxJ
bnNlcnRET01Ob2RlSW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiwgTm9kZSogbm9kZSwgTm9kZSog
cGFyZW50KTsKICAgICBzdGF0aWMgdm9pZCBkaWRJbnNlcnRET01Ob2RlSW1wbChJbnNwZWN0b3JD
b250cm9sbGVyKiwgTm9kZSopOwogICAgIHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVET01Ob2RlSW1w
bChJbnNwZWN0b3JDb250cm9sbGVyKiwgTm9kZSopOwpAQCAtMTUwLDYgKzE5MCw5IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIHZvaWQgZGlkTW9kaWZ5RE9NQXR0ckltcGwoSW5zcGVjdG9yQ29udHJv
bGxlciosIEVsZW1lbnQqKTsKICAgICBzdGF0aWMgdm9pZCBjaGFyYWN0ZXJEYXRhTW9kaWZpZWRJ
bXBsKEluc3BlY3RvckNvbnRyb2xsZXIqLCBDaGFyYWN0ZXJEYXRhKik7CiAKKyAgICBzdGF0aWMg
dm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciosIGNv
bnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKKyAgICBzdGF0aWMg
Ym9vbCBoYW5kbGVNb3VzZVByZXNzSW1wbChJbnNwZWN0b3JDb250cm9sbGVyKik7CisKICAgICBz
dGF0aWMgdm9pZCB3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0SW1wbChJbnNwZWN0b3JDb250cm9sbGVy
KiwgY29uc3QgU3RyaW5nJiB1cmwpOwogICAgIHN0YXRpYyB2b2lkIGRpZFNjaGVkdWxlUmVzb3Vy
Y2VSZXF1ZXN0SW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiwgY29uc3QgU3RyaW5nJiB1cmwpOwog
ICAgIHN0YXRpYyB2b2lkIGRpZEluc3RhbGxUaW1lckltcGwoSW5zcGVjdG9yQ29udHJvbGxlcios
IGludCB0aW1lcklkLCBpbnQgdGltZW91dCwgYm9vbCBzaW5nbGVTaG90KTsKQEAgLTE4OCw5ICsy
MzEsMzggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkaWRGYWlsTG9hZGluZ0ltcGwoSW5z
cGVjdG9yQ29udHJvbGxlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYpOwogICAgIHN0YXRpYyB2b2lkIHJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVx
dWVzdEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIHNlbmRVUkwsIHVuc2lnbmVkIHNlbmRMaW5lTnVtYmVyKTsKICAgICBzdGF0aWMgdm9pZCBz
Y3JpcHRJbXBvcnRlZEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciosIHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpOworICAgIHN0YXRpYyB2b2lkIG1h
aW5SZXNvdXJjZUZpcmVkTG9hZEV2ZW50SW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiwgRnJhbWUq
LCBjb25zdCBLVVJMJik7CisgICAgc3RhdGljIHZvaWQgbWFpblJlc291cmNlRmlyZWRET01Db250
ZW50RXZlbnRJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqLCBGcmFtZSosIGNvbnN0IEtVUkwmKTsK
KyAgICBzdGF0aWMgdm9pZCBmcmFtZURldGFjaGVkRnJvbVBhcmVudEltcGwoSW5zcGVjdG9yQ29u
dHJvbGxlciosIEZyYW1lKik7CisgICAgc3RhdGljIHZvaWQgZGlkQ29tbWl0TG9hZEltcGwoSW5z
cGVjdG9yQ29udHJvbGxlciosIERvY3VtZW50TG9hZGVyKik7CisKICAgICBzdGF0aWMgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxXcml0ZUhUTUxJbXBsKEluc3BlY3RvckNvbnRy
b2xsZXIqLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgc3RhcnRMaW5lKTsKICAg
ICBzdGF0aWMgdm9pZCBkaWRXcml0ZUhUTUxJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSYsIHVuc2lnbmVkIGludCBlbmRMaW5lKTsKIAorICAgIHN0YXRpYyB2b2lkIGFk
ZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqLCBNZXNzYWdlU291cmNl
LCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFNjcmlw
dEFyZ3VtZW50cyosIFNjcmlwdENhbGxTdGFjayopOworICAgIHN0YXRpYyB2b2lkIGFkZE1lc3Nh
Z2VUb0NvbnNvbGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqLCBNZXNzYWdlU291cmNlLCBNZXNz
YWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxp
bmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpOworICAgIHN0YXRpYyB2b2lkIGNvbnNv
bGVDb3VudEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciosIFNjcmlwdEFyZ3VtZW50cyosIFNjcmlw
dENhbGxTdGFjayopOworICAgIHN0YXRpYyB2b2lkIHN0YXJ0Q29uc29sZVRpbWluZ0ltcGwoSW5z
cGVjdG9yQ29udHJvbGxlciosIGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAgIHN0YXRpYyB2b2lk
IHN0b3BDb25zb2xlVGltaW5nSW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiwgY29uc3QgU3RyaW5n
JiB0aXRsZSwgU2NyaXB0Q2FsbFN0YWNrKik7CisgICAgc3RhdGljIHZvaWQgY29uc29sZU1hcmtU
aW1lbGluZUltcGwoSW5zcGVjdG9yQ29udHJvbGxlciosIFNjcmlwdEFyZ3VtZW50cyopOworCisj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgc3RhdGljIHZvaWQgYWRkU3RhcnRQ
cm9maWxpbmdNZXNzYWdlVG9Db25zb2xlSW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiwgY29uc3Qg
U3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgc3RhdGljIHZvaWQgZGlk
T3BlbkRhdGFiYXNlSW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiwgRGF0YWJhc2UqIGRhdGFiYXNl
LCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24pOworI2VuZGlmCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgc3RhdGlj
IHZvaWQgZGlkVXNlRE9NU3RvcmFnZUltcGwoSW5zcGVjdG9yQ29udHJvbGxlciosIFN0b3JhZ2VB
cmVhKiwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqKTsKKyNlbmRpZgorCisjaWYgRU5BQkxF
KFdPUktFUlMpCisgICAgc3RhdGljIHZvaWQgZGlkQ3JlYXRlV29ya2VySW1wbChJbnNwZWN0b3JD
b250cm9sbGVyKiwgaW50cHRyX3QgaWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVk
V29ya2VyKTsKKyAgICBzdGF0aWMgdm9pZCBkaWREZXN0cm95V29ya2VySW1wbChJbnNwZWN0b3JD
b250cm9sbGVyKiwgaW50cHRyX3QgaWQpOworI2VuZGlmCisKICNpZiBFTkFCTEUoV0VCX1NPQ0tF
VFMpCiAgICAgc3RhdGljIHZvaWQgZGlkQ3JlYXRlV2ViU29ja2V0SW1wbChJbnNwZWN0b3JDb250
cm9sbGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBLVVJMJiByZXF1ZXN0VVJM
LCBjb25zdCBLVVJMJiBkb2N1bWVudFVSTCk7CiAgICAgc3RhdGljIHZvaWQgd2lsbFNlbmRXZWJT
b2NrZXRIYW5kc2hha2VSZXF1ZXN0SW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiwgdW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0Jik7CkBAIC0y
MDMsMTAgKzI3NSwxMyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUFwcGxpY2F0
aW9uQ2FjaGVTdGF0dXNJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqLCBGcmFtZSopOwogI2VuZGlm
CiAKLSAgICBzdGF0aWMgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlckZv
ckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotICAgIHN0YXRpYyBJbnNwZWN0b3JD
b250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKICAg
ICBzdGF0aWMgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlckZvckZyYW1l
KEZyYW1lKik7CisgICAgc3RhdGljIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRy
b2xsZXJGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKICAgICBzdGF0aWMgSW5z
cGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlckZvclBhZ2UoUGFnZSopOworICAg
IHN0YXRpYyBJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyV2l0aEZyb250
ZW5kRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgc3RhdGljIEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXJXaXRoRnJvbnRlbmRGb3JEb2N1bWVu
dChEb2N1bWVudCopOworICAgIHN0YXRpYyBJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JD
b250cm9sbGVyV2l0aEZyb250ZW5kRm9yRnJhbWUoRnJhbWUqKTsKKyAgICBzdGF0aWMgSW5zcGVj
dG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcldpdGhGcm9udGVuZEZvclBhZ2UoUGFn
ZSopOwogCiAgICAgc3RhdGljIGJvb2wgaGFzRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciop
OwogICAgIHN0YXRpYyB2b2lkIHBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKEluc3BlY3RvckNv
bnRyb2xsZXIqLCBjb25zdCBTdHJpbmcmIGNhdGVnb3J5VHlwZSwgY29uc3QgU3RyaW5nJiBldmVu
dE5hbWUsIGJvb2wgc3luY2hyb25vdXMpOwpAQCAtMjE2LDEzICsyOTEsMzAgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmV0cmlldmVSZXNvdXJjZUFnZW50
KEluc3BlY3RvckNvbnRyb2xsZXIqKTsKIAogICAgIHN0YXRpYyBpbnQgc19mcm9udGVuZENvdW50
ZXI7CisgICAgc3RhdGljIEhhc2hNYXA8UGFnZSosIEluc3BlY3RvckNvbnRyb2xsZXIqPiBzX2lu
c3BlY3RvckNvbnRyb2xsZXJzOwogI2VuZGlmCiB9OwogCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUs
IERPTVdyYXBwZXJXb3JsZCogd29ybGQpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBp
ZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNv
bnRyb2xsZXJGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIGRpZENsZWFyV2luZG93T2JqZWN0SW5X
b3JsZEltcGwoaW5zcGVjdG9yQ29udHJvbGxlciwgZnJhbWUsIHdvcmxkKTsKKyNlbmRpZgorfQor
CitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3BlY3RlZFBhZ2VEZXN0
cm95ZWQoUGFnZSogcGFnZSkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIGlmIChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxl
ckZvclBhZ2UocGFnZSkpCisgICAgICAgIGluc3BlY3RlZFBhZ2VEZXN0cm95ZWRJbXBsKGluc3Bl
Y3RvckNvbnRyb2xsZXIpOworI2VuZGlmCit9CisKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBOb2RlKiBu
b2RlLCBOb2RlKiBwYXJlbnQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5z
cGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xs
ZXJGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyV2l0aEZyb250ZW5kRm9yRG9j
dW1lbnQoZG9jdW1lbnQpKQogICAgICAgICB3aWxsSW5zZXJ0RE9NTm9kZUltcGwoaW5zcGVjdG9y
Q29udHJvbGxlciwgbm9kZSwgcGFyZW50KTsKICNlbmRpZgogfQpAQCAtMjMwLDcgKzMyMiw3IEBA
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGUo
RG9jdW1lbnQqIGRvY3VtZW50LCBOb2RlCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZEluc2VydERPTU5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBOb2RlKiBub2RlKQog
ewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9yRG9jdW1lbnQoZG9jdW1l
bnQpKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0g
aW5zcGVjdG9yQ29udHJvbGxlcldpdGhGcm9udGVuZEZvckRvY3VtZW50KGRvY3VtZW50KSkKICAg
ICAgICAgZGlkSW5zZXJ0RE9NTm9kZUltcGwoaW5zcGVjdG9yQ29udHJvbGxlciwgbm9kZSk7CiAj
ZW5kaWYKIH0KQEAgLTIzOCw3ICszMzAsNyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZEluc2VydERPTU5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBOb2RlKgogaW5s
aW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9NTm9kZShEb2N1
bWVudCogZG9jdW1lbnQsIE5vZGUqIG5vZGUpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAg
ICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3Rv
ckNvbnRyb2xsZXJGb3JEb2N1bWVudChkb2N1bWVudCkpIHsKKyAgICBpZiAoSW5zcGVjdG9yQ29u
dHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJXaXRoRnJv
bnRlbmRGb3JEb2N1bWVudChkb2N1bWVudCkpIHsKICAgICAgICAgd2lsbFJlbW92ZURPTU5vZGVJ
bXBsKGluc3BlY3RvckNvbnRyb2xsZXIsIG5vZGUpOwogICAgICAgICBkaWRSZW1vdmVET01Ob2Rl
SW1wbChpbnNwZWN0b3JDb250cm9sbGVyLCBub2RlKTsKICAgICB9CkBAIC0yNDgsNyArMzQwLDcg
QEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9NTm9k
ZShEb2N1bWVudCogZG9jdW1lbnQsIE5vZGUKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbE1vZGlmeURPTUF0dHIoRG9jdW1lbnQqIGRvY3VtZW50LCBFbGVtZW50KiBl
bGVtZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckNvbnRy
b2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9yRG9jdW1l
bnQoZG9jdW1lbnQpKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250
cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlcldpdGhGcm9udGVuZEZvckRvY3VtZW50KGRvY3Vt
ZW50KSkKICAgICAgICAgd2lsbE1vZGlmeURPTUF0dHJJbXBsKGluc3BlY3RvckNvbnRyb2xsZXIs
IGVsZW1lbnQpOwogI2VuZGlmCiB9CkBAIC0yNTYsMTUgKzM0OCwzMiBAQCBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNb2RpZnlET01BdHRyKERvY3VtZW50KiBkb2N1
bWVudCwgRWxlbQogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNb2Rp
ZnlET01BdHRyKERvY3VtZW50KiBkb2N1bWVudCwgRWxlbWVudCogZWxlbWVudCkKIHsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JD
b250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlckZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAg
ICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3Rv
ckNvbnRyb2xsZXJXaXRoRnJvbnRlbmRGb3JEb2N1bWVudChkb2N1bWVudCkpCiAgICAgICAgIGRp
ZE1vZGlmeURPTUF0dHJJbXBsKGluc3BlY3RvckNvbnRyb2xsZXIsIGVsZW1lbnQpOwogI2VuZGlm
CiB9CiAKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnQoUGFnZSogcGFnZSwgY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNp
Z25lZCBtb2RpZmllckZsYWdzKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgaWYgKElu
c3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9s
bGVyV2l0aEZyb250ZW5kRm9yUGFnZShwYWdlKSkKKyAgICAgICAgbW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnRJbXBsKGluc3BlY3RvckNvbnRyb2xsZXIsIHJlc3VsdCwgbW9kaWZpZXJGbGFncyk7Cisj
ZW5kaWYKK30KKworaW5saW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYW5kbGVN
b3VzZVByZXNzKFBhZ2UqIHBhZ2UpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAo
SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNvbnRy
b2xsZXJXaXRoRnJvbnRlbmRGb3JQYWdlKHBhZ2UpKQorICAgICAgICByZXR1cm4gaGFuZGxlTW91
c2VQcmVzc0ltcGwoaW5zcGVjdG9yQ29udHJvbGxlcik7CisjZW5kaWYKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2hhcmFjdGVy
RGF0YU1vZGlmaWVkKERvY3VtZW50KiBkb2N1bWVudCwgQ2hhcmFjdGVyRGF0YSogY2hhcmFjdGVy
RGF0YSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JDb250cm9s
bGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlckZvckRvY3VtZW50
KGRvY3VtZW50KSkKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJv
bGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJXaXRoRnJvbnRlbmRGb3JEb2N1bWVudChkb2N1bWVu
dCkpCiAgICAgICAgIGNoYXJhY3RlckRhdGFNb2RpZmllZEltcGwoaW5zcGVjdG9yQ29udHJvbGxl
ciwgY2hhcmFjdGVyRGF0YSk7CiAjZW5kaWYKIH0KQEAgLTI3Miw3ICszODEsNyBAQCBpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNoYXJhY3RlckRhdGFNb2RpZmllZChEb2N1
bWVudCogZG9jdW1lbnQsCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxTZW5kWE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29u
c3QgU3RyaW5nJiB1cmwpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVj
dG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJG
b3JDb250ZXh0KGNvbnRleHQpKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0
b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlcldpdGhGcm9udGVuZEZvckNvbnRleHQo
Y29udGV4dCkpCiAgICAgICAgIHdpbGxTZW5kWE1MSHR0cFJlcXVlc3RJbXBsKGluc3BlY3RvckNv
bnRyb2xsZXIsIHVybCk7CiAjZW5kaWYKIH0KQEAgLTI4MCw3ICszODksNyBAQCBpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QoU2NyaXB0
RXhlY3V0aW9uQ29udAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRT
Y2hlZHVsZVJlc291cmNlUmVxdWVzdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYg
dXJsKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckNvbnRyb2xs
ZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9yRG9jdW1lbnQo
ZG9jdW1lbnQpKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9s
bGVyID0gaW5zcGVjdG9yQ29udHJvbGxlcldpdGhGcm9udGVuZEZvckRvY3VtZW50KGRvY3VtZW50
KSkKICAgICAgICAgZGlkU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3RJbXBsKGluc3BlY3RvckNvbnRy
b2xsZXIsIHVybCk7CiAjZW5kaWYKIH0KQEAgLTI4OCw3ICszOTcsNyBAQCBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0KERvY3Vt
ZW50KiBkb2N1bQogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnN0
YWxsVGltZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgaW50IHRpbWVySWQsIGlu
dCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAg
ICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3Rv
ckNvbnRyb2xsZXJGb3JDb250ZXh0KGNvbnRleHQpKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9s
bGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlcldpdGhGcm9udGVu
ZEZvckNvbnRleHQoY29udGV4dCkpCiAgICAgICAgIGRpZEluc3RhbGxUaW1lckltcGwoaW5zcGVj
dG9yQ29udHJvbGxlciwgdGltZXJJZCwgdGltZW91dCwgc2luZ2xlU2hvdCk7CiAjZW5kaWYKIH0K
QEAgLTI5Niw3ICs0MDUsNyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZEluc3RhbGxUaW1lcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjbwogaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZW1vdmVUaW1lcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBpbnQgdGltZXJJZCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQot
ICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVj
dG9yQ29udHJvbGxlckZvckNvbnRleHQoY29udGV4dCkpCisgICAgaWYgKEluc3BlY3RvckNvbnRy
b2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyV2l0aEZyb250
ZW5kRm9yQ29udGV4dChjb250ZXh0KSkKICAgICAgICAgZGlkUmVtb3ZlVGltZXJJbXBsKGluc3Bl
Y3RvckNvbnRyb2xsZXIsIHRpbWVySWQpOwogI2VuZGlmCiB9CkBAIC0zMDUsNyArNDE0LDcgQEAg
aW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZW1vdmVUaW1lcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb24KIGlubGluZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsQ2FsbEZ1bmN0aW9uKEZyYW1lKiBm
cmFtZSwgY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSkKIHsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JD
b250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlckZvckZyYW1lKGZyYW1lKSkKKyAgICBpZiAo
SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNvbnRy
b2xsZXJXaXRoRnJvbnRlbmRGb3JGcmFtZShmcmFtZSkpCiAgICAgICAgIHJldHVybiB3aWxsQ2Fs
bEZ1bmN0aW9uSW1wbChpbnNwZWN0b3JDb250cm9sbGVyLCBzY3JpcHROYW1lLCBzY3JpcHRMaW5l
KTsKICNlbmRpZgogICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsK
QEAgLTMyMiw3ICs0MzEsNyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZENhbGxGdW5jdGlvbihjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YQogaW5saW5lIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxD
aGFuZ2VYSFJSZWFkeVN0YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFhNTEh0
dHBSZXF1ZXN0KiByZXF1ZXN0KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKElu
c3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9s
bGVyRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5z
cGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJXaXRoRnJvbnRlbmRGb3JDb250
ZXh0KGNvbnRleHQpKQogICAgICAgICByZXR1cm4gd2lsbENoYW5nZVhIUlJlYWR5U3RhdGVJbXBs
KGluc3BlY3RvckNvbnRyb2xsZXIsIHJlcXVlc3QpOwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpOwpAQCAtMzM5LDcgKzQ0OCw3IEBAIGlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlWEhSUmVhZHlTdGF0ZShjb25z
dCBJbnNwZWN0b3JJbnN0CiBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnQoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBFdmVudCYgZXZlbnQsIERPTVdpbmRvdyogd2luZG93LCBOb2RlKiBub2RlLCBj
b25zdCBWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5jZXN0b3JzKQogewogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIg
PSBpbnNwZWN0b3JDb250cm9sbGVyRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQorICAgIGlmIChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxl
cldpdGhGcm9udGVuZEZvckRvY3VtZW50KGRvY3VtZW50KSkKICAgICAgICAgcmV0dXJuIHdpbGxE
aXNwYXRjaEV2ZW50SW1wbChpbnNwZWN0b3JDb250cm9sbGVyLCBldmVudCwgd2luZG93LCBub2Rl
LCBhbmNlc3RvcnMpOwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSgpOwpAQCAtMzU2LDcgKzQ2NSw3IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50CiBp
bmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbERpc3BhdGNoRXZlbnRPbldpbmRvdyhGcmFtZSogZnJhbWUsIGNvbnN0IEV2ZW50
JiBldmVudCwgRE9NV2luZG93KiB3aW5kb3cpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAg
ICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3Rv
ckNvbnRyb2xsZXJGb3JGcmFtZShmcmFtZSkpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIq
IGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyV2l0aEZyb250ZW5kRm9y
RnJhbWUoZnJhbWUpKQogICAgICAgICByZXR1cm4gd2lsbERpc3BhdGNoRXZlbnRPbldpbmRvd0lt
cGwoaW5zcGVjdG9yQ29udHJvbGxlciwgZXZlbnQsIHdpbmRvdyk7CiAjZW5kaWYKICAgICByZXR1
cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCk7CkBAIC0zNzMsNyArNDgyLDcgQEAg
aW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2ZW50T25X
aW5kb3coY29uc3QgSW5zcGVjdG9ySW4KIGlubGluZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVTY3JpcHQoRnJhbWUq
IGZyYW1lLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJv
bGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJGb3JGcmFtZShmcmFtZSkpCisgICAgaWYgKEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVy
V2l0aEZyb250ZW5kRm9yRnJhbWUoZnJhbWUpKQogICAgICAgICByZXR1cm4gd2lsbEV2YWx1YXRl
U2NyaXB0SW1wbChpbnNwZWN0b3JDb250cm9sbGVyLCB1cmwsIGxpbmVOdW1iZXIpOwogI2VuZGlm
CiAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpOwpAQCAtMzkwLDcg
KzQ5OSw3IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRXZhbHVh
dGVTY3JpcHQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVuCiBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEZpcmVUaW1lcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnQgdGltZXJJZCkKIHsKICNpZiBFTkFC
TEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250
cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlckZvckNvbnRleHQoY29udGV4dCkpCisgICAgaWYg
KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250
cm9sbGVyV2l0aEZyb250ZW5kRm9yQ29udGV4dChjb250ZXh0KSkKICAgICAgICAgcmV0dXJuIHdp
bGxGaXJlVGltZXJJbXBsKGluc3BlY3RvckNvbnRyb2xsZXIsIHRpbWVySWQpOwogI2VuZGlmCiAg
ICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpOwpAQCAtNDA3LDcgKzUx
Niw3IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmlyZVRpbWVy
KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvCiBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExheW91dChGcmFtZSog
ZnJhbWUpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQ29udHJv
bGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJGb3JGcmFtZShm
cmFtZSkpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIg
PSBpbnNwZWN0b3JDb250cm9sbGVyV2l0aEZyb250ZW5kRm9yRnJhbWUoZnJhbWUpKQogICAgICAg
ICByZXR1cm4gd2lsbExheW91dEltcGwoaW5zcGVjdG9yQ29udHJvbGxlcik7CiAjZW5kaWYKICAg
ICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCk7CkBAIC00MjQsNyArNTMz
LDcgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRMYXlvdXQoY29u
c3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ28KIGlubGluZSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9hZFhIUihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBYTUxIdHRwUmVxdWVzdCogcmVxdWVzdCkKIHsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0
b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlckZvckNvbnRleHQoY29udGV4dCkpCisg
ICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0
b3JDb250cm9sbGVyV2l0aEZyb250ZW5kRm9yQ29udGV4dChjb250ZXh0KSkKICAgICAgICAgcmV0
dXJuIHdpbGxMb2FkWEhSSW1wbChpbnNwZWN0b3JDb250cm9sbGVyLCByZXF1ZXN0KTsKICNlbmRp
ZgogICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKQEAgLTQ0MSw3
ICs1NTAsNyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZExvYWRY
SFIoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQwogaW5saW5lIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQYWludChGcmFt
ZSogZnJhbWUsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
LSAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3Bl
Y3RvckNvbnRyb2xsZXJGb3JGcmFtZShmcmFtZSkpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xs
ZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyV2l0aEZyb250ZW5k
Rm9yRnJhbWUoZnJhbWUpKQogICAgICAgICByZXR1cm4gd2lsbFBhaW50SW1wbChpbnNwZWN0b3JD
b250cm9sbGVyLCByZWN0KTsKICNlbmRpZgogICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUoKTsKQEAgLTQ1OCw3ICs1NjcsNyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZFBhaW50KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
bwogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxSZWNhbGN1bGF0ZVN0eWxlKERvY3VtZW50KiBkb2N1bWVudCkKIHsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0
b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlckZvckRvY3VtZW50KGRvY3VtZW50KSkK
KyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3Bl
Y3RvckNvbnRyb2xsZXJXaXRoRnJvbnRlbmRGb3JEb2N1bWVudChkb2N1bWVudCkpCiAgICAgICAg
IHJldHVybiB3aWxsUmVjYWxjdWxhdGVTdHlsZUltcGwoaW5zcGVjdG9yQ29udHJvbGxlcik7CiAj
ZW5kaWYKICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCk7CkBAIC00
NzgsNyArNTg3LDcgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppZGVu
dGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QoRnJhbWUqIGZyYW1lLAogICAgIC8vIFRoaXMgbm90aWZp
Y2F0aW9uIHNob3VsZCBiZSBwcm9jZWNlc3NlZCBldmVuIGluIGNhc2VzIHRoZXJlIGlzIG5vIGZy
b250ZW5kLgogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoSW5zcGVj
dG9yQ29udHJvbGxlciogaWMgPSBmcmFtZS0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkp
CisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gaW5zcGVjdG9yQ29udHJvbGxlckZv
clBhZ2UoZnJhbWUtPnBhZ2UoKSkpCiAgICAgICAgIGlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVz
dEltcGwoaWMsIGlkZW50aWZpZXIsIGxvYWRlciwgcmVxdWVzdCk7CiAjZW5kaWYKIH0KQEAgLTQ4
Niw3ICs1OTUsNyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmlkZW50
aWZpZXJGb3JJbml0aWFsUmVxdWVzdChGcmFtZSogZnJhbWUsCiBpbmxpbmUgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kUmVxdWVzdChGcmFtZSogZnJhbWUsIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0g
ICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gaW5zcGVjdG9yQ29udHJvbGxlckZvckZy
YW1lKGZyYW1lKSkKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbnNwZWN0b3JD
b250cm9sbGVyV2l0aEZyb250ZW5kRm9yRnJhbWUoZnJhbWUpKQogICAgICAgICB3aWxsU2VuZFJl
cXVlc3RJbXBsKGljLCBpZGVudGlmaWVyLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKICNl
bmRpZgogfQpAQCAtNDk0LDIxICs2MDMsMjEgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsU2VuZFJlcXVlc3QoRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBsb24KIGlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bWFya1Jlc291cmNlQXNDYWNoZWQo
UGFnZSogcGFnZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogewogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCi0gICAgbWFya1Jlc291cmNlQXNDYWNoZWRJbXBsKHBhZ2UtPmluc3BlY3RvckNvbnRy
b2xsZXIoKSwgaWRlbnRpZmllcik7IAorICAgIG1hcmtSZXNvdXJjZUFzQ2FjaGVkSW1wbChpbnNw
ZWN0b3JDb250cm9sbGVyRm9yUGFnZShwYWdlKSwgaWRlbnRpZmllcik7IAogI2VuZGlmCiB9CiAK
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFJlc291cmNlRnJv
bU1lbW9yeUNhY2hlKFBhZ2UqIHBhZ2UsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IENh
Y2hlZFJlc291cmNlKiByZXNvdXJjZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGRp
ZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZUltcGwocGFnZS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLCBsb2FkZXIsIHJlc291cmNlKTsKKyAgICBkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2Fj
aGVJbXBsKGluc3BlY3RvckNvbnRyb2xsZXJGb3JQYWdlKHBhZ2UpLCBsb2FkZXIsIHJlc291cmNl
KTsKICNlbmRpZgogfQogCiBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlY2VpdmVSZXNvdXJjZURhdGEoRnJhbWUqIGZy
YW1lLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
LSAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3Bl
Y3RvckNvbnRyb2xsZXJGb3JGcmFtZShmcmFtZSkpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xs
ZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyV2l0aEZyb250ZW5k
Rm9yRnJhbWUoZnJhbWUpKQogICAgICAgICByZXR1cm4gd2lsbFJlY2VpdmVSZXNvdXJjZURhdGFJ
bXBsKGluc3BlY3RvckNvbnRyb2xsZXIsIGlkZW50aWZpZXIpOwogI2VuZGlmCiAgICAgcmV0dXJu
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpOwpAQCAtNTI1LDcgKzYzNCw3IEBAIGlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVJlc291cmNlRGF0
YShjb25zdCBJbnNwZWN0b3JJbnN0CiBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNl
KEZyYW1lKiBmcmFtZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxl
ckZvckZyYW1lKGZyYW1lKSkKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
Q29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJXaXRoRnJvbnRlbmRGb3JGcmFtZShmcmFt
ZSkpCiAgICAgICAgIHJldHVybiB3aWxsUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBsKGluc3Bl
Y3RvckNvbnRyb2xsZXIsIGlkZW50aWZpZXIsIHJlc3BvbnNlKTsKICNlbmRpZgogICAgIHJldHVy
biBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKQEAgLTU0Miw3ICs2NTEsNyBAQCBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVSZXNvdXJjZVJl
c3BvbnNlKGNvbnN0IEluc3BlY3RvcgogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRSZWNlaXZlQ29udGVudExlbmd0aChGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgaW50IGxlbmd0aFJlY2VpdmVkKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
Ci0gICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNw
ZWN0b3JDb250cm9sbGVyRm9yRnJhbWUoZnJhbWUpKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9s
bGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlcldpdGhGcm9udGVu
ZEZvckZyYW1lKGZyYW1lKSkKICAgICAgICAgZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhJbXBsKGlu
c3BlY3RvckNvbnRyb2xsZXIsIGlkZW50aWZpZXIsIGxlbmd0aFJlY2VpdmVkKTsKICNlbmRpZgog
fQpAQCAtNTUwLDcgKzY1OSw3IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRnJhbWUqIGZyYW1lLCB1bnNpCiBpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpbmlzaExvYWRpbmcoRnJhbWUqIGZyYW1l
LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pc2hUaW1lKQogewogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNv
bnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9yRnJhbWUoZnJhbWUpKQorICAgIGlmIChJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJv
bGxlcldpdGhGcm9udGVuZEZvckZyYW1lKGZyYW1lKSkKICAgICAgICAgZGlkRmluaXNoTG9hZGlu
Z0ltcGwoaW5zcGVjdG9yQ29udHJvbGxlciwgaWRlbnRpZmllciwgZmluaXNoVGltZSk7CiAjZW5k
aWYKIH0KQEAgLTU1OCw3ICs2NjcsNyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZEZpbmlzaExvYWRpbmcoRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBsbwogaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsTG9hZGluZyhGcmFtZSogZnJh
bWUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Ip
CiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciog
aW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJGb3JGcmFtZShmcmFtZSkp
CisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNw
ZWN0b3JDb250cm9sbGVyV2l0aEZyb250ZW5kRm9yRnJhbWUoZnJhbWUpKQogICAgICAgICBkaWRG
YWlsTG9hZGluZ0ltcGwoaW5zcGVjdG9yQ29udHJvbGxlciwgaWRlbnRpZmllciwgZXJyb3IpOwog
I2VuZGlmCiB9CkBAIC01NjYsNyArNjc1LDcgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRGYWlsTG9hZGluZyhGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGxvbmcKIGlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhN
TEh0dHBSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsIGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIHNlbmRVUkwsIHVuc2lnbmVkIHNlbmRMaW5lTnVtYmVyKQogewog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3Bl
Y3RvckNvbnRyb2xsZXIgPSBjb250ZXh0LT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCisgICAgaWYg
KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250
cm9sbGVyRm9yQ29udGV4dChjb250ZXh0KSkKICAgICAgICAgcmVzb3VyY2VSZXRyaWV2ZWRCeVhN
TEh0dHBSZXF1ZXN0SW1wbChpbnNwZWN0b3JDb250cm9sbGVyLCBpZGVudGlmaWVyLCBzb3VyY2VT
dHJpbmcsIHVybCwgc2VuZFVSTCwgc2VuZExpbmVOdW1iZXIpOwogI2VuZGlmCiB9CkBAIC01NzQs
MTUgKzY4Myw0NyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJlc291
cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdChTY3JpcHRFeAogaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpzY3JpcHRJbXBvcnRlZChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNl
U3RyaW5nKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckNvbnRy
b2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBjb250ZXh0LT5pbnNwZWN0b3JDb250cm9sbGVy
KCkpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBp
bnNwZWN0b3JDb250cm9sbGVyRm9yQ29udGV4dChjb250ZXh0KSkKICAgICAgICAgc2NyaXB0SW1w
b3J0ZWRJbXBsKGluc3BlY3RvckNvbnRyb2xsZXIsIGlkZW50aWZpZXIsIHNvdXJjZVN0cmluZyk7
CiAjZW5kaWYKIH0KIAoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptYWlu
UmVzb3VyY2VGaXJlZExvYWRFdmVudChGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCkKK3sK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNw
ZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlcldpdGhGcm9udGVuZEZvckZyYW1l
KGZyYW1lKSkKKyAgICAgICAgbWFpblJlc291cmNlRmlyZWRMb2FkRXZlbnRJbXBsKGluc3BlY3Rv
ckNvbnRyb2xsZXIsIGZyYW1lLCB1cmwpOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6bWFpblJlc291cmNlRmlyZWRET01Db250ZW50RXZlbnQoRnJh
bWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAg
ICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3Rv
ckNvbnRyb2xsZXJXaXRoRnJvbnRlbmRGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIG1haW5SZXNv
dXJjZUZpcmVkRE9NQ29udGVudEV2ZW50SW1wbChpbnNwZWN0b3JDb250cm9sbGVyLCBmcmFtZSwg
dXJsKTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmZyYW1lRGV0YWNoZWRGcm9tUGFyZW50KEZyYW1lKiBmcmFtZSkKK3sKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVy
ID0gaW5zcGVjdG9yQ29udHJvbGxlcldpdGhGcm9udGVuZEZvckZyYW1lKGZyYW1lKSkKKyAgICAg
ICAgZnJhbWVEZXRhY2hlZEZyb21QYXJlbnRJbXBsKGluc3BlY3RvckNvbnRyb2xsZXIsIGZyYW1l
KTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZENvbW1pdExvYWQoRnJhbWUqIGZyYW1lLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQoreworI2lm
IEVOQUJMRShJTlNQRUNUT1IpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyV2l0aEZyb250ZW5kRm9yRnJhbWUoZnJh
bWUpKQorICAgICAgICBkaWRDb21taXRMb2FkSW1wbChpbnNwZWN0b3JDb250cm9sbGVyLCBsb2Fk
ZXIpOworI2VuZGlmCit9CisKIGlubGluZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsV3JpdGVIVE1MKERvY3VtZW50KiBkb2N1bWVu
dCwgdW5zaWduZWQgaW50IGxlbmd0aCwgdW5zaWduZWQgaW50IHN0YXJ0TGluZSkKIHsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JD
b250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlckZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAg
ICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3Rv
ckNvbnRyb2xsZXJXaXRoRnJvbnRlbmRGb3JEb2N1bWVudChkb2N1bWVudCkpCiAgICAgICAgIHJl
dHVybiB3aWxsV3JpdGVIVE1MSW1wbChpbnNwZWN0b3JDb250cm9sbGVyLCBsZW5ndGgsIHN0YXJ0
TGluZSk7CiAjZW5kaWYKICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2ll
KCk7CkBAIC01OTYsMTEgKzczNyw1MCBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZFdyaXRlSFRNTChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpbwogI2VuZGlm
CiB9CiAKKyNpZiBFTkFCTEUoREFUQUJBU0UpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBEYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
ICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVj
dG9yQ29udHJvbGxlckZvckNvbnRleHQoY29udGV4dCkpCisgICAgICAgIGRpZE9wZW5EYXRhYmFz
ZUltcGwoaW5zcGVjdG9yQ29udHJvbGxlciwgZGF0YWJhc2UsIGRvbWFpbiwgbmFtZSwgdmVyc2lv
bik7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQoraW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRVc2VET01TdG9yYWdlKFBhZ2UqIHBh
Z2UsIFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUq
IGZyYW1lKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgaWYgKEluc3BlY3RvckNvbnRy
b2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9yUGFnZShw
YWdlKSkKKyAgICAgICAgZGlkVXNlRE9NU3RvcmFnZUltcGwoaW5zcGVjdG9yQ29udHJvbGxlciwg
c3RvcmFnZUFyZWEsIGlzTG9jYWxTdG9yYWdlLCBmcmFtZSk7CisjZW5kaWYKK30KKyNlbmRpZgor
CisjaWYgRU5BQkxFKFdPUktFUlMpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZENyZWF0ZVdvcmtlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnRw
dHJfdCBpZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWRXb3JrZXIpCit7CisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
Q29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJXaXRoRnJvbnRlbmRGb3JDb250ZXh0KGNv
bnRleHQpKQorICAgICAgICBkaWRDcmVhdGVXb3JrZXJJbXBsKGluc3BlY3RvckNvbnRyb2xsZXIs
IGlkLCB1cmwsIGlzU2hhcmVkV29ya2VyKTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERlc3Ryb3lXb3JrZXIoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgaW50cHRyX3QgaWQpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAg
ICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3Rv
ckNvbnRyb2xsZXJXaXRoRnJvbnRlbmRGb3JDb250ZXh0KGNvbnRleHQpKQorICAgICAgICBkaWRE
ZXN0cm95V29ya2VySW1wbChpbnNwZWN0b3JDb250cm9sbGVyLCBpZCk7CisjZW5kaWYKK30KKyNl
bmRpZgorCisKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdlYlNvY2tldChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RV
UkwsIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0g
ICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0
b3JDb250cm9sbGVyRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJv
bGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJXaXRoRnJvbnRl
bmRGb3JDb250ZXh0KGNvbnRleHQpKQogICAgICAgICBkaWRDcmVhdGVXZWJTb2NrZXRJbXBsKGlu
c3BlY3RvckNvbnRyb2xsZXIsIGlkZW50aWZpZXIsIHJlcXVlc3RVUkwsIGRvY3VtZW50VVJMKTsK
ICNlbmRpZgogfQpAQCAtNjA4LDcgKzc4OCw3IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkQ3JlYXRlV2ViU29ja2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqCiBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kV2ViU29ja2V0SGFu
ZHNoYWtlUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QmIHJlcXVlc3Qp
CiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciog
aW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJGb3JDb250ZXh0KGNvbnRl
eHQpKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0g
aW5zcGVjdG9yQ29udHJvbGxlcldpdGhGcm9udGVuZEZvckNvbnRleHQoY29udGV4dCkpCiAgICAg
ICAgIHdpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdEltcGwoaW5zcGVjdG9yQ29udHJv
bGxlciwgaWRlbnRpZmllciwgcmVxdWVzdCk7CiAjZW5kaWYKIH0KQEAgLTYxNiw3ICs3OTYsNyBA
QCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kV2ViU29ja2V0
SGFuZHNoYWtlUmVxdWVzdChTY3JpcHRFeAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJT
b2NrZXRIYW5kc2hha2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKLSAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGlu
c3BlY3RvckNvbnRyb2xsZXJGb3JDb250ZXh0KGNvbnRleHQpKQorICAgIGlmIChJbnNwZWN0b3JD
b250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlcldpdGhG
cm9udGVuZEZvckNvbnRleHQoY29udGV4dCkpCiAgICAgICAgIGRpZFJlY2VpdmVXZWJTb2NrZXRI
YW5kc2hha2VSZXNwb25zZUltcGwoaW5zcGVjdG9yQ29udHJvbGxlciwgaWRlbnRpZmllciwgcmVz
cG9uc2UpOwogI2VuZGlmCiB9CkBAIC02MjQsNTQgKzgwNCwxMzYgQEAgaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9u
c2UoU2NyaXAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xvc2VX
ZWJTb2NrZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckNv
bnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9yQ29u
dGV4dChjb250ZXh0KSkKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29u
dHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJXaXRoRnJvbnRlbmRGb3JDb250ZXh0KGNvbnRl
eHQpKQogICAgICAgICBkaWRDbG9zZVdlYlNvY2tldEltcGwoaW5zcGVjdG9yQ29udHJvbGxlciwg
aWRlbnRpZmllcik7CiAjZW5kaWYKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VC
X0FQUExJQ0FUSU9OUykKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bmV0
d29ya1N0YXRlQ2hhbmdlZChQYWdlKiBwYWdlKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpICYm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgaWYgKEluc3BlY3RvckNvbnRy
b2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9yUGFnZShw
YWdlKSkKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9
IGluc3BlY3RvckNvbnRyb2xsZXJXaXRoRnJvbnRlbmRGb3JQYWdlKHBhZ2UpKQogICAgICAgICBu
ZXR3b3JrU3RhdGVDaGFuZ2VkSW1wbChpbnNwZWN0b3JDb250cm9sbGVyKTsKICNlbmRpZgogfQog
CiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnVwZGF0ZUFwcGxpY2F0aW9u
Q2FjaGVTdGF0dXMoRnJhbWUqIGZyYW1lKQogewotI2lmIEVOQUJMRShJTlNQRUNUT1IpICYmIEVO
QUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgaWYgKEluc3BlY3RvckNvbnRyb2xs
ZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9yRnJhbWUoZnJh
bWUpKQorI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIq
IGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyV2l0aEZyb250ZW5kRm9y
RnJhbWUoZnJhbWUpKQogICAgICAgICB1cGRhdGVBcHBsaWNhdGlvbkNhY2hlU3RhdHVzSW1wbChp
bnNwZWN0b3JDb250cm9sbGVyLCBmcmFtZSk7CiAjZW5kaWYKIH0KKyNlbmRpZgorCitpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSog
cGFnZSwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZl
bCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTY3JpcHRBcmd1bWVudHMqIGFyZ3VtZW50
cywgU2NyaXB0Q2FsbFN0YWNrKiBjYWxsU3RhY2spCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3Bl
Y3RvckNvbnRyb2xsZXJGb3JQYWdlKHBhZ2UpKQorICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xl
SW1wbChpbnNwZWN0b3JDb250cm9sbGVyLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBh
cmd1bWVudHMsIGNhbGxTdGFjayk7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UqIHBhZ2UsIE1lc3NhZ2VT
b3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9s
bGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlckZvclBhZ2UocGFn
ZSkpCisgICAgICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKGluc3BlY3RvckNvbnRyb2xsZXIs
IHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlEKTsKKyNl
bmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVD
b3VudChQYWdlKiBwYWdlLCBTY3JpcHRBcmd1bWVudHMqIGFyZ3VtZW50cywgU2NyaXB0Q2FsbFN0
YWNrKiBzdGFjaykKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIGlmIChJbnNwZWN0b3JD
b250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlckZvclBh
Z2UocGFnZSkpCisgICAgICAgIGNvbnNvbGVDb3VudEltcGwoaW5zcGVjdG9yQ29udHJvbGxlciwg
YXJndW1lbnRzLCBzdGFjayk7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpzdGFydENvbnNvbGVUaW1pbmcoUGFnZSogcGFnZSwgY29uc3QgU3RyaW5n
JiB0aXRsZSkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIGlmIChJbnNwZWN0b3JDb250
cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlckZvclBhZ2Uo
cGFnZSkpCisgICAgICAgIHN0YXJ0Q29uc29sZVRpbWluZ0ltcGwoaW5zcGVjdG9yQ29udHJvbGxl
ciwgdGl0bGUpOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6c3RvcENvbnNvbGVUaW1pbmcoUGFnZSogcGFnZSwgY29uc3QgU3RyaW5nJiB0aXRsZSwg
U2NyaXB0Q2FsbFN0YWNrKiBzdGFjaykKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIGlm
IChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29u
dHJvbGxlckZvclBhZ2UocGFnZSkpCisgICAgICAgIHN0b3BDb25zb2xlVGltaW5nSW1wbChpbnNw
ZWN0b3JDb250cm9sbGVyLCB0aXRsZSwgc3RhY2spOworI2VuZGlmCit9CisKK2lubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZU1hcmtUaW1lbGluZShQYWdlKiBwYWdl
LCBTY3JpcHRBcmd1bWVudHMqIGFyZ3VtZW50cykKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
ICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVj
dG9yQ29udHJvbGxlcldpdGhGcm9udGVuZEZvclBhZ2UocGFnZSkpCisgICAgICAgIGNvbnNvbGVN
YXJrVGltZWxpbmVJbXBsKGluc3BlY3RvckNvbnRyb2xsZXIsIGFyZ3VtZW50cyk7CisjZW5kaWYK
K30KKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoraW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUoUGFn
ZSogcGFnZSwgY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAoSW5z
cGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xs
ZXJGb3JQYWdlKHBhZ2UpKQorICAgICAgICBhZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNv
bGVJbXBsKGluc3BlY3RvckNvbnRyb2xsZXIsIHRpdGxlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwp
OworI2VuZGlmCit9CisjZW5kaWYKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiBpbmxpbmUgSW5z
cGVjdG9yQ29udHJvbGxlciogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0b3JDb250
cm9sbGVyRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAg
IGlmIChoYXNGcm9udGVuZHMoKSAmJiBjb250ZXh0ICYmIGNvbnRleHQtPmlzRG9jdW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuIGluc3BlY3RvckNvbnRyb2xsZXJGb3JQYWdlKHN0YXRpY19jYXN0PERv
Y3VtZW50Kj4oY29udGV4dCktPnBhZ2UoKSk7CisgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC0+
aXNEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gaW5zcGVjdG9yQ29udHJvbGxlcldpdGhGcm9u
dGVuZEZvclBhZ2Uoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KS0+cGFnZSgpKTsKKyAg
ICByZXR1cm4gMDsKK30KKworaW5saW5lIEluc3BlY3RvckNvbnRyb2xsZXIqIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aW5zcGVjdG9yQ29udHJvbGxlckZvckZyYW1lKEZyYW1lKiBmcmFtZSkK
K3sKKyAgICBpZiAoZnJhbWUpCisgICAgICAgIHJldHVybiBpbnNwZWN0b3JDb250cm9sbGVyRm9y
UGFnZShmcmFtZS0+cGFnZSgpKTsKKyAgICByZXR1cm4gMDsKK30KKworaW5saW5lIEluc3BlY3Rv
ckNvbnRyb2xsZXIqIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zcGVjdG9yQ29udHJvbGxl
ckZvclBhZ2UoUGFnZSogcGFnZSkKK3sKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIHNfaW5zcGVjdG9yQ29udHJvbGxlcnMuZ2V0KHBhZ2UpOworfQorCitp
bmxpbmUgSW5zcGVjdG9yQ29udHJvbGxlciogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNw
ZWN0b3JDb250cm9sbGVyV2l0aEZyb250ZW5kRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KQoreworICAgIGlmIChoYXNGcm9udGVuZHMoKSkKKyAgICAgICAgcmV0dXJu
IGluc3BlY3RvckNvbnRyb2xsZXJGb3JDb250ZXh0KGNvbnRleHQpOwogICAgIHJldHVybiAwOwog
fQogCi1pbmxpbmUgSW5zcGVjdG9yQ29udHJvbGxlciogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjppbnNwZWN0b3JDb250cm9sbGVyRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQoraW5s
aW5lIEluc3BlY3RvckNvbnRyb2xsZXIqIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zcGVj
dG9yQ29udHJvbGxlcldpdGhGcm9udGVuZEZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkK
IHsKICAgICBpZiAoaGFzRnJvbnRlbmRzKCkgJiYgZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBp
bnNwZWN0b3JDb250cm9sbGVyRm9yUGFnZShkb2N1bWVudC0+cGFnZSgpKTsKKyAgICAgICAgcmV0
dXJuIGluc3BlY3RvckNvbnRyb2xsZXJXaXRoRnJvbnRlbmRGb3JQYWdlKGRvY3VtZW50LT5wYWdl
KCkpOwogICAgIHJldHVybiAwOwogfQogCi1pbmxpbmUgSW5zcGVjdG9yQ29udHJvbGxlciogSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0b3JDb250cm9sbGVyRm9yRnJhbWUoRnJhbWUq
IGZyYW1lKQoraW5saW5lIEluc3BlY3RvckNvbnRyb2xsZXIqIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6aW5zcGVjdG9yQ29udHJvbGxlcldpdGhGcm9udGVuZEZvckZyYW1lKEZyYW1lKiBmcmFt
ZSkKIHsKICAgICBpZiAoaGFzRnJvbnRlbmRzKCkgJiYgZnJhbWUpCi0gICAgICAgIHJldHVybiBp
bnNwZWN0b3JDb250cm9sbGVyRm9yUGFnZShmcmFtZS0+cGFnZSgpKTsKKyAgICAgICAgcmV0dXJu
IGluc3BlY3RvckNvbnRyb2xsZXJXaXRoRnJvbnRlbmRGb3JQYWdlKGZyYW1lLT5wYWdlKCkpOwog
ICAgIHJldHVybiAwOwogfQogCi1pbmxpbmUgSW5zcGVjdG9yQ29udHJvbGxlciogSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0b3JDb250cm9sbGVyRm9yUGFnZShQYWdlKiBwYWdlKQor
aW5saW5lIEluc3BlY3RvckNvbnRyb2xsZXIqIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5z
cGVjdG9yQ29udHJvbGxlcldpdGhGcm9udGVuZEZvclBhZ2UoUGFnZSogcGFnZSkKIHsKICAgICBp
ZiAocGFnZSkgewotICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29u
dHJvbGxlciA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkgeworICAgICAgICBpZiAoSW5z
cGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xs
ZXJGb3JQYWdlKHBhZ2UpKSB7CiAgICAgICAgICAgICBpZiAoaGFzRnJvbnRlbmQoaW5zcGVjdG9y
Q29udHJvbGxlcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RvckNvbnRyb2xsZXI7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3Bw
CmluZGV4IDdhOWE0YWQuLjFiNzQ1MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0YXRlLmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CiAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250
cm9sbGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAKaW5kZXggMzRmYTE5NS4uNjUwZmZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCkBAIC0yNTgwLDEwICsyNTgwLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
ZGV0YWNoRnJvbVBhcmVudCgpCiAgICAgLy8gaGFuZGxlcnMgbWlnaHQgc3RhcnQgYSBuZXcgc3Vi
cmVzb3VyY2UgbG9hZCBpbiB0aGlzIGZyYW1lLgogICAgIHN0b3BBbGxMb2FkZXJzKCk7CiAKLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgp
KQotICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmZyYW1lRGV0YWNoZWRGcm9t
UGFyZW50KG1fZnJhbWUpOwotI2VuZGlmCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpm
cmFtZURldGFjaGVkRnJvbVBhcmVudChtX2ZyYW1lKTsKIAogICAgIGRldGFjaFZpZXdzQW5kRG9j
dW1lbnRMb2FkZXIoKTsKIApAQCAtMzM3MSwxNSArMzM2OCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKERPTVdyYXBwZXJXb3JsZCogd29y
bGQpCiAKICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQo
d29ybGQpOwogCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAod29ybGQgIT0gbWFpblRo
cmVhZE5vcm1hbFdvcmxkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChQYWdlKiBwYWdl
ID0gbV9mcmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBp
bnNwZWN0b3IgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgICAgICBpbnNw
ZWN0b3ItPmluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQobV9mcmFtZSk7Ci0gICAg
fQotI2VuZGlmCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDbGVhcldpbmRvd09i
amVjdEluV29ybGQobV9mcmFtZSwgd29ybGQpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjp1cGRh
dGVTYW5kYm94RmxhZ3MoKQpAQCAtMzQyNiwxMCArMzQxNSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OmRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpCiAKICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRDb21t
aXRMb2FkKCk7CiAKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChQYWdlKiBwYWdlID0g
bV9mcmFtZS0+cGFnZSgpKQotICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRp
ZENvbW1pdExvYWQobV9kb2N1bWVudExvYWRlci5nZXQoKSk7Ci0jZW5kaWYKKyAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZENvbW1pdExvYWQobV9mcmFtZSwgbV9kb2N1bWVudExvYWRl
ci5nZXQoKSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnRlbGxDbGllbnRBYm91dFBhc3RNZW1v
cnlDYWNoZUxvYWRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAppbmRleCBhODAxMDY1Li4wNDA1NDA4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiSFRN
TElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBhZ2VHcm91cExvYWREZWZlcnJlci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAt
MzQ0LDEwICszNDQsNyBAQCB2b2lkIENocm9tZTo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29u
c3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBtb2RpZgogICAgIH0KICAgICBtX2Ns
aWVudC0+bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQocmVzdWx0LCBtb2RpZmllckZsYWdzKTsKIAot
I2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3Bl
Y3RvciA9IG1fcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQotICAgICAgICBpbnNwZWN0b3It
Pm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHJlc3VsdCwgbW9kaWZpZXJGbGFncyk7Ci0jZW5kaWYK
KyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KG1f
cGFnZSwgcmVzdWx0LCBtb2RpZmllckZsYWdzKTsKIH0KIAogdm9pZCBDaHJvbWU6OnNldFRvb2xU
aXAoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9Db25zb2xlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5jcHAKaW5k
ZXggY2Y5MTU1OS4uZDRhZWQ0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db25z
b2xlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnNvbGUuY3BwCkBAIC0xNDYsMTIg
KzE0NiwxMCBAQCB2b2lkIENvbnNvbGU6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZQogICAgIGlmIChzb3VyY2UgPT0gSlNN
ZXNzYWdlU291cmNlKQogICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmFkZE1lc3Nh
Z2VUb0NvbnNvbGUoc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291
cmNlVVJMKTsKIAotI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKGNhbGxTdGFjaykKLSAg
ICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKHBhZ2Us
IHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIDAsIGNhbGxTdGFjayk7CisgICAgICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShwYWdlLCBzb3VyY2Us
IHR5cGUsIGxldmVsLCBtZXNzYWdlLCAwLCBjYWxsU3RhY2suZ2V0KCkpOwogICAgIGVsc2UKICAg
ICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKHBhZ2Us
IHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7Ci0j
ZW5kaWYKIAogICAgIGlmICghQ29uc29sZTo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE4OSw5ICsxODcsNyBAQCB2b2lkIENvbnNvbGU6OmFkZE1lc3NhZ2Uo
TWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBQYXNzUmVmUHRyPFNjcmlwdAog
ICAgIGlmIChhcmd1bWVudHMtPmdldEZpcnN0QXJndW1lbnRBc1N0cmluZyhtZXNzYWdlKSkKICAg
ICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5hZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVz
c2FnZVNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxhc3RDYWxsZXIubGluZU51bWJlcigp
LCBsYXN0Q2FsbGVyLnNvdXJjZVVSTCgpKTsKIAotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKHBhZ2UsIEpTTWVz
c2FnZVNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGFyZ3VtZW50cywgY2FsbFN0YWNrKTsK
LSNlbmRpZgorICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29s
ZShwYWdlLCBKU01lc3NhZ2VTb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBhcmd1bWVudHMu
Z2V0KCksIGNhbGxTdGFjay5nZXQoKSk7CiB9CiAKIHZvaWQgQ29uc29sZTo6ZGVidWcoUGFzc1Jl
ZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3Rh
Y2s+IGNhbGxTdGFjaykKQEAgLTI1MCwzNiArMjQ2LDEyIEBAIHZvaWQgQ29uc29sZTo6YXNzZXJ0
Q29uZGl0aW9uKGJvb2wgY29uZGl0aW9uLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJn
dW1lCiAKIHZvaWQgQ29uc29sZTo6Y291bnQoUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFy
Z3VtZW50cywgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKIHsKLSNpZiBF
TkFCTEUoSU5TUEVDVE9SKQotICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7Ci0gICAgaWYg
KCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxh
c3RDYWxsZXIgPSBjYWxsU3RhY2stPmF0KDApOwotICAgIC8vIEZvbGxvdyBGaXJlYnVnJ3MgYmVo
YXZpb3Igb2YgY291bnRpbmcgd2l0aCBudWxsIGFuZCB1bmRlZmluZWQgdGl0bGUgaW4KLSAgICAv
LyB0aGUgc2FtZSBidWNrZXQgYXMgbm8gYXJndW1lbnQKLSAgICBTdHJpbmcgdGl0bGU7Ci0gICAg
YXJndW1lbnRzLT5nZXRGaXJzdEFyZ3VtZW50QXNTdHJpbmcodGl0bGUpOwotICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6Y291bnQocGFnZSwgdGl0bGUsIGxhc3RDYWxsZXIubGluZU51bWJl
cigpLCBsYXN0Q2FsbGVyLnNvdXJjZVVSTCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNh
bGxTdGFjayk7Ci0jZW5kaWYKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVD
b3VudChwYWdlKCksIGFyZ3VtZW50cy5nZXQoKSwgY2FsbFN0YWNrLmdldCgpKTsKIH0KIAogdm9p
ZCBDb25zb2xlOjptYXJrVGltZWxpbmUoUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3Vt
ZW50cywgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+KQogewotI2lmIEVOQUJMRShJTlNQRUNU
T1IpCi0gICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIGFyZ3VtZW50cy0+Z2V0Rmly
c3RBcmd1bWVudEFzU3RyaW5nKG1lc3NhZ2UpOwotCi0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLT5tYXJrVGltZWxpbmUobWVzc2FnZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShh
cmd1bWVudHMpOwotI2VuZGlmCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xl
TWFya1RpbWVsaW5lKHBhZ2UoKSwgYXJndW1lbnRzLmdldCgpKTsKIH0KIAogI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQpAQCAtMzA3LDEwICsyNzksOCBAQCB2b2lkIENvbnNvbGU6OnBy
b2ZpbGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgU2NyaXB0U3RhdGUqIHN0YXRlLCBQYXNzUmVmUHRy
PFNjcmlwdAogCiAgICAgU2NyaXB0UHJvZmlsZXI6OnN0YXJ0KHN0YXRlLCByZXNvbHZlZFRpdGxl
KTsKIAotI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgY29uc3QgU2NyaXB0Q2FsbEZyYW1lJiBs
YXN0Q2FsbGVyID0gY2FsbFN0YWNrLT5hdCgwKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZShjb250cm9sbGVyLCByZXNvbHZl
ZFRpdGxlLCBsYXN0Q2FsbGVyLmxpbmVOdW1iZXIoKSwgbGFzdENhbGxlci5zb3VyY2VVUkwoKSk7
Ci0jZW5kaWYKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZFN0YXJ0UHJvZmlsaW5n
TWVzc2FnZVRvQ29uc29sZShwYWdlLCByZXNvbHZlZFRpdGxlLCBsYXN0Q2FsbGVyLmxpbmVOdW1i
ZXIoKSwgbGFzdENhbGxlci5zb3VyY2VVUkwoKSk7CiB9CiAKIHZvaWQgQ29uc29sZTo6cHJvZmls
ZUVuZChjb25zdCBTdHJpbmcmIHRpdGxlLCBTY3JpcHRTdGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8
U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2spCkBAIC0zNDEsNDkgKzMxMSwyNyBAQCB2b2lkIENv
bnNvbGU6OnByb2ZpbGVFbmQoY29uc3QgU3RyaW5nJiB0aXRsZSwgU2NyaXB0U3RhdGUqIHN0YXRl
LCBQYXNzUmVmUHRyPFNjcgogCiB2b2lkIENvbnNvbGU6OnRpbWUoY29uc3QgU3RyaW5nJiB0aXRs
ZSkKIHsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6c3RhcnRUaW1pbmcocGFnZSgpLCB0aXRsZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0
aXRsZSk7Ci0jZW5kaWYKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0Q29uc29s
ZVRpbWluZyhwYWdlKCksIHRpdGxlKTsKIH0KIAogdm9pZCBDb25zb2xlOjp0aW1lRW5kKGNvbnN0
IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiwgUGFzc1JlZlB0cjxT
Y3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKIHsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAg
IGNvbnN0IFNjcmlwdENhbGxGcmFtZSYgbGFzdENhbGxlciA9IGNhbGxTdGFjay0+YXQoMCk7Ci0g
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wVGltaW5nKHBhZ2UoKSwgdGl0bGUsIGxh
c3RDYWxsZXIubGluZU51bWJlcigpLCBsYXN0Q2FsbGVyLnNvdXJjZVVSTCgpKTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHRpdGxlKTsKLSAgICBVTlVTRURfUEFSQU0oY2FsbFN0YWNrKTsKLSNl
bmRpZgorICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcENvbnNvbGVUaW1pbmcocGFn
ZSgpLCB0aXRsZSwgY2FsbFN0YWNrLmdldCgpKTsKIH0KIAogdm9pZCBDb25zb2xlOjpncm91cChQ
YXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNjcmlwdENh
bGxTdGFjaz4gY2FsbFN0YWNrKQogewotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKHBhZ2UoKSwgSlNNZXNzYWdl
U291cmNlLCBTdGFydEdyb3VwTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgU3RyaW5nKCks
IGFyZ3VtZW50cywgY2FsbFN0YWNrKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGFyZ3VtZW50
cyk7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxTdGFjayk7Ci0jZW5kaWYKKyAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUocGFnZSgpLCBKU01lc3NhZ2VTb3Vy
Y2UsIFN0YXJ0R3JvdXBNZXNzYWdlVHlwZSwgTG9nTWVzc2FnZUxldmVsLCBTdHJpbmcoKSwgYXJn
dW1lbnRzLmdldCgpLCBjYWxsU3RhY2suZ2V0KCkpOwogfQogCiB2b2lkIENvbnNvbGU6Omdyb3Vw
Q29sbGFwc2VkKFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMsIFBhc3NSZWZQ
dHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2spCiB7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikK
LSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUocGFnZSgp
LCBKU01lc3NhZ2VTb3VyY2UsIFN0YXJ0R3JvdXBDb2xsYXBzZWRNZXNzYWdlVHlwZSwgTG9nTWVz
c2FnZUxldmVsLCBTdHJpbmcoKSwgYXJndW1lbnRzLCBjYWxsU3RhY2spOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oYXJndW1lbnRzKTsKLSAgICBVTlVTRURfUEFSQU0oY2FsbFN0YWNrKTsKLSNl
bmRpZgorICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShw
YWdlKCksIEpTTWVzc2FnZVNvdXJjZSwgU3RhcnRHcm91cENvbGxhcHNlZE1lc3NhZ2VUeXBlLCBM
b2dNZXNzYWdlTGV2ZWwsIFN0cmluZygpLCBhcmd1bWVudHMuZ2V0KCksIGNhbGxTdGFjay5nZXQo
KSk7CiB9CiAKIHZvaWQgQ29uc29sZTo6Z3JvdXBFbmQoKQogewotI2lmIEVOQUJMRShJTlNQRUNU
T1IpCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKHBh
Z2UoKSwgSlNNZXNzYWdlU291cmNlLCBFbmRHcm91cE1lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2
ZWwsIFN0cmluZygpLCAwLCBTdHJpbmcoKSk7Ci0jZW5kaWYKIH0KIAogYm9vbCBDb25zb2xlOjpz
aG91bGRDYXB0dXJlRnVsbFN0YWNrVHJhY2UoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
Y3BwCmluZGV4IDk2YzM0YWQuLjc3YTdkYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAK
QEAgLTY1LDcgKzY1LDYgQEAKICNpbmNsdWRlICJIaXN0b3J5LmgiCiAjaW5jbHVkZSAiSURCRmFj
dG9yeS5oIgogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVk
ZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJMb2NhdGlvbi5oIgpAQCAtNjI4
LDkgKzYyNyw3IEBAIFN0b3JhZ2UqIERPTVdpbmRvdzo6c2Vzc2lvblN0b3JhZ2UoRXhjZXB0aW9u
Q29kZSYgZWMpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VB
cmVhPiBzdG9yYWdlQXJlYSA9IHBhZ2UtPnNlc3Npb25TdG9yYWdlKCktPnN0b3JhZ2VBcmVhKGRv
Y3VtZW50LT5zZWN1cml0eU9yaWdpbigpKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIHBh
Z2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlkVXNlRE9NU3RvcmFnZShzdG9yYWdlQXJlYS5n
ZXQoKSwgZmFsc2UsIG1fZnJhbWUpOwotI2VuZGlmCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRVc2VET01TdG9yYWdlKHBhZ2UsIHN0b3JhZ2VBcmVhLmdldCgpLCBmYWxzZSwgbV9m
cmFtZSk7CiAKICAgICBtX3Nlc3Npb25TdG9yYWdlID0gU3RvcmFnZTo6Y3JlYXRlKG1fZnJhbWUs
IHN0b3JhZ2VBcmVhLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIG1fc2Vzc2lvblN0b3JhZ2UuZ2V0
KCk7CkBAIC02NTgsOSArNjU1LDcgQEAgU3RvcmFnZSogRE9NV2luZG93Ojpsb2NhbFN0b3JhZ2Uo
RXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVmUHRy
PFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IHBhZ2UtPmdyb3VwKCkubG9jYWxTdG9yYWdlKCkt
PnN0b3JhZ2VBcmVhKGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKTsKLSNpZiBFTkFCTEUoSU5T
UEVDVE9SKQotICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlkVXNlRE9NU3RvcmFn
ZShzdG9yYWdlQXJlYS5nZXQoKSwgdHJ1ZSwgbV9mcmFtZSk7Ci0jZW5kaWYKKyAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZFVzZURPTVN0b3JhZ2UocGFnZSwgc3RvcmFnZUFyZWEuZ2V0
KCksIHRydWUsIG1fZnJhbWUpOwogCiAgICAgbV9sb2NhbFN0b3JhZ2UgPSBTdG9yYWdlOjpjcmVh
dGUobV9mcmFtZSwgc3RvcmFnZUFyZWEucmVsZWFzZSgpKTsKICAgICByZXR1cm4gbV9sb2NhbFN0
b3JhZ2UuZ2V0KCk7CkBAIC0xNTI3LDEzICsxNTIyLDcgQEAgdm9pZCBET01XaW5kb3c6OmRpc3Bh
dGNoTG9hZEV2ZW50KCkKICAgICAgICAgb3duZXJFbGVtZW50LT5kaXNwYXRjaEdlbmVyaWNFdmVu
dChvd25lckV2ZW50LnJlbGVhc2UoKSk7CiAgICAgfQogCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikK
LSAgICBpZiAoIWZyYW1lKCkgfHwgIWZyYW1lKCktPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBmcmFtZSgpLT5wYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKLSAgICAgICAgY29udHJvbGxlci0+bWFpblJlc291
cmNlRmlyZWRMb2FkRXZlbnQoZnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCksIHVy
bCgpKTsKLSNlbmRpZgorICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bWFpblJlc291cmNl
RmlyZWRMb2FkRXZlbnQoZnJhbWUoKSwgdXJsKCkpOwogfQogCiBib29sIERPTVdpbmRvdzo6ZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCwgUGFzc1JlZlB0cjxFdmVudFRh
cmdldD4gcHJwVGFyZ2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGQw
ZjE3NTYuLjAyNDE0M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTUx
LDcgKzUxLDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRl
ICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKQEAgLTEzMDgsMTcgKzEzMDgsMTEgQEAgYm9v
bCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmIG1vdXNlRXZlbnQpCiAKICAgICBtX21vdXNlUHJlc3NOb2RlID0gbWV2LnRhcmdldE5v
ZGUoKTsKIAotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2Zy
YW1lLT5wYWdlKCkpIHsKLSAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yID0g
cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOwotICAgICAgICBpZiAoaW5zcGVjdG9yICYmIGlu
c3BlY3Rvci0+ZW5hYmxlZCgpICYmIGluc3BlY3Rvci0+c2VhcmNoaW5nRm9yTm9kZUluUGFnZSgp
KSB7Ci0gICAgICAgICAgICBpbnNwZWN0b3ItPmhhbmRsZU1vdXNlUHJlc3MoKTsKLSAgICAgICAg
ICAgIGludmFsaWRhdGVDbGljaygpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KKyAgICBpZiAoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYW5kbGVNb3VzZVByZXNzKG1f
ZnJhbWUtPnBhZ2UoKSkpIHsKKyAgICAgICAgaW52YWxpZGF0ZUNsaWNrKCk7CisgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KLSNlbmRpZgotCisgICAgICAgIAogICAgIEZyYW1lKiBzdWJmcmFt
ZSA9IHN1YmZyYW1lRm9ySGl0VGVzdFJlc3VsdChtZXYpOwogICAgIGlmIChzdWJmcmFtZSAmJiBw
YXNzTW91c2VQcmVzc0V2ZW50VG9TdWJmcmFtZShtZXYsIHN1YmZyYW1lKSkgewogICAgICAgICAv
LyBTdGFydCBjYXB0dXJpbmcgZnV0dXJlIGV2ZW50cyBmb3IgdGhpcyBmcmFtZS4gIFdlIG9ubHkg
ZG8gdGhpcyBpZiB3ZSBkaWRuJ3QgY2xlYXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDNhMjQ4YTEu
LjAxMmE5YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtMTk5LDEwICsxOTksOCBAQCBQYWdlOjp+
UGFnZSgpCiAgICAgICAgIGZyYW1lLT5wYWdlRGVzdHJveWVkKCk7CiAKICAgICBtX2VkaXRvckNs
aWVudC0+cGFnZURlc3Ryb3llZCgpOwotICAgIAotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCk7Ci0jZW5kaWYK
KworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZCh0
aGlzKTsKIAogICAgIGJhY2tGb3J3YXJkKCktPmNsb3NlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZS5jcHAKaW5kZXggOTIwZjc1Yi4uOGVmNzgwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZS5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5o
IgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTEwNiwxMyArMTA2LDggQEAgUGFzc1JlZlB0
cjxEYXRhYmFzZT4gRGF0YWJhc2U6Om9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb24KICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFz
ZURldGFpbHMoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUpOwogCiAgICAgY29udGV4dC0+c2V0SGFzT3BlbkRhdGFiYXNlcygpOwotI2lm
IEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAg
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQp
OwotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAgICAg
ICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRpZE9wZW5EYXRhYmFzZShkYXRhYmFzZSwg
Y29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+aG9zdCgpLCBuYW1lLCBleHBlY3RlZFZlcnNpb24p
OwotICAgIH0KLSNlbmRpZgorCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVu
RGF0YWJhc2UoY29udGV4dCwgZGF0YWJhc2UuZ2V0KCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2lu
KCktPmhvc3QoKSwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uKTsKIAogICAgIC8vIElmIGl0J3MgYSBu
ZXcgZGF0YWJhc2UgYW5kIGEgY3JlYXRpb24gY2FsbGJhY2sgd2FzIHByb3ZpZGVkLCByZXNldCB0
aGUgZXhwZWN0ZWQKICAgICAvLyB2ZXJzaW9uIHRvICIiIGFuZCBzY2hlZHVsZSB0aGUgY3JlYXRp
b24gY2FsbGJhY2suIEJlY2F1c2Ugb2Ygc29tZSBzdWJ0bGUgU3RyaW5nCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwCmluZGV4IDEwYmM5NWYuLjE4YTk0YjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwCkBAIC0zOCw3ICszOCw3IEBA
CiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAKQEAgLTU2LDEwICs1
Niw3IEBAIEFic3RyYWN0V29ya2VyOjp+QWJzdHJhY3RXb3JrZXIoKQogCiB2b2lkIEFic3RyYWN0
V29ya2VyOjpvbkRlc3Ryb3lXb3JrZXIoKQogewotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAg
aWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSA/IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpIDog
MCkKLSAgICAgICAgaW5zcGVjdG9yLT5kaWREZXN0cm95V29ya2VyKGFzSUQoKSk7Ci0jZW5kaWYK
KyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERlc3Ryb3lXb3JrZXIoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLCBhc0lEKCkpOwogfQogCiB2b2lkIEFic3RyYWN0V29ya2VyOjpjb250
ZXh0RGVzdHJveWVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVk
V29ya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmNwcAppbmRl
eCA5OTdmOWNkLi44NzRlYTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1No
YXJlZFdvcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXIu
Y3BwCkBAIC0zNSw3ICszNSw3IEBACiAKICNpbmNsdWRlICJTaGFyZWRXb3JrZXIuaCIKIAotI2lu
Y2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUNoYW5uZWwu
aCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgpAQCAtNjQsMTAgKzY0LDcgQEAgUGFzc1JlZlB0
cjxTaGFyZWRXb3JrZXI+IFNoYXJlZFdvcmtlcjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBTdHJpbmcmIG4KIAogICAgIFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmNvbm5lY3Qod29y
a2VyLmdldCgpLCByZW1vdGVQb3J0LnJlbGVhc2UoKSwgc2NyaXB0VVJMLCBuYW1lLCBlYyk7CiAK
LSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNw
ZWN0b3IgPSBjb250ZXh0LT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgIGluc3BlY3Rv
ci0+ZGlkQ3JlYXRlV29ya2VyKHdvcmtlci0+YXNJRCgpLCBzY3JpcHRVUkwuc3RyaW5nKCksIHRy
dWUpOwotI2VuZGlmCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVXb3Jr
ZXIoY29udGV4dCwgd29ya2VyLT5hc0lEKCksIHNjcmlwdFVSTC5zdHJpbmcoKSwgdHJ1ZSk7CiAK
ICAgICByZXR1cm4gd29ya2VyLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNw
cAppbmRleCA4YTJmNjJhLi45NjgzNTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCkBA
IC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCkBAIC03MSwxMCAr
NzAsNyBAQCBQYXNzUmVmUHRyPFdvcmtlcj4gV29ya2VyOjpjcmVhdGUoY29uc3QgU3RyaW5nJiB1
cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbgogICAgIC8vIFRoZSB3b3JrZXIgY29udGV4
dCBkb2VzIG5vdCBleGlzdCB3aGlsZSBsb2FkaW5nLCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHRo
ZSB3b3JrZXIgb2JqZWN0IGlzIG5vdCBjb2xsZWN0ZWQsIG5vciBhcmUgaXRzIGV2ZW50IGxpc3Rl
bmVycy4KICAgICB3b3JrZXItPnNldFBlbmRpbmdBY3Rpdml0eSh3b3JrZXIuZ2V0KCkpOwogCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVj
dG9yID0gY29udGV4dC0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQotICAgICAgICBpbnNwZWN0b3It
PmRpZENyZWF0ZVdvcmtlcih3b3JrZXItPmFzSUQoKSwgc2NyaXB0VVJMLnN0cmluZygpLCBmYWxz
ZSk7Ci0jZW5kaWYKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdvcmtl
cihjb250ZXh0LCB3b3JrZXItPmFzSUQoKSwgc2NyaXB0VVJMLnN0cmluZygpLCBmYWxzZSk7CiAK
ICAgICByZXR1cm4gd29ya2VyLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKaW5kZXggMTA3MDBjNi4uZTg5Y2NiNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKQEAg
LTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVycm9yRXZl
bnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXIuaCIK
</data>

          </attachment>
      

    </bug>

</bugzilla>