<?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>54971</bug_id>
          
          <creation_ts>2011-02-22 10:33:11 -0800</creation_ts>
          <short_desc>Web Inspector: it should be possible to pass custom error text from a backend method to frontend.</short_desc>
          <delta_ts>2011-02-24 04:03:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Ilya Tikhonovsky">loislo</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>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>355378</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-22 10:33:11 -0800</bug_when>
    <thetext>Each command response should have boolean success and string error message as in protocol above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355379</commentid>
    <comment_count>1</comment_count>
      <attachid>83339</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-22 10:35:55 -0800</bug_when>
    <thetext>Created attachment 83339
[patch] initial version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355402</commentid>
    <comment_count>2</comment_count>
      <attachid>83339</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-22 10:58:10 -0800</bug_when>
    <thetext>Comment on attachment 83339
[patch] initial version

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

&gt; Source/WebCore/inspector/InspectorAgent.h:204
&gt; +    void enableProfiler(InspectorArray* errors = 0);

I understand that the protocol layer allows multiple errors, but the user layer is used to returning an error message (single string).

&gt; Source/WebCore/inspector/InspectorAgent.h:205
&gt; +    void disableProfiler(InspectorArray* errors = 0);

You force methods to check for errors existence - not nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356758</commentid>
    <comment_count>3</comment_count>
      <attachid>83620</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-24 01:33:53 -0800</bug_when>
    <thetext>Created attachment 83620
[patch] second version.

This version uses String* as the placeholder for the error text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356774</commentid>
    <comment_count>4</comment_count>
      <attachid>83620</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-24 02:06:18 -0800</bug_when>
    <thetext>Comment on attachment 83620
[patch] second version.

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

One thing would improve this change: if you could replace String* with ErrorString* and accompany it with typedef String ErrorString, that would improve error handling visibility to the agent authors.

&gt; Source/WebCore/ChangeLog:5
&gt; +        Web Inspector: There is a validator of the protocol message format.

Please add bug url into the changelog.

&gt; Source/WebCore/ChangeLog:19
&gt; +        * inspector/InjectedScriptHost.cpp:

Not sure you need it all here, I would leave names of the files only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356852</commentid>
    <comment_count>5</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-24 03:44:08 -0800</bug_when>
    <thetext>Committed r79539
	M	Source/WebCore/ChangeLog
	M	Source/WebCore/inspector/InspectorRuntimeAgent.h
	M	Source/WebCore/inspector/InspectorDebuggerAgent.h
	M	Source/WebCore/inspector/CodeGeneratorInspector.pm
	M	Source/WebCore/inspector/InspectorCSSAgent.h
	M	Source/WebCore/inspector/InjectedScriptHost.cpp
	M	Source/WebCore/inspector/InspectorController.cpp
	M	Source/WebCore/inspector/InspectorTimelineAgent.cpp
	M	Source/WebCore/inspector/InspectorConsoleAgent.h
	M	Source/WebCore/inspector/InspectorDatabaseAgent.h
	M	Source/WebCore/inspector/InspectorAgent.cpp
	M	Source/WebCore/inspector/InspectorProfilerAgent.cpp
	M	Source/WebCore/inspector/InspectorRuntimeAgent.cpp
	M	Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp
	M	Source/WebCore/inspector/InspectorDOMStorageAgent.cpp
	M	Source/WebCore/inspector/InspectorTimelineAgent.h
	M	Source/WebCore/inspector/InspectorProfilerAgent.h
	M	Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h
	M	Source/WebCore/inspector/InspectorDOMStorageAgent.h
	M	Source/WebCore/inspector/InspectorDOMAgent.h
	M	Source/WebCore/inspector/InspectorDebuggerAgent.cpp
	M	Source/WebCore/inspector/InspectorCSSAgent.cpp
	M	Source/WebCore/inspector/InspectorApplicationCacheAgent.h
	M	Source/WebCore/inspector/InspectorResourceAgent.h
	M	Source/WebCore/inspector/InspectorConsoleAgent.cpp
	M	Source/WebCore/inspector/InspectorDatabaseAgent.cpp
	M	Source/WebCore/inspector/InspectorDOMAgent.cpp
	M	Source/WebCore/inspector/InspectorAgent.h
	M	Source/WebCore/inspector/InspectorResourceAgent.cpp
	M	Source/WebCore/inspector/InspectorApplicationCacheAgent.cpp
r79539 = df5982d5c9853446953cbb1b35c1c1986a2a9830 (refs/remotes/trunk)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356857</commentid>
    <comment_count>6</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-24 04:03:26 -0800</bug_when>
    <thetext>build fix

Committed r79542
	M	Source/WebCore/ChangeLog
	M	Source/WebCore/inspector/InspectorRuntimeAgent.cpp
	M	Source/WebCore/inspector/InspectorDOMAgent.cpp
	M	Source/WebCore/inspector/InspectorResourceAgent.cpp
r79542 = 6e8066bfb8a0ea75b42df82b0ec0da2857fc8996 (refs/remotes/trunk)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83339</attachid>
            <date>2011-02-22 10:35:55 -0800</date>
            <delta_ts>2011-02-24 03:44:32 -0800</delta_ts>
            <desc>[patch] initial version</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>83137</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZjNiOGU0Li41MmFkODFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ5
IEBACisyMDExLTAyLTIyICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcGFzcyBjdXN0b20gZXJyb3IgdGV4dCBm
cm9tIGEgYmFja2VuZCBtZXRob2QgdG8gZnJvbnRlbmQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDk3MQorCisgICAgICAgICogaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucG06CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmV2YWx1
YXRlT25TZWxmKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFnZW50OjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QWdlbnQ6OmhpZ2hsaWdodERPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdl
bnQ6OmhpZ2hsaWdodEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpo
aWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojptb3VzZURp
ZE1vdmVPdmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6c2V0
U2VhcmNoaW5nRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6cG9w
dWxhdGVTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpz
ZXRVc2VyQWdlbnRPdmVycmlkZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6
Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGVsZXRlQ29v
a2llKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjplbmFibGVQcm9maWxlcik6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZVByb2ZpbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaXNhYmxlRGVidWdnZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Om9wZW5Jbkluc3BlY3RlZFdpbmRv
dyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6YWRkU2NyaXB0VG9FdmFsdWF0
ZU9uTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6cmVtb3ZlQWxsU2Ny
aXB0c1RvRXZhbHVhdGVPbkxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6
OnJlbG9hZFBhZ2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmhpZGVET01Ob2RlSGlnaGxpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpoaWRlRnJhbWVIaWdobGlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnN0YXJ0UHJvZmlsaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpzdG9wUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckFnZW50OjplbmFibGVEZWJ1Z2dlcik6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldEFwcGxpY2F0aW9uQ2FjaGVzKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRBbGxCcm93c2Vy
QnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2Vy
QWdlbnQ6OnJlc3RvcmVTdGlja3lCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVtb3ZlRXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3Nl
ckRlYnVnZ2VyQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnNldFhIUkJyZWFrcG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnJl
bW92ZVhIUkJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCcm93c2Vy
RGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVzRm9yTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0SW5saW5lU3R5bGVG
b3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRl
ZFN0eWxlRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
QWxsU3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRTdHls
ZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNo
ZWV0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVT
aGVldFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3Bl
cnR5VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJv
cGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVy
dGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6cXVlcnlTZWxlY3Rv
ckFsbCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldENvbnNvbGVNZXNzYWdlc0VuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29uc29sZUFnZW50OjpjbGVhckNvbnNvbGVNZXNzYWdl
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldE1vbml0b3Jp
bmdYSFJFbmFibGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1lbGluZVByb2ZpbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1lbGluZVByb2Zp
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3VtZSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRDaGlsZE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6cmVtb3ZlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
T01BZ2VudDo6Y2hhbmdlVGFnTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6Z2V0T3V0ZXJIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpzZXRPdXRlckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dFRleHROb2RlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Omdl
dEV2ZW50TGlzdGVuZXJzRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6YWRkSW5zcGVjdGVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6cGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2Vu
dDo6c2VhcmNoQ2FuY2VsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6
OnJlc29sdmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRO
b2RlUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0
Tm9kZVByb3RvdHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnB1
c2hOb2RlVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
Y29weU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2Rl
QnlQYXRoVG9Gcm9udGVuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VF
bnRyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0
RE9NU3RvcmFnZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50OjpyZW1vdmVET01TdG9yYWdlSXRlbSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFz
ZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6Omdl
dERhdGFiYXNlVGFibGVOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50OjpleGVjdXRlU1FMKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJh
c2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmFjdGl2YXRlQnJl
YWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVh
Y3RpdmF0ZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNldEphdmFTY3JpcHRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNldEphdmFTY3JpcHRCcmVha3BvaW50QnlTb3VyY2VJZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVKYXZhU2NyaXB0
QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpj
b250aW51ZVRvTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZWRpdFNjcmlwdFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnN0ZXBPdmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnN0ZXBJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0
ZXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmdldENvbXBsZXRpb25zT25DYWxsRnJhbWUpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZUhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JQcm9maWxlckFnZW50OjpyZW1vdmVQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQ6OnRha2VIZWFwU25hcHNob3QpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JQcm9maWxlckFnZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
cm9maWxlckFnZW50OjpjbGVhclByb2ZpbGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50OjpzZXRFeHRyYUhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVz
b3VyY2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clJlc291cmNlQWdlbnQ6OnJlc291cmNlQ29udGVudCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRD
b21wbGV0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6Omdl
dFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUnVudGltZUFnZW50Ojpz
ZXRQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmNs
ZWFyRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6
cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdG9wKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oOgorCiAyMDExLTAyLTIy
ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByNzkzMjEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbSBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCmluZGV4IDljNjY4YmUuLjEwYmUwOWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnBtCkBAIC00NTcsNyArNDU3LDcgQEAgc3ViIGdlbmVyYXRlQmFja2VuZEZ1bmN0aW9uCiAgICAg
ICAgICRpbmRlbnQgPSAiICAgICI7CiAgICAgfQogCi0gICAgbXkgJGFyZ3MgPSBqb2luKCIsICIs
IChtYXAoJF8tPm5hbWUsIEBpbkFyZ3MpLCBtYXAoIiYiIC4gJF8tPm5hbWUsIEBvdXRBcmdzKSkp
OworICAgIG15ICRhcmdzID0gam9pbigiLCAiLCAoInByb3RvY29sRXJyb3JzLmdldCgpIiwgbWFw
KCRfLT5uYW1lLCBAaW5BcmdzKSwgbWFwKCImIiAuICRfLT5uYW1lLCBAb3V0QXJncykpKTsKICAg
ICBwdXNoKEBmdW5jdGlvbiwgIiRpbmRlbnQgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpIik7CiAgICAgcHVzaChAZnVuY3Rpb24sICIkaW5kZW50ICAgICAgICAkZG9tYWluQWNjZXNz
b3ItPiRmdW5jdGlvbk5hbWUoJGFyZ3MpOyIpOwogICAgIGlmIChzY2FsYXIoQGluQXJncykpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAKaW5k
ZXggZmJiNGRiZi4uNGYwYmIzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0SG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0SG9zdC5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgSW5qZWN0ZWRTY3JpcHRIb3N0
Ojp+SW5qZWN0ZWRTY3JpcHRIb3N0KCkKIHsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6
OmV2YWx1YXRlT25TZWxmKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25Cb2R5LCBQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBhcmd1bWVudHNBcnJheSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVz
dWx0KQordm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmV2YWx1YXRlT25TZWxmKEluc3BlY3RvckFy
cmF5KiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbkJvZHksIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFyZ3VtZW50c0FycmF5LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCiB7CiAg
ICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvck1haW5G
cmFtZSgpOwogICAgIGlmICghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oCmluZGV4IGY1MWY4ZGEuLjUw
ZjMxZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0
LmgKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIH5JbmplY3RlZFNjcmlwdEhvc3QoKTsK
IAogICAgIC8vIFBhcnQgb2YgdGhlIHByb3RvY29sLgotICAgIHZvaWQgZXZhbHVhdGVPblNlbGYo
Y29uc3QgU3RyaW5nJiBmdW5jdGlvbkJvZHksIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFy
Z3VtZW50c0FycmF5LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQg
ZXZhbHVhdGVPblNlbGYoSW5zcGVjdG9yQXJyYXkqIGVycm9ycywgY29uc3QgU3RyaW5nJiBmdW5j
dGlvbkJvZHksIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFyZ3VtZW50c0FycmF5LCBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwogCiAgICAgSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JBZ2VudDsgfQogICAgIHZvaWQgZGlzY29u
bmVjdENvbnRyb2xsZXIoKSB7IG1faW5zcGVjdG9yQWdlbnQgPSAwOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcAppbmRleCAwODc0YjhiLi5hNDkzNTlhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKQEAgLTIzOCw3
ICsyMzgsNyBAQCB2b2lkIEluc3BlY3RvckFnZW50Ojpmb2N1c05vZGUoKQogICAgIG1fbm9kZVRv
Rm9jdXMgPSAwOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjpoaWdobGlnaHQoTm9kZSogbm9k
ZSkKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmhpZ2hsaWdodChJbnNwZWN0b3JBcnJheSosIE5vZGUq
IG5vZGUpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0Nywy
NSArMjQ3LDI1IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmhpZ2hsaWdodChOb2RlKiBub2RlKQog
ICAgIG1fY2xpZW50LT5oaWdobGlnaHQobm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6
OmhpZ2hsaWdodERPTU5vZGUobG9uZyBub2RlSWQpCit2b2lkIEluc3BlY3RvckFnZW50OjpoaWdo
bGlnaHRET01Ob2RlKEluc3BlY3RvckFycmF5KiBlcnJvcnMsIGxvbmcgbm9kZUlkKQogewogICAg
IE5vZGUqIG5vZGUgPSAwOwogICAgIGlmIChtX2RvbUFnZW50ICYmIChub2RlID0gbV9kb21BZ2Vu
dC0+bm9kZUZvcklkKG5vZGVJZCkpKQotICAgICAgICBoaWdobGlnaHQobm9kZSk7CisgICAgICAg
IGhpZ2hsaWdodChlcnJvcnMsIG5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjpoaWdo
bGlnaHRGcmFtZSh1bnNpZ25lZCBsb25nIGZyYW1lSWQpCit2b2lkIEluc3BlY3RvckFnZW50Ojpo
aWdobGlnaHRGcmFtZShJbnNwZWN0b3JBcnJheSogZXJyb3JzLCB1bnNpZ25lZCBsb25nIGZyYW1l
SWQpCiB7CiAgICAgRnJhbWUqIG1haW5GcmFtZSA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1l
KCk7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtYWluRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUpKSB7CiAgICAgICAgIGlmIChyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZnJhbWUpID09IGZyYW1lSWQgJiYgZnJhbWUtPm93bmVy
RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBoaWdobGlnaHQoZnJhbWUtPm93bmVyRWxlbWVudCgp
KTsKKyAgICAgICAgICAgIGhpZ2hsaWdodChlcnJvcnMsIGZyYW1lLT5vd25lckVsZW1lbnQoKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQWdlbnQ6OmhpZGVIaWdobGlnaHQoKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6aGlkZUhpZ2hs
aWdodChJbnNwZWN0b3JBcnJheSopCiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI4MSw4ICsyODEsMTAgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6bW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ24KICAgICBO
b2RlKiBub2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwogICAgIHdoaWxlIChub2RlICYmIG5vZGUt
Pm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFKQogICAgICAgICBub2RlID0gbm9kZS0+cGFy
ZW50Tm9kZSgpOwotICAgIGlmIChub2RlKQotICAgICAgICBoaWdobGlnaHQobm9kZSk7CisgICAg
aWYgKG5vZGUpIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBlcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGhpZ2hsaWdodChlcnJvcnMuZ2V0KCksIG5v
ZGUpOworICAgIH0KIH0KIAogYm9vbCBJbnNwZWN0b3JBZ2VudDo6aGFuZGxlTW91c2VQcmVzcygp
CkBAIC0zMjksNyArMzMxLDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0U2VhcmNoaW5nRm9y
Tm9kZShib29sIGVuYWJsZWQpCiAgICAgICAgIGhpZGVIaWdobGlnaHQoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JBZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIGJvb2wqIG5l
d1N0YXRlKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShJbnNwZWN0
b3JBcnJheSosIGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpCiB7CiAgICAgKm5ld1N0YXRl
ID0gZW5hYmxlZDsKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVuYWJsZWQpOwpAQCAtNDIxLDcg
KzQyMyw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdl
bnRzKCkKICNlbmRpZgogfQogCi12b2lkIEluc3BlY3RvckFnZW50Ojpwb3B1bGF0ZVNjcmlwdE9i
amVjdHMoKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKEluc3Bl
Y3RvckFycmF5KiBlcnJvcnMpCiB7CiAgICAgQVNTRVJUKG1fZnJvbnRlbmQpOwogICAgIGlmICgh
bV9mcm9udGVuZCkKQEAgLTU3OCw3ICs1ODAsNyBAQCBib29sIEluc3BlY3RvckFnZW50Ojppc01h
aW5SZXNvdXJjZUxvYWRlcihEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBLVVJMJiByZQog
ICAgIHJldHVybiBsb2FkZXItPmZyYW1lKCkgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUo
KSAmJiByZXF1ZXN0VXJsID09IGxvYWRlci0+cmVxdWVzdFVSTCgpOwogfQogCi12b2lkIEluc3Bl
Y3RvckFnZW50OjpzZXRVc2VyQWdlbnRPdmVycmlkZShjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCkK
K3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldFVzZXJBZ2VudE92ZXJyaWRlKEluc3BlY3RvckFycmF5
KiwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpCiB7CiAgICAgbV91c2VyQWdlbnRPdmVycmlkZSA9
IHVzZXJBZ2VudDsKIH0KQEAgLTY1OCw3ICs2NjAsNyBAQCB2b2lkIEluc3BlY3RvckFnZW50Ojpk
aWREZXN0cm95V29ya2VyKGludHB0cl90IGlkKQogfQogI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJT
KQogCi12b2lkIEluc3BlY3RvckFnZW50OjpnZXRDb29raWVzKFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4qIGNvb2tpZXMsIFdURjo6U3RyaW5nKiBjb29raWVzU3RyaW5nKQordm9pZCBJbnNwZWN0b3JB
Z2VudDo6Z2V0Q29va2llcyhJbnNwZWN0b3JBcnJheSosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4q
IGNvb2tpZXMsIFdURjo6U3RyaW5nKiBjb29raWVzU3RyaW5nKQogewogICAgIC8vIElmIHdlIGNh
biBnZXQgcmF3IGNvb2tpZXMuCiAgICAgTGlzdEhhc2hTZXQ8Q29va2llPiByYXdDb29raWVzTGlz
dDsKQEAgLTcyOSw3ICs3MzEsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVj
dG9yQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvbnN0IENvb2tpZSYgYwogICAgIHJldHVy
biB2YWx1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGVsZXRlQ29va2llKGNvbnN0IFN0
cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pCit2b2lkIEluc3BlY3RvckFn
ZW50OjpkZWxldGVDb29raWUoSW5zcGVjdG9yQXJyYXkqLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5h
bWUsIGNvbnN0IFN0cmluZyYgZG9tYWluKQogewogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9p
bnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+
dHJhdmVyc2VOZXh0KG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpKSB7CiAgICAgICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwpAQCAtNzk5LDcgKzgwMSw3IEBA
IGJvb2wgSW5zcGVjdG9yQWdlbnQ6OnByb2ZpbGVyRW5hYmxlZCgpIGNvbnN0CiAgICAgcmV0dXJu
IGVuYWJsZWQoKSAmJiBtX3Byb2ZpbGVyQWdlbnQtPmVuYWJsZWQoKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6ZW5hYmxlUHJvZmlsZXIoKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxl
UHJvZmlsZXIoSW5zcGVjdG9yQXJyYXkqKQogewogICAgIGlmIChwcm9maWxlckVuYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtODA3LDcgKzgwOSw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6
OmVuYWJsZVByb2ZpbGVyKCkKICAgICBtX3Byb2ZpbGVyQWdlbnQtPmVuYWJsZShmYWxzZSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2FibGVQcm9maWxlcigpCit2b2lkIEluc3BlY3Rv
ckFnZW50OjpkaXNhYmxlUHJvZmlsZXIoSW5zcGVjdG9yQXJyYXkqKQogewogICAgIG1fc3RhdGUt
PnNldEJvb2xlYW4oSW5zcGVjdG9yQWdlbnRTdGF0ZTo6cHJvZmlsZXJFbmFibGVkLCBmYWxzZSk7
CiAgICAgbV9wcm9maWxlckFnZW50LT5kaXNhYmxlKCk7CkBAIC04NDIsNyArODQ0LDcgQEAgdm9p
ZCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlRGVidWdnZXIoYm9vbCBlcmFzZVN0aWNreUJyZWFrcG9p
bnRzKQogICAgIG1fZnJvbnRlbmQtPmRlYnVnZ2VyV2FzRW5hYmxlZCgpOwogfQogCi12b2lkIElu
c3BlY3RvckFnZW50OjpkaXNhYmxlRGVidWdnZXIoKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlz
YWJsZURlYnVnZ2VyKEluc3BlY3RvckFycmF5KikKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtODU1LDEyICs4NTcsNiBAQCB2b2lkIEluc3BlY3RvckFnZW50Ojpk
aXNhYmxlRGVidWdnZXIoKQogICAgICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvckFn
ZW50U3RhdGU6OmRlYnVnZ2VyRW5hYmxlZCwgZmFsc2UpOwogICAgIH0KIH0KLQotdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6cmVzdW1lKCkKLXsKLSAgICBpZiAobV9kZWJ1Z2dlckFnZW50KQotICAgICAg
ICBtX2RlYnVnZ2VyQWdlbnQtPnJlc3VtZSgpOwotfQogI2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9y
QWdlbnQ6OmV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgc2NyaXB0KQpAQCAtODcxLDcgKzg2Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmV2YWx1
YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0CiAg
ICAgICAgIG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzLmFwcGVuZChwYWlyPGxvbmcsIFN0
cmluZz4oY2FsbElkLCBzY3JpcHQpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkRXZh
bHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBqc29uUmVz
dWx0KQordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChJ
bnNwZWN0b3JBcnJheSosIGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIGpzb25SZXN1bHQpCiB7
CiAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGVGcm9tUGFnZShkZWJ1
Z2dlcldvcmxkKCksIG1faW5zcGVjdGVkUGFnZSk7CiAgICAgU2NyaXB0T2JqZWN0IHdpbmRvdzsK
QEAgLTExMjYsNyArMTEyMiw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0
bGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBiCiAgICAgY29udGV4
dC5kcmF3VGV4dChmb250LCBub2RlVGl0bGVSdW4sIEludFBvaW50KHRpdGxlUmVjdC54KCkgKyBy
ZWN0SW5mbGF0ZVB4LCB0aXRsZVJlY3QueSgpICsgZm9udC5mb250TWV0cmljcygpLmhlaWdodCgp
KSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6Om9wZW5Jbkluc3BlY3RlZFdpbmRvdyhjb25z
dCBTdHJpbmcmIHVybCkKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6Om9wZW5Jbkluc3BlY3RlZFdpbmRv
dyhJbnNwZWN0b3JBcnJheSosIGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIEZyYW1lKiBtYWlu
RnJhbWUgPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpOwogCkBAIC0xMTQ0LDEyICsxMTQw
LDEyIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6Om9wZW5Jbkluc3BlY3RlZFdpbmRvdyhjb25zdCBT
dHJpbmcmIHVybCkKICAgICBuZXdGcmFtZS0+bG9hZGVyKCktPmNoYW5nZUxvY2F0aW9uKG1haW5G
cmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgbmV3RnJhbWUtPmxvYWRlcigpLT5j
b21wbGV0ZVVSTCh1cmwpLCAiIiwgZmFsc2UsIGZhbHNlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JB
Z2VudDo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChjb25zdCBTdHJpbmcmIHNvdXJjZSkKK3Zv
aWQgSW5zcGVjdG9yQWdlbnQ6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoSW5zcGVjdG9yQXJy
YXkqLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKIHsKICAgICBtX3NjcmlwdHNUb0V2YWx1YXRlT25M
b2FkLmFwcGVuZChzb3VyY2UpOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjpyZW1vdmVBbGxT
Y3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpCit2b2lkIEluc3BlY3RvckFnZW50OjpyZW1vdmVBbGxT
Y3JpcHRzVG9FdmFsdWF0ZU9uTG9hZChJbnNwZWN0b3JBcnJheSopCiB7CiAgICAgbV9zY3JpcHRz
VG9FdmFsdWF0ZU9uTG9hZC5jbGVhcigpOwogfQpAQCAtMTE3MSw3ICsxMTY3LDcgQEAgS1VSTCBJ
bnNwZWN0b3JBZ2VudDo6aW5zcGVjdGVkVVJMV2l0aG91dEZyYWdtZW50KCkgY29uc3QKICAgICBy
ZXR1cm4gdXJsOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjpyZWxvYWRQYWdlKGJvb2wgaWdu
b3JlQ2FjaGUpCit2b2lkIEluc3BlY3RvckFnZW50OjpyZWxvYWRQYWdlKEluc3BlY3RvckFycmF5
KiwgYm9vbCBpZ25vcmVDYWNoZSkKIHsKICAgICBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgp
LT5sb2FkZXIoKS0+cmVsb2FkKGlnbm9yZUNhY2hlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckFnZW50LmgKaW5kZXggZjk0NWIzMC4uNTI1NWU1ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKQEAgLTExNiwxOSArMTE2LDE5IEBAIHB1
YmxpYzoKICAgICBQYWdlKiBpbnNwZWN0ZWRQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0
ZWRQYWdlOyB9CiAgICAgS1VSTCBpbnNwZWN0ZWRVUkwoKSBjb25zdDsKICAgICBLVVJMIGluc3Bl
Y3RlZFVSTFdpdGhvdXRGcmFnbWVudCgpIGNvbnN0OwotICAgIHZvaWQgcmVsb2FkUGFnZShib29s
IGlnbm9yZUNhY2hlKTsKKyAgICB2b2lkIHJlbG9hZFBhZ2UoSW5zcGVjdG9yQXJyYXkqIGVycm9y
cywgYm9vbCBpZ25vcmVDYWNoZSk7CiAgICAgdm9pZCBzaG93Q29uc29sZSgpOwogCiAgICAgdm9p
ZCByZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9y
Q29va2llKTsKIAotICAgIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKTsKLSAgICB2b2lkIGhpZGVIaWdo
bGlnaHQoKTsKKyAgICB2b2lkIGhpZ2hsaWdodChJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBOb2Rl
Kik7CisgICAgdm9pZCBoaWRlSGlnaGxpZ2h0KEluc3BlY3RvckFycmF5KiBlcnJvcnMgPSAwKTsK
ICAgICB2b2lkIGluc3BlY3QoTm9kZSopOwotICAgIHZvaWQgaGlnaGxpZ2h0RE9NTm9kZShsb25n
IG5vZGVJZCk7Ci0gICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodCgpIHsgaGlkZUhpZ2hsaWdo
dCgpOyB9CisgICAgdm9pZCBoaWdobGlnaHRET01Ob2RlKEluc3BlY3RvckFycmF5KiBlcnJvcnMs
IGxvbmcgbm9kZUlkKTsKKyAgICB2b2lkIGhpZGVET01Ob2RlSGlnaGxpZ2h0KEluc3BlY3RvckFy
cmF5KiBlcnJvcnMpIHsgaGlkZUhpZ2hsaWdodChlcnJvcnMpOyB9CiAKLSAgICB2b2lkIGhpZ2hs
aWdodEZyYW1lKHVuc2lnbmVkIGxvbmcgZnJhbWVJZCk7Ci0gICAgdm9pZCBoaWRlRnJhbWVIaWdo
bGlnaHQoKSB7IGhpZGVIaWdobGlnaHQoKTsgfQorICAgIHZvaWQgaGlnaGxpZ2h0RnJhbWUoSW5z
cGVjdG9yQXJyYXkqIGVycm9ycywgdW5zaWduZWQgbG9uZyBmcmFtZUlkKTsKKyAgICB2b2lkIGhp
ZGVGcmFtZUhpZ2hsaWdodChJbnNwZWN0b3JBcnJheSogZXJyb3JzKSB7IGhpZGVIaWdobGlnaHQo
ZXJyb3JzKTsgfQogCiAgICAgdm9pZCBzZXRGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZCopOwog
ICAgIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbnRl
bmQ7IH0KQEAgLTE2OCw4ICsxNjgsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZENvbW1pdExv
YWQoRG9jdW1lbnRMb2FkZXIqKTsKIAotICAgIHZvaWQgZ2V0Q29va2llcyhSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+KiBjb29raWVzLCBXVEY6OlN0cmluZyogY29va2llc1N0cmluZyk7Ci0gICAgdm9p
ZCBkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIGRv
bWFpbik7CisgICAgdm9pZCBnZXRDb29raWVzKEluc3BlY3RvckFycmF5KiBlcnJvcnMsIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qIGNvb2tpZXMsIFdURjo6U3RyaW5nKiBjb29raWVzU3RyaW5nKTsK
KyAgICB2b2lkIGRlbGV0ZUNvb2tpZShJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBjb25zdCBTdHJp
bmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluKTsKIAogICAgIHZvaWQgZG9tQ29u
dGVudExvYWRlZEV2ZW50RmlyZWQoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBLVVJMJik7CiAgICAg
dm9pZCBsb2FkRXZlbnRGaXJlZChEb2N1bWVudExvYWRlciosIGNvbnN0IEtVUkwmKTsKQEAgLTE5
MiwzMiArMTkyLDMxIEBAIHB1YmxpYzoKICAgICBib29sIGhhc0Zyb250ZW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcm9udGVuZDsgfQogCiAgICAgdm9pZCBkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKLSAgICB2b2lkIG9wZW5Jbkluc3BlY3RlZFdpbmRvdyhjb25zdCBT
dHJpbmcmIHVybCk7CisgICAgdm9pZCBvcGVuSW5JbnNwZWN0ZWRXaW5kb3coSW5zcGVjdG9yQXJy
YXkqIGVycm9ycywgY29uc3QgU3RyaW5nJiB1cmwpOwogICAgIHZvaWQgZHJhd0VsZW1lbnRUaXRs
ZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgRmxv
YXRSZWN0JiBvdmVybGF5UmVjdCwgV2ViQ29yZTo6U2V0dGluZ3MqKSBjb25zdDsKIAogI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIGJvb2wgaXNSZWNvcmRpbmdVc2VySW5pdGlh
dGVkUHJvZmlsZSgpIGNvbnN0OwotICAgIHZvaWQgc3RhcnRQcm9maWxpbmcoKSB7IHN0YXJ0VXNl
ckluaXRpYXRlZFByb2ZpbGluZygpOyB9CisgICAgdm9pZCBzdGFydFByb2ZpbGluZyhJbnNwZWN0
b3JBcnJheSopIHsgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7IH0KICAgICB2b2lkIHN0
YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpOwotICAgIHZvaWQgc3RvcFByb2ZpbGluZygpIHsg
c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsgfQorICAgIHZvaWQgc3RvcFByb2ZpbGluZyhJ
bnNwZWN0b3JBcnJheSopIHsgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsgfQogICAgIHZv
aWQgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKLSAgICB2b2lkIGVuYWJsZVByb2ZpbGVy
KCk7Ci0gICAgdm9pZCBkaXNhYmxlUHJvZmlsZXIoKTsKKyAgICB2b2lkIGVuYWJsZVByb2ZpbGVy
KEluc3BlY3RvckFycmF5KiBlcnJvcnMgPSAwKTsKKyAgICB2b2lkIGRpc2FibGVQcm9maWxlcihJ
bnNwZWN0b3JBcnJheSogZXJyb3JzID0gMCk7CiAgICAgYm9vbCBwcm9maWxlckVuYWJsZWQoKSBj
b25zdDsKIAogICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkRGVidWdnaW5nKCk7Ci0gICAgdm9p
ZCBlbmFibGVEZWJ1Z2dlcigpIHsgZW5hYmxlRGVidWdnZXIoZmFsc2UpOyB9CisgICAgdm9pZCBl
bmFibGVEZWJ1Z2dlcihJbnNwZWN0b3JBcnJheSopIHsgZW5hYmxlRGVidWdnZXIoZmFsc2UpOyB9
CiAgICAgdm9pZCBlbmFibGVEZWJ1Z2dlcihib29sIGVyYXNlU3RpY2t5QnJlYWtwb2ludHMpOwot
ICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKCk7CisgICAgdm9pZCBkaXNhYmxlRGVidWdnZXIoSW5z
cGVjdG9yQXJyYXkqIGVycm9ycyA9IDApOwogICAgIGJvb2wgZGVidWdnZXJFbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9kZWJ1Z2dlckFnZW50OyB9Ci0gICAgdm9pZCByZXN1bWUoKTsKICNlbmRp
ZgogCiAgICAgLy8gR2VuZXJpYyBjb2RlIGNhbGxlZCBmcm9tIGN1c3RvbSBpbXBsZW1lbnRhdGlv
bnMuCiAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgdGVzdENhbGxJZCwg
Y29uc3QgU3RyaW5nJiBzY3JpcHQpOwogCi0gICAgdm9pZCBhZGRTY3JpcHRUb0V2YWx1YXRlT25M
b2FkKGNvbnN0IFN0cmluZyYgc291cmNlKTsKLSAgICB2b2lkIHJlbW92ZUFsbFNjcmlwdHNUb0V2
YWx1YXRlT25Mb2FkKCk7CisgICAgdm9pZCBhZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKEluc3Bl
Y3RvckFycmF5KiBlcnJvcnMsIGNvbnN0IFN0cmluZyYgc291cmNlKTsKKyAgICB2b2lkIHJlbW92
ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkKEluc3BlY3RvckFycmF5KiBlcnJvcnMpOwogICAg
IHZvaWQgc2V0SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKGNvbnN0IFN0cmluZyYgc291cmNlKTsKIAog
ICAgIEluc3BlY3RvclN0YXRlKiBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGUuZ2V0KCk7IH0KQEAg
LTIyNSwxMiArMjI0LDEyIEBAIHB1YmxpYzoKICAgICAvLyBJbnNwZWN0b3JBZ2VudCBBUEkKICAg
ICB2b2lkIGdldEluc3BlY3RvclN0YXRlKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBzdGF0ZSk7
CiAgICAgdm9pZCBzZXRNb25pdG9yaW5nWEhSRW5hYmxlZChib29sIGVuYWJsZWQsIGJvb2wqIG5l
d1N0YXRlKTsKLSAgICB2b2lkIHBvcHVsYXRlU2NyaXB0T2JqZWN0cygpOworICAgIHZvaWQgcG9w
dWxhdGVTY3JpcHRPYmplY3RzKEluc3BlY3RvckFycmF5KiBlcnJvcnMpOwogICAgIC8vIEZvbGxv
d2luZyBhcmUgdXNlZCBmcm9tIEluc3BlY3RvckJhY2tlbmQgYW5kIGludGVybmFsbHkuCi0gICAg
dm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpOwot
ICAgIHZvaWQgZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBqc29uUmVzdWx0KTsKKyAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoSW5zcGVj
dG9yQXJyYXkqIGVycm9ycywgYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSk7CisgICAgdm9p
ZCBkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKEluc3BlY3RvckFycmF5KiBlcnJvcnMsIGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIGpzb25SZXN1bHQpOwogCi0gICAgdm9pZCBzZXRVc2Vy
QWdlbnRPdmVycmlkZShjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCk7CisgICAgdm9pZCBzZXRVc2Vy
QWdlbnRPdmVycmlkZShJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBjb25zdCBTdHJpbmcmIHVzZXJB
Z2VudCk7CiAgICAgdm9pZCBhcHBseVVzZXJBZ2VudE92ZXJyaWRlKFN0cmluZyogdXNlckFnZW50
KSBjb25zdDsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKaW5kZXggYjM4YmI4My4u
MmQ1ODJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6Om5ldHdvcmtTdGF0ZUNoYW5nZWQoKQogICAg
IG1fZnJvbnRlbmQtPnVwZGF0ZU5ldHdvcmtTdGF0ZShpc05vd09ubGluZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlcyhSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+KiBhcHBsaWNhdGlvbkNhY2hlcykKK3ZvaWQgSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlcyhJbnNwZWN0b3JBcnJheSos
IFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIGFwcGxpY2F0aW9uQ2FjaGVzKQogewogICAgIGlmICht
X2RvY3VtZW50TG9hZGVyKSB7CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBob3N0ID0g
bV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
aAppbmRleCAzM2NlZTU5Li42ODJiM2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCkBAIC01NSw3ICs1
NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKIAogICAgIC8v
IEZyb20gRnJvbnRlbmQKLSAgICB2b2lkIGdldEFwcGxpY2F0aW9uQ2FjaGVzKFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4qIGFwcGxpY2F0aW9uQ2FjaGVzKTsKKyAgICB2b2lkIGdldEFwcGxpY2F0aW9u
Q2FjaGVzKEluc3BlY3RvckFycmF5KiBlcnJvcnMsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIGFw
cGxpY2F0aW9uQ2FjaGVzKTsKIAogcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0JiwgY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNh
Y2hlSW5mbyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggNWZlOTkzNy4uNjg2MzNmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dl
ckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3Nl
ckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9y
RE9NQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yU3RhdGUuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSB7CkBAIC04Miw3ICs4Myw3IEBA
IEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojp+SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2Vy
QWdlbnQoKQogewogfQogCi12b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRB
bGxCcm93c2VyQnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9p
bnRzKQordm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6c2V0QWxsQnJvd3NlckJy
ZWFrcG9pbnRzKEluc3BlY3RvckFycmF5KiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJy
ZWFrcG9pbnRzKQogewogICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPnNldE9iamVjdChC
cm93c2VyRGVidWdnZXJBZ2VudFN0YXRlOjpicm93c2VyQnJlYWtwb2ludHMsIGJyZWFrcG9pbnRz
KTsKICAgICBpbnNwZWN0ZWRVUkxDaGFuZ2VkKG1faW5zcGVjdG9yQWdlbnQtPmluc3BlY3RlZFVS
TFdpdGhvdXRGcmFnbWVudCgpKTsKQEAgLTExNiwyMCArMTE3LDIxIEBAIHZvaWQgSW5zcGVjdG9y
QnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnJlc3RvcmVTdGlja3lCcmVha3BvaW50KFBhc3NSZWZQdHI8
SW5zcGVjdG9yCiAgICAgaWYgKCFjb25kaXRpb24pCiAgICAgICAgIHJldHVybjsKIAorICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gZXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwog
ICAgIGlmICh0eXBlID09IGV2ZW50TGlzdGVuZXJOYXRpdmVCcmVha3BvaW50VHlwZSkgewogICAg
ICAgICBpZiAoIWVuYWJsZWQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIFN0cmluZyBl
dmVudE5hbWU7CiAgICAgICAgIGlmICghY29uZGl0aW9uLT5nZXRTdHJpbmcoImV2ZW50TmFtZSIs
ICZldmVudE5hbWUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzZXRFdmVudExpc3Rl
bmVyQnJlYWtwb2ludChldmVudE5hbWUpOworICAgICAgICBzZXRFdmVudExpc3RlbmVyQnJlYWtw
b2ludChlcnJvcnMuZ2V0KCksIGV2ZW50TmFtZSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IHho
ck5hdGl2ZUJyZWFrcG9pbnRUeXBlKSB7CiAgICAgICAgIGlmICghZW5hYmxlZCkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgU3RyaW5nIHVybDsKICAgICAgICAgaWYgKCFjb25kaXRpb24t
PmdldFN0cmluZygidXJsIiwgJnVybCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHNl
dFhIUkJyZWFrcG9pbnQodXJsKTsKKyAgICAgICAgc2V0WEhSQnJlYWtwb2ludChlcnJvcnMuZ2V0
KCksIHVybCk7CiAgICAgfQogfQogCkBAIC0xMzgsMTIgKzE0MCwxMiBAQCB2b2lkIEluc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpkaXNjYXJkQmluZGluZ3MoKQogICAgIG1fZG9tQnJlYWtw
b2ludHMuY2xlYXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6
c2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCit2b2lk
IEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRFdmVudExpc3RlbmVyQnJlYWtwb2lu
dChJbnNwZWN0b3JBcnJheSosIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQogewogICAgIG1fZXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnRzLmFkZChldmVudE5hbWUpOwogfQogCi12b2lkIEluc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpyZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIGV2ZW50TmFtZSkKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6
OnJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KEluc3BlY3RvckFycmF5KiwgY29uc3QgU3Ry
aW5nJiBldmVudE5hbWUpCiB7CiAgICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMucmVtb3Zl
KGV2ZW50TmFtZSk7CiB9CkBAIC0xNzYsNyArMTc4LDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2Vy
RGVidWdnZXJBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogICAgIH0KIH0KIAot
dm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChsb25n
IG5vZGVJZCwgbG9uZyB0eXBlKQordm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6
c2V0RE9NQnJlYWtwb2ludChJbnNwZWN0b3JBcnJheSosIGxvbmcgbm9kZUlkLCBsb25nIHR5cGUp
CiB7CiAgICAgTm9kZSogbm9kZSA9IG1faW5zcGVjdG9yQWdlbnQtPmRvbUFnZW50KCktPm5vZGVG
b3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSkKQEAgLTE5MCw3ICsxOTIsNyBAQCB2b2lkIElu
c3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRET01CcmVha3BvaW50KGxvbmcgbm9kZUlk
LCBsb25nIHR5cGUpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFn
ZW50OjpyZW1vdmVET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpCit2b2lkIElu
c3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KEluc3BlY3Rv
ckFycmF5KiwgbG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKIHsKICAgICBOb2RlKiBub2RlID0gbV9p
bnNwZWN0b3JBZ2VudC0+ZG9tQWdlbnQoKS0+bm9kZUZvcklkKG5vZGVJZCk7CiAgICAgaWYgKCFu
b2RlKQpAQCAtMzMxLDcgKzMzMyw3IEBAIHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKGNvbnN0IFN0cmluZyYgY2F0CiAgICAgICAg
IGRlYnVnZ2VyQWdlbnQtPnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoTmF0aXZlQnJlYWtw
b2ludERlYnVnZ2VyRXZlbnRUeXBlLCBldmVudERhdGEucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6c2V0WEhSQnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIHVybCkKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnNldFhIUkJyZWFr
cG9pbnQoSW5zcGVjdG9yQXJyYXkqLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBpZiAodXJs
LmlzRW1wdHkoKSkKICAgICAgICAgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMID0gdHJ1
ZTsKQEAgLTMzOSw3ICszNDEsNyBAQCB2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
OjpzZXRYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKQogICAgICAgICBtX1hIUkJyZWFr
cG9pbnRzLmFkZCh1cmwpOwogfQogCi12b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
OjpyZW1vdmVYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBJbnNwZWN0b3JC
cm93c2VyRGVidWdnZXJBZ2VudDo6cmVtb3ZlWEhSQnJlYWtwb2ludChJbnNwZWN0b3JBcnJheSos
IGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIGlmICh1cmwuaXNFbXB0eSgpKQogICAgICAgICBt
X2hhc1hIUkJyZWFrcG9pbnRXaXRoRW1wdHlVUkwgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmgKaW5k
ZXggZmFjNTRiYi4uMzkyYWNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmgKQEAgLTQ1LDYgKzQ1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFbGVtZW50OwogY2xhc3MgSW5zcGVjdG9yQWdl
bnQ7CitjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKIGNsYXNz
IE5vZGU7CiAKQEAgLTU1LDE2ICs1NiwxNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5JbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCgpOwogCi0gICAgdm9pZCBzZXRBbGxCcm93c2VyQnJl
YWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KTsKKyAgICB2b2lkIHNldEFsbEJy
b3dzZXJCcmVha3BvaW50cyhJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4pOwogICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcm
IHVybCk7CiAKICAgICAvLyBCcm93c2VyRGVidWdnZXIgQVBJIGZvciBJbnNwZWN0b3JGcm9udGVu
ZAotICAgIHZvaWQgc2V0WEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9p
ZCByZW1vdmVYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2b2lkIHNldEV2
ZW50TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKLSAgICB2b2lk
IHJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsK
LSAgICB2b2lkIHNldERPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSk7Ci0gICAg
dm9pZCByZW1vdmVET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpOworICAgIHZv
aWQgc2V0WEhSQnJlYWtwb2ludChJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBjb25zdCBTdHJpbmcm
IHVybCk7CisgICAgdm9pZCByZW1vdmVYSFJCcmVha3BvaW50KEluc3BlY3RvckFycmF5KiBlcnJv
cnMsIGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lkIHNldEV2ZW50TGlzdGVuZXJCcmVha3Bv
aW50KEluc3BlY3RvckFycmF5KiBlcnJvcnMsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKKyAg
ICB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KEluc3BlY3RvckFycmF5KiBlcnJv
cnMsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKKyAgICB2b2lkIHNldERPTUJyZWFrcG9pbnQo
SW5zcGVjdG9yQXJyYXkqIGVycm9ycywgbG9uZyBub2RlSWQsIGxvbmcgdHlwZSk7CisgICAgdm9p
ZCByZW1vdmVET01CcmVha3BvaW50KEluc3BlY3RvckFycmF5KiBlcnJvcnMsIGxvbmcgbm9kZUlk
LCBsb25nIHR5cGUpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uIEFQSQogICAg
IHZvaWQgd2lsbEluc2VydERPTU5vZGUoTm9kZSosIE5vZGUqIHBhcmVudCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCAzM2Q0ODVjLi5k
MDAwOGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5jcHAKQEAgLTE2Nyw3ICsxNjcsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZXNldCgp
CiAgICAgbV9kb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVTaGVldC5jbGVhcigpOwogfQogCi12b2lk
IEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZXNGb3JOb2RlKGxvbmcgbm9kZUlkLCBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHls
ZXNGb3JOb2RlKEluc3BlY3RvckFycmF5KiwgbG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4qIHJlc3VsdCkKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5v
ZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldFN0eWxlc0Zvck5vZGUobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4qIHJlCiAgICAgKnJlc3VsdCA9IHJlc3VsdE9iamVjdC5yZWxlYXNlKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlRm9yTm9kZShsb25nIG5vZGVJ
ZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGUpCit2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpnZXRJbmxpbmVTdHlsZUZvck5vZGUoSW5zcGVjdG9yQXJyYXkqLCBsb25nIG5vZGVJZCwgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGUpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGVs
ZW1lbnRGb3JJZChub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkKQEAgLTIzNSw3ICsyMzUsNyBA
QCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRJbmxpbmVTdHlsZUZvck5vZGUobG9uZyBub2Rl
SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZQogICAgICpzdHlsZSA9IHN0eWxlU2hlZXQtPmJ1aWxk
T2JqZWN0Rm9yU3R5bGUoZWxlbWVudC0+c3R5bGUoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiBzdHlsZSkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5
bGVGb3JOb2RlKEluc3BlY3RvckFycmF5KiwgbG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4qIHN0eWxlKQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQobm9k
ZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUobG9uZyBub2RlSWQsIFJlZlB0cjxJ
bnNwZWN0b3JWYWwKICAgICAqc3R5bGUgPSBpbnNwZWN0b3JTdHlsZS0+YnVpbGRPYmplY3RGb3JT
dHlsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxTdHlsZXMoUmVmUHRy
PEluc3BlY3RvckFycmF5Piogc3R5bGVzKQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0QWxs
U3R5bGVzKEluc3BlY3RvckFycmF5KiwgUmVmUHRyPEluc3BlY3RvckFycmF5Piogc3R5bGVzKQog
ewogICAgIFZlY3RvcjxEb2N1bWVudCo+IGRvY3VtZW50cyA9IG1fZG9tQWdlbnQtPmRvY3VtZW50
cygpOwogICAgIGZvciAoVmVjdG9yPERvY3VtZW50Kj46Oml0ZXJhdG9yIGl0ID0gZG9jdW1lbnRz
LmJlZ2luKCk7IGl0ICE9IGRvY3VtZW50cy5lbmQoKTsgKytpdCkgewpAQCAtMjYxLDcgKzI2MSw3
IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlcyhSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBzdHlsZXMpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRT
dHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiBzdHlsZVNoZWV0T2JqZWN0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVT
aGVldChJbnNwZWN0b3JBcnJheSosIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+KiBzdHlsZVNoZWV0T2JqZWN0KQogewogICAgIEluc3BlY3RvclN0eWxl
U2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoc3R5bGVTaGVldElk
KTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCkBAIC0yNzAsNyArMjcwLDcgQEAgdm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHN0eWxlU2hl
ZXRJZCwgUmVmUHRyPEluc3BlY3QKICAgICAqc3R5bGVTaGVldE9iamVjdCA9IGluc3BlY3RvclN0
eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0VGV4dChjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwg
U3RyaW5nKiB1cmwsIFN0cmluZyogcmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
U3R5bGVTaGVldFRleHQoSW5zcGVjdG9yQXJyYXkqLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJ
ZCwgU3RyaW5nKiB1cmwsIFN0cmluZyogcmVzdWx0KQogewogICAgIEluc3BlY3RvclN0eWxlU2hl
ZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoc3R5bGVTaGVldElkKTsK
ICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCkBAIC0yNzksNyArMjc5LDcgQEAgdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldFRleHQoY29uc3QgU3RyaW5nJiBzdHlsZVNo
ZWV0SWQsIFN0cmluZyogdXIKICAgICBpbnNwZWN0b3JTdHlsZVNoZWV0LT50ZXh0KHJlc3VsdCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0KGNvbnN0IFN0
cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wqIHN1Y2Nlc3MpCit2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVNoZWV0VGV4dChJbnNwZWN0b3JBcnJheSos
IGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wqIHN1
Y2Nlc3MpCiB7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9
IHN0eWxlU2hlZXRGb3JJZChzdHlsZVNoZWV0SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVT
aGVldCkgewpAQCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0
eWxlU2hlZXRUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpCiAgICAg
ICAgIGluc3BlY3RvclN0eWxlU2hlZXQtPnJlcGFyc2VTdHlsZVNoZWV0KHRleHQpOwogfQogCi12
b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQcm9wZXJ0eVRleHQoY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBsb25nIHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmlu
ZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkK
K3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4dChJbnNwZWN0b3JBcnJheSos
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBmdWxsU3R5bGVJZCwgbG9uZyBwcm9wZXJ0
eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiByZXN1bHQpCiB7CiAgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxs
U3R5bGVJZCk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CkBAIC0zMDYsNyAr
MzA2LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVydHlUZXh0KGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBmdWxsU3R5bGUKICAgICAgICAgKnJlc3VsdCA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+
c3R5bGVGb3JJZChjb21wb3VuZElkKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnRv
Z2dsZVByb3BlcnR5KGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBmdWxsU3R5bGVJZCwg
bG9uZyBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4q
IHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5KEluc3BlY3Rv
ckFycmF5KiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBsb25n
IHByb3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJsZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVz
dWx0KQogewogICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQpOwogICAg
IEFTU0VSVCghY29tcG91bmRJZC5pc0VtcHR5KCkpOwpAQCAtMzIwLDcgKzMyMCw3IEBAIHZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5KGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiBmdWxsU3R5bGVJCiAgICAgICAgICpyZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0
LT5idWlsZE9iamVjdEZvclN0eWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoY29t
cG91bmRJZCkpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0b3Io
Y29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxSdWxlSWQsIGNvbnN0IFN0cmluZyYg
c2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihJbnNwZWN0b3JBcnJheSosIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBmdWxsUnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCiB7CiAgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91
bmRJZChmdWxsUnVsZUlkKTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKQEAg
LTMzNiw3ICszMzYsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0b3Io
Y29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxSdWxlSQogICAgICpyZXN1bHQgPSBp
bnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoaW5zcGVjdG9yU3R5bGVTaGVl
dC0+cnVsZUZvcklkKGNvbXBvdW5kSWQpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
YWRkUnVsZShjb25zdCBsb25nIGNvbnRleHROb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3Is
IFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OmFkZFJ1bGUoSW5zcGVjdG9yQXJyYXkqLCBjb25zdCBsb25nIGNvbnRleHROb2RlSWQsIGNvbnN0
IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsKICAg
ICBOb2RlKiBub2RlID0gbV9kb21BZ2VudC0+bm9kZUZvcklkKGNvbnRleHROb2RlSWQpOwogICAg
IGlmICghbm9kZSkKQEAgLTM1Miw3ICszNTIsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojph
ZGRSdWxlKGNvbnN0IGxvbmcgY29udGV4dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3Rvcgog
ICAgICpyZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUobmV3
UnVsZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3Bl
cnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogY3NzUHJvcGVydGllcykKK3ZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoSW5zcGVjdG9yQXJyYXkqLCBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjc3NQcm9wZXJ0aWVzKQogewogICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bUNTU1Byb3BlcnRpZXM7ICsraSkKQEAgLTM2MSw3ICszNjEs
NyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4qIGNzc1BybwogICAgICpjc3NQcm9wZXJ0aWVzID0gcHJvcGVy
dGllcy5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnF1ZXJ5U2VsZWN0
b3JBbGwoY29uc3QgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnF1ZXJ5U2Vs
ZWN0b3JBbGwoSW5zcGVjdG9yQXJyYXkqLCBjb25zdCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5n
JiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KQogewogICAgIE5vZGUq
IG5vZGUgPSBtX2RvbUFnZW50LT5ub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4IDNmMWVl
YzUuLmNmYzNiMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5oCkBAIC01OSwxOSArNTksMTkgQEAgcHVibGljOgogICAgIH5JbnNwZWN0b3JDU1NBZ2Vu
dCgpOwogCiAgICAgdm9pZCByZXNldCgpOwotICAgIHZvaWQgZ2V0U3R5bGVzRm9yTm9kZShsb25n
IG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKLSAgICB2b2lkIGdldElu
bGluZVN0eWxlRm9yTm9kZShsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5
bGUpOwotICAgIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUobG9uZyBub2RlSWQsIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlKTsKLSAgICB2b2lkIGdldEFsbFN0eWxlcyhSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+KiBzdHlsZXMpOwotICAgIHZvaWQgZ2V0U3R5bGVTaGVldChjb25zdCBT
dHJpbmcmIHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKLSAg
ICB2b2lkIGdldFN0eWxlU2hlZXRUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBTdHJp
bmcqIHVybCwgU3RyaW5nKiByZXN1bHQpOwotICAgIHZvaWQgc2V0U3R5bGVTaGVldFRleHQoY29u
c3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCogc3VjY2Vz
cyk7Ci0gICAgdm9pZCBzZXRQcm9wZXJ0eVRleHQoY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mIHN0eWxlSWQsIGxvbmcgcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29s
IG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKLSAgICB2b2lkIHRv
Z2dsZVByb3BlcnR5KGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdHlsZUlkLCBsb25n
IHByb3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJsZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVz
dWx0KTsKLSAgICB2b2lkIHNldFJ1bGVTZWxlY3Rvcihjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQpOwotICAgIHZvaWQgYWRkUnVsZShjb25zdCBsb25nIGNvbnRleHROb2RlSWQs
IGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7
Ci0gICAgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4qIHJlc3VsdCk7Ci0gICAgdm9pZCBxdWVyeVNlbGVjdG9yQWxsKGNvbnN0IGxvbmcgbm9kZUlk
LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQp
OworICAgIHZvaWQgZ2V0U3R5bGVzRm9yTm9kZShJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBsb25n
IG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKKyAgICB2b2lkIGdldElu
bGluZVN0eWxlRm9yTm9kZShJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBsb25nIG5vZGVJZCwgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGUpOworICAgIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZUZv
ck5vZGUoSW5zcGVjdG9yQXJyYXkqIGVycm9ycywgbG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4qIHN0eWxlKTsKKyAgICB2b2lkIGdldEFsbFN0eWxlcyhJbnNwZWN0b3JBcnJheSog
ZXJyb3JzLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBzdHlsZXMpOworICAgIHZvaWQgZ2V0U3R5
bGVTaGVldChJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJ
ZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKKyAgICB2b2lkIGdldFN0eWxlU2hl
ZXRUZXh0KEluc3BlY3RvckFycmF5KiBlcnJvcnMsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElk
LCBTdHJpbmcqIHVybCwgU3RyaW5nKiByZXN1bHQpOworICAgIHZvaWQgc2V0U3R5bGVTaGVldFRl
eHQoSW5zcGVjdG9yQXJyYXkqIGVycm9ycywgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNv
bnN0IFN0cmluZyYgdGV4dCwgYm9vbCogc3VjY2Vzcyk7CisgICAgdm9pZCBzZXRQcm9wZXJ0eVRl
eHQoSW5zcGVjdG9yQXJyYXkqIGVycm9ycywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
IHN0eWxlSWQsIGxvbmcgcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92
ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKKyAgICB2b2lkIHRvZ2ds
ZVByb3BlcnR5KEluc3BlY3RvckFycmF5KiBlcnJvcnMsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiBzdHlsZUlkLCBsb25nIHByb3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJsZSwgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKKyAgICB2b2lkIHNldFJ1bGVTZWxlY3RvcihJbnNw
ZWN0b3JBcnJheSogZXJyb3JzLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcnVsZUlk
LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQp
OworICAgIHZvaWQgYWRkUnVsZShJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBjb25zdCBsb25nIGNv
bnRleHROb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIHJlc3VsdCk7CisgICAgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKEluc3BlY3Rv
ckFycmF5KiBlcnJvcnMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCk7CisgICAgdm9p
ZCBxdWVyeVNlbGVjdG9yQWxsKEluc3BlY3RvckFycmF5KiBlcnJvcnMsIGNvbnN0IGxvbmcgbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1
bHQpOwogCiBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNw
ZWN0b3JTdHlsZVNoZWV0PiA+IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAppbmRleCA0MmFk
MjMzLi5jMWZjYjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcApAQCAtNzgsMTMgKzc4LDEzIEBAIEluc3BlY3RvckNvbnNvbGVB
Z2VudDo6fkluc3BlY3RvckNvbnNvbGVBZ2VudCgpCiAgICAgbV9pbnNwZWN0b3JET01BZ2VudCA9
IDA7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpzZXRDb25zb2xlTWVzc2FnZXNF
bmFibGVkKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpCit2b2lkIEluc3BlY3RvckNvbnNv
bGVBZ2VudDo6c2V0Q29uc29sZU1lc3NhZ2VzRW5hYmxlZChJbnNwZWN0b3JBcnJheSosIGJvb2wg
ZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpCiB7CiAgICAgKm5ld1N0YXRlID0gZW5hYmxlZDsKICAg
ICBzZXRDb25zb2xlTWVzc2FnZXNFbmFibGVkKGVuYWJsZWQpOwogfQogCi12b2lkIEluc3BlY3Rv
ckNvbnNvbGVBZ2VudDo6Y2xlYXJDb25zb2xlTWVzc2FnZXMoKQordm9pZCBJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKEluc3BlY3RvckFycmF5KikKIHsKICAgICBt
X2NvbnNvbGVNZXNzYWdlcy5jbGVhcigpOwogICAgIG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291
bnQgPSAwOwpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojpk
aWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291CiAgICAg
YWRkQ29uc29sZU1lc3NhZ2UobmV3IENvbnNvbGVNZXNzYWdlKE90aGVyTWVzc2FnZVNvdXJjZSwg
TmV0d29ya0Vycm9yTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBlcnJv
ci5mYWlsaW5nVVJMKCksIGlkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xl
QWdlbnQ6OnNldE1vbml0b3JpbmdYSFJFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgSW5zcGVj
dG9yQ29uc29sZUFnZW50OjpzZXRNb25pdG9yaW5nWEhSRW5hYmxlZChJbnNwZWN0b3JBcnJheSos
IGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX2luc3BlY3RvclN0YXRlLT5zZXRCb29sZWFuKENvbnNv
bGVBZ2VudFN0YXRlOjptb25pdG9yaW5nWEhSLCBlbmFibGVkKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaAppbmRleCA1NjVmODdiLi40
YTMyY2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
c29sZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNv
bGVBZ2VudC5oCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Q29uc29sZU1lc3NhZ2U7CiBjbGFzcyBJbnNwZWN0b3JBZ2VudDsKK2NsYXNzIEluc3BlY3RvckFy
cmF5OwogY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsK
IGNsYXNzIEluc3BlY3RvclN0YXRlOwpAQCAtNTUsOCArNTYsOCBAQCBwdWJsaWM6CiAgICAgSW5z
cGVjdG9yQ29uc29sZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JBZ2VudCos
IEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRIb3N0KiwgSW5zcGVjdG9yRE9NQWdlbnQq
KTsKICAgICB+SW5zcGVjdG9yQ29uc29sZUFnZW50KCk7CiAKLSAgICB2b2lkIHNldENvbnNvbGVN
ZXNzYWdlc0VuYWJsZWQoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSk7Ci0gICAgdm9pZCBj
bGVhckNvbnNvbGVNZXNzYWdlcygpOworICAgIHZvaWQgc2V0Q29uc29sZU1lc3NhZ2VzRW5hYmxl
ZChJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKTsK
KyAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKEluc3BlY3RvckFycmF5KiBlcnJvcnMgPSAw
KTsKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBzZXRGcm9udGVuZChJbnNwZWN0b3JGcm9u
dGVuZCopOwogICAgIHZvaWQgY2xlYXJGcm9udGVuZCgpOwpAQCAtNzUsNyArNzYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBhZGRQcm9maWxlRmluaXNoZWRNZXNzYWdlVG9Db25zb2xlKFBhc3NSZWZQ
dHI8U2NyaXB0UHJvZmlsZT4sIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMKTsKICAgICB2b2lkIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZShjb25z
dCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCk7CiAjZW5kaWYKLSAgICB2b2lkIHNldE1vbml0b3JpbmdYSFJFbmFibGVkKGJvb2wgZW5h
YmxlZCk7CisgICAgdm9pZCBzZXRNb25pdG9yaW5nWEhSRW5hYmxlZChJbnNwZWN0b3JBcnJheSog
ZXJyb3JzLCBib29sIGVuYWJsZWQpOwogCiBwcml2YXRlOgogICAgIHZvaWQgc2V0Q29uc29sZU1l
c3NhZ2VzRW5hYmxlZChib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBiMmFlOGQxLi4xNmZiZGI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC04NSwxMiAr
ODUsMTQgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDbGVhcldpbmRvd09iamVjdElu
V29ybGQoRnJhbWUqIGZyYW1lLCBET01XcmFwcGVyV28KIAogdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpzdGFydFRpbWVsaW5lUHJvZmlsZXIoKQogewotICAgIG1faW5zcGVjdG9yQWdlbnQtPnRp
bWVsaW5lQWdlbnQoKS0+c3RhcnQoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBtX2luc3BlY3RvckFnZW50LT50aW1l
bGluZUFnZW50KCktPnN0YXJ0KGVycm9ycy5nZXQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c3RvcFRpbWVsaW5lUHJvZmlsZXIoKQogewotICAgIG1faW5zcGVjdG9yQWdlbnQt
PnRpbWVsaW5lQWdlbnQoKS0+c3RvcCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gZXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIG1faW5zcGVjdG9yQWdlbnQtPnRp
bWVsaW5lQWdlbnQoKS0+c3RvcChlcnJvcnMuZ2V0KCkpOwogfQogCiB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCgpCkBAIC0yNTIsOCArMjU0LDEwIEBAIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKGNvbnN0IFN0cmluZyYg
c291cmNlKQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3VtZSgpCiB7Ci0gICAgaWYg
KEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBtX2luc3BlY3RvckFnZW50
LT5kZWJ1Z2dlckFnZW50KCkpCi0gICAgICAgIGRlYnVnZ2VyQWdlbnQtPnJlc3VtZSgpOworICAg
IGlmIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gbV9pbnNwZWN0b3JB
Z2VudC0+ZGVidWdnZXJBZ2VudCgpKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
ZXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBkZWJ1Z2dlckFnZW50
LT5yZXN1bWUoZXJyb3JzLmdldCgpKTsKKyAgICB9CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6aGlkZUhpZ2hsaWdodCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAppbmRleCAxZjUyNGFhLi45OTlmODU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTQwNyw3ICs0MDcsNyBA
QCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGxvbmcgaWQpCiAgICAgcmV0dXJu
IDA7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldENoaWxkTm9kZXMobG9uZyBub2Rl
SWQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRDaGlsZE5vZGVzKEluc3BlY3RvckFycmF5
KiwgbG9uZyBub2RlSWQpCiB7CiAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKG5vZGVJZCk7
CiB9CkBAIC00NTQsNyArNDU0LDcgQEAgbG9uZyBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQ
YXRoVG9Gcm9udGVuZChOb2RlKiBub2RlVG9QdXNoKQogICAgIHJldHVybiBtYXAtPmdldChub2Rl
VG9QdXNoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlKGxvbmcg
ZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wq
IHN1Y2Nlc3MpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGUoSW5zcGVjdG9y
QXJyYXkqLCBsb25nIGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBib29sKiBzdWNjZXNzKQogewogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQoZWxl
bWVudElkKTsKICAgICBpZiAobm9kZSAmJiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVN
RU5UX05PREUpKSB7CkBAIC00NjUsNyArNDY1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
c2V0QXR0cmlidXRlKGxvbmcgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFMK
ICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUF0dHJpYnV0ZShsb25n
IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBzdWNjZXNzKQordm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6cmVtb3ZlQXR0cmlidXRlKEluc3BlY3RvckFycmF5KiBlcnJvcnMsIGxv
bmcgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHN1Y2Nlc3MpCiB7CiAgICAg
Tm9kZSogbm9kZSA9IG5vZGVGb3JJZChlbGVtZW50SWQpOwogICAgIGlmIChub2RlICYmIChub2Rl
LT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkpIHsKQEAgLTQ3Niw3ICs0NzYsNyBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVBdHRyaWJ1dGUobG9uZyBlbGVtZW50SWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbAogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cmVtb3ZlTm9kZShsb25nIG5vZGVJZCwgbG9uZyogb3V0Tm9kZUlkKQordm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6cmVtb3ZlTm9kZShJbnNwZWN0b3JBcnJheSosIGxvbmcgbm9kZUlkLCBs
b25nKiBvdXROb2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwog
ICAgIGlmICghbm9kZSkKQEAgLTQ5NCw3ICs0OTQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpyZW1vdmVOb2RlKGxvbmcgbm9kZUlkLCBsb25nKiBvdXROb2RlSWQpCiAgICAgKm91dE5vZGVJ
ZCA9IG5vZGVJZDsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Y2hhbmdlVGFnTmFtZShs
b25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lLCBsb25nKiBuZXdJZCkKK3ZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmNoYW5nZVRhZ05hbWUoSW5zcGVjdG9yQXJyYXkqLCBsb25nIG5vZGVJ
ZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lLCBsb25nKiBuZXdJZCkKIHsKICAgICBOb2RlKiBvbGRO
b2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CiAgICAgaWYgKCFvbGROb2RlIHx8ICFvbGROb2RlLT5p
c0VsZW1lbnROb2RlKCkpCkBAIC01MjksNyArNTI5LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6Y2hhbmdlVGFnTmFtZShsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lLCBsb25n
KgogICAgICAgICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoKm5ld0lkKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6Z2V0T3V0ZXJIVE1MKGxvbmcgbm9kZUlkLCBXVEY6OlN0cmluZyog
b3V0ZXJIVE1MKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0T3V0ZXJIVE1MKEluc3BlY3Rv
ckFycmF5KiwgbG9uZyBub2RlSWQsIFdURjo6U3RyaW5nKiBvdXRlckhUTUwpCiB7CiAgICAgTm9k
ZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNI
VE1MRWxlbWVudCgpKQpAQCAtNTM4LDcgKzUzOCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmdldE91dGVySFRNTChsb25nIG5vZGVJZCwgV1RGOjpTdHJpbmcqIG91dGVySFRNTCkKICAgICAq
b3V0ZXJIVE1MID0gdG9IVE1MRWxlbWVudChub2RlKS0+b3V0ZXJIVE1MKCk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRNTChsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5n
JiBvdXRlckhUTUwsIGxvbmcqIG5ld0lkKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0
ZXJIVE1MKEluc3BlY3RvckFycmF5KiwgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0ZXJI
VE1MLCBsb25nKiBuZXdJZCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7
CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVtZW50KCkpCkBAIC01NzYsNyArNTc2
LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0ZXJIVE1MKGxvbmcgbm9kZUlkLCBj
b25zdCBTdHJpbmcmIG91dGVySFRNTCwgbG9uZyoKICAgICAgICAgcHVzaENoaWxkTm9kZXNUb0Zy
b250ZW5kKCpuZXdJZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFRleHROb2Rl
VmFsdWUobG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wqIHN1Y2Nlc3MpCit2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRUZXh0Tm9kZVZhbHVlKEluc3BlY3RvckFycmF5Kiwg
bG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wqIHN1Y2Nlc3MpCiB7CiAgICAg
Tm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmIChub2RlICYmIChub2RlLT5u
b2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSkpIHsKQEAgLTU4Nyw3ICs1ODcsNyBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpzZXRUZXh0Tm9kZVZhbHVlKGxvbmcgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBib29sKgogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgbm9kZUlkLCBsb25nKiBvdXROb2RlSWQsIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4qIGxpc3RlbmVyc0FycmF5KQordm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEluc3BlY3RvckFycmF5KiwgbG9uZyBub2Rl
SWQsIGxvbmcqIG91dE5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogbGlzdGVuZXJzQXJy
YXkpCiB7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwogICAgICpvdXROb2Rl
SWQgPSBub2RlSWQ7CkBAIC02NTQsMTQgKzY1NCwxNCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUobG9uZyBub2RlSWQsIGxvbmcqIG91dE5vZGVJZCwg
UgogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YWRkSW5zcGVjdGVkTm9kZShs
b25nIG5vZGVJZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmFkZEluc3BlY3RlZE5vZGUoSW5z
cGVjdG9yQXJyYXkqLCBsb25nIG5vZGVJZCkKIHsKICAgICBtX2luc3BlY3RlZE5vZGVzLnByZXBl
bmQobm9kZUlkKTsKICAgICB3aGlsZSAobV9pbnNwZWN0ZWROb2Rlcy5zaXplKCkgPiA1KQogICAg
ICAgICBtX2luc3BlY3RlZE5vZGVzLnJlbW92ZUxhc3QoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6cGVyZm9ybVNlYXJjaChjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVl
cnksIGJvb2wgcnVuU3luY2hyb25vdXNseSkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZv
cm1TZWFyY2goSW5zcGVjdG9yQXJyYXkqIGVycm9ycywgY29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNl
VHJpbW1lZFF1ZXJ5LCBib29sIHJ1blN5bmNocm9ub3VzbHkpCiB7CiAgICAgLy8gRklYTUU6IEZl
dyB0aGluZ3MgYXJlIG1pc3NpbmcgaGVyZToKICAgICAvLyAxKSBTZWFyY2ggd29ya3Mgd2l0aCBu
b2RlIGdyYW51bGFyaXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0aGluIG5vZGUgaXMgbm90IGNh
bGN1bGF0ZWQuCkBAIC03NDgsNyArNzQ4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cGVy
Zm9ybVNlYXJjaChjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGJvb2wKICAg
ICBtX21hdGNoSm9ic1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6c2VhcmNoQ2FuY2VsZWQoKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2VhcmNo
Q2FuY2VsZWQoSW5zcGVjdG9yQXJyYXkqKQogewogICAgIGlmIChtX21hdGNoSm9ic1RpbWVyLmlz
QWN0aXZlKCkpCiAgICAgICAgIG1fbWF0Y2hKb2JzVGltZXIuc3RvcCgpOwpAQCAtNzU3LDI4ICs3
NTcsMjggQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2VhcmNoQ2FuY2VsZWQoKQogICAgIG1f
c2VhcmNoUmVzdWx0cy5jbGVhcigpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXNv
bHZlTm9kZShsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQordm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoSW5zcGVjdG9yQXJyYXkqIGVycm9ycywg
bG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsKICAgICBJbmpl
Y3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yTm9kZUlkKG5vZGVJ
ZCk7CiAgICAgaWYgKCFpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAgICAgICAgIGluamVj
dGVkU2NyaXB0LnJlc29sdmVOb2RlKG5vZGVJZCwgcmVzdWx0KTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6Z2V0Tm9kZVByb3BlcnRpZXMobG9uZyBub2RlSWQsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3BlcnRpZXNBcnJheSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVz
dWx0KQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0Tm9kZVByb3BlcnRpZXMoSW5zcGVjdG9y
QXJyYXkqLCBsb25nIG5vZGVJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGll
c0FycmF5LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCiB7CiAgICAgSW5qZWN0ZWRT
Y3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvck5vZGVJZChub2RlSWQpOwog
ICAgIGlmICghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICBpbmplY3RlZFNj
cmlwdC5nZXROb2RlUHJvcGVydGllcyhub2RlSWQsIHByb3BlcnRpZXNBcnJheSwgcmVzdWx0KTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0Tm9kZVByb3RvdHlwZXMobG9uZyBub2Rl
SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmdldE5vZGVQcm90b3R5cGVzKEluc3BlY3RvckFycmF5KiwgbG9uZyBub2RlSWQsIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3Rl
ZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yTm9kZUlkKG5vZGVJZCk7CiAgICAgaWYgKCFpbmpl
Y3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAgICAgICAgIGluamVjdGVkU2NyaXB0LmdldE5vZGVQ
cm90b3R5cGVzKG5vZGVJZCwgcmVzdWx0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
cHVzaE5vZGVUb0Zyb250ZW5kKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJZCwg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
cHVzaE5vZGVUb0Zyb250ZW5kKEluc3BlY3RvckFycmF5KiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG9iamVjdElkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCiB7CiAgICAg
SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0SG9zdC0+aW5q
ZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZC5nZXQoKSk7CiAgICAgaWYgKCFpbmplY3Rl
ZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCkBAIC0xMTUxLDcgKzExNTEsNyBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpyZXBvcnROb2Rlc0FzU2VhcmNoUmVzdWx0cyhMaXN0SGFzaFNldDxOb2RlKj4m
IHJlc3VsdENvbAogICAgIG1fZnJvbnRlbmQtPmFkZE5vZGVzVG9TZWFyY2hSZXN1bHQobm9kZUlk
cy5yZWxlYXNlKCkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpjb3B5Tm9kZShsb25n
IG5vZGVJZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNvcHlOb2RlKEluc3BlY3RvckFycmF5
KiwgbG9uZyBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwog
ICAgIGlmICghbm9kZSkKQEAgLTExNjAsNyArMTE2MCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmNvcHlOb2RlKGxvbmcgbm9kZUlkKQogICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJv
YXJkKCktPndyaXRlUGxhaW5UZXh0KG1hcmt1cCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcqIG5v
ZGVJZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChJ
bnNwZWN0b3JBcnJheSosIGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyogbm9kZUlkKQogewogICAg
IGlmIChOb2RlKiBub2RlID0gbm9kZUZvclBhdGgocGF0aCkpCiAgICAgICAgICpub2RlSWQgPSBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA1MDZkOGE3Li5iNTYyMTFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMTAwLDIyICsxMDAsMjMg
QEAgcHVibGljOgogICAgIHZvaWQgcmVzZXQoKTsKIAogICAgIC8vIE1ldGhvZHMgY2FsbGVkIGZy
b20gdGhlIGZyb250ZW5kIGZvciBET00gbm9kZXMgaW5zcGVjdGlvbi4KLSAgICB2b2lkIGdldENo
aWxkTm9kZXMobG9uZyBub2RlSWQpOwotICAgIHZvaWQgc2V0QXR0cmlidXRlKGxvbmcgZWxlbWVu
dElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wqIHN1Y2Nl
c3MpOwotICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlKGxvbmcgZWxlbWVudElkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHN1Y2Nlc3MpOwotICAgIHZvaWQgcmVtb3ZlTm9kZShsb25nIG5vZGVJ
ZCwgbG9uZyogb3V0Tm9kZUlkKTsKLSAgICB2b2lkIGNoYW5nZVRhZ05hbWUobG9uZyBub2RlSWQs
IGNvbnN0IFN0cmluZyYgdGFnTmFtZSwgbG9uZyogbmV3SWQpOwotICAgIHZvaWQgZ2V0T3V0ZXJI
VE1MKGxvbmcgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKTsKLSAgICB2b2lkIHNldE91
dGVySFRNTChsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwsIGxvbmcqIG5ld0lk
KTsKLSAgICB2b2lkIHNldFRleHROb2RlVmFsdWUobG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYg
dmFsdWUsIGJvb2wqIHN1Y2Nlc3MpOwotICAgIHZvaWQgZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2Rl
KGxvbmcgbm9kZUlkLCBsb25nKiBvdXROb2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGxp
c3RlbmVyc0FycmF5KTsKLSAgICB2b2lkIGFkZEluc3BlY3RlZE5vZGUobG9uZyBub2RlSWQpOwot
ICAgIHZvaWQgcGVyZm9ybVNlYXJjaChjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVl
cnksIGJvb2wgcnVuU3luY2hyb25vdXNseSk7Ci0gICAgdm9pZCBzZWFyY2hDYW5jZWxlZCgpOwot
ICAgIHZvaWQgcmVzb2x2ZU5vZGUobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4q
IHJlc3VsdCk7Ci0gICAgdm9pZCBnZXROb2RlUHJvcGVydGllcyhsb25nIG5vZGVJZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGllc0FycmF5LCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQpOwotICAgIHZvaWQgZ2V0Tm9kZVByb3RvdHlwZXMobG9uZyBub2RlSWQsIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7Ci0gICAgdm9pZCBwdXNoTm9kZVRvRnJvbnRl
bmQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdElkLCBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgZ2V0Q2hpbGROb2RlcyhJbnNwZWN0b3JBcnJheSog
ZXJyb3JzLCBsb25nIG5vZGVJZCk7CisgICAgdm9pZCBzZXRBdHRyaWJ1dGUoSW5zcGVjdG9yQXJy
YXkqIGVycm9ycywgbG9uZyBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgYm9vbCogc3VjY2Vzcyk7CisgICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUoSW5z
cGVjdG9yQXJyYXkqIGVycm9ycywgbG9uZyBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogc3VjY2Vzcyk7CisgICAgdm9pZCByZW1vdmVOb2RlKEluc3BlY3RvckFycmF5KiBlcnJv
cnMsIGxvbmcgbm9kZUlkLCBsb25nKiBvdXROb2RlSWQpOworICAgIHZvaWQgY29weU5vZGUoSW5z
cGVjdG9yQXJyYXkqIGVycm9ycywgbG9uZyBub2RlSWQpOworICAgIHZvaWQgY2hhbmdlVGFnTmFt
ZShJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdO
YW1lLCBsb25nKiBuZXdJZCk7CisgICAgdm9pZCBnZXRPdXRlckhUTUwoSW5zcGVjdG9yQXJyYXkq
IGVycm9ycywgbG9uZyBub2RlSWQsIFdURjo6U3RyaW5nKiBvdXRlckhUTUwpOworICAgIHZvaWQg
c2V0T3V0ZXJIVE1MKEluc3BlY3RvckFycmF5KiBlcnJvcnMsIGxvbmcgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIG91dGVySFRNTCwgbG9uZyogbmV3SWQpOworICAgIHZvaWQgc2V0VGV4dE5vZGVWYWx1
ZShJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgYm9vbCogc3VjY2Vzcyk7CisgICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoSW5z
cGVjdG9yQXJyYXkqIGVycm9ycywgbG9uZyBub2RlSWQsIGxvbmcqIG91dE5vZGVJZCwgUmVmUHRy
PEluc3BlY3RvckFycmF5PiogbGlzdGVuZXJzQXJyYXkpOworICAgIHZvaWQgYWRkSW5zcGVjdGVk
Tm9kZShJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBsb25nIG5vZGVJZCk7CisgICAgdm9pZCBwZXJm
b3JtU2VhcmNoKEluc3BlY3RvckFycmF5KiBlcnJvcnMsIGNvbnN0IFN0cmluZyYgd2hpdGVzcGFj
ZVRyaW1tZWRRdWVyeSwgYm9vbCBydW5TeW5jaHJvbm91c2x5KTsKKyAgICB2b2lkIHNlYXJjaENh
bmNlbGVkKEluc3BlY3RvckFycmF5KiBlcnJvcnMgPSAwKTsKKyAgICB2b2lkIHJlc29sdmVOb2Rl
KEluc3BlY3RvckFycmF5KiBlcnJvcnMsIGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQpOworICAgIHZvaWQgZ2V0Tm9kZVByb3BlcnRpZXMoSW5zcGVjdG9yQXJyYXkq
IGVycm9ycywgbG9uZyBub2RlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRp
ZXNBcnJheSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKKyAgICB2b2lkIGdldE5v
ZGVQcm90b3R5cGVzKEluc3BlY3RvckFycmF5KiBlcnJvcnMsIGxvbmcgbm9kZUlkLCBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgcHVzaE5vZGVUb0Zyb250ZW5kKElu
c3BlY3RvckFycmF5KiBlcnJvcnMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJ
ZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKIAogICAgIC8vIE1ldGhvZHMgY2Fs
bGVkIGZyb20gdGhlIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi4KICAgICB2b2lkIHNldERvY3Vt
ZW50KERvY3VtZW50Kik7CkBAIC0xMzMsOSArMTM0LDggQEAgcHVibGljOgogICAgIE5vZGUqIG5v
ZGVGb3JJZChsb25nIG5vZGVJZCk7CiAgICAgbG9uZyBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5v
ZGUqKTsKICAgICB2b2lkIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChsb25nIG5vZGVJZCk7Ci0g
ICAgdm9pZCBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25n
KiBub2RlSWQpOworICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEluc3BlY3RvckFy
cmF5KiBlcnJvcnMsIGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyogbm9kZUlkKTsKICAgICBsb25n
IGluc3BlY3RlZE5vZGUodW5zaWduZWQgbG9uZyBudW0pOwotICAgIHZvaWQgY29weU5vZGUobG9u
ZyBub2RlSWQpOwogICAgIHZvaWQgc2V0RE9NTGlzdGVuZXIoRE9NTGlzdGVuZXIqKTsKIAogICAg
IFN0cmluZyBkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCopIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAppbmRl
eCA1YzE4NmI4Li44MjMxYmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAtNzksNyArNzksNyBAQCB2b2lkIElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXJGcm9udGVuZCgpCiAgICAgbV9mcm9udGVuZCA9
IDA7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlRW50
cmllcyhsb25nIHN0b3JhZ2VJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogZW50cmllcykKK3Zv
aWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlRW50cmllcyhJbnNwZWN0
b3JBcnJheSosIGxvbmcgc3RvcmFnZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBlbnRyaWVz
KQogewogICAgIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogc3RvcmFnZVJlc291cmNlID0g
Z2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQoc3RvcmFnZUlkKTsKICAgICBpZiAoc3RvcmFnZVJl
c291cmNlKSB7CkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
OjpnZXRET01TdG9yYWdlRW50cmllcyhsb25nIHN0b3JhZ2VJZCwgUmVmUHRyPEluc3BlCiAgICAg
fQogfQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0o
bG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBi
b29sKiBzdWNjZXNzKQordm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3Jh
Z2VJdGVtKEluc3BlY3RvckFycmF5KiwgbG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sKiBzdWNjZXNzKQogewogICAgIEluc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZSogc3RvcmFnZVJlc291cmNlID0gZ2V0RE9NU3RvcmFnZVJlc291cmNl
Rm9ySWQoc3RvcmFnZUlkKTsKICAgICBpZiAoc3RvcmFnZVJlc291cmNlKSB7CkBAIC0xMDYsNyAr
MTA2LDcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVt
KGxvbmcgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGsKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpyZW1vdmVET01TdG9yYWdlSXRlbShsb25nIHN0b3JhZ2VJZCwg
Y29uc3QgU3RyaW5nJiBrZXksIGJvb2wqIHN1Y2Nlc3MpCit2b2lkIEluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oSW5zcGVjdG9yQXJyYXkqLCBsb25nIHN0b3Jh
Z2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGJvb2wqIHN1Y2Nlc3MpCiB7CiAgICAgSW5zcGVjdG9y
RE9NU3RvcmFnZVJlc291cmNlKiBzdG9yYWdlUmVzb3VyY2UgPSBnZXRET01TdG9yYWdlUmVzb3Vy
Y2VGb3JJZChzdG9yYWdlSWQpOwogICAgIGlmIChzdG9yYWdlUmVzb3VyY2UpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaAppbmRl
eCA4NWZiOTVkLi5iZWI1MzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCkBAIC01Nyw5ICs1Nyw5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNsZWFyUmVzb3VyY2VzKCk7CiAKICAgICAvLyBDYWxsZWQgZnJvbSB0aGUgZnJvbnQt
ZW5kLgotICAgIHZvaWQgZ2V0RE9NU3RvcmFnZUVudHJpZXMobG9uZyBzdG9yYWdlSWQsIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qIGVudHJpZXMpOwotICAgIHZvaWQgc2V0RE9NU3RvcmFnZUl0ZW0o
bG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBi
b29sKiBzdWNjZXNzKTsKLSAgICB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJdGVtKGxvbmcgc3RvcmFn
ZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgYm9vbCogc3VjY2Vzcyk7CisgICAgdm9pZCBnZXRET01T
dG9yYWdlRW50cmllcyhJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBsb25nIHN0b3JhZ2VJZCwgUmVm
UHRyPEluc3BlY3RvckFycmF5PiogZW50cmllcyk7CisgICAgdm9pZCBzZXRET01TdG9yYWdlSXRl
bShJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBsb25nIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wqIHN1Y2Nlc3MpOworICAgIHZvaWQgcmVtb3Zl
RE9NU3RvcmFnZUl0ZW0oSW5zcGVjdG9yQXJyYXkqIGVycm9ycywgbG9uZyBzdG9yYWdlSWQsIGNv
bnN0IFN0cmluZyYga2V5LCBib29sKiBzdWNjZXNzKTsKIAogICAgIC8vIENhbGxlZCBmcm9tIHRo
ZSBpbmplY3RlZCBzY3JpcHQuCiAgICAgdm9pZCBzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2UqIHN0
b3JhZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRh
dGFiYXNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlQWdlbnQuY3BwCmluZGV4IDM3ZmYwYWUuLmNiMDczOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKQEAgLTI1OSw3ICsy
NTksNyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmNsZWFyRnJvbnRlbmQoKQogICAg
IG1fZnJvbnRlbmRQcm92aWRlci5jbGVhcigpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNl
QWdlbnQ6OmdldERhdGFiYXNlVGFibGVOYW1lcyhsb25nIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4qIG5hbWVzKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpnZXREYXRh
YmFzZVRhYmxlTmFtZXMoSW5zcGVjdG9yQXJyYXkqLCBsb25nIGRhdGFiYXNlSWQsIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4qIG5hbWVzKQogewogICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IGRhdGFi
YXNlRm9ySWQoZGF0YWJhc2VJZCk7CiAgICAgaWYgKGRhdGFiYXNlKSB7CkBAIC0yNzAsNyArMjcw
LDcgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpnZXREYXRhYmFzZVRhYmxlTmFtZXMo
bG9uZyBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGUKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudDo6ZXhlY3V0ZVNRTChsb25nIGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
cXVlcnksIGJvb2wqIHN1Y2Nlc3MsIGxvbmcqIHRyYW5zYWN0aW9uSWQpCit2b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwoSW5zcGVjdG9yQXJyYXkqLCBsb25nIGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wqIHN1Y2Nlc3MsIGxvbmcqIHRyYW5zYWN0aW9u
SWQpCiB7CiAgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gZGF0YWJhc2VGb3JJZChkYXRhYmFzZUlk
KTsKICAgICBpZiAoIWRhdGFiYXNlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaAppbmRleCBkZmIwNTEwLi43MDkxZmQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgKQEAg
LTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJSZXNvdXJjZXMoKTsKIAogICAg
IC8vIENhbGxlZCBmcm9tIHRoZSBmcm9udC1lbmQuCi0gICAgdm9pZCBnZXREYXRhYmFzZVRhYmxl
TmFtZXMobG9uZyBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBuYW1lcyk7Ci0g
ICAgdm9pZCBleGVjdXRlU1FMKGxvbmcgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwg
Ym9vbCogc3VjY2VzcywgbG9uZyogdHJhbnNhY3Rpb25JZCk7CisgICAgdm9pZCBnZXREYXRhYmFz
ZVRhYmxlTmFtZXMoSW5zcGVjdG9yQXJyYXkqIGVycm9ycywgbG9uZyBkYXRhYmFzZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBuYW1lcyk7CisgICAgdm9pZCBleGVjdXRlU1FMKEluc3BlY3Rv
ckFycmF5KiBlcnJvcnMsIGxvbmcgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9v
bCogc3VjY2VzcywgbG9uZyogdHJhbnNhY3Rpb25JZCk7CiAKICAgICAvLyBDYWxsZWQgZnJvbSB0
aGUgaW5qZWN0ZWQgc2NyaXB0LgogICAgIERhdGFiYXNlKiBkYXRhYmFzZUZvcklkKGxvbmcgZGF0
YWJhc2VJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHAKaW5kZXggZThiNGFkNS4uYjkyNzIyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtNzIsMTIg
KzcyLDEyIEBAIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6On5JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
KCkKICAgICBtX3BhdXNlZFNjcmlwdFN0YXRlID0gMDsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjphY3RpdmF0ZUJyZWFrcG9pbnRzKCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6YWN0aXZhdGVCcmVha3BvaW50cyhJbnNwZWN0b3JBcnJheSopCiB7CiAgICAgU2NyaXB0
RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmFjdGl2YXRlQnJlYWtwb2ludHMoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWFjdGl2YXRlQnJlYWtwb2ludHMoKQordm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWFjdGl2YXRlQnJlYWtwb2ludHMoSW5zcGVjdG9yQXJyYXkq
KQogewogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5kZWFjdGl2YXRlQnJlYWtwb2lu
dHMoKTsKIH0KQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpp
bnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpCiAgICAgbV9icmVha3BvaW50SWRUb0Rl
YnVnU2VydmVyQnJlYWtwb2ludElkcy5jbGVhcigpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnNldEphdmFTY3JpcHRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBpbnQg
bGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIGJv
b2wgZW5hYmxlZCwgU3RyaW5nKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4qIGxvY2F0aW9ucykKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0SmF2YVNjcmlw
dEJyZWFrcG9pbnQoSW5zcGVjdG9yQXJyYXkqLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmVO
dW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBib29sIGVu
YWJsZWQsIFN0cmluZyogb3V0QnJlYWtwb2ludElkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBs
b2NhdGlvbnMpCiB7CiAgICAgU3RyaW5nIGJyZWFrcG9pbnRJZCA9IG1ha2VTdHJpbmcodXJsLCAi
OiIsIFN0cmluZzo6bnVtYmVyKGxpbmVOdW1iZXIpLCAiOiIsIFN0cmluZzo6bnVtYmVyKGNvbHVt
bk51bWJlcikpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzQ29va2ll
ID0gbV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+Z2V0T2JqZWN0KERlYnVnZ2VyQWdlbnRTdGF0
ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzKTsKQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNldEphdmFTY3JpcHRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYg
dXJsLCBpbnQgbGluZQogICAgICpvdXRCcmVha3BvaW50SWQgPSBicmVha3BvaW50SWQ7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0SmF2YVNjcmlwdEJyZWFrcG9pbnRCeVNv
dXJjZUlkKGNvbnN0IFN0cmluZyYgc291cmNlSWQsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1u
TnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVkLCBTdHJpbmcqIG91
dEJyZWFrcG9pbnRJZCwgaW50KiBhY3R1YWxMaW5lTnVtYmVyLCBpbnQqIGFjdHVhbENvbHVtbk51
bWJlcikKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0SmF2YVNjcmlwdEJyZWFrcG9p
bnRCeVNvdXJjZUlkKEluc3BlY3RvckFycmF5KiwgY29uc3QgU3RyaW5nJiBzb3VyY2VJZCwgaW50
IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBi
b29sIGVuYWJsZWQsIFN0cmluZyogb3V0QnJlYWtwb2ludElkLCBpbnQqIGFjdHVhbExpbmVOdW1i
ZXIsIGludCogYWN0dWFsQ29sdW1uTnVtYmVyKQogewogICAgIFN0cmluZyBicmVha3BvaW50SWQg
PSBtYWtlU3RyaW5nKHNvdXJjZUlkLCAiOiIsIFN0cmluZzo6bnVtYmVyKGxpbmVOdW1iZXIpLCAi
OiIsIFN0cmluZzo6bnVtYmVyKGNvbHVtbk51bWJlcikpOwogICAgIGlmIChtX2JyZWFrcG9pbnRJ
ZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmZpbmQoYnJlYWtwb2ludElkKSAhPSBtX2JyZWFr
cG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmVuZCgpKQpAQCAtMTMwLDcgKzEzMCw3
IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0SmF2YVNjcmlwdEJyZWFrcG9pbnRC
eVNvdXJjZUlkKGNvbnN0IFN0cmluZyYgc291CiAgICAgKm91dEJyZWFrcG9pbnRJZCA9IGJyZWFr
cG9pbnRJZDsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVKYXZhU2Ny
aXB0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKK3ZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6cmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnQoSW5zcGVjdG9yQXJyYXkq
LCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBicmVha3BvaW50c0Nvb2tpZSA9IG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldE9i
amVjdChEZWJ1Z2dlckFnZW50U3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cyk7CiAgICAgYnJl
YWtwb2ludHNDb29raWUtPnJlbW92ZShicmVha3BvaW50SWQpOwpAQCAtMTQ0LDcgKzE0NCw3IEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnQo
Y29uc3QgU3RyaW5nJiBicmVha3BvaW50CiAgICAgbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVy
QnJlYWtwb2ludElkcy5yZW1vdmUoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IpOwog
fQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbihjb25z
dCBTdHJpbmcmIHNvdXJjZUlkLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlcikKK3Zv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEluc3BlY3RvckFy
cmF5KiBlcnJvcnMsIGNvbnN0IFN0cmluZyYgc291cmNlSWQsIGludCBsaW5lTnVtYmVyLCBpbnQg
Y29sdW1uTnVtYmVyKQogewogICAgIGlmICghbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50
SWQuaXNFbXB0eSgpKSB7CiAgICAgICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZW1v
dmVCcmVha3BvaW50KG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElkKTsKQEAgLTE1Miw3
ICsxNTIsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlv
bihjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBpbnQgbGluZQogICAgIH0KICAgICBTY3JpcHRCcmVh
a3BvaW50IGJyZWFrcG9pbnQobGluZU51bWJlciwgY29sdW1uTnVtYmVyLCAiIiwgdHJ1ZSk7CiAg
ICAgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SWQgPSBTY3JpcHREZWJ1Z1NlcnZlcjo6
c2hhcmVkKCkuc2V0QnJlYWtwb2ludChzb3VyY2VJZCwgYnJlYWtwb2ludCwgJmxpbmVOdW1iZXIs
ICZjb2x1bW5OdW1iZXIpOwotICAgIHJlc3VtZSgpOworICAgIHJlc3VtZShlcnJvcnMpOwogfQog
CiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50KGNvbnN0IFN0
cmluZyYgYnJlYWtwb2ludElkLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBjb25zdCBTY3JpcHRC
cmVha3BvaW50JiBicmVha3BvaW50LCBpbnQqIGFjdHVhbExpbmVOdW1iZXIsIGludCogYWN0dWFs
Q29sdW1uTnVtYmVyKQpAQCAtMTg1LDEzICsxODUsMTMgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpyZXNvbHZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCwgY29u
c3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpl
ZGl0U2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgbmV3
Q29udGVudCwgYm9vbCogc3VjY2VzcywgU3RyaW5nKiByZXN1bHQsIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4qIG5ld0NhbGxGcmFtZXMpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVkaXRT
Y3JpcHRTb3VyY2UoSW5zcGVjdG9yQXJyYXkqLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25z
dCBTdHJpbmcmIG5ld0NvbnRlbnQsIGJvb2wqIHN1Y2Nlc3MsIFN0cmluZyogcmVzdWx0LCBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+KiBuZXdDYWxsRnJhbWVzKQogewogICAgIGlmICgoKnN1Y2Nlc3Mg
PSBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuZWRpdFNjcmlwdFNvdXJjZShzb3VyY2VJRCwg
bmV3Q29udGVudCwgKnJlc3VsdCkpKQogICAgICAgICAqbmV3Q2FsbEZyYW1lcyA9IGN1cnJlbnRD
YWxsRnJhbWVzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0
U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFN0cmluZyogc2NyaXB0U291cmNlKQordm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoSW5zcGVjdG9yQXJyYXkq
LCBjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkKIHsKICAgICAq
c2NyaXB0U291cmNlID0gbV9zY3JpcHRzLmdldChzb3VyY2VJRCkuZGF0YTsKIH0KQEAgLTIxNCw0
NiArMjE0LDQ2IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2FuY2VsUGF1c2VPbk5l
eHRTdGF0ZW1lbnQoKQogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRQYXVzZU9u
TmV4dFN0YXRlbWVudChmYWxzZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
cGF1c2UoKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpwYXVzZShJbnNwZWN0b3JBcnJh
eSogZXJyb3JzKQogewogICAgIHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSmF2YVNjcmlw
dFBhdXNlRXZlbnRUeXBlLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICBtX2phdmFT
Y3JpcHRQYXVzZVNjaGVkdWxlZCA9IHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6cmVzdW1lKCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzdW1lKEluc3Bl
Y3RvckFycmF5KikKIHsKICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuY29udGludWVQ
cm9ncmFtKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE92ZXIoKQor
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3ZlcihJbnNwZWN0b3JBcnJheSopCiB7
CiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnN0ZXBPdmVyU3RhdGVtZW50KCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcEludG8oKQordm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzdGVwSW50byhJbnNwZWN0b3JBcnJheSopCiB7CiAgICAgU2NyaXB0
RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnN0ZXBJbnRvU3RhdGVtZW50KCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE91dCgpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnN0ZXBPdXQoSW5zcGVjdG9yQXJyYXkqKQogewogICAgIFNjcmlwdERlYnVnU2VydmVyOjpz
aGFyZWQoKS5zdGVwT3V0T2ZGdW5jdGlvbigpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUobG9uZyBwYXVzZVN0YXRlLCBsb25nKiBu
ZXdTdGF0ZSkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZShJbnNwZWN0b3JBcnJheSosIGxvbmcgcGF1c2VTdGF0ZSwgbG9uZyogbmV3U3RhdGUp
CiB7CiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldFBhdXNlT25FeGNlcHRpb25z
U3RhdGUoc3RhdGljX2Nhc3Q8U2NyaXB0RGVidWdTZXJ2ZXI6OlBhdXNlT25FeGNlcHRpb25zU3Rh
dGU+KHBhdXNlU3RhdGUpKTsKICAgICAqbmV3U3RhdGUgPSBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hh
cmVkKCkucGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxs
RnJhbWUoSW5zcGVjdG9yQXJyYXkqLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FsbEZy
YW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91
cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJl
c3VsdCkKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5zcGVjdG9y
QWdlbnQtPmluamVjdGVkU2NyaXB0SG9zdCgpLT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKGNh
bGxGcmFtZUlkLmdldCgpKTsKICAgICBpZiAoIWluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkK
ICAgICAgICAgaW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGVPbkNhbGxGcmFtZShjYWxsRnJhbWVJZCwg
ZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgcmVzdWx0KTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRDb21wbGV0aW9uc09uQ2FsbEZy
YW1lKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiogcmVzdWx0KQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRDb21wbGV0
aW9uc09uQ2FsbEZyYW1lKEluc3BlY3RvckFycmF5KiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGJvb2wgaW5jbHVkZUNv
bW1hbmRMaW5lQVBJLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCiB7CiAgICAgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luc3BlY3RvckFnZW50LT5pbmplY3RlZFNj
cmlwdEhvc3QoKS0+aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChjYWxsRnJhbWVJZC5nZXQoKSk7
CiAgICAgaWYgKCFpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCA2NDQ1NTdmLi4z
YWRmZDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmgKQEAgLTYzLDI3ICs2MywyNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNwZWN0
ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsKTsKIAogICAgIC8vIFBhcnQgb2YgdGhlIHBy
b3RvY29sLgotICAgIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50cygpOwotICAgIHZvaWQgZGVhY3Rp
dmF0ZUJyZWFrcG9pbnRzKCk7CisgICAgdm9pZCBhY3RpdmF0ZUJyZWFrcG9pbnRzKEluc3BlY3Rv
ckFycmF5KiBlcnJvcnMpOworICAgIHZvaWQgZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKEluc3BlY3Rv
ckFycmF5KiBlcnJvcnMpOwogCi0gICAgdm9pZCBzZXRKYXZhU2NyaXB0QnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0
cmluZyYgY29uZGl0aW9uLCBib29sIGVuYWJsZWQsIFN0cmluZyogYnJlYWtwb2ludElkLCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBsb2NhdGlvbnMpOwotICAgIHZvaWQgc2V0SmF2YVNjcmlwdEJy
ZWFrcG9pbnRCeVNvdXJjZUlkKGNvbnN0IFN0cmluZyYgc291cmNlSWQsIGludCBsaW5lTnVtYmVy
LCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVk
LCBTdHJpbmcqIGJyZWFrcG9pbnRJZCwgaW50KiBhY3R1YWxMaW5lTnVtYmVyLCBpbnQqIGFjdHVh
bENvbHVtbk51bWJlcik7Ci0gICAgdm9pZCByZW1vdmVKYXZhU2NyaXB0QnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIGJyZWFrcG9pbnRJZCk7Ci0gICAgdm9pZCBjb250aW51ZVRvTG9jYXRpb24oY29u
c3QgU3RyaW5nJiBzb3VyY2VJZCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpOwor
ICAgIHZvaWQgc2V0SmF2YVNjcmlwdEJyZWFrcG9pbnQoSW5zcGVjdG9yQXJyYXkqIGVycm9ycywg
Y29uc3QgU3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25z
dCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVkLCBTdHJpbmcqIGJyZWFrcG9pbnRJZCwg
UmVmUHRyPEluc3BlY3RvckFycmF5PiogbG9jYXRpb25zKTsKKyAgICB2b2lkIHNldEphdmFTY3Jp
cHRCcmVha3BvaW50QnlTb3VyY2VJZChJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBjb25zdCBTdHJp
bmcmIHNvdXJjZUlkLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3Ry
aW5nJiBjb25kaXRpb24sIGJvb2wgZW5hYmxlZCwgU3RyaW5nKiBicmVha3BvaW50SWQsIGludCog
YWN0dWFsTGluZU51bWJlciwgaW50KiBhY3R1YWxDb2x1bW5OdW1iZXIpOworICAgIHZvaWQgcmVt
b3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnQoSW5zcGVjdG9yQXJyYXkqIGVycm9ycywgY29uc3QgU3Ry
aW5nJiBicmVha3BvaW50SWQpOworICAgIHZvaWQgY29udGludWVUb0xvY2F0aW9uKEluc3BlY3Rv
ckFycmF5KiBlcnJvcnMsIGNvbnN0IFN0cmluZyYgc291cmNlSWQsIGludCBsaW5lTnVtYmVyLCBp
bnQgY29sdW1uTnVtYmVyKTsKIAotICAgIHZvaWQgZWRpdFNjcmlwdFNvdXJjZShjb25zdCBTdHJp
bmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIG5ld0NvbnRlbnQsIGJvb2wqIHN1Y2Nlc3MsIFN0
cmluZyogcmVzdWx0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBuZXdDYWxsRnJhbWVzKTsKLSAg
ICB2b2lkIGdldFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBTdHJpbmcqIHNj
cmlwdFNvdXJjZSk7CisgICAgdm9pZCBlZGl0U2NyaXB0U291cmNlKEluc3BlY3RvckFycmF5KiBl
cnJvcnMsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgbmV3Q29udGVudCwg
Ym9vbCogc3VjY2VzcywgU3RyaW5nKiByZXN1bHQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIG5l
d0NhbGxGcmFtZXMpOworICAgIHZvaWQgZ2V0U2NyaXB0U291cmNlKEluc3BlY3RvckFycmF5KiBl
cnJvcnMsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFN0cmluZyogc2NyaXB0U291cmNlKTsKICAg
ICB2b2lkIHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoRGVidWdnZXJFdmVudFR5cGUgdHlw
ZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZGF0YSk7CiAgICAgdm9pZCBjYW5jZWxQYXVz
ZU9uTmV4dFN0YXRlbWVudCgpOwogICAgIHZvaWQgYnJlYWtQcm9ncmFtKERlYnVnZ2VyRXZlbnRU
eXBlIHR5cGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGRhdGEpOwotICAgIHZvaWQgcGF1
c2UoKTsKLSAgICB2b2lkIHJlc3VtZSgpOwotICAgIHZvaWQgc3RlcE92ZXIoKTsKLSAgICB2b2lk
IHN0ZXBJbnRvKCk7Ci0gICAgdm9pZCBzdGVwT3V0KCk7Ci0gICAgdm9pZCBzZXRQYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlKGxvbmcgcGF1c2VTdGF0ZSwgbG9uZyogbmV3U3RhdGUpOwotICAgIHZvaWQg
ZXZhbHVhdGVPbkNhbGxGcmFtZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FsbEZyYW1l
SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwg
Ym9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3Vs
dCk7Ci0gICAgdm9pZCBnZXRDb21wbGV0aW9uc09uQ2FsbEZyYW1lKFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBib29sIGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKKyAg
ICB2b2lkIHBhdXNlKEluc3BlY3RvckFycmF5KiBlcnJvcnMpOworICAgIHZvaWQgcmVzdW1lKElu
c3BlY3RvckFycmF5KiBlcnJvcnMpOworICAgIHZvaWQgc3RlcE92ZXIoSW5zcGVjdG9yQXJyYXkq
IGVycm9ycyk7CisgICAgdm9pZCBzdGVwSW50byhJbnNwZWN0b3JBcnJheSogZXJyb3JzKTsKKyAg
ICB2b2lkIHN0ZXBPdXQoSW5zcGVjdG9yQXJyYXkqIGVycm9ycyk7CisgICAgdm9pZCBzZXRQYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlKEluc3BlY3RvckFycmF5KiBlcnJvcnMsIGxvbmcgcGF1c2VTdGF0
ZSwgbG9uZyogbmV3U3RhdGUpOworICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShJbnNwZWN0
b3JBcnJheSogZXJyb3JzLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FsbEZyYW1lSWQs
IGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9v
bCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7
CisgICAgdm9pZCBnZXRDb21wbGV0aW9uc09uQ2FsbEZyYW1lKEluc3BlY3RvckFycmF5KiBlcnJv
cnMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiogcmVzdWx0KTsKIAogcHJpdmF0ZToKICAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
KEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yRnJvbnRlbmQqLCBib29sIGVyYXNlU3RpY2t5QnJl
YWtwb2ludHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBy
b2ZpbGVyQWdlbnQuY3BwCmluZGV4IDU1MGZlYmYuLmE4YjVlYjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKQEAgLTE1MSw3
ICsxNTEsNyBAQCBTdHJpbmcgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0Q3VycmVudFVzZXJJ
bml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudAogICAgIHJldHVybiBtYWtlU3RyaW5n
KFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSwgJy4nLCBTdHJpbmc6Om51bWJlcihtX2N1cnJlbnRV
c2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcikpOwogfQogCi12b2lkIEluc3BlY3RvclByb2ZpbGVy
QWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGhlYWRlcnMp
Cit2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJzKEluc3BlY3Rv
ckFycmF5KiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogaGVhZGVycykKIHsKICAgICBQcm9maWxl
c01hcDo6aXRlcmF0b3IgcHJvZmlsZXNFbmQgPSBtX3Byb2ZpbGVzLmVuZCgpOwogICAgIGZvciAo
UHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9maWxlcy5iZWdpbigpOyBpdCAhPSBwcm9m
aWxlc0VuZDsgKytpdCkKQEAgLTE3Niw3ICsxNzYsNyBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVz
cGFjZQogCi12b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGUoY29uc3QgU3Ry
aW5nJiB0eXBlLCB1bnNpZ25lZCB1aWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBwcm9maWxl
T2JqZWN0KQordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlKEluc3BlY3Rv
ckFycmF5KiwgY29uc3QgU3RyaW5nJiB0eXBlLCB1bnNpZ25lZCB1aWQsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+KiBwcm9maWxlT2JqZWN0KQogewogICAgIGlmICh0eXBlID09IENQVVByb2ZpbGVU
eXBlKSB7CiAgICAgICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuZmlu
ZCh1aWQpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6
Z2V0UHJvZmlsZShjb25zdCBTdHJpbmcmIHR5cGUsIHVuc2lnbmVkIHVpZCwgUmVmUHRyCiAgICAg
fQogfQogCi12b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnJlbW92ZVByb2ZpbGUoY29uc3Qg
U3RyaW5nJiB0eXBlLCB1bnNpZ25lZCB1aWQpCit2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6
OnJlbW92ZVByb2ZpbGUoSW5zcGVjdG9yQXJyYXkqLCBjb25zdCBTdHJpbmcmIHR5cGUsIHVuc2ln
bmVkIHVpZCkKIHsKICAgICBpZiAodHlwZSA9PSBDUFVQcm9maWxlVHlwZSkgewogICAgICAgICBp
ZiAobV9wcm9maWxlcy5jb250YWlucyh1aWQpKQpAQCAtMjkzLDcgKzI5Myw3IEBAIHByaXZhdGU6
CiAKIH07CiAKLXZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6dGFrZUhlYXBTbmFwc2hvdChi
b29sIGRldGFpbGVkKQordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50Ojp0YWtlSGVhcFNuYXBz
aG90KEluc3BlY3RvckFycmF5KiwgYm9vbCBkZXRhaWxlZCkKIHsKICAgICBTdHJpbmcgdGl0bGUg
PSBtYWtlU3RyaW5nKFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSwgJy4nLCBTdHJpbmc6Om51bWJl
cihtX25leHRVc2VySW5pdGlhdGVkSGVhcFNuYXBzaG90TnVtYmVyKSk7CiAgICAgKyttX25leHRV
c2VySW5pdGlhdGVkSGVhcFNuYXBzaG90TnVtYmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgKaW5kZXggOTM2MzdmNS4uY2Y3NWE4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dC5oCkBAIC01NiwyMSArNTYsMjEgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUHJvZmlsZShQYXNz
UmVmUHRyPFNjcmlwdFByb2ZpbGU+IHBycFByb2ZpbGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMKTsKICAgICB2b2lkIGFkZFByb2ZpbGVGaW5pc2hlZE1lc3Nh
Z2VUb0NvbnNvbGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiwgdW5zaWduZWQgbGluZU51bWJl
ciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogICAgIHZvaWQgYWRkU3RhcnRQcm9maWxpbmdN
ZXNzYWdlVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKLSAgICB2b2lkIGNsZWFyUHJvZmlsZXMoKSB7IHJl
c2V0U3RhdGUoKTsgfQorICAgIHZvaWQgY2xlYXJQcm9maWxlcyhJbnNwZWN0b3JBcnJheSopIHsg
cmVzZXRTdGF0ZSgpOyB9CiAgICAgdm9pZCBkaXNhYmxlKCk7CiAgICAgdm9pZCBlbmFibGUoYm9v
bCBza2lwUmVjb21waWxlKTsKICAgICBib29sIGVuYWJsZWQoKSB7IHJldHVybiBtX2VuYWJsZWQ7
IH0KICAgICBTdHJpbmcgZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGlu
Y3JlbWVudFByb2ZpbGVOdW1iZXIgPSBmYWxzZSk7Ci0gICAgdm9pZCBnZXRQcm9maWxlSGVhZGVy
cyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKTsKLSAgICB2b2lkIGdldFByb2ZpbGUo
Y29uc3QgU3RyaW5nJiB0eXBlLCB1bnNpZ25lZCB1aWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KiBwcm9maWxlT2JqZWN0KTsKKyAgICB2b2lkIGdldFByb2ZpbGVIZWFkZXJzKEluc3BlY3RvckFy
cmF5KiBlcnJvcnMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGhlYWRlcnMpOworICAgIHZvaWQg
Z2V0UHJvZmlsZShJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBjb25zdCBTdHJpbmcmIHR5cGUsIHVu
c2lnbmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHByb2ZpbGVPYmplY3QpOwogICAg
IGJvb2wgaXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSgpIHsgcmV0dXJuIG1fcmVjb3Jk
aW5nVXNlckluaXRpYXRlZFByb2ZpbGU7IH0KLSAgICB2b2lkIHJlbW92ZVByb2ZpbGUoY29uc3Qg
U3RyaW5nJiB0eXBlLCB1bnNpZ25lZCB1aWQpOworICAgIHZvaWQgcmVtb3ZlUHJvZmlsZShJbnNw
ZWN0b3JBcnJheSogZXJyb3JzLCBjb25zdCBTdHJpbmcmIHR5cGUsIHVuc2lnbmVkIHVpZCk7CiAg
ICAgdm9pZCByZXNldFN0YXRlKCk7CiAgICAgdm9pZCByZXNldEZyb250ZW5kUHJvZmlsZXMoKTsK
ICAgICB2b2lkIHNldEZyb250ZW5kKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkgeyBtX2Zy
b250ZW5kID0gZnJvbnRlbmQ7IH0KICAgICB2b2lkIHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGlu
ZygpOwogICAgIHZvaWQgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoYm9vbCBpZ25vcmVQcm9m
aWxlID0gZmFsc2UpOwotICAgIHZvaWQgdGFrZUhlYXBTbmFwc2hvdChib29sIGRldGFpbGVkKTsK
KyAgICB2b2lkIHRha2VIZWFwU25hcHNob3QoSW5zcGVjdG9yQXJyYXkqIGVycm9ycywgYm9vbCBk
ZXRhaWxlZCk7CiAgICAgdm9pZCB0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCBpc1Byb2ZpbGluZyk7
CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudC5jcHAKaW5kZXggZjAyNDMxZS4uN2VhNGI0NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcApAQCAtMzEx
LDcgKzMxMSw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6aWRlbnRpZmllckZvcklu
aXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllCiAgICAgbV9mcm9udGVuZC0+aWRl
bnRpZmllckZvckluaXRpYWxSZXF1ZXN0KGlkZW50aWZpZXIsIHVybC5zdHJpbmcoKSwgbG9hZGVy
T2JqZWN0LCBjYWxsU3RhY2tWYWx1ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6c2V0RXh0cmFIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzKQor
dm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpzZXRFeHRyYUhlYWRlcnMoSW5zcGVjdG9yQXJy
YXkqLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVycykKIHsKICAgICBtX3N0YXRl
LT5zZXRPYmplY3QoUmVzb3VyY2VBZ2VudFN0YXRlOjpleHRyYVJlcXVlc3RIZWFkZXJzLCBoZWFk
ZXJzKTsKIH0KQEAgLTQ5OCwxMiArNDk4LDEyIEBAIEZyYW1lKiBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50OjpmcmFtZUZvcklkKHVuc2lnbmVkIGxvbmcgZnJhbWVJZCkKICAgICByZXR1cm4gMDsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpjYWNoZWRSZXNvdXJjZXMoUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIG9iamVjdCkKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Y2Fj
aGVkUmVzb3VyY2VzKEluc3BlY3RvckFycmF5KiBlcnJvcnMsIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+KiBvYmplY3QpCiB7CiAgICAgKm9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKG1f
cGFnZS0+bWFpbkZyYW1lKCksIHRydWUpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlQWdl
bnQ6OnJlc291cmNlQ29udGVudCh1bnNpZ25lZCBsb25nIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYg
dXJsLCBib29sIGJhc2U2NEVuY29kZSwgYm9vbCogc3VjY2VzcywgU3RyaW5nKiBjb250ZW50KQor
dm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQoSW5zcGVjdG9yQXJy
YXkqLCB1bnNpZ25lZCBsb25nIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGJhc2U2
NEVuY29kZSwgYm9vbCogc3VjY2VzcywgU3RyaW5nKiBjb250ZW50KQogewogICAgIEZyYW1lKiBm
cmFtZSA9IGZyYW1lRm9ySWQoZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgKaW5kZXggZmIy
NGI3MC4uY2I0MGJhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclJlc291cmNlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudC5oCkBAIC0xMDIsOSArMTAyLDkgQEAgcHVibGljOgogICAgIEZyYW1l
KiBmcmFtZUZvcklkKHVuc2lnbmVkIGxvbmcpOwogCiAgICAgLy8gQ2FsbGVkIGZyb20gZnJvbnRl
bmQgCi0gICAgdm9pZCBjYWNoZWRSZXNvdXJjZXMoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qKTsK
LSAgICB2b2lkIHJlc291cmNlQ29udGVudCh1bnNpZ25lZCBsb25nIGZyYW1lSWQsIGNvbnN0IFN0
cmluZyYgdXJsLCBib29sIGJhc2U2NEVuY29kZSwgYm9vbCogcmVzb3VyY2VGb3VuZCwgU3RyaW5n
KiBjb250ZW50KTsKLSAgICB2b2lkIHNldEV4dHJhSGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4pOworICAgIHZvaWQgY2FjaGVkUmVzb3VyY2VzKEluc3BlY3RvckFycmF5KiBlcnJv
cnMsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+Kik7CisgICAgdm9pZCByZXNvdXJjZUNvbnRlbnQo
SW5zcGVjdG9yQXJyYXkqIGVycm9ycywgdW5zaWduZWQgbG9uZyBmcmFtZUlkLCBjb25zdCBTdHJp
bmcmIHVybCwgYm9vbCBiYXNlNjRFbmNvZGUsIGJvb2wqIHJlc291cmNlRm91bmQsIFN0cmluZyog
Y29udGVudCk7CisgICAgdm9pZCBzZXRFeHRyYUhlYWRlcnMoSW5zcGVjdG9yQXJyYXkqIGVycm9y
cywgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KTsKIAogcHJpdmF0ZToKICAgICBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50KFBhZ2UqIHBhZ2UsIEluc3BlY3RvclN0YXRlKiwgSW5zcGVjdG9yRnJv
bnRlbmQqIGZyb250ZW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggNzkzOGFmZC4uYWRlMWRjZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKQEAgLTQ1
LDM1ICs0NSwzNSBAQCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6Okluc3BlY3RvclJ1bnRpbWVBZ2Vu
dChJbmplY3RlZFNjcmlwdEhvc3QqIGluamVjdGVkU2NyaXB0SAogCiBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6On5JbnNwZWN0b3JSdW50aW1lQWdlbnQoKSB7IH0KIAotdm9pZCBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpldmFsdWF0ZShJ
bnNwZWN0b3JBcnJheSogZXJyb3JzLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+KiByZXN1bHQpCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHQgPSBtX2luamVjdGVkU2NyaXB0SG9zdC0+aW5qZWN0ZWRTY3JpcHRGb3JNYWluRnJhbWUoKTsK
ICAgICBpZiAoIWluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgaW5qZWN0ZWRT
Y3JpcHQuZXZhbHVhdGUoZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGluY2x1ZGVDb21tYW5kTGlu
ZUFQSSwgcmVzdWx0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldENvbXBs
ZXRpb25zKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVB
UEksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpnZXRDb21wbGV0aW9ucyhJbnNwZWN0b3JBcnJheSosIGNvbnN0IFN0cmluZyYgZXhw
cmVzc2lvbiwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIHJlc3VsdCkKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5q
ZWN0ZWRTY3JpcHRIb3N0LT5pbmplY3RlZFNjcmlwdEZvck1haW5GcmFtZSgpOwogICAgIGlmICgh
aW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICBpbmplY3RlZFNjcmlwdC5nZXRD
b21wbGV0aW9ucyhleHByZXNzaW9uLCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIHJlc3VsdCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRQcm9wZXJ0aWVzKFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJZCwgYm9vbCBpZ25vcmVIYXNPd25Qcm9wZXJ0eSwgYm9v
bCBhYmJyZXZpYXRlLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit2b2lkIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJvcGVydGllcyhJbnNwZWN0b3JBcnJheSosIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJZCwgYm9vbCBpZ25vcmVIYXNPd25Qcm9wZXJ0eSwg
Ym9vbCBhYmJyZXZpYXRlLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCiB7CiAgICAg
SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0SG9zdC0+aW5q
ZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZC5nZXQoKSk7CiAgICAgaWYgKCFpbmplY3Rl
ZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAgICAgICAgIGluamVjdGVkU2NyaXB0LmdldFByb3BlcnRp
ZXMob2JqZWN0SWQsIGlnbm9yZUhhc093blByb3BlcnR5LCBhYmJyZXZpYXRlLCByZXN1bHQpOwog
fQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2V0UHJvcGVydHlWYWx1ZShQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
LCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3Vs
dCkKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRQcm9wZXJ0eVZhbHVlKEluc3BlY3Rv
ckFycmF5KiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdElkLCBjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiByZXN1bHQpCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQg
PSBtX2luamVjdGVkU2NyaXB0SG9zdC0+aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJ
ZC5nZXQoKSk7CiAgICAgaWYgKCFpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAgICAgICAg
IGluamVjdGVkU2NyaXB0LnNldFByb3BlcnR5VmFsdWUob2JqZWN0SWQsIHByb3BlcnR5TmFtZSwg
ZXhwcmVzc2lvbiwgcmVzdWx0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJl
bGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAobG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBTdHJp
bmcmIG9iamVjdEdyb3VwKQordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VXcmFw
cGVyT2JqZWN0R3JvdXAoSW5zcGVjdG9yQXJyYXkqLCBsb25nIGluamVjdGVkU2NyaXB0SWQsIGNv
bnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CiAgICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPnJl
bGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAoaW5qZWN0ZWRTY3JpcHRJZCwgb2JqZWN0R3JvdXApOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVB
Z2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5o
CmluZGV4IDlmYjI3MTYuLmI4NjZiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmgKQEAgLTU3LDExICs1NywxMSBAQCBwdWJsaWM6CiAg
ICAgfkluc3BlY3RvclJ1bnRpbWVBZ2VudCgpOwogCiAgICAgLy8gUGFydCBvZiB0aGUgcHJvdG9j
b2wuCi0gICAgdm9pZCBldmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+KiByZXN1bHQpOwotICAgIHZvaWQgZ2V0Q29tcGxldGlvbnMoY29uc3QgU3Ry
aW5nJiBleHByZXNzaW9uLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiogcmVzdWx0KTsKLSAgICB2b2lkIGdldFByb3BlcnRpZXMoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG9iamVjdElkLCBib29sIGlnbm9yZUhhc093blByb3BlcnR5LCBib29s
IGFiYnJldmlhdGUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7Ci0gICAgdm9pZCBz
ZXRQcm9wZXJ0eVZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJZCwgY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKLSAgICB2b2lkIHJlbGVhc2VXcmFwcGVyT2JqZWN0
R3JvdXAobG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKTsK
KyAgICB2b2lkIGV2YWx1YXRlKEluc3BlY3RvckFycmF5KiBlcnJvcnMsIGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFu
ZExpbmVBUEksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCBnZXRD
b21wbGV0aW9ucyhJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBy
ZXN1bHQpOworICAgIHZvaWQgZ2V0UHJvcGVydGllcyhJbnNwZWN0b3JBcnJheSogZXJyb3JzLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0SWQsIGJvb2wgaWdub3JlSGFzT3duUHJv
cGVydHksIGJvb2wgYWJicmV2aWF0ZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsK
KyAgICB2b2lkIHNldFByb3BlcnR5VmFsdWUoSW5zcGVjdG9yQXJyYXkqIGVycm9ycywgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdElkLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1
bHQpOworICAgIHZvaWQgcmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChJbnNwZWN0b3JBcnJheSog
ZXJyb3JzLCBsb25nIGluamVjdGVkU2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAp
OwogCiBwcml2YXRlOgogICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudChJbmplY3RlZFNjcmlwdEhv
c3QqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1l
bGluZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcAppbmRleCAzNTRiZGFkLi41NWE4OGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCkBAIC04MiwxOCArODIs
MjEgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZXRGcm9udGVuZChJbnNwZWN0b3JG
cm9udGVuZCogZnJvbnRlbmQpCiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6Y2xlYXJG
cm9udGVuZCgpCiB7Ci0gICAgc3RvcCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gZXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIHN0b3AoZXJyb3JzLmdldCgpKTsK
ICAgICBtX2Zyb250ZW5kID0gMDsKIH0KIAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpy
ZXN0b3JlKEluc3BlY3RvclN0YXRlKiBzdGF0ZSwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5k
KQogewogICAgIHNldEZyb250ZW5kKGZyb250ZW5kKTsKLSAgICBpZiAoc3RhdGUtPmdldEJvb2xl
YW4oVGltZWxpbmVBZ2VudFN0YXRlOjp0aW1lbGluZUFnZW50RW5hYmxlZCkpCi0gICAgICAgIHN0
YXJ0KCk7CisgICAgaWYgKHN0YXRlLT5nZXRCb29sZWFuKFRpbWVsaW5lQWdlbnRTdGF0ZTo6dGlt
ZWxpbmVBZ2VudEVuYWJsZWQpKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gZXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBzdGFydChlcnJvcnMuZ2V0
KCkpOworICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdGFydCgpCit2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0KEluc3BlY3RvckFycmF5KikKIHsKICAg
ICBpZiAoIW1fZnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMyw3ICsxMDYsNyBAQCB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0KCkKICAgICBtX3N0YXRlLT5zZXRCb29s
ZWFuKFRpbWVsaW5lQWdlbnRTdGF0ZTo6dGltZWxpbmVBZ2VudEVuYWJsZWQsIHRydWUpOwogfQog
Ci12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0b3AoKQordm9pZCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50OjpzdG9wKEluc3BlY3RvckFycmF5KikKIHsKICAgICBpZiAoIXN0YXJ0ZWQoKSkK
ICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JUaW1lbGluZUFnZW50LmgKaW5kZXggYjgxYWNiYi4uN2FmYjVhNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCkBAIC04OCw4ICs4
OCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzdG9yZShJbnNwZWN0b3JTdGF0ZSosIEluc3Bl
Y3RvckZyb250ZW5kKik7CiAKLSAgICB2b2lkIHN0YXJ0KCk7Ci0gICAgdm9pZCBzdG9wKCk7Cisg
ICAgdm9pZCBzdGFydChJbnNwZWN0b3JBcnJheSogZXJyb3JzKTsKKyAgICB2b2lkIHN0b3AoSW5z
cGVjdG9yQXJyYXkqIGVycm9ycyk7CiAgICAgYm9vbCBzdGFydGVkKCkgY29uc3Q7CiAKICAgICBp
bnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83620</attachid>
            <date>2011-02-24 01:33:53 -0800</date>
            <delta_ts>2011-02-24 03:44:20 -0800</delta_ts>
            <desc>[patch] second version.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>85460</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNzBiNjc2Li4yYzc2ZDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY4
IEBACisyMDExLTAyLTI0ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBUaGVyZSBpcyBhIHZhbGlkYXRvciBvZiB0aGUgcHJvdG9jb2wgbWVzc2FnZSBmb3Jt
YXQuCisgICAgICAgIEl0IGhhcyB0d28gcGFydHMuIEluc3BlY3RvckJhY2tlbmRTdHViLmpzIGlz
IHRoZSBmcm9udGVuZCBwYXJ0LgorICAgICAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5j
cHAgaXMgdGhlIGJhY2tlbmQgcGFydC4KKyAgICAgICAgQm90aCBwYXJ0cyBhcmUgY2hlY2tpbmcg
cHJvdG9jb2wgbWVzc2FnZSBmb3JtYXQgYW5kIHJlcG9ydCB0aGUgZXJyb3IgaWYKKyAgICAgICAg
dGhlIG1lc3NhZ2UgaGFzIG5vdCBlbm91Z2ggZmllbGRzIG9yIHRoZSB0eXBlcyBvZiBmaWVsZHMg
ZG8gbm90IG1hdGNoIHdpdGgKKyAgICAgICAgSW5zcGVjdG9yLmlkbCBzcGVjaWZpY2F0aW9uLiBU
aGVzZSB2YWxpZGF0b3JzIGFyZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS4KKworICAgICAgICBJ
biBhZGRpdGlvbiwgd2UgaGF2ZSBhIG51bWJlciBvZiBwbGFjZXMgYXQgdGhlIGJhY2tlbmQgd2hl
cmUgd2UgY2hlY2sgdGhlCisgICAgICAgIGZ1bmN0aW9uIGFyZ3VtZW50cyBhbmQgZG8gbm90aGlu
ZyBpZiB0aGUgYXJndW1lbnRzIGFyZSBpbnZhbGlkCisgICAgICAgIGZyb20gdGhlIGJ1c2luZXNz
IGxvZ2ljIHBvaW50IG9mIHZpZXcuCisKKyAgICAgICAgVGhpcyBwYXRjaCBicmluZyB1cyBhbiBh
YmlsaXR5IHRvIHJlcG9ydCBhIGN1c3RvbSBlcnJvciBmcm9tIHN1Y2ggZnVuY3Rpb24gdG8gdGhl
IGZyb250ZW5kLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3Iu
cG06CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQWdlbnQ6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQWdlbnQ6OmhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JBZ2VudDo6aGlnaGxpZ2h0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JB
Z2VudDo6aGlnaGxpZ2h0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6
OmhpZGVIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Om1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpz
ZXRTZWFyY2hpbmdGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpk
aXNjb25uZWN0RnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnBv
cHVsYXRlU2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6
cmVzdG9yZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpzZXRV
c2VyQWdlbnRPdmVycmlkZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6Z2V0
Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGVsZXRlQ29va2ll
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjplbmFibGVQcm9maWxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZVByb2ZpbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaXNhYmxlRGVidWdnZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Om9wZW5Jbkluc3BlY3RlZFdpbmRvdyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9u
TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6cmVtb3ZlQWxsU2NyaXB0
c1RvRXZhbHVhdGVPbkxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJl
bG9hZFBhZ2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmhpZGVET01Ob2RlSGlnaGxpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpoaWRlRnJhbWVIaWdobGlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnN0YXJ0UHJvZmlsaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjpzdG9wUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFnZW50OjplbmFibGVEZWJ1Z2dlcik6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldEFwcGxpY2F0aW9uQ2FjaGVzKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRBbGxCcm93c2VyQnJl
YWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnJlc3RvcmVTdGlja3lCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVtb3ZlRXZlbnRM
aXN0ZW5lckJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRl
YnVnZ2VyQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnNldFhIUkJyZWFrcG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnJlbW92
ZVhIUkJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVi
dWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVzRm9yTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0SW5saW5lU3R5bGVGb3JO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0
eWxlRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0QWxs
U3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNo
ZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVTaGVl
dFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVy
dHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGll
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6cXVlcnlTZWxlY3RvckFs
bCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50Lmg6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldENvbnNvbGVNZXNzYWdlc0VuYWJsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29uc29sZUFnZW50OjpjbGVhckNvbnNvbGVNZXNzYWdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnJlc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnNvbGVBZ2VudDo6c2V0TW9uaXRvcmluZ1hIUkVuYWJs
ZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFRpbWVsaW5lUHJvZmlsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFRpbWVsaW5lUHJvZmlsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aGlkZUhpZ2hsaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVQcm9maWxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxlUHJvZmlsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZURlYnVnZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3VtZSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTUFnZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2Vu
dDo6Z2V0Q2hpbGROb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
c2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpyZW1v
dmVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92
ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmNoYW5nZVRhZ05h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldE91dGVySFRNTCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0ZXJIVE1MKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRUZXh0Tm9kZVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmFkZEluc3BlY3RlZE5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2gp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNlYXJjaENhbmNlbGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0Tm9kZVByb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldE5vZGVQcm90b3R5cGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Om9uTWF0Y2hKb2JzVGltZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmNvcHlOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlRW50cmllcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFn
ZUl0ZW0pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpnZXREYXRhYmFzZVRhYmxlTmFtZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZXhlY3V0ZVNRTCk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjphY3RpdmF0ZUJyZWFrcG9pbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYWN0aXZhdGVCcmVha3BvaW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRKYXZhU2NyaXB0
QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
ZXRKYXZhU2NyaXB0QnJlYWtwb2ludEJ5U291cmNlSWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVkaXRTY3JpcHRTb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnBhdXNl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc3VtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3Zlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwSW50byk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3V0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNh
bGxGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRD
b21wbGV0aW9uc09uQ2FsbEZyYW1lKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2Zp
bGVIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6Omdl
dFByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6cmVt
b3ZlUHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50Ojp0
YWtlSGVhcFNuYXBzaG90KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y2xlYXJQ
cm9maWxlcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6c2V0RXh0cmFIZWFk
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OmNhY2hlZFJl
c291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpyZXNv
dXJjZUNvbnRlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmV2YWx1YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0Q29tcGxldGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2V0UHJvcGVydHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VXcmFwcGVyT2Jq
ZWN0R3JvdXApOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpjbGVhckZyb250ZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnJlc3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RvcCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuaDoKKwogMjAxMS0wMi0yMyAgR2VvZmZyZXkgR2FyZW4gIDxn
Z2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93ZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBt
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KaW5k
ZXggYjU5YTRkMS4uZWE4MGQwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KQEAgLTQ1Myw5ICs0NTMsMTIgQEAgc3ViIGdlbmVy
YXRlQmFja2VuZEZ1bmN0aW9uCiAgICAgICAgICRpbmRlbnQgPSAiICAgICI7CiAgICAgfQogCi0g
ICAgbXkgJGFyZ3MgPSBqb2luKCIsICIsIChtYXAoJF8tPm5hbWUsIEBpbkFyZ3MpLCBtYXAoIiYi
IC4gJF8tPm5hbWUsIEBvdXRBcmdzKSkpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiJGluZGVudCAg
ICBTdHJpbmcgZXJyb3I7Iik7CisgICAgbXkgJGFyZ3MgPSBqb2luKCIsICIsICgiJmVycm9yIiwg
bWFwKCRfLT5uYW1lLCBAaW5BcmdzKSwgbWFwKCImIiAuICRfLT5uYW1lLCBAb3V0QXJncykpKTsK
ICAgICBwdXNoKEBmdW5jdGlvbiwgIiRpbmRlbnQgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIik7CiAgICAgcHVzaChAZnVuY3Rpb24sICIkaW5kZW50ICAgICAgICAkZG9tYWluQWNj
ZXNzb3ItPiRmdW5jdGlvbk5hbWUoJGFyZ3MpOyIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiJGlu
ZGVudCAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIik7CisgICAgcHVzaChAZnVuY3Rpb24sICIkaW5k
ZW50ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhlcnJvcik7Iik7CiAgICAgaWYg
KHNjYWxhcihAaW5BcmdzKSkgewogICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICB9IGVsc2Ug
eyIpOwogICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoXCJQcm90b2NvbCBFcnJvcjogJ2FyZ3VtZW50cycgcHJvcGVydHkgd2l0aCB0eXBl
ICdvYmplY3QnIHdhcyBub3QgZm91bmQuXCIpOyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAppbmRleCA1YjEzNzc4Li4zZjI2ZjhiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcApAQCAt
ODksOCArODksMTAgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3QoTm9kZSogbm9k
ZSkKIAogdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKCkKIHsK
LSAgICBpZiAobV9pbnNwZWN0b3JBZ2VudCkKLSAgICAgICAgbV9pbnNwZWN0b3JBZ2VudC0+Y29u
c29sZUFnZW50KCktPmNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CisgICAgaWYgKG1faW5zcGVjdG9y
QWdlbnQpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yOworICAgICAgICBtX2luc3BlY3RvckFnZW50
LT5jb25zb2xlQWdlbnQoKS0+Y2xlYXJDb25zb2xlTWVzc2FnZXMoJmVycm9yKTsKKyAgICB9CiB9
CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0Ojpjb3B5VGV4dChjb25zdCBTdHJpbmcmIHRleHQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcAppbmRleCAzY2I3
N2QwLi5iZGJmNmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2Vu
dC5jcHAKQEAgLTE3MSw3ICsxNzEsOCBAQCB2b2lkIEluc3BlY3RvckFnZW50OjppbnNwZWN0ZWRQ
YWdlRGVzdHJveWVkKCkKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAgbV9mcm9udGVuZC0+
ZGlzY29ubmVjdEZyb21CYWNrZW5kKCk7CiAKLSAgICBoaWRlSGlnaGxpZ2h0KCk7CisgICAgU3Ry
aW5nIGVycm9yOworICAgIGhpZGVIaWdobGlnaHQoJmVycm9yKTsKIAogI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQogICAgIG1fZGVidWdnZXJBZ2VudC5jbGVhcigpOwpAQCAtMjM3LDcg
KzIzOCw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmZvY3VzTm9kZSgpCiAgICAgbV9ub2RlVG9G
b2N1cyA9IDA7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmhpZ2hsaWdodChOb2RlKiBub2Rl
KQordm9pZCBJbnNwZWN0b3JBZ2VudDo6aGlnaGxpZ2h0KFN0cmluZyosIE5vZGUqIG5vZGUpCiB7
CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NiwyNSArMjQ3LDI1
IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmhpZ2hsaWdodChOb2RlKiBub2RlKQogICAgIG1fY2xp
ZW50LT5oaWdobGlnaHQobm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmhpZ2hsaWdo
dERPTU5vZGUobG9uZyBub2RlSWQpCit2b2lkIEluc3BlY3RvckFnZW50OjpoaWdobGlnaHRET01O
b2RlKFN0cmluZyogZXJyb3IsIGxvbmcgbm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSAwOwog
ICAgIGlmIChtX2RvbUFnZW50ICYmIChub2RlID0gbV9kb21BZ2VudC0+bm9kZUZvcklkKG5vZGVJ
ZCkpKQotICAgICAgICBoaWdobGlnaHQobm9kZSk7CisgICAgICAgIGhpZ2hsaWdodChlcnJvciwg
bm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmhpZ2hsaWdodEZyYW1lKHVuc2lnbmVk
IGxvbmcgZnJhbWVJZCkKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmhpZ2hsaWdodEZyYW1lKFN0cmlu
ZyogZXJyb3IsIHVuc2lnbmVkIGxvbmcgZnJhbWVJZCkKIHsKICAgICBGcmFtZSogbWFpbkZyYW1l
ID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKTsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
IG1haW5GcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1h
aW5GcmFtZSkpIHsKICAgICAgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihmcmFt
ZSkgPT0gZnJhbWVJZCAmJiBmcmFtZS0+b3duZXJFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGhp
Z2hsaWdodChmcmFtZS0+b3duZXJFbGVtZW50KCkpOworICAgICAgICAgICAgaGlnaGxpZ2h0KGVy
cm9yLCBmcmFtZS0+b3duZXJFbGVtZW50KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjpoaWRlSGlnaGxpZ2h0KCkKK3Zv
aWQgSW5zcGVjdG9yQWdlbnQ6OmhpZGVIaWdobGlnaHQoU3RyaW5nKikKIHsKICAgICBpZiAoIWVu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgwLDggKzI4MSwxMCBAQCB2b2lkIEluc3Bl
Y3RvckFnZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIHVuc2lnbgogICAgIE5vZGUqIG5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAg
d2hpbGUgKG5vZGUgJiYgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUpCiAgICAg
ICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKG5vZGUpCi0gICAgICAgIGhp
Z2hsaWdodChub2RlKTsKKyAgICBpZiAobm9kZSkgeworICAgICAgICBTdHJpbmcgZXJyb3I7Cisg
ICAgICAgIGhpZ2hsaWdodCgmZXJyb3IsIG5vZGUpOworICAgIH0KIH0KIAogYm9vbCBJbnNwZWN0
b3JBZ2VudDo6aGFuZGxlTW91c2VQcmVzcygpCkBAIC0zMjQsMTEgKzMyNywxMyBAQCB2b2lkIElu
c3BlY3RvckFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCkKICAgICBpZiAo
c2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKICAg
ICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3RhdGU6OnNlYXJjaGluZ0Zvck5v
ZGUsIGVuYWJsZWQpOwotICAgIGlmICghZW5hYmxlZCkKLSAgICAgICAgaGlkZUhpZ2hsaWdodCgp
OworICAgIGlmICghZW5hYmxlZCkgeworICAgICAgICBTdHJpbmcgZXJyb3I7CisgICAgICAgIGhp
ZGVIaWdobGlnaHQoJmVycm9yKTsKKyAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNl
dFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSkKK3ZvaWQgSW5z
cGVjdG9yQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoU3RyaW5nKiwgYm9vbCBlbmFibGVkLCBi
b29sKiBuZXdTdGF0ZSkKIHsKICAgICAqbmV3U3RhdGUgPSBlbmFibGVkOwogICAgIHNldFNlYXJj
aGluZ0Zvck5vZGUoZW5hYmxlZCk7CkBAIC0zNjYsMTUgKzM3MSwxNiBAQCB2b2lkIEluc3BlY3Rv
ckFnZW50OjpkaXNjb25uZWN0RnJvbnRlbmQoKQogCiAgICAgbV9mcm9udGVuZCA9IDA7CiAKKyAg
ICBTdHJpbmcgZXJyb3I7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgLy8g
SWYgdGhlIHdpbmRvdyBpcyBiZWluZyBjbG9zZWQgd2l0aCB0aGUgZGVidWdnZXIgZW5hYmxlZCwK
ICAgICAvLyByZW1lbWJlciB0aGlzIHN0YXRlIHRvIHJlLWVuYWJsZSBkZWJ1Z2dlciBvbiB0aGUg
bmV4dCB3aW5kb3cKICAgICAvLyBvcGVuaW5nLgotICAgIGRpc2FibGVEZWJ1Z2dlcigpOworICAg
IGRpc2FibGVEZWJ1Z2dlcigmZXJyb3IpOwogI2VuZGlmCiAgICAgc2V0U2VhcmNoaW5nRm9yTm9k
ZShmYWxzZSk7CiAKLSAgICBoaWRlSGlnaGxpZ2h0KCk7CisgICAgaGlkZUhpZ2hsaWdodCgmZXJy
b3IpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgbV9wcm9maWxlckFn
ZW50LT5zZXRGcm9udGVuZCgwKTsKQEAgLTQyMCw3ICs0MjYsNyBAQCB2b2lkIEluc3BlY3RvckFn
ZW50OjpyZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpCiAjZW5kaWYKIH0KIAotdm9pZCBJ
bnNwZWN0b3JBZ2VudDo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkKK3ZvaWQgSW5zcGVjdG9yQWdl
bnQ6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cyhTdHJpbmcqKQogewogICAgIEFTU0VSVChtX2Zyb250
ZW5kKTsKICAgICBpZiAoIW1fZnJvbnRlbmQpCkBAIC00NzcsOCArNDgzLDEwIEBAIHZvaWQgSW5z
cGVjdG9yQWdlbnQ6OnJlc3RvcmVQcm9maWxlcihQcm9maWxlclJlc3RvcmVBY3Rpb24gYWN0aW9u
KQogICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKICAgICBtX3Byb2ZpbGVyQWdlbnQtPnNldEZyb250ZW5kKG1fZnJvbnRlbmQpOwotICAgIGlm
IChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvckFnZW50U3RhdGU6OnByb2ZpbGVyRW5hYmxl
ZCkpCi0gICAgICAgIGVuYWJsZVByb2ZpbGVyKCk7CisgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xl
YW4oSW5zcGVjdG9yQWdlbnRTdGF0ZTo6cHJvZmlsZXJFbmFibGVkKSkgeworICAgICAgICBTdHJp
bmcgZXJyb3I7CisgICAgICAgIGVuYWJsZVByb2ZpbGVyKCZlcnJvcik7CisgICAgfQogICAgIGlm
IChhY3Rpb24gPT0gUHJvZmlsZXJSZXN0b3JlUmVzZXRBZ2VudCkKICAgICAgICAgbV9wcm9maWxl
ckFnZW50LT5yZXNldEZyb250ZW5kUHJvZmlsZXMoKTsKICNlbmRpZgpAQCAtNTc3LDcgKzU4NSw3
IEBAIGJvb2wgSW5zcGVjdG9yQWdlbnQ6OmlzTWFpblJlc291cmNlTG9hZGVyKERvY3VtZW50TG9h
ZGVyKiBsb2FkZXIsIGNvbnN0IEtVUkwmIHJlCiAgICAgcmV0dXJuIGxvYWRlci0+ZnJhbWUoKSA9
PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpICYmIHJlcXVlc3RVcmwgPT0gbG9hZGVyLT5y
ZXF1ZXN0VVJMKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldFVzZXJBZ2VudE92ZXJy
aWRlKGNvbnN0IFN0cmluZyYgdXNlckFnZW50KQordm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0VXNl
ckFnZW50T3ZlcnJpZGUoU3RyaW5nKiwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpCiB7CiAgICAg
bV91c2VyQWdlbnRPdmVycmlkZSA9IHVzZXJBZ2VudDsKIH0KQEAgLTY1Nyw3ICs2NjUsNyBAQCB2
b2lkIEluc3BlY3RvckFnZW50OjpkaWREZXN0cm95V29ya2VyKGludHB0cl90IGlkKQogfQogI2Vu
ZGlmIC8vIEVOQUJMRShXT1JLRVJTKQogCi12b2lkIEluc3BlY3RvckFnZW50OjpnZXRDb29raWVz
KFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGNvb2tpZXMsIFdURjo6U3RyaW5nKiBjb29raWVzU3Ry
aW5nKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6Z2V0Q29va2llcyhTdHJpbmcqLCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+KiBjb29raWVzLCBXVEY6OlN0cmluZyogY29va2llc1N0cmluZykKIHsKICAg
ICAvLyBJZiB3ZSBjYW4gZ2V0IHJhdyBjb29raWVzLgogICAgIExpc3RIYXNoU2V0PENvb2tpZT4g
cmF3Q29va2llc0xpc3Q7CkBAIC03MjgsNyArNzM2LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IEluc3BlY3RvckFnZW50OjpidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29raWUm
IGMKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRlbGV0ZUNv
b2tpZShjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluKQordm9p
ZCBJbnNwZWN0b3JBZ2VudDo6ZGVsZXRlQ29va2llKFN0cmluZyosIGNvbnN0IFN0cmluZyYgY29v
a2llTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pCiB7CiAgICAgZm9yIChGcmFtZSogZnJhbWUg
PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLT50cmF2ZXJzZU5leHQobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkpIHsKICAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CkBAIC03OTgsNyArODA2
LDcgQEAgYm9vbCBJbnNwZWN0b3JBZ2VudDo6cHJvZmlsZXJFbmFibGVkKCkgY29uc3QKICAgICBy
ZXR1cm4gZW5hYmxlZCgpICYmIG1fcHJvZmlsZXJBZ2VudC0+ZW5hYmxlZCgpOwogfQogCi12b2lk
IEluc3BlY3RvckFnZW50OjplbmFibGVQcm9maWxlcigpCit2b2lkIEluc3BlY3RvckFnZW50Ojpl
bmFibGVQcm9maWxlcihTdHJpbmcqKQogewogICAgIGlmIChwcm9maWxlckVuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtODA2LDcgKzgxNCw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVu
YWJsZVByb2ZpbGVyKCkKICAgICBtX3Byb2ZpbGVyQWdlbnQtPmVuYWJsZShmYWxzZSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2FibGVQcm9maWxlcigpCit2b2lkIEluc3BlY3RvckFn
ZW50OjpkaXNhYmxlUHJvZmlsZXIoU3RyaW5nKikKIHsKICAgICBtX3N0YXRlLT5zZXRCb29sZWFu
KEluc3BlY3RvckFnZW50U3RhdGU6OnByb2ZpbGVyRW5hYmxlZCwgZmFsc2UpOwogICAgIG1fcHJv
ZmlsZXJBZ2VudC0+ZGlzYWJsZSgpOwpAQCAtODQxLDcgKzg0OSw3IEBAIHZvaWQgSW5zcGVjdG9y
QWdlbnQ6OmVuYWJsZURlYnVnZ2VyKGJvb2wgZXJhc2VTdGlja3lCcmVha3BvaW50cykKICAgICBt
X2Zyb250ZW5kLT5kZWJ1Z2dlcldhc0VuYWJsZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2Vu
dDo6ZGlzYWJsZURlYnVnZ2VyKCkKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2FibGVEZWJ1Z2dl
cihTdHJpbmcqKQogewogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC04
NTQsMTIgKzg2Miw2IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2FibGVEZWJ1Z2dlcigpCiAg
ICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yQWdlbnRTdGF0ZTo6ZGVidWdnZXJF
bmFibGVkLCBmYWxzZSk7CiAgICAgfQogfQotCi12b2lkIEluc3BlY3RvckFnZW50OjpyZXN1bWUo
KQotewotICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpCi0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+
cmVzdW1lKCk7Ci19CiAjZW5kaWYKIAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZXZhbHVhdGVGb3JU
ZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpCkBAIC04NzAs
NyArODcyLDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVu
ZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQKICAgICAgICAgbV9wZW5kaW5nRXZh
bHVhdGVUZXN0Q29tbWFuZHMuYXBwZW5kKHBhaXI8bG9uZywgU3RyaW5nPihjYWxsSWQsIHNjcmlw
dCkpOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjpkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250
ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIGpzb25SZXN1bHQpCit2b2lkIEluc3BlY3Rv
ckFnZW50OjpkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKFN0cmluZyosIGxvbmcgY2FsbElk
LCBjb25zdCBTdHJpbmcmIGpzb25SZXN1bHQpCiB7CiAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlID0gc2NyaXB0U3RhdGVGcm9tUGFnZShkZWJ1Z2dlcldvcmxkKCksIG1faW5zcGVjdGVkUGFn
ZSk7CiAgICAgU2NyaXB0T2JqZWN0IHdpbmRvdzsKQEAgLTExMjUsNyArMTEyNyw3IEBAIHZvaWQg
SW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBiCiAgICAgY29udGV4dC5kcmF3VGV4dChmb250LCBub2RlVGl0bGVS
dW4sIEludFBvaW50KHRpdGxlUmVjdC54KCkgKyByZWN0SW5mbGF0ZVB4LCB0aXRsZVJlY3QueSgp
ICsgZm9udC5mb250TWV0cmljcygpLmhlaWdodCgpKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdl
bnQ6Om9wZW5Jbkluc3BlY3RlZFdpbmRvdyhjb25zdCBTdHJpbmcmIHVybCkKK3ZvaWQgSW5zcGVj
dG9yQWdlbnQ6Om9wZW5Jbkluc3BlY3RlZFdpbmRvdyhTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHVy
bCkKIHsKICAgICBGcmFtZSogbWFpbkZyYW1lID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUo
KTsKIApAQCAtMTE0MywxMiArMTE0NSwxMiBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpvcGVuSW5J
bnNwZWN0ZWRXaW5kb3coY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgbmV3RnJhbWUtPmxvYWRlcigp
LT5jaGFuZ2VMb2NhdGlvbihtYWluRnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCks
IG5ld0ZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwodXJsKSwgIiIsIGZhbHNlLCBmYWxzZSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoY29u
c3QgU3RyaW5nJiBzb3VyY2UpCit2b2lkIEluc3BlY3RvckFnZW50OjphZGRTY3JpcHRUb0V2YWx1
YXRlT25Mb2FkKFN0cmluZyosIGNvbnN0IFN0cmluZyYgc291cmNlKQogewogICAgIG1fc2NyaXB0
c1RvRXZhbHVhdGVPbkxvYWQuYXBwZW5kKHNvdXJjZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdl
bnQ6OnJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkKCkKK3ZvaWQgSW5zcGVjdG9yQWdl
bnQ6OnJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkKFN0cmluZyopCiB7CiAgICAgbV9z
Y3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5jbGVhcigpOwogfQpAQCAtMTE3MCw3ICsxMTcyLDcgQEAg
S1VSTCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdGVkVVJMV2l0aG91dEZyYWdtZW50KCkgY29uc3QK
ICAgICByZXR1cm4gdXJsOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjpyZWxvYWRQYWdlKGJv
b2wgaWdub3JlQ2FjaGUpCit2b2lkIEluc3BlY3RvckFnZW50OjpyZWxvYWRQYWdlKFN0cmluZyos
IGJvb2wgaWdub3JlQ2FjaGUpCiB7CiAgICAgbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+
bG9hZGVyKCktPnJlbG9hZChpZ25vcmVDYWNoZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JBZ2VudC5oCmluZGV4IDc2NGU0YWYuLjBjYmRhMDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oCkBAIC0xMTYsMTkgKzExNiwxOSBAQCBwdWJs
aWM6CiAgICAgUGFnZSogaW5zcGVjdGVkUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdGVk
UGFnZTsgfQogICAgIEtVUkwgaW5zcGVjdGVkVVJMKCkgY29uc3Q7CiAgICAgS1VSTCBpbnNwZWN0
ZWRVUkxXaXRob3V0RnJhZ21lbnQoKSBjb25zdDsKLSAgICB2b2lkIHJlbG9hZFBhZ2UoYm9vbCBp
Z25vcmVDYWNoZSk7CisgICAgdm9pZCByZWxvYWRQYWdlKFN0cmluZyogZXJyb3IsIGJvb2wgaWdu
b3JlQ2FjaGUpOwogICAgIHZvaWQgc2hvd0NvbnNvbGUoKTsKIAogICAgIHZvaWQgcmVzdG9yZUlu
c3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvckNvb2tpZSk7CiAK
LSAgICB2b2lkIGhpZ2hsaWdodChOb2RlKik7Ci0gICAgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7Cisg
ICAgdm9pZCBoaWdobGlnaHQoU3RyaW5nKiBlcnJvciwgTm9kZSopOworICAgIHZvaWQgaGlkZUhp
Z2hsaWdodChTdHJpbmcqIGVycm9yKTsKICAgICB2b2lkIGluc3BlY3QoTm9kZSopOwotICAgIHZv
aWQgaGlnaGxpZ2h0RE9NTm9kZShsb25nIG5vZGVJZCk7Ci0gICAgdm9pZCBoaWRlRE9NTm9kZUhp
Z2hsaWdodCgpIHsgaGlkZUhpZ2hsaWdodCgpOyB9CisgICAgdm9pZCBoaWdobGlnaHRET01Ob2Rl
KFN0cmluZyogZXJyb3IsIGxvbmcgbm9kZUlkKTsKKyAgICB2b2lkIGhpZGVET01Ob2RlSGlnaGxp
Z2h0KFN0cmluZyogZXJyb3IpIHsgaGlkZUhpZ2hsaWdodChlcnJvcik7IH0KIAotICAgIHZvaWQg
aGlnaGxpZ2h0RnJhbWUodW5zaWduZWQgbG9uZyBmcmFtZUlkKTsKLSAgICB2b2lkIGhpZGVGcmFt
ZUhpZ2hsaWdodCgpIHsgaGlkZUhpZ2hsaWdodCgpOyB9CisgICAgdm9pZCBoaWdobGlnaHRGcmFt
ZShTdHJpbmcqIGVycm9yLCB1bnNpZ25lZCBsb25nIGZyYW1lSWQpOworICAgIHZvaWQgaGlkZUZy
YW1lSGlnaGxpZ2h0KFN0cmluZyogZXJyb3IpIHsgaGlkZUhpZ2hsaWdodChlcnJvcik7IH0KIAog
ICAgIHZvaWQgc2V0RnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqKTsKICAgICBJbnNwZWN0b3JG
cm9udGVuZCogZnJvbnRlbmQoKSBjb25zdCB7IHJldHVybiBtX2Zyb250ZW5kOyB9CkBAIC0xNjcs
OCArMTY3LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRDb21taXRMb2FkKERvY3VtZW50TG9h
ZGVyKik7CiAKLSAgICB2b2lkIGdldENvb2tpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogY29v
a2llcywgV1RGOjpTdHJpbmcqIGNvb2tpZXNTdHJpbmcpOwotICAgIHZvaWQgZGVsZXRlQ29va2ll
KGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pOworICAgIHZv
aWQgZ2V0Q29va2llcyhTdHJpbmcqIGVycm9yLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjb29r
aWVzLCBXVEY6OlN0cmluZyogY29va2llc1N0cmluZyk7CisgICAgdm9pZCBkZWxldGVDb29raWUo
U3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIGRv
bWFpbik7CiAKICAgICB2b2lkIGRvbUNvbnRlbnRMb2FkZWRFdmVudEZpcmVkKERvY3VtZW50TG9h
ZGVyKiwgY29uc3QgS1VSTCYpOwogICAgIHZvaWQgbG9hZEV2ZW50RmlyZWQoRG9jdW1lbnRMb2Fk
ZXIqLCBjb25zdCBLVVJMJik7CkBAIC0xOTEsMzIgKzE5MSwzMSBAQCBwdWJsaWM6CiAgICAgYm9v
bCBoYXNGcm9udGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbnRlbmQ7IH0KIAogICAgIHZvaWQg
ZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0gICAgdm9pZCBvcGVu
SW5JbnNwZWN0ZWRXaW5kb3coY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgb3BlbkluSW5z
cGVjdGVkV2luZG93KFN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICB2b2lk
IGRyYXdFbGVtZW50VGl0bGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgYm91bmRp
bmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgb3ZlcmxheVJlY3QsIFdlYkNvcmU6OlNldHRpbmdzKikg
Y29uc3Q7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBib29sIGlzUmVj
b3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUoKSBjb25zdDsKLSAgICB2b2lkIHN0YXJ0UHJvZmls
aW5nKCkgeyBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsgfQorICAgIHZvaWQgc3RhcnRQ
cm9maWxpbmcoU3RyaW5nKikgeyBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsgfQogICAg
IHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7Ci0gICAgdm9pZCBzdG9wUHJvZmls
aW5nKCkgeyBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOyB9CisgICAgdm9pZCBzdG9wUHJv
ZmlsaW5nKFN0cmluZyopIHsgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsgfQogICAgIHZv
aWQgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKLSAgICB2b2lkIGVuYWJsZVByb2ZpbGVy
KCk7Ci0gICAgdm9pZCBkaXNhYmxlUHJvZmlsZXIoKTsKKyAgICB2b2lkIGVuYWJsZVByb2ZpbGVy
KFN0cmluZyogZXJyb3IpOworICAgIHZvaWQgZGlzYWJsZVByb2ZpbGVyKFN0cmluZyogZXJyb3Ip
OwogICAgIGJvb2wgcHJvZmlsZXJFbmFibGVkKCkgY29uc3Q7CiAKICAgICB2b2lkIHN0YXJ0VXNl
ckluaXRpYXRlZERlYnVnZ2luZygpOwotICAgIHZvaWQgZW5hYmxlRGVidWdnZXIoKSB7IGVuYWJs
ZURlYnVnZ2VyKGZhbHNlKTsgfQorICAgIHZvaWQgZW5hYmxlRGVidWdnZXIoU3RyaW5nKikgeyBl
bmFibGVEZWJ1Z2dlcihmYWxzZSk7IH0KICAgICB2b2lkIGVuYWJsZURlYnVnZ2VyKGJvb2wgZXJh
c2VTdGlja3lCcmVha3BvaW50cyk7Ci0gICAgdm9pZCBkaXNhYmxlRGVidWdnZXIoKTsKKyAgICB2
b2lkIGRpc2FibGVEZWJ1Z2dlcihTdHJpbmcqIGVycm9yKTsKICAgICBib29sIGRlYnVnZ2VyRW5h
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJBZ2VudDsgfQotICAgIHZvaWQgcmVzdW1l
KCk7CiAjZW5kaWYKIAogICAgIC8vIEdlbmVyaWMgY29kZSBjYWxsZWQgZnJvbSBjdXN0b20gaW1w
bGVtZW50YXRpb25zLgogICAgIHZvaWQgZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIHRl
c3RDYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKIAotICAgIHZvaWQgYWRkU2NyaXB0VG9F
dmFsdWF0ZU9uTG9hZChjb25zdCBTdHJpbmcmIHNvdXJjZSk7Ci0gICAgdm9pZCByZW1vdmVBbGxT
Y3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpOworICAgIHZvaWQgYWRkU2NyaXB0VG9FdmFsdWF0ZU9u
TG9hZChTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHNvdXJjZSk7CisgICAgdm9pZCByZW1v
dmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZChTdHJpbmcqIGVycm9yKTsKICAgICB2b2lkIHNl
dEluc3BlY3RvckV4dGVuc2lvbkFQSShjb25zdCBTdHJpbmcmIHNvdXJjZSk7CiAKICAgICBJbnNw
ZWN0b3JTdGF0ZSogc3RhdGUoKSB7IHJldHVybiBtX3N0YXRlLmdldCgpOyB9CkBAIC0yMjQsMTIg
KzIyMywxMiBAQCBwdWJsaWM6CiAgICAgLy8gSW5zcGVjdG9yQWdlbnQgQVBJCiAgICAgdm9pZCBn
ZXRJbnNwZWN0b3JTdGF0ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc3RhdGUpOwogICAgIHZv
aWQgc2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSk7
Ci0gICAgdm9pZCBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKKyAgICB2b2lkIHBvcHVsYXRlU2Ny
aXB0T2JqZWN0cyhTdHJpbmcqIGVycm9yKTsKICAgICAvLyBGb2xsb3dpbmcgYXJlIHVzZWQgZnJv
bSBJbnNwZWN0b3JCYWNrZW5kIGFuZCBpbnRlcm5hbGx5LgotICAgIHZvaWQgc2V0U2VhcmNoaW5n
Rm9yTm9kZShib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKTsKLSAgICB2b2lkIGRpZEV2YWx1
YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYganNvblJlc3Vs
dCk7CisgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKFN0cmluZyogZXJyb3IsIGJvb2wgZW5h
YmxlZCwgYm9vbCogbmV3U3RhdGUpOworICAgIHZvaWQgZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9u
dGVuZChTdHJpbmcqIGVycm9yLCBsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBqc29uUmVzdWx0
KTsKIAotICAgIHZvaWQgc2V0VXNlckFnZW50T3ZlcnJpZGUoY29uc3QgU3RyaW5nJiB1c2VyQWdl
bnQpOworICAgIHZvaWQgc2V0VXNlckFnZW50T3ZlcnJpZGUoU3RyaW5nKiBlcnJvciwgY29uc3Qg
U3RyaW5nJiB1c2VyQWdlbnQpOwogICAgIHZvaWQgYXBwbHlVc2VyQWdlbnRPdmVycmlkZShTdHJp
bmcqIHVzZXJBZ2VudCkgY29uc3Q7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCmlu
ZGV4IGIzOGJiODMuLmNjN2ZkMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCkBAIC02NCw3ICs2
NCw3IEBAIHZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpuZXR3b3JrU3RhdGVD
aGFuZ2VkKCkKICAgICBtX2Zyb250ZW5kLT51cGRhdGVOZXR3b3JrU3RhdGUoaXNOb3dPbmxpbmUp
OwogfQogCi12b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0QXBwbGljYXRp
b25DYWNoZXMoUmVmUHRyPEluc3BlY3RvclZhbHVlPiogYXBwbGljYXRpb25DYWNoZXMpCit2b2lk
IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0QXBwbGljYXRpb25DYWNoZXMoU3Ry
aW5nKiwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogYXBwbGljYXRpb25DYWNoZXMpCiB7CiAgICAg
aWYgKG1fZG9jdW1lbnRMb2FkZXIpIHsKICAgICAgICAgQXBwbGljYXRpb25DYWNoZUhvc3QqIGhv
c3QgPSBtX2RvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5oCmluZGV4IDMzY2VlNTkuLjkzMzZiMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKQEAgLTU1
LDcgKzU1LDcgQEAgcHVibGljOgogICAgIHZvaWQgbmV0d29ya1N0YXRlQ2hhbmdlZCgpOwogCiAg
ICAgLy8gRnJvbSBGcm9udGVuZAotICAgIHZvaWQgZ2V0QXBwbGljYXRpb25DYWNoZXMoUmVmUHRy
PEluc3BlY3RvclZhbHVlPiogYXBwbGljYXRpb25DYWNoZXMpOworICAgIHZvaWQgZ2V0QXBwbGlj
YXRpb25DYWNoZXMoU3RyaW5nKiBlcnJvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogYXBwbGlj
YXRpb25DYWNoZXMpOwogCiBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGUoY29uc3QgQXBwbGljYXRpb25DYWNoZUhv
c3Q6OlJlc291cmNlSW5mb0xpc3QmLCBjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q2FjaGVJ
bmZvJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJv
d3NlckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcAppbmRleCA1ZmU5OTM3Li44MTU3NTEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVi
dWdnZXJBZ2VudC5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JET01B
Z2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JTdGF0ZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIHsKQEAgLTgyLDcgKzgzLDcgQEAgSW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6On5JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2Vu
dCgpCiB7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnNldEFsbEJy
b3dzZXJCcmVha3BvaW50cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHMp
Cit2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRBbGxCcm93c2VyQnJlYWtw
b2ludHMoU3RyaW5nKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzKQog
ewogICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPnNldE9iamVjdChCcm93c2VyRGVidWdn
ZXJBZ2VudFN0YXRlOjpicm93c2VyQnJlYWtwb2ludHMsIGJyZWFrcG9pbnRzKTsKICAgICBpbnNw
ZWN0ZWRVUkxDaGFuZ2VkKG1faW5zcGVjdG9yQWdlbnQtPmluc3BlY3RlZFVSTFdpdGhvdXRGcmFn
bWVudCgpKTsKQEAgLTExNiwyMCArMTE3LDIxIEBAIHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVn
Z2VyQWdlbnQ6OnJlc3RvcmVTdGlja3lCcmVha3BvaW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yCiAg
ICAgaWYgKCFjb25kaXRpb24pCiAgICAgICAgIHJldHVybjsKIAorICAgIFN0cmluZyBlcnJvcjsK
ICAgICBpZiAodHlwZSA9PSBldmVudExpc3RlbmVyTmF0aXZlQnJlYWtwb2ludFR5cGUpIHsKICAg
ICAgICAgaWYgKCFlbmFibGVkKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBTdHJpbmcg
ZXZlbnROYW1lOwogICAgICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJldmVudE5hbWUi
LCAmZXZlbnROYW1lKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc2V0RXZlbnRMaXN0
ZW5lckJyZWFrcG9pbnQoZXZlbnROYW1lKTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckJyZWFr
cG9pbnQoJmVycm9yLCBldmVudE5hbWUpOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSB4aHJOYXRp
dmVCcmVha3BvaW50VHlwZSkgewogICAgICAgICBpZiAoIWVuYWJsZWQpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIFN0cmluZyB1cmw7CiAgICAgICAgIGlmICghY29uZGl0aW9uLT5nZXRT
dHJpbmcoInVybCIsICZ1cmwpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzZXRYSFJC
cmVha3BvaW50KHVybCk7CisgICAgICAgIHNldFhIUkJyZWFrcG9pbnQoJmVycm9yLCB1cmwpOwog
ICAgIH0KIH0KIApAQCAtMTM4LDEyICsxNDAsMTIgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVi
dWdnZXJBZ2VudDo6ZGlzY2FyZEJpbmRpbmdzKCkKICAgICBtX2RvbUJyZWFrcG9pbnRzLmNsZWFy
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnNldEV2ZW50TGlz
dGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQordm9pZCBJbnNwZWN0b3JC
cm93c2VyRGVidWdnZXJBZ2VudDo6c2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2lu
dHMuYWRkKGV2ZW50TmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1l
KQordm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVtb3ZlRXZlbnRMaXN0ZW5l
ckJyZWFrcG9pbnQoU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgbV9l
dmVudExpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKGV2ZW50TmFtZSk7CiB9CkBAIC0xNzYsNyAr
MTc4LDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6ZGlkUmVtb3ZlRE9N
Tm9kZShOb2RlKiBub2RlKQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdn
ZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKQordm9pZCBJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChTdHJpbmcqLCBs
b25nIG5vZGVJZCwgbG9uZyB0eXBlKQogewogICAgIE5vZGUqIG5vZGUgPSBtX2luc3BlY3RvckFn
ZW50LT5kb21BZ2VudCgpLT5ub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBAIC0x
OTAsNyArMTkyLDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6c2V0RE9N
QnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKQogICAgIH0KIH0KIAotdm9pZCBJbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChsb25nIG5vZGVJ
ZCwgbG9uZyB0eXBlKQordm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVtb3Zl
RE9NQnJlYWtwb2ludChTdHJpbmcqLCBsb25nIG5vZGVJZCwgbG9uZyB0eXBlKQogewogICAgIE5v
ZGUqIG5vZGUgPSBtX2luc3BlY3RvckFnZW50LT5kb21BZ2VudCgpLT5ub2RlRm9ySWQobm9kZUlk
KTsKICAgICBpZiAoIW5vZGUpCkBAIC0zMzEsNyArMzMzLDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudDo6cGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoY29uc3QgU3RyaW5n
JiBjYXQKICAgICAgICAgZGVidWdnZXJBZ2VudC0+c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVu
dChOYXRpdmVCcmVha3BvaW50RGVidWdnZXJFdmVudFR5cGUsIGV2ZW50RGF0YS5yZWxlYXNlKCkp
OwogfQogCi12b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRYSFJCcmVha3Bv
aW50KGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2Vu
dDo6c2V0WEhSQnJlYWtwb2ludChTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBp
ZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJM
ID0gdHJ1ZTsKQEAgLTMzOSw3ICszNDEsNyBAQCB2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dl
ckFnZW50OjpzZXRYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKQogICAgICAgICBtX1hI
UkJyZWFrcG9pbnRzLmFkZCh1cmwpOwogfQogCi12b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dl
ckFnZW50OjpyZW1vdmVYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBJbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVtb3ZlWEhSQnJlYWtwb2ludChTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgbV9o
YXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oCmluZGV4
IGZhYzU0YmIuLjYxNWFhM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oCkBAIC00NSw2ICs0NSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEluc3BlY3RvckFnZW50
OworY2xhc3MgSW5zcGVjdG9yQXJyYXk7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CiBjbGFzcyBO
b2RlOwogCkBAIC01NSwxNiArNTYsMTYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+SW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoKTsKIAotICAgIHZvaWQgc2V0QWxsQnJvd3NlckJyZWFr
cG9pbnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pik7CisgICAgdm9pZCBzZXRBbGxCcm93
c2VyQnJlYWtwb2ludHMoU3RyaW5nKiBlcnJvciwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KTsKICAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmwpOwogCiAg
ICAgLy8gQnJvd3NlckRlYnVnZ2VyIEFQSSBmb3IgSW5zcGVjdG9yRnJvbnRlbmQKLSAgICB2b2lk
IHNldFhIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgcmVtb3ZlWEhS
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBzZXRFdmVudExpc3RlbmVy
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSk7Ci0gICAgdm9pZCByZW1vdmVFdmVu
dExpc3RlbmVyQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSk7Ci0gICAgdm9pZCBz
ZXRET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpOwotICAgIHZvaWQgcmVtb3Zl
RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKTsKKyAgICB2b2lkIHNldFhIUkJy
ZWFrcG9pbnQoU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgcmVt
b3ZlWEhSQnJlYWtwb2ludChTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHVybCk7CisgICAg
dm9pZCBzZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludChTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJp
bmcmIGV2ZW50TmFtZSk7CisgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludChT
dHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSk7CisgICAgdm9pZCBzZXRET01C
cmVha3BvaW50KFN0cmluZyogZXJyb3IsIGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpOworICAgIHZv
aWQgcmVtb3ZlRE9NQnJlYWtwb2ludChTdHJpbmcqIGVycm9yLCBsb25nIG5vZGVJZCwgbG9uZyB0
eXBlKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbiBBUEkKICAgICB2b2lkIHdp
bGxJbnNlcnRET01Ob2RlKE5vZGUqLCBOb2RlKiBwYXJlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggMzNkNDg1Yy4uMzIxZDhiZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBA
IC0xNjcsNyArMTY3LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQogICAgIG1f
ZG9jdW1lbnRUb0luc3BlY3RvclN0eWxlU2hlZXQuY2xlYXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6Z2V0U3R5bGVzRm9yTm9kZShsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiogcmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVzRm9yTm9k
ZShTdHJpbmcqLCBsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQog
ewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQobm9kZUlkKTsKICAgICBpZiAo
IWVsZW1lbnQpCkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
U3R5bGVzRm9yTm9kZShsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmUKICAg
ICAqcmVzdWx0ID0gcmVzdWx0T2JqZWN0LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6Z2V0SW5saW5lU3R5bGVGb3JOb2RlKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiBzdHlsZSkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxl
Rm9yTm9kZShTdHJpbmcqLCBsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5
bGUpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChub2RlSWQpOwogICAg
IGlmICghZWxlbWVudCkKQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpnZXRJbmxpbmVTdHlsZUZvck5vZGUobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZQogICAgICpzdHlsZSA9IHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoZWxlbWVudC0+
c3R5bGUoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVG
b3JOb2RlKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZSkKK3ZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKFN0cmluZyosIGxvbmcg
bm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZSkKIHsKICAgICBFbGVtZW50KiBl
bGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQpAQCAtMjQ2
LDcgKzI0Niw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JO
b2RlKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsCiAgICAgKnN0eWxlID0gaW5zcGVj
dG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6Z2V0QWxsU3R5bGVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlcykKK3ZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlcyhTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBzdHlsZXMpCiB7CiAgICAgVmVjdG9yPERvY3VtZW50Kj4gZG9jdW1lbnRzID0gbV9k
b21BZ2VudC0+ZG9jdW1lbnRzKCk7CiAgICAgZm9yIChWZWN0b3I8RG9jdW1lbnQqPjo6aXRlcmF0
b3IgaXQgPSBkb2N1bWVudHMuYmVnaW4oKTsgaXQgIT0gZG9jdW1lbnRzLmVuZCgpOyArK2l0KSB7
CkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0QWxsU3R5bGVz
KFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlcykKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlU2hlZXRPYmplY3QpCit2b2lkIEluc3BlY3RvckNT
U0FnZW50OjpnZXRTdHlsZVNoZWV0KFN0cmluZyosIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElk
LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZVNoZWV0T2JqZWN0KQogewogICAgIEluc3Bl
Y3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoc3R5
bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCkBAIC0yNzAsNyArMjcw
LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldChjb25zdCBTdHJpbmcm
IHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3QKICAgICAqc3R5bGVTaGVldE9iamVjdCA9IGlu
c3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpOwogfQogCi12b2lk
IEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0VGV4dChjb25zdCBTdHJpbmcmIHN0eWxl
U2hlZXRJZCwgU3RyaW5nKiB1cmwsIFN0cmluZyogcmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6Z2V0U3R5bGVTaGVldFRleHQoU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0
SWQsIFN0cmluZyogdXJsLCBTdHJpbmcqIHJlc3VsdCkKIHsKICAgICBJbnNwZWN0b3JTdHlsZVNo
ZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gc3R5bGVTaGVldEZvcklkKHN0eWxlU2hlZXRJZCk7
CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQpAQCAtMjc5LDcgKzI3OSw3IEBAIHZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXRUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVT
aGVldElkLCBTdHJpbmcqIHVyCiAgICAgaW5zcGVjdG9yU3R5bGVTaGVldC0+dGV4dChyZXN1bHQp
OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVNoZWV0VGV4dChjb25zdCBT
dHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sKiBzdWNjZXNzKQor
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQoU3RyaW5nKiwgY29uc3Qg
U3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCogc3VjY2VzcykK
IHsKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gc3R5bGVT
aGVldEZvcklkKHN0eWxlU2hlZXRJZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KSB7
CkBAIC0yOTIsNyArMjkyLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVTaGVl
dFRleHQoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmkKICAgICAgICAgaW5z
cGVjdG9yU3R5bGVTaGVldC0+cmVwYXJzZVN0eWxlU2hlZXQodGV4dCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4dChjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgZnVsbFN0eWxlSWQsIGxvbmcgcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQordm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVydHlUZXh0KFN0cmluZyosIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBmdWxsU3R5bGVJZCwgbG9uZyBwcm9wZXJ0eUluZGV4LCBjb25zdCBT
dHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1
bHQpCiB7CiAgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxsU3R5bGVJZCk7CiAgICAg
QVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVydHlUZXh0KGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiBmdWxsU3R5bGUKICAgICAgICAgKnJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQt
PmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChjb21w
b3VuZElkKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5KGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBmdWxsU3R5bGVJZCwgbG9uZyBwcm9wZXJ0eUlu
ZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKK3ZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5KFN0cmluZyosIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBmdWxsU3R5bGVJZCwgbG9uZyBwcm9wZXJ0eUluZGV4LCBib29sIGRp
c2FibGUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsKICAgICBJbnNwZWN0b3JD
U1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlkKTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNF
bXB0eSgpKTsKQEAgLTMyMCw3ICszMjAsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dn
bGVQcm9wZXJ0eShjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFN0eWxlSQogICAg
ICAgICAqcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShp
bnNwZWN0b3JTdHlsZVNoZWV0LT5zdHlsZUZvcklkKGNvbXBvdW5kSWQpKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yKGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiBmdWxsUnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiByZXN1bHQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0
b3IoU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxSdWxlSWQsIGNv
bnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsK
ICAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxSdWxlSWQpOwogICAgIEFTU0VSVCgh
Y29tcG91bmRJZC5pc0VtcHR5KCkpOwpAQCAtMzM2LDcgKzMzNiw3IEBAIHZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3Rvcihjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYg
ZnVsbFJ1bGVJCiAgICAgKnJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0
Rm9yUnVsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5ydWxlRm9ySWQoY29tcG91bmRJZCkpOwogfQog
Ci12b2lkIEluc3BlY3RvckNTU0FnZW50OjphZGRSdWxlKGNvbnN0IGxvbmcgY29udGV4dE5vZGVJ
ZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0
KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShTdHJpbmcqLCBjb25zdCBsb25nIGNv
bnRleHROb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIHJlc3VsdCkKIHsKICAgICBOb2RlKiBub2RlID0gbV9kb21BZ2VudC0+bm9kZUZvcklkKGNv
bnRleHROb2RlSWQpOwogICAgIGlmICghbm9kZSkKQEAgLTM1Miw3ICszNTIsNyBAQCB2b2lkIElu
c3BlY3RvckNTU0FnZW50OjphZGRSdWxlKGNvbnN0IGxvbmcgY29udGV4dE5vZGVJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvcgogICAgICpyZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWls
ZE9iamVjdEZvclJ1bGUobmV3UnVsZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogY3NzUHJvcGVy
dGllcykKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMo
U3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogY3NzUHJvcGVydGllcykKIHsKICAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCkBAIC0z
NjEsNyArMzYxLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJv
cGVydGllcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjc3NQcm8KICAgICAqY3NzUHJvcGVydGll
cyA9IHByb3BlcnRpZXMucmVsZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpx
dWVyeVNlbGVjdG9yQWxsKGNvbnN0IGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9y
LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpxdWVyeVNlbGVjdG9yQWxsKFN0cmluZyosIGNvbnN0IGxvbmcgbm9kZUlkLCBjb25zdCBTdHJp
bmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQpCiB7CiAgICAgTm9k
ZSogbm9kZSA9IG1fZG9tQWdlbnQtPm5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXggM2Yx
ZWVjNS4uYTIwYzU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmgKQEAgLTU5LDE5ICs1OSwxOSBAQCBwdWJsaWM6CiAgICAgfkluc3BlY3RvckNTU0Fn
ZW50KCk7CiAKICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgdm9pZCBnZXRTdHlsZXNGb3JOb2RlKGxv
bmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwotICAgIHZvaWQgZ2V0
SW5saW5lU3R5bGVGb3JOb2RlKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBz
dHlsZSk7Ci0gICAgdm9pZCBnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShsb25nIG5vZGVJZCwgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGUpOwotICAgIHZvaWQgZ2V0QWxsU3R5bGVzKFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlcyk7Ci0gICAgdm9pZCBnZXRTdHlsZVNoZWV0KGNvbnN0
IFN0cmluZyYgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwot
ICAgIHZvaWQgZ2V0U3R5bGVTaGVldFRleHQoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFN0
cmluZyogdXJsLCBTdHJpbmcqIHJlc3VsdCk7Ci0gICAgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dChj
b25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sKiBzdWNj
ZXNzKTsKLSAgICB2b2lkIHNldFByb3BlcnR5VGV4dChjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYgc3R5bGVJZCwgbG9uZyBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJv
b2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwotICAgIHZvaWQg
dG9nZ2xlUHJvcGVydHkoY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHN0eWxlSWQsIGxv
bmcgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBy
ZXN1bHQpOwotICAgIHZvaWQgc2V0UnVsZVNlbGVjdG9yKGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4qIHJlc3VsdCk7Ci0gICAgdm9pZCBhZGRSdWxlKGNvbnN0IGxvbmcgY29udGV4dE5vZGVJ
ZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0
KTsKLSAgICB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFy
cmF5PiogcmVzdWx0KTsKLSAgICB2b2lkIHF1ZXJ5U2VsZWN0b3JBbGwoY29uc3QgbG9uZyBub2Rl
SWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3Vs
dCk7CisgICAgdm9pZCBnZXRTdHlsZXNGb3JOb2RlKFN0cmluZyogZXJyb3IsIGxvbmcgbm9kZUlk
LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgZ2V0SW5saW5lU3R5
bGVGb3JOb2RlKFN0cmluZyogZXJyb3IsIGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiBzdHlsZSk7CisgICAgdm9pZCBnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShTdHJpbmcqIGVy
cm9yLCBsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGUpOworICAgIHZv
aWQgZ2V0QWxsU3R5bGVzKFN0cmluZyogZXJyb3IsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0
eWxlcyk7CisgICAgdm9pZCBnZXRTdHlsZVNoZWV0KFN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmlu
ZyYgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZv
aWQgZ2V0U3R5bGVTaGVldFRleHQoU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzdHlsZVNo
ZWV0SWQsIFN0cmluZyogdXJsLCBTdHJpbmcqIHJlc3VsdCk7CisgICAgdm9pZCBzZXRTdHlsZVNo
ZWV0VGV4dChTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBib29sKiBzdWNjZXNzKTsKKyAgICB2b2lkIHNldFByb3BlcnR5VGV4dChT
dHJpbmcqIGVycm9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgc3R5bGVJZCwgbG9u
ZyBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgdG9nZ2xlUHJvcGVydHkoU3Ry
aW5nKiBlcnJvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHN0eWxlSWQsIGxvbmcg
cHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1
bHQpOworICAgIHZvaWQgc2V0UnVsZVNlbGVjdG9yKFN0cmluZyogZXJyb3IsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCBhZGRSdWxlKFN0cmluZyogZXJy
b3IsIGNvbnN0IGxvbmcgY29udGV4dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKKyAgICB2b2lkIGdldFN1cHBvcnRlZENTU1By
b3BlcnRpZXMoU3RyaW5nKiBlcnJvciwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KTsK
KyAgICB2b2lkIHF1ZXJ5U2VsZWN0b3JBbGwoU3RyaW5nKiBlcnJvciwgY29uc3QgbG9uZyBub2Rl
SWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3Vs
dCk7CiAKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3Bl
Y3RvclN0eWxlU2hlZXQ+ID4gSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCmluZGV4IDQyYWQy
MzMuLmE0YTQwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb25zb2xlQWdlbnQuY3BwCkBAIC03OCwxMyArNzgsMTMgQEAgSW5zcGVjdG9yQ29uc29sZUFn
ZW50Ojp+SW5zcGVjdG9yQ29uc29sZUFnZW50KCkKICAgICBtX2luc3BlY3RvckRPTUFnZW50ID0g
MDsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldENvbnNvbGVNZXNzYWdlc0Vu
YWJsZWQoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSkKK3ZvaWQgSW5zcGVjdG9yQ29uc29s
ZUFnZW50OjpzZXRDb25zb2xlTWVzc2FnZXNFbmFibGVkKFN0cmluZyosIGJvb2wgZW5hYmxlZCwg
Ym9vbCogbmV3U3RhdGUpCiB7CiAgICAgKm5ld1N0YXRlID0gZW5hYmxlZDsKICAgICBzZXRDb25z
b2xlTWVzc2FnZXNFbmFibGVkKGVuYWJsZWQpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVB
Z2VudDo6Y2xlYXJDb25zb2xlTWVzc2FnZXMoKQordm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6
OmNsZWFyQ29uc29sZU1lc3NhZ2VzKFN0cmluZyopCiB7CiAgICAgbV9jb25zb2xlTWVzc2FnZXMu
Y2xlYXIoKTsKICAgICBtX2V4cGlyZWRDb25zb2xlTWVzc2FnZUNvdW50ID0gMDsKQEAgLTk4LDcg
Kzk4LDggQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNsZWFyQ29uc29sZU1lc3NhZ2Vz
KCkKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnJlc2V0KCkKIHsKLSAgICBjbGVhckNv
bnNvbGVNZXNzYWdlcygpOworICAgIFN0cmluZyBlcnJvcjsKKyAgICBjbGVhckNvbnNvbGVNZXNz
YWdlcygmZXJyb3IpOwogICAgIG1fdGltZXMuY2xlYXIoKTsKICAgICBtX2NvdW50cy5jbGVhcigp
OwogfQpAQCAtMjExLDcgKzIxMiw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkaWRG
YWlsTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291CiAgICAgYWRk
Q29uc29sZU1lc3NhZ2UobmV3IENvbnNvbGVNZXNzYWdlKE90aGVyTWVzc2FnZVNvdXJjZSwgTmV0
d29ya0Vycm9yTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBlcnJvci5m
YWlsaW5nVVJMKCksIGlkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdl
bnQ6OnNldE1vbml0b3JpbmdYSFJFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgSW5zcGVjdG9y
Q29uc29sZUFnZW50OjpzZXRNb25pdG9yaW5nWEhSRW5hYmxlZChTdHJpbmcqLCBib29sIGVuYWJs
ZWQpCiB7CiAgICAgbV9pbnNwZWN0b3JTdGF0ZS0+c2V0Qm9vbGVhbihDb25zb2xlQWdlbnRTdGF0
ZTo6bW9uaXRvcmluZ1hIUiwgZW5hYmxlZCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKaW5kZXggNTY1Zjg3Yi4uNzE2MzRhNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaApA
QCAtNTUsOCArNTUsOCBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQ29uc29sZUFnZW50KEluc3Ry
dW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JBZ2VudCosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0
ZWRTY3JpcHRIb3N0KiwgSW5zcGVjdG9yRE9NQWdlbnQqKTsKICAgICB+SW5zcGVjdG9yQ29uc29s
ZUFnZW50KCk7CiAKLSAgICB2b2lkIHNldENvbnNvbGVNZXNzYWdlc0VuYWJsZWQoYm9vbCBlbmFi
bGVkLCBib29sKiBuZXdTdGF0ZSk7Ci0gICAgdm9pZCBjbGVhckNvbnNvbGVNZXNzYWdlcygpOwor
ICAgIHZvaWQgc2V0Q29uc29sZU1lc3NhZ2VzRW5hYmxlZChTdHJpbmcqIGVycm9yLCBib29sIGVu
YWJsZWQsIGJvb2wqIG5ld1N0YXRlKTsKKyAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKFN0
cmluZyogZXJyb3IpOwogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lkIHNldEZyb250ZW5kKElu
c3BlY3RvckZyb250ZW5kKik7CiAgICAgdm9pZCBjbGVhckZyb250ZW5kKCk7CkBAIC03NSw3ICs3
NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNv
bGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwpOwogICAgIHZvaWQgYWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9D
b25zb2xlKGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0
cmluZyYgc291cmNlVVJMKTsKICNlbmRpZgotICAgIHZvaWQgc2V0TW9uaXRvcmluZ1hIUkVuYWJs
ZWQoYm9vbCBlbmFibGVkKTsKKyAgICB2b2lkIHNldE1vbml0b3JpbmdYSFJFbmFibGVkKFN0cmlu
ZyogZXJyb3IsIGJvb2wgZW5hYmxlZCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRDb25zb2xl
TWVzc2FnZXNFbmFibGVkKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDgwM2QzZGQuLjBjMTEzMWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTg1LDEy
ICs4NSwxNCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXbwogCiB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OnN0YXJ0VGltZWxpbmVQcm9maWxlcigpCiB7Ci0gICAgbV9pbnNwZWN0b3JBZ2VudC0+
dGltZWxpbmVBZ2VudCgpLT5zdGFydCgpOworICAgIFN0cmluZyBlcnJvcjsKKyAgICBtX2luc3Bl
Y3RvckFnZW50LT50aW1lbGluZUFnZW50KCktPnN0YXJ0KCZlcnJvcik7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c3RvcFRpbWVsaW5lUHJvZmlsZXIoKQogewotICAgIG1faW5zcGVj
dG9yQWdlbnQtPnRpbWVsaW5lQWdlbnQoKS0+c3RvcCgpOworICAgIFN0cmluZyBlcnJvcjsKKyAg
ICBtX2luc3BlY3RvckFnZW50LT50aW1lbGluZUFnZW50KCktPnN0b3AoJmVycm9yKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoKQpAQCAtMjA1LDE4ICsy
MDcsMjEgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNwYXRjaE1lc3NhZ2VGcm9tRnJv
bnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmhpZGVIaWdobGlnaHQoKQogewotICAgIG1faW5zcGVjdG9yQWdlbnQtPmhpZGVIaWdobGlnaHQo
KTsKKyAgICBTdHJpbmcgZXJyb3I7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+aGlkZUhpZ2hsaWdo
dCgmZXJyb3IpOwogfQogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVByb2ZpbGVyKCkKIHsKLSAgICBtX2luc3BlY3RvckFn
ZW50LT5lbmFibGVQcm9maWxlcigpOworICAgIFN0cmluZyBlcnJvcjsKKyAgICBtX2luc3BlY3Rv
ckFnZW50LT5lbmFibGVQcm9maWxlcigmZXJyb3IpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRpc2FibGVQcm9maWxlcigpCiB7Ci0gICAgbV9pbnNwZWN0b3JBZ2VudC0+ZGlzYWJs
ZVByb2ZpbGVyKCk7CisgICAgU3RyaW5nIGVycm9yOworICAgIG1faW5zcGVjdG9yQWdlbnQtPmRp
c2FibGVQcm9maWxlcigmZXJyb3IpOwogfQogCiBib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnBy
b2ZpbGVyRW5hYmxlZCgpCkBAIC0yMzksNyArMjQ0LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpzaG93QW5kRW5hYmxlRGVidWdnZXIoKQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmRpc2FibGVEZWJ1Z2dlcigpCiB7Ci0gICAgbV9pbnNwZWN0b3JBZ2VudC0+ZGlzYWJsZURlYnVn
Z2VyKCk7CisgICAgU3RyaW5nIGVycm9yOworICAgIG1faW5zcGVjdG9yQWdlbnQtPmRpc2FibGVE
ZWJ1Z2dlcigmZXJyb3IpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VXNl
ckluaXRpYXRlZFByb2ZpbGluZygpCkBAIC0yNjIsOCArMjY4LDEwIEBAIGJvb2wgSW5zcGVjdG9y
Q29udHJvbGxlcjo6aXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSgpIGNvbnN0CiAKIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdW1lKCkKIHsKLSAgICBpZiAoSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IG1faW5zcGVjdG9yQWdlbnQtPmRlYnVnZ2VyQWdl
bnQoKSkKLSAgICAgICAgZGVidWdnZXJBZ2VudC0+cmVzdW1lKCk7CisgICAgaWYgKEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBtX2luc3BlY3RvckFnZW50LT5kZWJ1Z2dl
ckFnZW50KCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yOworICAgICAgICBkZWJ1Z2dlckFnZW50
LT5yZXN1bWUoJmVycm9yKTsKKyAgICB9CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggY2Y2ZmMxMS4uNGQ1MTdiNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBA
IC0yODcsNyArMjg3LDggQEAgVmVjdG9yPERvY3VtZW50Kj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmRv
Y3VtZW50cygpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc2V0KCkKIHsKLSAgICBzZWFy
Y2hDYW5jZWxlZCgpOworICAgIFN0cmluZyBlcnJvcjsKKyAgICBzZWFyY2hDYW5jZWxlZCgmZXJy
b3IpOwogICAgIGRpc2NhcmRCaW5kaW5ncygpOwogICAgIGlmIChtX3JldmFsaWRhdGVTdHlsZUF0
dHJUYXNrKQogICAgICAgICBtX3JldmFsaWRhdGVTdHlsZUF0dHJUYXNrLT5yZXNldCgpOwpAQCAt
NDE3LDcgKzQxOCw3IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQobG9uZyBp
ZCkKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0Q2hpbGRO
b2Rlcyhsb25nIG5vZGVJZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldENoaWxkTm9kZXMo
U3RyaW5nKiwgbG9uZyBub2RlSWQpCiB7CiAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKG5v
ZGVJZCk7CiB9CkBAIC00NjQsNyArNDY1LDcgQEAgbG9uZyBJbnNwZWN0b3JET01BZ2VudDo6cHVz
aE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKiBub2RlVG9QdXNoKQogICAgIHJldHVybiBtYXAtPmdl
dChub2RlVG9QdXNoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRl
KGxvbmcgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUs
IGJvb2wqIHN1Y2Nlc3MpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGUoU3Ry
aW5nKiwgbG9uZyBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgYm9vbCogc3VjY2VzcykKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKGVsZW1l
bnRJZCk7CiAgICAgaWYgKG5vZGUgJiYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVO
VF9OT0RFKSkgewpAQCAtNDc1LDcgKzQ3Niw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dEF0dHJpYnV0ZShsb25nIGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTCiAg
ICAgfQogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVBdHRyaWJ1dGUobG9uZyBl
bGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogc3VjY2VzcykKK3ZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnJlbW92ZUF0dHJpYnV0ZShTdHJpbmcqIGVycm9yLCBsb25nIGVsZW1lbnRJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBzdWNjZXNzKQogewogICAgIE5vZGUqIG5vZGUg
PSBub2RlRm9ySWQoZWxlbWVudElkKTsKICAgICBpZiAobm9kZSAmJiAobm9kZS0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpFTEVNRU5UX05PREUpKSB7CkBAIC00ODYsNyArNDg3LDcgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6cmVtb3ZlQXR0cmlidXRlKGxvbmcgZWxlbWVudElkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92
ZU5vZGUobG9uZyBub2RlSWQsIGxvbmcqIG91dE5vZGVJZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OnJlbW92ZU5vZGUoU3RyaW5nKiwgbG9uZyBub2RlSWQsIGxvbmcqIG91dE5vZGVJZCkKIHsK
ICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAt
NTA0LDcgKzUwNSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZU5vZGUobG9uZyBu
b2RlSWQsIGxvbmcqIG91dE5vZGVJZCkKICAgICAqb3V0Tm9kZUlkID0gbm9kZUlkOwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50OjpjaGFuZ2VUYWdOYW1lKGxvbmcgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIHRhZ05hbWUsIGxvbmcqIG5ld0lkKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Y2hh
bmdlVGFnTmFtZShTdHJpbmcqLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lLCBs
b25nKiBuZXdJZCkKIHsKICAgICBOb2RlKiBvbGROb2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CiAg
ICAgaWYgKCFvbGROb2RlIHx8ICFvbGROb2RlLT5pc0VsZW1lbnROb2RlKCkpCkBAIC01MzksNyAr
NTQwLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Y2hhbmdlVGFnTmFtZShsb25nIG5vZGVJ
ZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lLCBsb25nKgogICAgICAgICBwdXNoQ2hpbGROb2Rlc1Rv
RnJvbnRlbmQoKm5ld0lkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0T3V0ZXJI
VE1MKGxvbmcgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKQordm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0T3V0ZXJIVE1MKFN0cmluZyosIGxvbmcgbm9kZUlkLCBXVEY6OlN0cmluZyog
b3V0ZXJIVE1MKQogewogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKICAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKQEAgLTU0OCw3ICs1NDksNyBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRlckhUTUwobG9uZyBub2RlSWQsIFdURjo6U3Ry
aW5nKiBvdXRlckhUTUwpCiAgICAgKm91dGVySFRNTCA9IHRvSFRNTEVsZW1lbnQobm9kZSktPm91
dGVySFRNTCgpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRPdXRlckhUTUwobG9u
ZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0ZXJIVE1MLCBsb25nKiBuZXdJZCkKK3ZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRNTChTdHJpbmcqLCBsb25nIG5vZGVJZCwgY29uc3Qg
U3RyaW5nJiBvdXRlckhUTUwsIGxvbmcqIG5ld0lkKQogewogICAgIE5vZGUqIG5vZGUgPSBub2Rl
Rm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkK
QEAgLTU4Niw3ICs1ODcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRPdXRlckhUTUwo
bG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0ZXJIVE1MLCBsb25nKgogICAgICAgICBwdXNo
Q2hpbGROb2Rlc1RvRnJvbnRlbmQoKm5ld0lkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0VGV4dE5vZGVWYWx1ZShsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9v
bCogc3VjY2VzcykKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFRleHROb2RlVmFsdWUoU3Ry
aW5nKiwgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wqIHN1Y2Nlc3MpCiB7
CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmIChub2RlICYmIChu
b2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSkpIHsKQEAgLTU5Nyw3ICs1OTgsNyBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRUZXh0Tm9kZVZhbHVlKGxvbmcgbm9kZUlkLCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBib29sKgogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgbm9kZUlkLCBsb25nKiBvdXROb2Rl
SWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGxpc3RlbmVyc0FycmF5KQordm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKFN0cmluZyosIGxvbmcgbm9kZUlk
LCBsb25nKiBvdXROb2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGxpc3RlbmVyc0FycmF5
KQogewogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKICAgICAqb3V0Tm9kZUlk
ID0gbm9kZUlkOwpAQCAtNjY0LDE0ICs2NjUsMTQgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgbm9kZUlkLCBsb25nKiBvdXROb2RlSWQsIFIK
ICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmFkZEluc3BlY3RlZE5vZGUobG9u
ZyBub2RlSWQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjphZGRJbnNwZWN0ZWROb2RlKFN0cmlu
ZyosIGxvbmcgbm9kZUlkKQogewogICAgIG1faW5zcGVjdGVkTm9kZXMucHJlcGVuZChub2RlSWQp
OwogICAgIHdoaWxlIChtX2luc3BlY3RlZE5vZGVzLnNpemUoKSA+IDUpCiAgICAgICAgIG1faW5z
cGVjdGVkTm9kZXMucmVtb3ZlTGFzdCgpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpw
ZXJmb3JtU2VhcmNoKGNvbnN0IFN0cmluZyYgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgYm9vbCBy
dW5TeW5jaHJvbm91c2x5KQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaChT
dHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGJvb2wg
cnVuU3luY2hyb25vdXNseSkKIHsKICAgICAvLyBGSVhNRTogRmV3IHRoaW5ncyBhcmUgbWlzc2lu
ZyBoZXJlOgogICAgIC8vIDEpIFNlYXJjaCB3b3JrcyB3aXRoIG5vZGUgZ3JhbnVsYXJpdHkgLSBu
dW1iZXIgb2YgbWF0Y2hlcyB3aXRoaW4gbm9kZSBpcyBub3QgY2FsY3VsYXRlZC4KQEAgLTY5OCw3
ICs2OTksNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKGNvbnN0IFN0
cmluZyYgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgYm9vbAogICAgIGVzY2FwZWRUYWdOYW1lUXVl
cnkucmVwbGFjZSgiJyIsICJcXCciKTsKIAogICAgIC8vIENsZWFyIHBlbmRpbmcgam9icy4KLSAg
ICBzZWFyY2hDYW5jZWxlZCgpOworICAgIHNlYXJjaENhbmNlbGVkKGVycm9yKTsKIAogICAgIC8v
IEZpbmQgYWxsIGZyYW1lcywgaWZyYW1lcyBhbmQgb2JqZWN0IGVsZW1lbnRzIHRvIHNlYXJjaCB0
aGVpciBkb2N1bWVudHMuCiAgICAgVmVjdG9yPERvY3VtZW50Kj4gZG9jcyA9IGRvY3VtZW50cygp
OwpAQCAtNzUyLDEzICs3NTMsMTMgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNl
YXJjaChjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGJvb2wKICAgICAgICAg
Zm9yIChEZXF1ZTxNYXRjaEpvYio+OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ01hdGNoSm9icy5i
ZWdpbigpOyBpdCAhPSBtX3BlbmRpbmdNYXRjaEpvYnMuZW5kKCk7ICsraXQpCiAgICAgICAgICAg
ICAoKml0KS0+bWF0Y2gocmVzdWx0Q29sbGVjdG9yKTsKICAgICAgICAgcmVwb3J0Tm9kZXNBc1Nl
YXJjaFJlc3VsdHMocmVzdWx0Q29sbGVjdG9yKTsKLSAgICAgICAgc2VhcmNoQ2FuY2VsZWQoKTsK
KyAgICAgICAgc2VhcmNoQ2FuY2VsZWQoZXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIG1fbWF0Y2hKb2JzVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpzZWFyY2hDYW5jZWxlZCgpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZWFy
Y2hDYW5jZWxlZChTdHJpbmcqKQogewogICAgIGlmIChtX21hdGNoSm9ic1RpbWVyLmlzQWN0aXZl
KCkpCiAgICAgICAgIG1fbWF0Y2hKb2JzVGltZXIuc3RvcCgpOwpAQCAtNzY3LDI4ICs3NjgsMjgg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2VhcmNoQ2FuY2VsZWQoKQogICAgIG1fc2VhcmNo
UmVzdWx0cy5jbGVhcigpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9k
ZShsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQordm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoU3RyaW5nKiwgbG9uZyBub2RlSWQsIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yTm9kZUlkKG5vZGVJZCk7CiAgICAgaWYgKCFpbmplY3Rl
ZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAgICAgICAgIGluamVjdGVkU2NyaXB0LnJlc29sdmVOb2Rl
KG5vZGVJZCwgcmVzdWx0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0Tm9kZVBy
b3BlcnRpZXMobG9uZyBub2RlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRp
ZXNBcnJheSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQordm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0Tm9kZVByb3BlcnRpZXMoU3RyaW5nKiwgbG9uZyBub2RlSWQsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRpZXNBcnJheSwgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiogcmVzdWx0KQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0
ZWRTY3JpcHRGb3JOb2RlSWQobm9kZUlkKTsKICAgICBpZiAoIWluamVjdGVkU2NyaXB0Lmhhc05v
VmFsdWUoKSkKICAgICAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0Tm9kZVByb3BlcnRpZXMobm9kZUlk
LCBwcm9wZXJ0aWVzQXJyYXksIHJlc3VsdCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmdldE5vZGVQcm90b3R5cGVzKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBy
ZXN1bHQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXROb2RlUHJvdG90eXBlcyhTdHJpbmcq
LCBsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQogewogICAgIElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JOb2RlSWQobm9k
ZUlkKTsKICAgICBpZiAoIWluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgaW5q
ZWN0ZWRTY3JpcHQuZ2V0Tm9kZVByb3RvdHlwZXMobm9kZUlkLCByZXN1bHQpOwogfQogCi12b2lk
IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG9iamVjdElkLCBsb25nKiBub2RlSWQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpwdXNoTm9kZVRvRnJvbnRlbmQoU3RyaW5nKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG9iamVjdElkLCBsb25nKiBub2RlSWQpCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRT
Y3JpcHQgPSBtX2luamVjdGVkU2NyaXB0SG9zdC0+aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChv
YmplY3RJZC5nZXQoKSk7CiAgICAgTm9kZSogbm9kZSA9IGluamVjdGVkU2NyaXB0Lm5vZGVGb3JP
YmplY3RJZChvYmplY3RJZCk7CkBAIC0xMTM4LDcgKzExMzksOCBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBJbnNwZWN0b3JET01BZ2VudDo6dG9BcnJheShjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZGF0YQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6b25NYXRjaEpvYnNUaW1lcihUaW1lcjxJ
bnNwZWN0b3JET01BZ2VudD4qKQogewogICAgIGlmICghbV9wZW5kaW5nTWF0Y2hKb2JzLnNpemUo
KSkgewotICAgICAgICBzZWFyY2hDYW5jZWxlZCgpOworICAgICAgICBTdHJpbmcgZXJyb3I7Cisg
ICAgICAgIHNlYXJjaENhbmNlbGVkKCZlcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTExNjQsNyArMTE2Niw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcG9ydE5vZGVz
QXNTZWFyY2hSZXN1bHRzKExpc3RIYXNoU2V0PE5vZGUqPiYgcmVzdWx0Q29sCiAgICAgbV9mcm9u
dGVuZC0+YWRkTm9kZXNUb1NlYXJjaFJlc3VsdChub2RlSWRzLnJlbGVhc2UoKSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNvcHlOb2RlKGxvbmcgbm9kZUlkKQordm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6Y29weU5vZGUoU3RyaW5nKiwgbG9uZyBub2RlSWQpCiB7CiAgICAgTm9kZSog
bm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSkKQEAgLTExNzMsNyArMTE3
NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNvcHlOb2RlKGxvbmcgbm9kZUlkKQogICAg
IFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndyaXRlUGxhaW5UZXh0KG1hcmt1cCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChj
b25zdCBTdHJpbmcmIHBhdGgsIGxvbmcqIG5vZGVJZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHBhdGgsIGxv
bmcqIG5vZGVJZCkKIHsKICAgICBpZiAoTm9kZSogbm9kZSA9IG5vZGVGb3JQYXRoKHBhdGgpKQog
ICAgICAgICAqbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggZmI0OWUxNi4uOGNk
YTkwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgK
QEAgLTEwMCwyMiArMTAwLDIyIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0KCk7CiAKICAgICAv
LyBNZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBmcm9udGVuZCBmb3IgRE9NIG5vZGVzIGluc3BlY3Rp
b24uCi0gICAgdm9pZCBnZXRDaGlsZE5vZGVzKGxvbmcgbm9kZUlkKTsKLSAgICB2b2lkIHNldEF0
dHJpYnV0ZShsb25nIGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBib29sKiBzdWNjZXNzKTsKLSAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZShsb25nIGVs
ZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBzdWNjZXNzKTsKLSAgICB2b2lkIHJl
bW92ZU5vZGUobG9uZyBub2RlSWQsIGxvbmcqIG91dE5vZGVJZCk7Ci0gICAgdm9pZCBjaGFuZ2VU
YWdOYW1lKGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHRhZ05hbWUsIGxvbmcqIG5ld0lkKTsK
LSAgICB2b2lkIGdldE91dGVySFRNTChsb25nIG5vZGVJZCwgV1RGOjpTdHJpbmcqIG91dGVySFRN
TCk7Ci0gICAgdm9pZCBzZXRPdXRlckhUTUwobG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0
ZXJIVE1MLCBsb25nKiBuZXdJZCk7Ci0gICAgdm9pZCBzZXRUZXh0Tm9kZVZhbHVlKGxvbmcgbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sKiBzdWNjZXNzKTsKLSAgICB2b2lkIGdldEV2
ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIG5vZGVJZCwgbG9uZyogb3V0Tm9kZUlkLCBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+KiBsaXN0ZW5lcnNBcnJheSk7Ci0gICAgdm9pZCBhZGRJbnNwZWN0ZWRO
b2RlKGxvbmcgbm9kZUlkKTsKLSAgICB2b2lkIHBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiB3
aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBib29sIHJ1blN5bmNocm9ub3VzbHkpOwotICAgIHZvaWQg
c2VhcmNoQ2FuY2VsZWQoKTsKLSAgICB2b2lkIHJlc29sdmVOb2RlKGxvbmcgbm9kZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwotICAgIHZvaWQgZ2V0Tm9kZVByb3BlcnRpZXMo
bG9uZyBub2RlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRpZXNBcnJheSwg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKLSAgICB2b2lkIGdldE5vZGVQcm90b3R5
cGVzKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwotICAgIHZv
aWQgcHVzaE5vZGVUb0Zyb250ZW5kKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJ
ZCwgbG9uZyogbm9kZUlkKTsKKyAgICB2b2lkIGdldENoaWxkTm9kZXMoU3RyaW5nKiBlcnJvciwg
bG9uZyBub2RlSWQpOworICAgIHZvaWQgc2V0QXR0cmlidXRlKFN0cmluZyogZXJyb3IsIGxvbmcg
ZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wq
IHN1Y2Nlc3MpOworICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlKFN0cmluZyogZXJyb3IsIGxvbmcg
ZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHN1Y2Nlc3MpOworICAgIHZvaWQg
cmVtb3ZlTm9kZShTdHJpbmcqIGVycm9yLCBsb25nIG5vZGVJZCwgbG9uZyogb3V0Tm9kZUlkKTsK
KyAgICB2b2lkIGNoYW5nZVRhZ05hbWUoU3RyaW5nKiBlcnJvciwgbG9uZyBub2RlSWQsIGNvbnN0
IFN0cmluZyYgdGFnTmFtZSwgbG9uZyogbmV3SWQpOworICAgIHZvaWQgZ2V0T3V0ZXJIVE1MKFN0
cmluZyogZXJyb3IsIGxvbmcgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKTsKKyAgICB2
b2lkIHNldE91dGVySFRNTChTdHJpbmcqIGVycm9yLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5n
JiBvdXRlckhUTUwsIGxvbmcqIG5ld0lkKTsKKyAgICB2b2lkIHNldFRleHROb2RlVmFsdWUoU3Ry
aW5nKiBlcnJvciwgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wqIHN1Y2Nl
c3MpOworICAgIHZvaWQgZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKFN0cmluZyogZXJyb3IsIGxv
bmcgbm9kZUlkLCBsb25nKiBvdXROb2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGxpc3Rl
bmVyc0FycmF5KTsKKyAgICB2b2lkIGFkZEluc3BlY3RlZE5vZGUoU3RyaW5nKiBlcnJvciwgbG9u
ZyBub2RlSWQpOworICAgIHZvaWQgcGVyZm9ybVNlYXJjaChTdHJpbmcqIGVycm9yLCBjb25zdCBT
dHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGJvb2wgcnVuU3luY2hyb25vdXNseSk7Cisg
ICAgdm9pZCBzZWFyY2hDYW5jZWxlZChTdHJpbmcqIGVycm9yKTsKKyAgICB2b2lkIHJlc29sdmVO
b2RlKFN0cmluZyogZXJyb3IsIGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBy
ZXN1bHQpOworICAgIHZvaWQgZ2V0Tm9kZVByb3BlcnRpZXMoU3RyaW5nKiBlcnJvciwgbG9uZyBu
b2RlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRpZXNBcnJheSwgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKKyAgICB2b2lkIGdldE5vZGVQcm90b3R5cGVzKFN0
cmluZyogZXJyb3IsIGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQp
OworICAgIHZvaWQgcHVzaE5vZGVUb0Zyb250ZW5kKFN0cmluZyogZXJyb3IsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJZCwgbG9uZyogbm9kZUlkKTsKIAogICAgIC8vIE1ldGhv
ZHMgY2FsbGVkIGZyb20gdGhlIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi4KICAgICB2b2lkIHNl
dERvY3VtZW50KERvY3VtZW50Kik7CkBAIC0xMzMsMTAgKzEzMywxMCBAQCBwdWJsaWM6CiAgICAg
Tm9kZSogbm9kZUZvcklkKGxvbmcgbm9kZUlkKTsKICAgICBsb25nIHB1c2hOb2RlUGF0aFRvRnJv
bnRlbmQoTm9kZSopOwogICAgIHZvaWQgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGxvbmcgbm9k
ZUlkKTsKLSAgICB2b2lkIHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHBh
dGgsIGxvbmcqIG5vZGVJZCk7CisgICAgdm9pZCBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoU3Ry
aW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nKiBub2RlSWQpOwogICAgIHZvaWQg
aW5zcGVjdChOb2RlKik7CiAgICAgbG9uZyBpbnNwZWN0ZWROb2RlKHVuc2lnbmVkIGxvbmcgbnVt
KTsKLSAgICB2b2lkIGNvcHlOb2RlKGxvbmcgbm9kZUlkKTsKKyAgICB2b2lkIGNvcHlOb2RlKFN0
cmluZyogZXJyb3IsIGxvbmcgbm9kZUlkKTsKICAgICB2b2lkIHNldERPTUxpc3RlbmVyKERPTUxp
c3RlbmVyKik7CiAKICAgICBTdHJpbmcgZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1lbnQqKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudC5jcHAKaW5kZXggNWMxODZiOC4uMTc4NzFjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKQEAgLTc5LDcg
Kzc5LDcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNsZWFyRnJvbnRlbmQoKQog
ICAgIG1fZnJvbnRlbmQgPSAwOwogfQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
Z2V0RE9NU3RvcmFnZUVudHJpZXMobG9uZyBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4qIGVudHJpZXMpCit2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFn
ZUVudHJpZXMoU3RyaW5nKiwgbG9uZyBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4q
IGVudHJpZXMpCiB7CiAgICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBzdG9yYWdlUmVz
b3VyY2UgPSBnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZChzdG9yYWdlSWQpOwogICAgIGlmIChz
dG9yYWdlUmVzb3VyY2UpIHsKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VFbnRyaWVzKGxvbmcgc3RvcmFnZUlkLCBSZWZQdHI8SW5z
cGUKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzZXRET01TdG9y
YWdlSXRlbShsb25nIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUsIGJvb2wqIHN1Y2Nlc3MpCit2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0
RE9NU3RvcmFnZUl0ZW0oU3RyaW5nKiwgbG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sKiBzdWNjZXNzKQogewogICAgIEluc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZSogc3RvcmFnZVJlc291cmNlID0gZ2V0RE9NU3RvcmFnZVJlc291cmNl
Rm9ySWQoc3RvcmFnZUlkKTsKICAgICBpZiAoc3RvcmFnZVJlc291cmNlKSB7CkBAIC0xMDYsNyAr
MTA2LDcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVt
KGxvbmcgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGsKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpyZW1vdmVET01TdG9yYWdlSXRlbShsb25nIHN0b3JhZ2VJZCwg
Y29uc3QgU3RyaW5nJiBrZXksIGJvb2wqIHN1Y2Nlc3MpCit2b2lkIEluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oU3RyaW5nKiwgbG9uZyBzdG9yYWdlSWQsIGNv
bnN0IFN0cmluZyYga2V5LCBib29sKiBzdWNjZXNzKQogewogICAgIEluc3BlY3RvckRPTVN0b3Jh
Z2VSZXNvdXJjZSogc3RvcmFnZVJlc291cmNlID0gZ2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQo
c3RvcmFnZUlkKTsKICAgICBpZiAoc3RvcmFnZVJlc291cmNlKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKaW5kZXggODVmYjk1
ZC4uMTdlNTRhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQuaApAQCAtNTcsOSArNTcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
bGVhclJlc291cmNlcygpOwogCiAgICAgLy8gQ2FsbGVkIGZyb20gdGhlIGZyb250LWVuZC4KLSAg
ICB2b2lkIGdldERPTVN0b3JhZ2VFbnRyaWVzKGxvbmcgc3RvcmFnZUlkLCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+KiBlbnRyaWVzKTsKLSAgICB2b2lkIHNldERPTVN0b3JhZ2VJdGVtKGxvbmcgc3Rv
cmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCogc3Vj
Y2Vzcyk7Ci0gICAgdm9pZCByZW1vdmVET01TdG9yYWdlSXRlbShsb25nIHN0b3JhZ2VJZCwgY29u
c3QgU3RyaW5nJiBrZXksIGJvb2wqIHN1Y2Nlc3MpOworICAgIHZvaWQgZ2V0RE9NU3RvcmFnZUVu
dHJpZXMoU3RyaW5nKiBlcnJvciwgbG9uZyBzdG9yYWdlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4qIGVudHJpZXMpOworICAgIHZvaWQgc2V0RE9NU3RvcmFnZUl0ZW0oU3RyaW5nKiBlcnJvciwg
bG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBi
b29sKiBzdWNjZXNzKTsKKyAgICB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJdGVtKFN0cmluZyogZXJy
b3IsIGxvbmcgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgYm9vbCogc3VjY2Vzcyk7CiAK
ICAgICAvLyBDYWxsZWQgZnJvbSB0aGUgaW5qZWN0ZWQgc2NyaXB0LgogICAgIHZvaWQgc2VsZWN0
RE9NU3RvcmFnZShTdG9yYWdlKiBzdG9yYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcAppbmRleCAzN2ZmMGFlLi5jZTY1Y2M3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNl
QWdlbnQuY3BwCkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50
OjpjbGVhckZyb250ZW5kKCkKICAgICBtX2Zyb250ZW5kUHJvdmlkZXIuY2xlYXIoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpnZXREYXRhYmFzZVRhYmxlTmFtZXMobG9uZyBk
YXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBuYW1lcykKK3ZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudDo6Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKFN0cmluZyosIGxvbmcgZGF0YWJh
c2VJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogbmFtZXMpCiB7CiAgICAgRGF0YWJhc2UqIGRh
dGFiYXNlID0gZGF0YWJhc2VGb3JJZChkYXRhYmFzZUlkKTsKICAgICBpZiAoZGF0YWJhc2UpIHsK
QEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmdldERhdGFi
YXNlVGFibGVOYW1lcyhsb25nIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZQogICAgIH0KIH0KIAot
dm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpleGVjdXRlU1FMKGxvbmcgZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCogc3VjY2VzcywgbG9uZyogdHJhbnNhY3Rpb25JZCkK
K3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZXhlY3V0ZVNRTChTdHJpbmcqLCBsb25nIGRh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wqIHN1Y2Nlc3MsIGxvbmcqIHRyYW5z
YWN0aW9uSWQpCiB7CiAgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gZGF0YWJhc2VGb3JJZChkYXRh
YmFzZUlkKTsKICAgICBpZiAoIWRhdGFiYXNlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaAppbmRleCBkZmIwNTEwLi4xZTc2NzBlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50
LmgKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJSZXNvdXJjZXMoKTsK
IAogICAgIC8vIENhbGxlZCBmcm9tIHRoZSBmcm9udC1lbmQuCi0gICAgdm9pZCBnZXREYXRhYmFz
ZVRhYmxlTmFtZXMobG9uZyBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBuYW1l
cyk7Ci0gICAgdm9pZCBleGVjdXRlU1FMKGxvbmcgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgYm9vbCogc3VjY2VzcywgbG9uZyogdHJhbnNhY3Rpb25JZCk7CisgICAgdm9pZCBnZXRE
YXRhYmFzZVRhYmxlTmFtZXMoU3RyaW5nKiBlcnJvciwgbG9uZyBkYXRhYmFzZUlkLCBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+KiBuYW1lcyk7CisgICAgdm9pZCBleGVjdXRlU1FMKFN0cmluZyogZXJy
b3IsIGxvbmcgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCogc3VjY2Vzcywg
bG9uZyogdHJhbnNhY3Rpb25JZCk7CiAKICAgICAvLyBDYWxsZWQgZnJvbSB0aGUgaW5qZWN0ZWQg
c2NyaXB0LgogICAgIERhdGFiYXNlKiBkYXRhYmFzZUZvcklkKGxvbmcgZGF0YWJhc2VJZCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5j
cHAKaW5kZXggZThiNGFkNS4uM2EwM2RkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtNzIsMTIgKzcyLDEyIEBAIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6On5JbnNwZWN0b3JEZWJ1Z2dlckFnZW50KCkKICAgICBtX3Bh
dXNlZFNjcmlwdFN0YXRlID0gMDsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojph
Y3RpdmF0ZUJyZWFrcG9pbnRzKCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YWN0aXZh
dGVCcmVha3BvaW50cyhTdHJpbmcqKQogewogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQo
KS5hY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6ZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKFN0cmluZyopCiB7CiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6
OnNoYXJlZCgpLmRlYWN0aXZhdGVCcmVha3BvaW50cygpOwogfQpAQCAtODgsNyArODgsNyBAQCB2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3Ry
aW5nJikKICAgICBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmNsZWFy
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0SmF2YVNjcmlwdEJyZWFr
cG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVy
LCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVkLCBTdHJpbmcqIG91dEJyZWFr
cG9pbnRJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogbG9jYXRpb25zKQordm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRKYXZhU2NyaXB0QnJlYWtwb2ludChTdHJpbmcqLCBjb25zdCBT
dHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgY29uZGl0aW9uLCBib29sIGVuYWJsZWQsIFN0cmluZyogb3V0QnJlYWtwb2ludElkLCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBsb2NhdGlvbnMpCiB7CiAgICAgU3RyaW5nIGJyZWFrcG9pbnRJ
ZCA9IG1ha2VTdHJpbmcodXJsLCAiOiIsIFN0cmluZzo6bnVtYmVyKGxpbmVOdW1iZXIpLCAiOiIs
IFN0cmluZzo6bnVtYmVyKGNvbHVtbk51bWJlcikpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGJyZWFrcG9pbnRzQ29va2llID0gbV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+Z2V0T2Jq
ZWN0KERlYnVnZ2VyQWdlbnRTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzKTsKQEAgLTExOSw3
ICsxMTksNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEphdmFTY3JpcHRCcmVh
a3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZQogICAgICpvdXRCcmVha3BvaW50SWQg
PSBicmVha3BvaW50SWQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0SmF2
YVNjcmlwdEJyZWFrcG9pbnRCeVNvdXJjZUlkKGNvbnN0IFN0cmluZyYgc291cmNlSWQsIGludCBs
aW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9v
bCBlbmFibGVkLCBTdHJpbmcqIG91dEJyZWFrcG9pbnRJZCwgaW50KiBhY3R1YWxMaW5lTnVtYmVy
LCBpbnQqIGFjdHVhbENvbHVtbk51bWJlcikKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2V0SmF2YVNjcmlwdEJyZWFrcG9pbnRCeVNvdXJjZUlkKFN0cmluZyosIGNvbnN0IFN0cmluZyYg
c291cmNlSWQsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcm
IGNvbmRpdGlvbiwgYm9vbCBlbmFibGVkLCBTdHJpbmcqIG91dEJyZWFrcG9pbnRJZCwgaW50KiBh
Y3R1YWxMaW5lTnVtYmVyLCBpbnQqIGFjdHVhbENvbHVtbk51bWJlcikKIHsKICAgICBTdHJpbmcg
YnJlYWtwb2ludElkID0gbWFrZVN0cmluZyhzb3VyY2VJZCwgIjoiLCBTdHJpbmc6Om51bWJlcihs
aW5lTnVtYmVyKSwgIjoiLCBTdHJpbmc6Om51bWJlcihjb2x1bW5OdW1iZXIpKTsKICAgICBpZiAo
bV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJ
ZCkgIT0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5lbmQoKSkKQEAg
LTEzMCw3ICsxMzAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEphdmFTY3Jp
cHRCcmVha3BvaW50QnlTb3VyY2VJZChjb25zdCBTdHJpbmcmIHNvdQogICAgICpvdXRCcmVha3Bv
aW50SWQgPSBicmVha3BvaW50SWQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
cmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpCit2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUphdmFTY3JpcHRCcmVha3BvaW50KFN0
cmluZyosIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkKQogewogICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJyZWFrcG9pbnRzQ29va2llID0gbV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+
Z2V0T2JqZWN0KERlYnVnZ2VyQWdlbnRTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzKTsKICAg
ICBicmVha3BvaW50c0Nvb2tpZS0+cmVtb3ZlKGJyZWFrcG9pbnRJZCk7CkBAIC0xNDQsNyArMTQ0
LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVKYXZhU2NyaXB0QnJlYWtw
b2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnQKICAgICBtX2JyZWFrcG9pbnRJZFRvRGVidWdT
ZXJ2ZXJCcmVha3BvaW50SWRzLnJlbW92ZShkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRv
cik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9u
KGNvbnN0IFN0cmluZyYgc291cmNlSWQsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVy
KQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oU3RyaW5n
KiBlcnJvciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJZCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1
bW5OdW1iZXIpCiB7CiAgICAgaWYgKCFtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJZC5p
c0VtcHR5KCkpIHsKICAgICAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUJy
ZWFrcG9pbnQobV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SWQpOwpAQCAtMTUyLDcgKzE1
Miw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKGNv
bnN0IFN0cmluZyYgc291cmNlSWQsIGludCBsaW5lCiAgICAgfQogICAgIFNjcmlwdEJyZWFrcG9p
bnQgYnJlYWtwb2ludChsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsICIiLCB0cnVlKTsKICAgICBt
X2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJZCA9IFNjcmlwdERlYnVnU2VydmVyOjpzaGFy
ZWQoKS5zZXRCcmVha3BvaW50KHNvdXJjZUlkLCBicmVha3BvaW50LCAmbGluZU51bWJlciwgJmNv
bHVtbk51bWJlcik7Ci0gICAgcmVzdW1lKCk7CisgICAgcmVzdW1lKGVycm9yKTsKIH0KIAogYm9v
bCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcm
IGJyZWFrcG9pbnRJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJZCwgY29uc3QgU2NyaXB0QnJlYWtw
b2ludCYgYnJlYWtwb2ludCwgaW50KiBhY3R1YWxMaW5lTnVtYmVyLCBpbnQqIGFjdHVhbENvbHVt
bk51bWJlcikKQEAgLTE4NSwxMyArMTg1LDEzIEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6cmVzb2x2ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQsIGNvbnN0CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZWRpdFNj
cmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIG5ld0NvbnRl
bnQsIGJvb2wqIHN1Y2Nlc3MsIFN0cmluZyogcmVzdWx0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KiBuZXdDYWxsRnJhbWVzKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplZGl0U2NyaXB0
U291cmNlKFN0cmluZyosIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgbmV3
Q29udGVudCwgYm9vbCogc3VjY2VzcywgU3RyaW5nKiByZXN1bHQsIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4qIG5ld0NhbGxGcmFtZXMpCiB7CiAgICAgaWYgKCgqc3VjY2VzcyA9IFNjcmlwdERlYnVn
U2VydmVyOjpzaGFyZWQoKS5lZGl0U2NyaXB0U291cmNlKHNvdXJjZUlELCBuZXdDb250ZW50LCAq
cmVzdWx0KSkpCiAgICAgICAgICpuZXdDYWxsRnJhbWVzID0gY3VycmVudENhbGxGcmFtZXMoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgU3RyaW5nKiBzY3JpcHRTb3VyY2UpCit2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUlELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkKIHsKICAgICAqc2NyaXB0U291cmNlID0gbV9zY3Jp
cHRzLmdldChzb3VyY2VJRCkuZGF0YTsKIH0KQEAgLTIxNCw0NiArMjE0LDQ2IEBAIHZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6Y2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKQogICAgIFNj
cmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRQYXVzZU9uTmV4dFN0YXRlbWVudChmYWxzZSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cGF1c2UoKQordm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpwYXVzZShTdHJpbmcqKQogewogICAgIHNjaGVkdWxlUGF1c2VPbk5l
eHRTdGF0ZW1lbnQoSmF2YVNjcmlwdFBhdXNlRXZlbnRUeXBlLCBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpKTsKICAgICBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCA9IHRydWU7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzdW1lKCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6cmVzdW1lKFN0cmluZyopCiB7CiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJl
ZCgpLmNvbnRpbnVlUHJvZ3JhbSgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnN0ZXBPdmVyKCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE92ZXIoU3RyaW5n
KikKIHsKICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc3RlcE92ZXJTdGF0ZW1lbnQo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwSW50bygpCit2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0ZXBJbnRvKFN0cmluZyopCiB7CiAgICAgU2NyaXB0RGVi
dWdTZXJ2ZXI6OnNoYXJlZCgpLnN0ZXBJbnRvU3RhdGVtZW50KCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6c3RlcE91dCgpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnN0ZXBPdXQoU3RyaW5nKikKIHsKICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc3Rl
cE91dE9mRnVuY3Rpb24oKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQ
YXVzZU9uRXhjZXB0aW9uc1N0YXRlKGxvbmcgcGF1c2VTdGF0ZSwgbG9uZyogbmV3U3RhdGUpCit2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoU3Ry
aW5nKiwgbG9uZyBwYXVzZVN0YXRlLCBsb25nKiBuZXdTdGF0ZSkKIHsKICAgICBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkuc2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShzdGF0aWNfY2FzdDxT
Y3JpcHREZWJ1Z1NlcnZlcjo6UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZT4ocGF1c2VTdGF0ZSkpOwog
ICAgICpuZXdTdGF0ZSA9IFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5wYXVzZU9uRXhjZXB0
aW9uc1N0YXRlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVP
bkNhbGxGcmFtZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FsbEZyYW1lSWQsIGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNs
dWRlQ29tbWFuZExpbmVBUEksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKK3ZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShTdHJpbmcqLCBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVz
c2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVB
UEksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsKICAgICBJbmplY3RlZFNjcmlw
dCBpbmplY3RlZFNjcmlwdCA9IG1faW5zcGVjdG9yQWdlbnQtPmluamVjdGVkU2NyaXB0SG9zdCgp
LT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKGNhbGxGcmFtZUlkLmdldCgpKTsKICAgICBpZiAo
IWluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgaW5qZWN0ZWRTY3JpcHQuZXZh
bHVhdGVPbkNhbGxGcmFtZShjYWxsRnJhbWVJZCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgcmVzdWx0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpnZXRDb21wbGV0aW9uc09uQ2FsbEZyYW1lKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBib29sIGluY2x1ZGVD
b21tYW5kTGluZUFQSSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQordm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRDb21wbGV0aW9uc09uQ2FsbEZyYW1lKFN0cmluZyosIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiogcmVzdWx0KQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbnNw
ZWN0b3JBZ2VudC0+aW5qZWN0ZWRTY3JpcHRIb3N0KCktPmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0
SWQoY2FsbEZyYW1lSWQuZ2V0KCkpOwogICAgIGlmICghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1
ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmgKaW5kZXggNjQ0NTU3Zi4uOGUwNWEyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCkBAIC02MywyNyArNjMsMjcgQEAgcHVi
bGljOgogICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybCk7CiAK
ICAgICAvLyBQYXJ0IG9mIHRoZSBwcm90b2NvbC4KLSAgICB2b2lkIGFjdGl2YXRlQnJlYWtwb2lu
dHMoKTsKLSAgICB2b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50cygpOworICAgIHZvaWQgYWN0aXZh
dGVCcmVha3BvaW50cyhTdHJpbmcqIGVycm9yKTsKKyAgICB2b2lkIGRlYWN0aXZhdGVCcmVha3Bv
aW50cyhTdHJpbmcqIGVycm9yKTsKIAotICAgIHZvaWQgc2V0SmF2YVNjcmlwdEJyZWFrcG9pbnQo
Y29uc3QgU3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25z
dCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVkLCBTdHJpbmcqIGJyZWFrcG9pbnRJZCwg
UmVmUHRyPEluc3BlY3RvckFycmF5PiogbG9jYXRpb25zKTsKLSAgICB2b2lkIHNldEphdmFTY3Jp
cHRCcmVha3BvaW50QnlTb3VyY2VJZChjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBpbnQgbGluZU51
bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIGJvb2wgZW5h
YmxlZCwgU3RyaW5nKiBicmVha3BvaW50SWQsIGludCogYWN0dWFsTGluZU51bWJlciwgaW50KiBh
Y3R1YWxDb2x1bW5OdW1iZXIpOwotICAgIHZvaWQgcmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnQo
Y29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpOwotICAgIHZvaWQgY29udGludWVUb0xvY2F0aW9u
KGNvbnN0IFN0cmluZyYgc291cmNlSWQsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVy
KTsKKyAgICB2b2lkIHNldEphdmFTY3JpcHRCcmVha3BvaW50KFN0cmluZyogZXJyb3IsIGNvbnN0
IFN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3Ry
aW5nJiBjb25kaXRpb24sIGJvb2wgZW5hYmxlZCwgU3RyaW5nKiBicmVha3BvaW50SWQsIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qIGxvY2F0aW9ucyk7CisgICAgdm9pZCBzZXRKYXZhU2NyaXB0QnJl
YWtwb2ludEJ5U291cmNlSWQoU3RyaW5nKiBlcnJvciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJZCwg
aW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9u
LCBib29sIGVuYWJsZWQsIFN0cmluZyogYnJlYWtwb2ludElkLCBpbnQqIGFjdHVhbExpbmVOdW1i
ZXIsIGludCogYWN0dWFsQ29sdW1uTnVtYmVyKTsKKyAgICB2b2lkIHJlbW92ZUphdmFTY3JpcHRC
cmVha3BvaW50KFN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkKTsKKyAg
ICB2b2lkIGNvbnRpbnVlVG9Mb2NhdGlvbihTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHNv
dXJjZUlkLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlcik7CiAKLSAgICB2b2lkIGVk
aXRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiBuZXdD
b250ZW50LCBib29sKiBzdWNjZXNzLCBTdHJpbmcqIHJlc3VsdCwgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiogbmV3Q2FsbEZyYW1lcyk7Ci0gICAgdm9pZCBnZXRTY3JpcHRTb3VyY2UoY29uc3QgU3Ry
aW5nJiBzb3VyY2VJRCwgU3RyaW5nKiBzY3JpcHRTb3VyY2UpOworICAgIHZvaWQgZWRpdFNjcmlw
dFNvdXJjZShTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJp
bmcmIG5ld0NvbnRlbnQsIGJvb2wqIHN1Y2Nlc3MsIFN0cmluZyogcmVzdWx0LCBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+KiBuZXdDYWxsRnJhbWVzKTsKKyAgICB2b2lkIGdldFNjcmlwdFNvdXJjZShT
dHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBTdHJpbmcqIHNjcmlwdFNvdXJj
ZSk7CiAgICAgdm9pZCBzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KERlYnVnZ2VyRXZlbnRU
eXBlIHR5cGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGRhdGEpOwogICAgIHZvaWQgY2Fu
Y2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKTsKICAgICB2b2lkIGJyZWFrUHJvZ3JhbShEZWJ1Z2dl
ckV2ZW50VHlwZSB0eXBlLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBkYXRhKTsKLSAgICB2
b2lkIHBhdXNlKCk7Ci0gICAgdm9pZCByZXN1bWUoKTsKLSAgICB2b2lkIHN0ZXBPdmVyKCk7Ci0g
ICAgdm9pZCBzdGVwSW50bygpOwotICAgIHZvaWQgc3RlcE91dCgpOwotICAgIHZvaWQgc2V0UGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZShsb25nIHBhdXNlU3RhdGUsIGxvbmcqIG5ld1N0YXRlKTsKLSAg
ICB2b2lkIGV2YWx1YXRlT25DYWxsRnJhbWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNh
bGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0
R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KiByZXN1bHQpOwotICAgIHZvaWQgZ2V0Q29tcGxldGlvbnNPbkNhbGxGcmFtZShQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwg
Ym9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3Vs
dCk7CisgICAgdm9pZCBwYXVzZShTdHJpbmcqIGVycm9yKTsKKyAgICB2b2lkIHJlc3VtZShTdHJp
bmcqIGVycm9yKTsKKyAgICB2b2lkIHN0ZXBPdmVyKFN0cmluZyogZXJyb3IpOworICAgIHZvaWQg
c3RlcEludG8oU3RyaW5nKiBlcnJvcik7CisgICAgdm9pZCBzdGVwT3V0KFN0cmluZyogZXJyb3Ip
OworICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShTdHJpbmcqIGVycm9yLCBsb25n
IHBhdXNlU3RhdGUsIGxvbmcqIG5ld1N0YXRlKTsKKyAgICB2b2lkIGV2YWx1YXRlT25DYWxsRnJh
bWUoU3RyaW5nKiBlcnJvciwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNhbGxGcmFtZUlk
LCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJv
b2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQp
OworICAgIHZvaWQgZ2V0Q29tcGxldGlvbnNPbkNhbGxGcmFtZShTdHJpbmcqIGVycm9yLCBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVz
c2lvbiwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4q
IHJlc3VsdCk7CiAKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnNwZWN0
b3JBZ2VudCosIEluc3BlY3RvckZyb250ZW5kKiwgYm9vbCBlcmFzZVN0aWNreUJyZWFrcG9pbnRz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxl
ckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFn
ZW50LmNwcAppbmRleCA1NTBmZWJmLi4yY2I1ZWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC0xNTEsNyArMTUxLDcg
QEAgU3RyaW5nIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldEN1cnJlbnRVc2VySW5pdGlhdGVk
UHJvZmlsZU5hbWUoYm9vbCBpbmNyZW1lbnQKICAgICByZXR1cm4gbWFrZVN0cmluZyhVc2VySW5p
dGlhdGVkUHJvZmlsZU5hbWUsICcuJywgU3RyaW5nOjpudW1iZXIobV9jdXJyZW50VXNlckluaXRp
YXRlZFByb2ZpbGVOdW1iZXIpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50Ojpn
ZXRQcm9maWxlSGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKQordm9pZCBJ
bnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlSGVhZGVycyhTdHJpbmcqLCBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKQogewogICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBw
cm9maWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5kKCk7CiAgICAgZm9yIChQcm9maWxlc01hcDo6aXRl
cmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2luKCk7IGl0ICE9IHByb2ZpbGVzRW5kOyArK2l0KQpA
QCAtMTc2LDcgKzE3Niw3IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlCiAKLXZvaWQgSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZShjb25zdCBTdHJpbmcmIHR5cGUsIHVuc2ln
bmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHByb2ZpbGVPYmplY3QpCit2b2lkIElu
c3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGUoU3RyaW5nKiwgY29uc3QgU3RyaW5nJiB0
eXBlLCB1bnNpZ25lZCB1aWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBwcm9maWxlT2JqZWN0
KQogewogICAgIGlmICh0eXBlID09IENQVVByb2ZpbGVUeXBlKSB7CiAgICAgICAgIFByb2ZpbGVz
TWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuZmluZCh1aWQpOwpAQCAtMTk3LDcgKzE5Nyw3
IEBAIHZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZShjb25zdCBTdHJpbmcm
IHR5cGUsIHVuc2lnbmVkIHVpZCwgUmVmUHRyCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvclBy
b2ZpbGVyQWdlbnQ6OnJlbW92ZVByb2ZpbGUoY29uc3QgU3RyaW5nJiB0eXBlLCB1bnNpZ25lZCB1
aWQpCit2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnJlbW92ZVByb2ZpbGUoU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiB0eXBlLCB1bnNpZ25lZCB1aWQpCiB7CiAgICAgaWYgKHR5cGUgPT0gQ1BV
UHJvZmlsZVR5cGUpIHsKICAgICAgICAgaWYgKG1fcHJvZmlsZXMuY29udGFpbnModWlkKSkKQEAg
LTI5Myw3ICsyOTMsNyBAQCBwcml2YXRlOgogCiB9OwogCi12b2lkIEluc3BlY3RvclByb2ZpbGVy
QWdlbnQ6OnRha2VIZWFwU25hcHNob3QoYm9vbCBkZXRhaWxlZCkKK3ZvaWQgSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudDo6dGFrZUhlYXBTbmFwc2hvdChTdHJpbmcqLCBib29sIGRldGFpbGVkKQogewog
ICAgIFN0cmluZyB0aXRsZSA9IG1ha2VTdHJpbmcoVXNlckluaXRpYXRlZFByb2ZpbGVOYW1lLCAn
LicsIFN0cmluZzo6bnVtYmVyKG1fbmV4dFVzZXJJbml0aWF0ZWRIZWFwU25hcHNob3ROdW1iZXIp
KTsKICAgICArK21fbmV4dFVzZXJJbml0aWF0ZWRIZWFwU25hcHNob3ROdW1iZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaAppbmRleCA5
MzYzN2Y1Li5iMjdiMTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmgKQEAgLTU2LDIxICs1NiwyMSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhZGRQcm9maWxlKFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJwUHJvZmlsZSwgdW5zaWdu
ZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogICAgIHZvaWQgYWRkUHJv
ZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZShQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+LCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgdm9pZCBh
ZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5z
aWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwotICAgIHZvaWQgY2xl
YXJQcm9maWxlcygpIHsgcmVzZXRTdGF0ZSgpOyB9CisgICAgdm9pZCBjbGVhclByb2ZpbGVzKFN0
cmluZyopIHsgcmVzZXRTdGF0ZSgpOyB9CiAgICAgdm9pZCBkaXNhYmxlKCk7CiAgICAgdm9pZCBl
bmFibGUoYm9vbCBza2lwUmVjb21waWxlKTsKICAgICBib29sIGVuYWJsZWQoKSB7IHJldHVybiBt
X2VuYWJsZWQ7IH0KICAgICBTdHJpbmcgZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFt
ZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIgPSBmYWxzZSk7Ci0gICAgdm9pZCBnZXRQcm9m
aWxlSGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKTsKLSAgICB2b2lkIGdl
dFByb2ZpbGUoY29uc3QgU3RyaW5nJiB0eXBlLCB1bnNpZ25lZCB1aWQsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+KiBwcm9maWxlT2JqZWN0KTsKKyAgICB2b2lkIGdldFByb2ZpbGVIZWFkZXJzKFN0
cmluZyogZXJyb3IsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGhlYWRlcnMpOworICAgIHZvaWQg
Z2V0UHJvZmlsZShTdHJpbmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIHR5cGUsIHVuc2lnbmVkIHVp
ZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHByb2ZpbGVPYmplY3QpOwogICAgIGJvb2wgaXNS
ZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSgpIHsgcmV0dXJuIG1fcmVjb3JkaW5nVXNlcklu
aXRpYXRlZFByb2ZpbGU7IH0KLSAgICB2b2lkIHJlbW92ZVByb2ZpbGUoY29uc3QgU3RyaW5nJiB0
eXBlLCB1bnNpZ25lZCB1aWQpOworICAgIHZvaWQgcmVtb3ZlUHJvZmlsZShTdHJpbmcqIGVycm9y
LCBjb25zdCBTdHJpbmcmIHR5cGUsIHVuc2lnbmVkIHVpZCk7CiAgICAgdm9pZCByZXNldFN0YXRl
KCk7CiAgICAgdm9pZCByZXNldEZyb250ZW5kUHJvZmlsZXMoKTsKICAgICB2b2lkIHNldEZyb250
ZW5kKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkgeyBtX2Zyb250ZW5kID0gZnJvbnRlbmQ7
IH0KICAgICB2b2lkIHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpOwogICAgIHZvaWQgc3Rv
cFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoYm9vbCBpZ25vcmVQcm9maWxlID0gZmFsc2UpOwotICAg
IHZvaWQgdGFrZUhlYXBTbmFwc2hvdChib29sIGRldGFpbGVkKTsKKyAgICB2b2lkIHRha2VIZWFw
U25hcHNob3QoU3RyaW5nKiBlcnJvciwgYm9vbCBkZXRhaWxlZCk7CiAgICAgdm9pZCB0b2dnbGVS
ZWNvcmRCdXR0b24oYm9vbCBpc1Byb2ZpbGluZyk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKaW5kZXggZjAy
NDMxZS4uZDBjYjYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclJlc291cmNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JSZXNvdXJjZUFnZW50LmNwcApAQCAtMzExLDcgKzMxMSw3IEBAIHZvaWQgSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudDo6aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllCiAgICAgbV9mcm9udGVuZC0+aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0KGlk
ZW50aWZpZXIsIHVybC5zdHJpbmcoKSwgbG9hZGVyT2JqZWN0LCBjYWxsU3RhY2tWYWx1ZSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6c2V0RXh0cmFIZWFkZXJzKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzKQordm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50
OjpzZXRFeHRyYUhlYWRlcnMoU3RyaW5nKiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhl
YWRlcnMpCiB7CiAgICAgbV9zdGF0ZS0+c2V0T2JqZWN0KFJlc291cmNlQWdlbnRTdGF0ZTo6ZXh0
cmFSZXF1ZXN0SGVhZGVycywgaGVhZGVycyk7CiB9CkBAIC00OTgsMTIgKzQ5OCwxMiBAQCBGcmFt
ZSogSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZnJhbWVGb3JJZCh1bnNpZ25lZCBsb25nIGZyYW1l
SWQpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Y2Fj
aGVkUmVzb3VyY2VzKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvYmplY3QpCit2b2lkIEluc3Bl
Y3RvclJlc291cmNlQWdlbnQ6OmNhY2hlZFJlc291cmNlcyhTdHJpbmcqIGVycm9yLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0Piogb2JqZWN0KQogewogICAgICpvYmplY3QgPSBidWlsZE9iamVjdEZv
ckZyYW1lVHJlZShtX3BhZ2UtPm1haW5GcmFtZSgpLCB0cnVlKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQodW5zaWduZWQgbG9uZyBmcmFtZUlkLCBj
b25zdCBTdHJpbmcmIHVybCwgYm9vbCBiYXNlNjRFbmNvZGUsIGJvb2wqIHN1Y2Nlc3MsIFN0cmlu
ZyogY29udGVudCkKK3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzb3VyY2VDb250ZW50
KFN0cmluZyosIHVuc2lnbmVkIGxvbmcgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wg
YmFzZTY0RW5jb2RlLCBib29sKiBzdWNjZXNzLCBTdHJpbmcqIGNvbnRlbnQpCiB7CiAgICAgRnJh
bWUqIGZyYW1lID0gZnJhbWVGb3JJZChmcmFtZUlkKTsKICAgICBpZiAoIWZyYW1lKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaAppbmRl
eCBmYjI0YjcwLi5lN2RmZDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZUFnZW50LmgKQEAgLTEwMiw5ICsxMDIsOSBAQCBwdWJsaWM6CiAgICAg
RnJhbWUqIGZyYW1lRm9ySWQodW5zaWduZWQgbG9uZyk7CiAKICAgICAvLyBDYWxsZWQgZnJvbSBm
cm9udGVuZCAKLSAgICB2b2lkIGNhY2hlZFJlc291cmNlcyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiopOwotICAgIHZvaWQgcmVzb3VyY2VDb250ZW50KHVuc2lnbmVkIGxvbmcgZnJhbWVJZCwgY29u
c3QgU3RyaW5nJiB1cmwsIGJvb2wgYmFzZTY0RW5jb2RlLCBib29sKiByZXNvdXJjZUZvdW5kLCBT
dHJpbmcqIGNvbnRlbnQpOwotICAgIHZvaWQgc2V0RXh0cmFIZWFkZXJzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0Pik7CisgICAgdm9pZCBjYWNoZWRSZXNvdXJjZXMoU3RyaW5nKiBlcnJvciwg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4qKTsKKyAgICB2b2lkIHJlc291cmNlQ29udGVudChTdHJp
bmcqIGVycm9yLCB1bnNpZ25lZCBsb25nIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29s
IGJhc2U2NEVuY29kZSwgYm9vbCogcmVzb3VyY2VGb3VuZCwgU3RyaW5nKiBjb250ZW50KTsKKyAg
ICB2b2lkIHNldEV4dHJhSGVhZGVycyhTdHJpbmcqIGVycm9yLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4pOwogCiBwcml2YXRlOgogICAgIEluc3BlY3RvclJlc291cmNlQWdlbnQoUGFnZSog
cGFnZSwgSW5zcGVjdG9yU3RhdGUqLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcApp
bmRleCA3OTM4YWZkLi5hZTdkNmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcApAQCAtNDUsMzUgKzQ1LDM1IEBAIEluc3BlY3Rv
clJ1bnRpbWVBZ2VudDo6SW5zcGVjdG9yUnVudGltZUFnZW50KEluamVjdGVkU2NyaXB0SG9zdCog
aW5qZWN0ZWRTY3JpcHRICiAKIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6fkluc3BlY3RvclJ1bnRp
bWVBZ2VudCgpIHsgfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoY29u
c3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQordm9p
ZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmV2YWx1YXRlKFN0cmluZyogZXJyb3IsIGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRl
Q29tbWFuZExpbmVBUEksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsKICAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5pbmpl
Y3RlZFNjcmlwdEZvck1haW5GcmFtZSgpOwogICAgIGlmICghaW5qZWN0ZWRTY3JpcHQuaGFzTm9W
YWx1ZSgpKQogICAgICAgICBpbmplY3RlZFNjcmlwdC5ldmFsdWF0ZShleHByZXNzaW9uLCBvYmpl
Y3RHcm91cCwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCByZXN1bHQpOwogfQogCi12b2lkIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6Z2V0Q29tcGxldGlvbnMoY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVz
dWx0KQordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldENvbXBsZXRpb25zKFN0cmluZyos
IGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmpl
Y3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5pbmplY3RlZFNjcmlwdEZvck1haW5G
cmFtZSgpOwogICAgIGlmICghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICBp
bmplY3RlZFNjcmlwdC5nZXRDb21wbGV0aW9ucyhleHByZXNzaW9uLCBpbmNsdWRlQ29tbWFuZExp
bmVBUEksIHJlc3VsdCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRQcm9w
ZXJ0aWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJZCwgYm9vbCBpZ25vcmVI
YXNPd25Qcm9wZXJ0eSwgYm9vbCBhYmJyZXZpYXRlLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBy
ZXN1bHQpCit2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJvcGVydGllcyhTdHJpbmcq
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0SWQsIGJvb2wgaWdub3JlSGFzT3du
UHJvcGVydHksIGJvb2wgYWJicmV2aWF0ZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0
KQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlw
dEhvc3QtPmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQuZ2V0KCkpOwogICAgIGlm
ICghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICBpbmplY3RlZFNjcmlwdC5n
ZXRQcm9wZXJ0aWVzKG9iamVjdElkLCBpZ25vcmVIYXNPd25Qcm9wZXJ0eSwgYWJicmV2aWF0ZSwg
cmVzdWx0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNldFByb3BlcnR5VmFs
dWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdElkLCBjb25zdCBTdHJpbmcmIHBy
b3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQpCit2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2V0UHJvcGVydHlWYWx1
ZShTdHJpbmcqLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0SWQsIGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlw
dCA9IG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVj
dElkLmdldCgpKTsKICAgICBpZiAoIWluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAg
ICAgaW5qZWN0ZWRTY3JpcHQuc2V0UHJvcGVydHlWYWx1ZShvYmplY3RJZCwgcHJvcGVydHlOYW1l
LCBleHByZXNzaW9uLCByZXN1bHQpOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChsb25nIGluamVjdGVkU2NyaXB0SWQsIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXApCit2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cmVsZWFzZVdy
YXBwZXJPYmplY3RHcm91cChTdHJpbmcqLCBsb25nIGluamVjdGVkU2NyaXB0SWQsIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXApCiB7CiAgICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPnJlbGVhc2VX
cmFwcGVyT2JqZWN0R3JvdXAoaW5qZWN0ZWRTY3JpcHRJZCwgb2JqZWN0R3JvdXApOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCmluZGV4
IDlmYjI3MTYuLjllOTE5MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUnVudGltZUFnZW50LmgKQEAgLTU3LDExICs1NywxMSBAQCBwdWJsaWM6CiAgICAgfklu
c3BlY3RvclJ1bnRpbWVBZ2VudCgpOwogCiAgICAgLy8gUGFydCBvZiB0aGUgcHJvdG9jb2wuCi0g
ICAgdm9pZCBldmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYg
b2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+KiByZXN1bHQpOwotICAgIHZvaWQgZ2V0Q29tcGxldGlvbnMoY29uc3QgU3RyaW5nJiBl
eHByZXNzaW9uLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiogcmVzdWx0KTsKLSAgICB2b2lkIGdldFByb3BlcnRpZXMoUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG9iamVjdElkLCBib29sIGlnbm9yZUhhc093blByb3BlcnR5LCBib29sIGFiYnJl
dmlhdGUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7Ci0gICAgdm9pZCBzZXRQcm9w
ZXJ0eVZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3RJZCwgY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiogcmVzdWx0KTsKLSAgICB2b2lkIHJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAo
bG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKKyAgICB2
b2lkIGV2YWx1YXRlKFN0cmluZyogZXJyb3IsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29u
c3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCBnZXRDb21wbGV0aW9ucyhTdHJp
bmcqIGVycm9yLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGJvb2wgaW5jbHVkZUNvbW1hbmRM
aW5lQVBJLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgZ2V0UHJv
cGVydGllcyhTdHJpbmcqIGVycm9yLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0
SWQsIGJvb2wgaWdub3JlSGFzT3duUHJvcGVydHksIGJvb2wgYWJicmV2aWF0ZSwgUmVmUHRyPElu
c3BlY3RvclZhbHVlPiogcmVzdWx0KTsKKyAgICB2b2lkIHNldFByb3BlcnR5VmFsdWUoU3RyaW5n
KiBlcnJvciwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdElkLCBjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgcmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChT
dHJpbmcqIGVycm9yLCBsb25nIGluamVjdGVkU2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0
R3JvdXApOwogCiBwcml2YXRlOgogICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudChJbmplY3RlZFNj
cmlwdEhvc3QqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JUaW1lbGluZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JU
aW1lbGluZUFnZW50LmNwcAppbmRleCAzNTRiZGFkLi4wOGIzMmI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCkBAIC04Miwx
OCArODIsMjEgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZXRGcm9udGVuZChJbnNw
ZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6
Y2xlYXJGcm9udGVuZCgpCiB7Ci0gICAgc3RvcCgpOworICAgIFN0cmluZyBlcnJvcjsKKyAgICBz
dG9wKCZlcnJvcik7CiAgICAgbV9mcm9udGVuZCA9IDA7CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudDo6cmVzdG9yZShJbnNwZWN0b3JTdGF0ZSogc3RhdGUsIEluc3BlY3RvckZyb250
ZW5kKiBmcm9udGVuZCkKIHsKICAgICBzZXRGcm9udGVuZChmcm9udGVuZCk7Ci0gICAgaWYgKHN0
YXRlLT5nZXRCb29sZWFuKFRpbWVsaW5lQWdlbnRTdGF0ZTo6dGltZWxpbmVBZ2VudEVuYWJsZWQp
KQotICAgICAgICBzdGFydCgpOworICAgIGlmIChzdGF0ZS0+Z2V0Qm9vbGVhbihUaW1lbGluZUFn
ZW50U3RhdGU6OnRpbWVsaW5lQWdlbnRFbmFibGVkKSkgeworICAgICAgICBTdHJpbmcgZXJyb3I7
CisgICAgICAgIHN0YXJ0KCZlcnJvcik7CisgICAgfQogfQogCi12b2lkIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OnN0YXJ0KCkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnQoU3Ry
aW5nKikKIHsKICAgICBpZiAoIW1fZnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMyw3
ICsxMDYsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0KCkKICAgICBtX3N0
YXRlLT5zZXRCb29sZWFuKFRpbWVsaW5lQWdlbnRTdGF0ZTo6dGltZWxpbmVBZ2VudEVuYWJsZWQs
IHRydWUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0b3AoKQordm9pZCBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdG9wKFN0cmluZyopCiB7CiAgICAgaWYgKCFzdGFydGVk
KCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5oCmluZGV4IGI4MWFjYmIuLjUzM2Y2MGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaApAQCAtODgs
OCArODgsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc3RvcmUoSW5zcGVjdG9yU3RhdGUqLCBJ
bnNwZWN0b3JGcm9udGVuZCopOwogCi0gICAgdm9pZCBzdGFydCgpOwotICAgIHZvaWQgc3RvcCgp
OworICAgIHZvaWQgc3RhcnQoU3RyaW5nKiBlcnJvcik7CisgICAgdm9pZCBzdG9wKFN0cmluZyog
ZXJyb3IpOwogICAgIGJvb2wgc3RhcnRlZCgpIGNvbnN0OwogCiAgICAgaW50IGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZDsgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>