<?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>60624</bug_id>
          
          <creation_ts>2011-05-11 07:09:22 -0700</creation_ts>
          <short_desc>Web Inspector: use InstrumentingAgents to access agents from InspectorInstrumentation</short_desc>
          <delta_ts>2011-05-16 06:28:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>60359</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</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>401947</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-05-11 07:09:22 -0700</bug_when>
    <thetext>Web Inspector: use InstrumentingAgents to access agents from InspectorInstrumentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401957</commentid>
    <comment_count>1</comment_count>
      <attachid>93115</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-05-11 07:27:30 -0700</bug_when>
    <thetext>Created attachment 93115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401984</commentid>
    <comment_count>2</comment_count>
      <attachid>93115</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-05-11 08:25:53 -0700</bug_when>
    <thetext>Comment on attachment 93115
Patch

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

&gt; Source/WebCore/inspector/InspectorInstrumentation.cpp:457
&gt; +    if (!instrumentingAgents)

Can this be 0?

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:908
&gt; +    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsWithFrontendForPage(page))

This does not make sense - instrumentingAgentsWithFrontend &amp;&amp; hasFrontend?

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:938
&gt; +    return instrumentingAgentsForFrame(frame);

Now you need to test whether there is a front-end for the page.

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:952
&gt; +    return instrumentingAgentsForContext(context);

ditto

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:958
&gt; +        return instrumentingAgentsForPage(document-&gt;page());

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402138</commentid>
    <comment_count>3</comment_count>
      <attachid>93115</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-05-11 11:52:32 -0700</bug_when>
    <thetext>Comment on attachment 93115
Patch

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

&gt;&gt; Source/WebCore/inspector/InspectorInstrumentation.cpp:457
&gt;&gt; +    if (!instrumentingAgents)
&gt; 
&gt; Can this be 0?

Good question, I need to check.

&gt;&gt; Source/WebCore/inspector/InspectorInstrumentation.h:908
&gt;&gt; +    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsWithFrontendForPage(page))
&gt; 
&gt; This does not make sense - instrumentingAgentsWithFrontend &amp;&amp; hasFrontend?

Why not? The first one only checks whether there is a front-end, not necessarily front-end for given page.

&gt;&gt; Source/WebCore/inspector/InspectorInstrumentation.h:938
&gt;&gt; +    return instrumentingAgentsForFrame(frame);
&gt; 
&gt; Now you need to test whether there is a front-end for the page.

I intentionally don&apos;t do this. hasFrontends() is fast check that makes the instrumentation seemless when there is no front-end. In all other cases the fast check will fail and we will do regular agent retrieval from InstrumentingAgents object.

&gt;&gt; Source/WebCore/inspector/InspectorInstrumentation.h:952
&gt;&gt; +    return instrumentingAgentsForContext(context);
&gt; 
&gt; ditto

See my reply above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403567</commentid>
    <comment_count>4</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-05-13 08:35:24 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 93115 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=93115&amp;action=review
&gt; &gt; Source/WebCore/inspector/InspectorInstrumentation.h:908
&gt; &gt; +    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsWithFrontendForPage(page))
&gt; 
&gt; This does not make sense - instrumentingAgentsWithFrontend &amp;&amp; hasFrontend?
The method should be renamed I think. It&apos;s called to check whether the HTML parser should report parse errors or not. It should be somethig like InspectorInstrumentation::shouldReportHtmlParseErrors.

The fact that we need to call hasFrontends() to avoid possible overhead when there is no inspector window breaks our abstraction. Ideally, inspector instrumentation should not know anything about the front-end and should be able to get everything from InstrumentingAgents. Ilya suggests that we should remove the check completely and see whether it would result in a observable performance degradation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404426</commentid>
    <comment_count>5</comment_count>
      <attachid>93636</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-05-16 05:34:34 -0700</bug_when>
    <thetext>Created attachment 93636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404433</commentid>
    <comment_count>6</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-05-16 05:52:17 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=93636) [details]
&gt; Patch

Removed all *WithFrontend* methods and added a macros for fast return when there are no inspector frontends.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404437</commentid>
    <comment_count>7</comment_count>
      <attachid>93636</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-05-16 06:02:46 -0700</bug_when>
    <thetext>Comment on attachment 93636
Patch

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

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:715
&gt; +    if (hasFrontends())

replace with the macro?

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:723
&gt; +    if (hasFrontends())

ditto

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:731
&gt; +    if (hasFrontends())

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404444</commentid>
    <comment_count>8</comment_count>
      <attachid>93637</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-05-16 06:25:51 -0700</bug_when>
    <thetext>Created attachment 93637
Patch for landing

Comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404445</commentid>
    <comment_count>9</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-05-16 06:28:19 -0700</bug_when>
    <thetext>Committed r86564: &lt;http://trac.webkit.org/changeset/86564&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93115</attachid>
            <date>2011-05-11 07:27:30 -0700</date>
            <delta_ts>2011-05-16 05:34:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60624-20110511182727.patch</filename>
            <type>text/plain</type>
            <size>128680</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODYyMjEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjM2I3MmNhZThiYWUwYThk
YjQ0ODU3ODU0Mzc5NTg3YzI0Nzc3YzMyLi40NTlmYTk0YWY1MmUyNGU0NmRmN2M4NTBmNTc4MmNh
YzBjNzU3ZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTc0IEBACisyMDExLTA1LTExICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHVzZSBJbnN0cnVtZW50
aW5nQWdlbnRzIHRvIGFjY2VzcyBhZ2VudHMgZnJvbSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNjI0CisK
KyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uIHJldHJpZXZlcyBpbnNwZWN0b3IgYWdl
bnRzIGZyb20gY29ycmVzcG9uZGluZyBJbnN0cnVtZW50aW5nQWdlbnRzCisgICAgICAgIGluc3Rh
bmNlLiBFYWNoIGFnZW50IG5vdGlmaWVzIEluc3RydW1lbnRpbmdBZ2VudHMgd2hlbmV2ZXIgaXQg
d2FudHMgdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zCisgICAgICAgIGFib3V0IGNoYW5nZXMgaW4g
V2ViQ29yZS4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6SW5zcGVjdG9yQWdlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdGFydENvbnNvbGVUaW1pbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVN
YXJrVGltZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cHJvZmlsZXJFbmFibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQ
cm9maWxlTmFtZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJv
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQ
YWdlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRp
ZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjppbnNwZWN0ZWRQYWdlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUluc3Ry
dW1lbnRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRPcGVuRGF0YWJhc2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjppbnN0cnVtZW50aW5nQWdlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWRJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbElu
c2VydERPTU5vZGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkSW5zZXJ0RE9NTm9kZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9NTm9kZUltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZW1vdmVET01Ob2RlSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNb2RpZnlET01BdHRy
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1v
ZGlmeURPTUF0dHJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0ckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudEltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYW5kbGVNb3VzZVByZXNz
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNoYXJh
Y3RlckRhdGFNb2RpZmllZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0SW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEluc3Rh
bGxUaW1lckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRSZW1vdmVUaW1lckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsQ2FsbEZ1bmN0aW9uSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxDaGFuZ2VYSFJSZWFkeVN0YXRlSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxE
aXNwYXRjaEV2ZW50T25XaW5kb3dJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbEV2YWx1YXRlU2NyaXB0SW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxGaXJlVGltZXJJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExheW91dEltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9hZFhIUkltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUGFpbnRJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJl
Y2FsY3VsYXRlU3R5bGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFJlcXVlc3RJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29udGludWVBZnRlclBpbmdMb2Fk
ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bWFy
a1Jlc291cmNlQXNDYWNoZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlSW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNlaXZlUmVzb3VyY2VE
YXRhSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxSZWNlaXZlUmVzb3VyY2VSZXNwb25zZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlUmVzb3VyY2VSZXNwb25zZUltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlQ29udGVu
dExlbmd0aEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRGaW5pc2hMb2FkaW5nSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZEZhaWxMb2FkaW5nSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdElt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzY3JpcHRJ
bXBvcnRlZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojpkb21Db250ZW50TG9hZGVkRXZlbnRGaXJlZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpsb2FkRXZlbnRGaXJlZEltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZURldGFjaGVkRnJvbVBhcmVudElt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDb21t
aXRMb2FkSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxXcml0ZUhUTUxJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnRJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRDb25zb2xlVGltaW5nSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGlt
aW5nSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNv
bnNvbGVNYXJrVGltZWxpbmVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6YWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZFByb2ZpbGVJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Z2V0Q3VycmVudFVz
ZXJJbml0aWF0ZWRQcm9maWxlTmFtZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpwcm9maWxlckVuYWJsZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlSW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFVzZURPTVN0b3JhZ2VJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU3RhcnRX
b3JrZXJDb250ZXh0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZENyZWF0ZVdvcmtlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWREZXN0cm95V29ya2VySW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdlYlNvY2tldEltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFdlYlNvY2tl
dEhhbmRzaGFrZVJlcXVlc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENsb3NlV2ViU29j
a2V0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om5l
dHdvcmtTdGF0ZUNoYW5nZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1c0ltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnBhdXNlT25OYXRpdmVFdmVudElm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2Fu
Y2VsUGF1c2VPbk5hdGl2ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6cmV0cmlldmVUaW1lbGluZUFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmJpbmRJbnN0cnVtZW50aW5nQWdlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dW5iaW5kSW5zdHJ1bWVudGluZ0FnZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENsZWFyV2lu
ZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEluc2VydERPTU5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9NTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNb2RpZnlET01B
dHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTW9k
aWZ5RE9NQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZEludmFsaWRhdGVTdHlsZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmhhbmRsZU1vdXNlUHJlc3MpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFhN
TEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnN0YWxsVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZW1vdmVUaW1lcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxDYWxsRnVuY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsQ2hhbmdlWEhSUmVhZHlT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxE
aXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbERpc3BhdGNoRXZlbnRPbldpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxGaXJlVGltZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTGF5b3V0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFIpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVjYWxjdWxhdGVTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFwcGx5VXNlckFn
ZW50T3ZlcnJpZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpjb250aW51ZUFmdGVyUGluZ0xvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246Om1hcmtSZXNvdXJjZUFzQ2FjaGVkKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9y
eUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bFJlY2VpdmVSZXNvdXJjZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsUmVjZWl2ZVJlc291cmNlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250aW51ZUFmdGVyWEZyYW1lT3B0aW9uc0Rl
bmllZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRp
bnVlV2l0aFBvbGljeURvd25sb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Y29udGludWVXaXRoUG9saWN5SWdub3JlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaW5pc2hMb2FkaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmFpbExv
YWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpyZXNv
dXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpzY3JpcHRJbXBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRvbUNvbnRlbnRMb2FkZWRFdmVudEZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bG9hZEV2ZW50RmlyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZURldGFj
aGVkRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsV3JpdGVIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkVXNlRE9NU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxTdGFydFdvcmtlckNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTdGFydFdvcmtlckNvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVXb3Jr
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREZXN0
cm95V29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkQ3JlYXRlV2ViU29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRz
aGFrZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkQ2xvc2VXZWJTb2NrZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2Vu
dHNXaXRoRnJvbnRlbmRGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNXaXRoRnJvbnRlbmRGb3JQYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0Fn
ZW50c1dpdGhGcm9udGVuZEZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzV2l0aEZyb250ZW5kRm9yRG9jdW1l
bnQpOgorCiAyMDExLTA1LTA2ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggZDA1Mjg5NmE0YWExOTdiZmJlZDVj
YTRmZmMwOTAxMWRkMjk5NWM3NS4uOWVhOWI3NGVmMWQ0NjNkMTM5OTNkNDFkNDcxYWZkNDY0NDcy
MjI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCkBA
IC02OSw3ICs2OSw2IEBAIEluc3BlY3RvckFnZW50OjpJbnNwZWN0b3JBZ2VudChQYWdlKiBwYWdl
LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0CiAgICAgLCBtX2Nhbklzc3Vl
RXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChmYWxzZSkKIHsKICAgICBBU1NFUlRfQVJHKHBhZ2Us
IHBhZ2UpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YmluZEluc3BlY3RvckFnZW50
KG1faW5zcGVjdGVkUGFnZSwgdGhpcyk7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJ
bnNwZWN0b3JBZ2VudCh0aGlzKTsKIH0KIApAQCAtODYsNyArODUsNiBAQCB2b2lkIEluc3BlY3Rv
ckFnZW50OjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkKICAgICBpZiAobV9mcm9udGVuZCkKICAg
ICAgICAgbV9mcm9udGVuZC0+aW5zcGVjdG9yKCktPmRpc2Nvbm5lY3RGcm9tQmFja2VuZCgpOwog
ICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6dW5iaW5kSW5zcGVjdG9yQWdlbnQobV9pbnNwZWN0ZWRQYWdlKTsKICAgICBtX2luc3BlY3Rl
ZFBhZ2UgPSAwOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5o
CmluZGV4IGJhOGE3YmJmNGQzYjMwNzBhMWMzMGRlMjU4ZGZmNTNiYTY4YmNkNDkuLjBiNmMyOTU3
MGIyZDNhMDg4MWQ4NWMwNWU2NjA2MDg4MzIwNDcxODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JBZ2VudC5oCkBAIC02MSw3ICs2MSw2IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgZW5hYmxlZCgpIGNvbnN0OwogCi0gICAgUGFnZSogaW5zcGVjdGVkUGFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5zcGVjdGVkUGFnZTsgfQogICAgIEtVUkwgaW5zcGVjdGVkVVJMKCkgY29uc3Q7
CiAgICAgS1VSTCBpbnNwZWN0ZWRVUkxXaXRob3V0RnJhZ21lbnQoKSBjb25zdDsKICAgICB2b2lk
IHJlbG9hZFBhZ2UoRXJyb3JTdHJpbmcqLCBib29sIGlnbm9yZUNhY2hlKTsKQEAgLTcyLDggKzcx
LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJGcm9udGVuZCgpOwogICAgIHZvaWQgcmVzdG9y
ZSgpOwogCi0gICAgSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1faW5zdHJ1bWVudGluZ0FnZW50czsgfQotCiAgICAgdm9pZCBkaWRDbGVh
cldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqLCBET01XcmFwcGVyV29ybGQqKTsKIAogICAgIHZv
aWQgZGlkQ29tbWl0TG9hZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnNvbGVJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmgKaW5kZXggODMyNjc0MTBkZWVl
ZGQ1YmQ3ODkyZjc3ZDczNjk0MTQxMzYxYmFkOS4uNDBlM2U5MjQzYzAxZDI4YTA2YzhhNjAzZWY4
MDc5MWQ0ZWZhZDRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnNvbGVJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29uc29sZUluc3RydW1lbnRhdGlvbi5oCkBAIC00MSw0OCArNDEsNDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjphZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UqIHBhZ2UsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBN
ZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTY3Jp
cHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlm
IChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZvclBhZ2Uo
cGFnZSkpCi0gICAgICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKGluc3BlY3RvckFnZW50LCBz
b3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBhcmd1bWVudHMsIGNhbGxTdGFjayk7CisgICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwo
aW5zdHJ1bWVudGluZ0FnZW50cywgc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgYXJndW1l
bnRzLCBjYWxsU3RhY2spOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShQYWdlKiBwYWdlLCBNZXNzYWdlU291cmNl
IHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQp
CiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JQYWdlKHBhZ2UpKQotICAgICAgICBhZGRNZXNz
YWdlVG9Db25zb2xlSW1wbChpbnNwZWN0b3JBZ2VudCwgc291cmNlLCB0eXBlLCBsZXZlbCwgbWVz
c2FnZSwgbGluZU51bWJlciwgc291cmNlSUQpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkp
CisgICAgICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHNv
dXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlEKTsKICNlbmRp
ZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3Vu
dChQYWdlKiBwYWdlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCBQYXNz
UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gc3RhY2spCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
LSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRG
b3JQYWdlKHBhZ2UpKQotICAgICAgICBjb25zb2xlQ291bnRJbXBsKGluc3BlY3RvckFnZW50LCBh
cmd1bWVudHMsIHN0YWNrKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQorICAgICAgICBj
b25zb2xlQ291bnRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIGFyZ3VtZW50cywgc3RhY2spOwog
I2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRD
b25zb2xlVGltaW5nKFBhZ2UqIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0g
aW5zcGVjdG9yQWdlbnRGb3JQYWdlKHBhZ2UpKQotICAgICAgICBzdGFydENvbnNvbGVUaW1pbmdJ
bXBsKGluc3BlY3RvckFnZW50LCB0aXRsZSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkK
KyAgICAgICAgc3RhcnRDb25zb2xlVGltaW5nSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCB0aXRs
ZSk7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
dG9wQ29uc29sZVRpbWluZyhQYWdlKiBwYWdlLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBQYXNzUmVm
UHRyPFNjcmlwdENhbGxTdGFjaz4gc3RhY2spCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAg
ICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JQ
YWdlKHBhZ2UpKQotICAgICAgICBzdG9wQ29uc29sZVRpbWluZ0ltcGwoaW5zcGVjdG9yQWdlbnQs
IHRpdGxlLCBzdGFjayk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgc3Rv
cENvbnNvbGVUaW1pbmdJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHRpdGxlLCBzdGFjayk7CiAj
ZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xl
TWFya1RpbWVsaW5lKFBhZ2UqIHBhZ2UsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1
bWVudHMpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQq
IGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JQYWdlKHBhZ2Up
KQotICAgICAgICBjb25zb2xlTWFya1RpbWVsaW5lSW1wbChpbnNwZWN0b3JBZ2VudCwgYXJndW1l
bnRzKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHNXaXRoRnJvbnRlbmRGb3JQYWdlKHBhZ2UpKQorICAgICAgICBj
b25zb2xlTWFya1RpbWVsaW5lSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBhcmd1bWVudHMpOwog
I2VuZGlmCiB9CiAKQEAgLTkwLDI0ICs5MCwyNCBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmNvbnNvbGVNYXJrVGltZWxpbmUoUGFnZSogcGFnZSwgUGFzc1JlZlB0cgog
aW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRTdGFydFByb2ZpbGluZ01l
c3NhZ2VUb0NvbnNvbGUoUGFnZSogcGFnZSwgY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCiB7CiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9y
QWdlbnRGb3JQYWdlKHBhZ2UpKQotICAgICAgICBhZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0Nv
bnNvbGVJbXBsKGluc3BlY3RvckFnZW50LCB0aXRsZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsK
KyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQorICAgICAgICBhZGRTdGFydFByb2ZpbGluZ01l
c3NhZ2VUb0NvbnNvbGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHRpdGxlLCBsaW5lTnVtYmVy
LCBzb3VyY2VVUkwpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6YWRkUHJvZmlsZShQYWdlKiBwYWdlLCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJv
ZmlsZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKIHsKICNpZiBFTkFC
TEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBp
bnNwZWN0b3JBZ2VudEZvclBhZ2UocGFnZSkpCi0gICAgICAgIGFkZFByb2ZpbGVJbXBsKGluc3Bl
Y3RvckFnZW50LCBwcm9maWxlLCBjYWxsU3RhY2spOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFn
ZSkpCisgICAgICAgIGFkZFByb2ZpbGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHByb2ZpbGUs
IGNhbGxTdGFjayk7CiAjZW5kaWYKIH0KIAogaW5saW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpwcm9maWxlckVuYWJsZWQoUGFnZSogcGFnZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVD
VE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JB
Z2VudEZvclBhZ2UocGFnZSkpCi0gICAgICAgIHJldHVybiBwcm9maWxlckVuYWJsZWRJbXBsKGlu
c3BlY3RvckFnZW50KTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQorICAgICAgICByZXR1
cm4gcHJvZmlsZXJFbmFibGVkSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzKTsKICNlbmRpZgogICAg
IHJldHVybiBmYWxzZTsKIH0KQEAgLTExNSw4ICsxMTUsOCBAQCBpbmxpbmUgYm9vbCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnByb2ZpbGVyRW5hYmxlZChQYWdlKiBwYWdlKQogaW5saW5lIFN0
cmluZyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJv
ZmlsZU5hbWUoUGFnZSogcGFnZSwgYm9vbCBpbmNyZW1lbnRQcm9maWxlTnVtYmVyKQogewogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2Vu
dCA9IGluc3BlY3RvckFnZW50Rm9yUGFnZShwYWdlKSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZUltcGwo
aW5zcGVjdG9yQWdlbnQsIGluY3JlbWVudFByb2ZpbGVOdW1iZXIpOworICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
clBhZ2UocGFnZSkpCisgICAgICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omdl
dEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMs
IGluY3JlbWVudFByb2ZpbGVOdW1iZXIpOwogI2VuZGlmCiAgICAgcmV0dXJuICIiOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4
IDVlZTYyMTE3YjEzOWJkZDVmNjUwYmU1N2I3NWE1M2Q3MGRhMzY0MGMuLjRkY2E0M2M2ZjRhYTRl
NGRlMzk0YjY4Y2ExNjA0YTZjNTllYmYzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTExMiw2ICsxMTIsNyBAQCBJbnNwZWN0
b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNs
aWVudCogaW5zcGVjdG9yQwogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgICwgbV93b3JrZXJBZ2Vu
dChJbnNwZWN0b3JXb3JrZXJBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQo
KSkpCiAjZW5kaWYKKyAgICAsIG1fcGFnZShwYWdlKQogICAgICwgbV9pbnNwZWN0b3JDbGllbnQo
aW5zcGVjdG9yQ2xpZW50KQogICAgICwgbV9vcGVuaW5nRnJvbnRlbmQoZmFsc2UpCiAgICAgLCBt
X3N0YXJ0VXNlckluaXRpYXRlZERlYnVnZ2luZ1doZW5Gcm9udGVkSXNDb25uZWN0ZWQoZmFsc2Up
CkBAIC0xMjYsNiArMTI3LDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJv
bGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMKICAgICAgICAgLCBt
X2RvbVN0b3JhZ2VBZ2VudC5nZXQoKQogI2VuZGlmCiAgICAgKTsKKyAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmJpbmRJbnN0cnVtZW50aW5nQWdlbnRzKG1fcGFnZSwgbV9pbnN0cnVtZW50
aW5nQWdlbnRzLmdldCgpKTsKIH0KIAogSW5zcGVjdG9yQ29udHJvbGxlcjo6fkluc3BlY3RvckNv
bnRyb2xsZXIoKQpAQCAtMTM1LDYgKzEzNyw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6On5JbnNw
ZWN0b3JDb250cm9sbGVyKCkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQ
YWdlRGVzdHJveWVkKCkKIHsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnVuYmluZElu
c3RydW1lbnRpbmdBZ2VudHMobV9wYWdlKTsKICAgICBkaXNjb25uZWN0RnJvbnRlbmQoKTsKICNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBtX2RvbURlYnVnZ2VyQWdlbnQuY2xl
YXIoKTsKQEAgLTE0Myw2ICsxNDYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3Bl
Y3RlZFBhZ2VEZXN0cm95ZWQoKQogICAgIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5kaXNjb25u
ZWN0KCk7CiAgICAgbV9pbnNwZWN0b3JDbGllbnQtPmluc3BlY3RvckRlc3Ryb3llZCgpOwogICAg
IG1faW5zcGVjdG9yQ2xpZW50ID0gMDsKKyAgICBtX3BhZ2UgPSAwOwogfQogCiB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KFBhc3NPd25QdHI8SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ+IGluc3BlY3RvckZyb250ZW5kQ2xpZW50KQpAQCAtMTYyLDcg
KzE2Niw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJ
bldvcmxkKEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvCiAKICAgICAvLyBJZiB0aGUgcGFnZSBp
cyBzdXBwb3NlZCB0byBzZXJ2ZSBhcyBJbnNwZWN0b3JGcm9udGVuZCBub3RpZnkgaW5zcGVjdG9y
IGZyb250ZW5kCiAgICAgLy8gY2xpZW50IHRoYXQgaXQncyBjbGVhcmVkIHNvIHRoYXQgdGhlIGNs
aWVudCBjYW4gZXhwb3NlIGluc3BlY3RvciBiaW5kaW5ncy4KLSAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENsaWVudCAmJiBmcmFtZSA9PSBtX2luc3BlY3RvckFnZW50LT5pbnNwZWN0ZWRQYWdl
KCktPm1haW5GcmFtZSgpKQorICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50ICYmIGZy
YW1lID09IG1fcGFnZS0+bWFpbkZyYW1lKCkpCiAgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQtPndpbmRvd09iamVjdENsZWFyZWQoKTsKIH0KIApAQCAtMzc1LDcgKzM3OSw3IEBAIGJv
b2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlZCgpIGNvbnN0CiAKIFBhZ2UqIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Omluc3BlY3RlZFBhZ2UoKSBjb25zdAogewotICAgIHJldHVybiBtX2luc3Bl
Y3RvckFnZW50LT5pbnNwZWN0ZWRQYWdlKCk7CisgICAgcmV0dXJuIG1fcGFnZTsKIH0KIAogYm9v
bCBJbnNwZWN0b3JDb250cm9sbGVyOjp0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCAwZTBmMGQ2
OGQ3OGU1NmJjNmU5MzJlZjgwNDc3NmE5ZGMyMGE3NGRmLi4yZDE2MWM2OTQ0MGE5OGQwMjFlNTJl
Y2E0NDc5YjEzZDIxODc0MDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmgKQEAgLTE1NSw2ICsxNTUsNyBAQCBwcml2YXRlOgogICAgIE93blB0
cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjsKICAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IG1faW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ7CiAgICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBtX2luc3BlY3RvckZyb250
ZW5kOworICAgIFBhZ2UqIG1fcGFnZTsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1faW5zcGVjdG9y
Q2xpZW50OwogICAgIGJvb2wgbV9vcGVuaW5nRnJvbnRlbmQ7CiAgICAgYm9vbCBtX3N0YXJ0VXNl
ckluaXRpYXRlZERlYnVnZ2luZ1doZW5Gcm9udGVkSXNDb25uZWN0ZWQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VJbnN0cnVtZW50YXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUluc3RydW1lbnRh
dGlvbi5oCmluZGV4IDBhZDE0NjBmYWNjNmYxYTFmZDRmYTVjNWJlNGE2ODhjYjNmMWI1OWMuLjFm
NmQ3ZjcxODVjYjVhOWVmZDEyOThmODU3YmI2YmQ4MTU1YjY1NGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUluc3RydW1lbnRhdGlvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUluc3RydW1lbnRh
dGlvbi5oCkBAIC00MSw4ICs0MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zdCBT
dHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24p
CiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICBk
aWRPcGVuRGF0YWJhc2VJbXBsKGluc3BlY3RvckFnZW50LCBkYXRhYmFzZSwgZG9tYWluLCBuYW1l
LCB2ZXJzaW9uKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQorICAgICAgICBk
aWRPcGVuRGF0YWJhc2VJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIGRhdGFiYXNlLCBkb21haW4s
IG5hbWUsIHZlcnNpb24pOwogI2VuZGlmCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggYzEyY2Ew
ZGRhZDgyNGFkY2Q1ODViNjhhNjRhZTZlMjM3MDNjMWU2YS4uOTQ5MjdjNWIwNzQzOTE2YTJjMGJm
NzRkM2ZkMjhhYjg2MGJlYWRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNs
dWRlICJTY3JpcHRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNp
bmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTY3LDkgKzY4LDkgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNldFRpbWVyRXZlbnROYW1l
ID0gInNldFRpbWVyIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjbGVhclRpbWVyRXZlbnRO
YW1lID0gImNsZWFyVGltZXIiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHRpbWVyRmlyZWRF
dmVudE5hbWUgPSAidGltZXJGaXJlZCI7CiAKLUhhc2hNYXA8UGFnZSosIEluc3BlY3RvckFnZW50
Kj4mIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zcGVjdG9yQWdlbnRzKCkKK0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6SW5zdHJ1bWVudGluZ0FnZW50c01hcCYgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzKCkKIHsKLSAgICBzdGF0aWMgSGFzaE1hcDxQ
YWdlKiwgSW5zcGVjdG9yQWdlbnQqPiYgYWdlbnRzID0gKm5ldyBIYXNoTWFwPFBhZ2UqLCBJbnNw
ZWN0b3JBZ2VudCo+OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSW5zdHJ1bWVudGluZ0FnZW50
c01hcCwgYWdlbnRzLCAoKSk7CiAgICAgcmV0dXJuIGFnZW50czsKIH0KIApAQCAtOTIsMTMwICs5
MywxMzEgQEAgc3RhdGljIGJvb2wgZXZlbnRIYXNMaXN0ZW5lcnMoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIERPTVdpbmRvdyogd2luZG93LAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3Js
ZEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBGcmFtZSogZnJhbWUsIERPTVdy
YXBwZXJXb3JsZCogd29ybGQpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xl
YXJXaW5kb3dPYmplY3RJbldvcmxkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7Ci0gICAg
aWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3Ry
dW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yUGFnZUFnZW50KCkpCisgICAgaWYgKEluc3BlY3Rv
clBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUGFn
ZUFnZW50KCkpCiAgICAgICAgIHBhZ2VBZ2VudC0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxk
KGZyYW1lLCB3b3JsZCk7Ci0gICAgaW5zcGVjdG9yQWdlbnQtPmRpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZChmcmFtZSwgd29ybGQpOworICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9y
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JBZ2VudCgpKQorICAgICAgICBp
bnNwZWN0b3JBZ2VudC0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKGZyYW1lLCB3b3JsZCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0ZWRQYWdlRGVzdHJv
eWVkSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQpCit2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykKIHsKLSAgICBpbnNwZWN0b3JBZ2VudC0+aW5zcGVj
dGVkUGFnZURlc3Ryb3llZCgpOworICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JBZ2VudCgpKQorICAgICAgICBpbnNw
ZWN0b3JBZ2VudC0+aW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGVJbXBsKEluc3BlY3RvckFnZW50KiBp
bnNwZWN0b3JBZ2VudCwgTm9kZSogbm9kZSwgTm9kZSogcGFyZW50KQordm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxJbnNlcnRET01Ob2RlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBOb2RlKiBub2RlLCBOb2RlKiBwYXJlbnQpCiB7CiAjaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgaWYgKEluc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0Fn
ZW50cygpLT5pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5p
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgIGRvbURlYnVnZ2VyQWdlbnQtPndp
bGxJbnNlcnRET01Ob2RlKG5vZGUsIHBhcmVudCk7CiAjZW5kaWYKIH0KIAotdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZEluc2VydERPTU5vZGVJbXBsKEluc3BlY3RvckFnZW50KiBp
bnNwZWN0b3JBZ2VudCwgTm9kZSogbm9kZSkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRJbnNlcnRET01Ob2RlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBOb2RlKiBub2RlKQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdl
bnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JET01B
Z2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLT5pbnNwZWN0b3JET01BZ2VudCgpKQogICAgICAgICBkb21BZ2VudC0+ZGlkSW5z
ZXJ0RE9NTm9kZShub2RlKTsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBp
ZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJBZ2VudCA9IGluc3BlY3Rv
ckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQo
KSkKKyAgICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQoKSkKICAgICAg
ICAgZG9tRGVidWdnZXJBZ2VudC0+ZGlkSW5zZXJ0RE9NTm9kZShub2RlKTsKICNlbmRpZgogfQog
Ci12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZURPTU5vZGVJbXBsKElu
c3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgTm9kZSogbm9kZSkKK3ZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9NTm9kZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cywgTm9kZSogbm9kZSkKIHsKICNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKLSAgICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCogZG9tRGVi
dWdnZXJBZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2Vu
dCogZG9tRGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQoKSkKICAgICAgICAgZG9tRGVidWdnZXJBZ2VudC0+d2lsbFJlbW92ZURPTU5v
ZGUobm9kZSk7CiAjZW5kaWYKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFJlbW92ZURPTU5vZGVJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgTm9kZSog
bm9kZSkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZW1vdmVET01Ob2RlSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBOb2RlKiBub2RlKQog
ewogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIGlmIChJbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1l
bnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpKQorICAgIGlmIChJbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy0+aW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpKQogICAgICAgICBkb21EZWJ1Z2dlckFn
ZW50LT5kaWRSZW1vdmVET01Ob2RlKG5vZGUpOwogI2VuZGlmCi0gICAgaWYgKEluc3BlY3RvckRP
TUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCkt
Pmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTUFnZW50KCkpCiAgICAgICAgIGRv
bUFnZW50LT5kaWRSZW1vdmVET01Ob2RlKG5vZGUpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbE1vZGlmeURPTUF0dHJJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudCwgRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsTW9kaWZ5RE9NQXR0ckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cywgRWxlbWVudCogZWxlbWVudCkKIHsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKLSAgICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJBZ2Vu
dCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCogZG9tRGVi
dWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQoKSkKICAgICAgICAgZG9tRGVidWdnZXJBZ2VudC0+d2lsbE1vZGlmeURPTUF0dHIoZWxlbWVu
dCk7CiAjZW5kaWYKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1vZGlm
eURPTUF0dHJJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgRWxlbWVudCogZWxl
bWVudCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNb2RpZnlET01BdHRySW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBFbGVtZW50KiBlbGVt
ZW50KQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JB
Z2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlm
IChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNw
ZWN0b3JET01BZ2VudCgpKQogICAgICAgICBkb21BZ2VudC0+ZGlkTW9kaWZ5RE9NQXR0cihlbGVt
ZW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRhdGVT
dHlsZUF0dHJJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgTm9kZSogbm9kZSkK
K3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRySW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBOb2RlKiBub2RlKQog
ewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+
aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlmIChJbnNw
ZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JE
T01BZ2VudCgpKQogICAgICAgICBkb21BZ2VudC0+ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihub2Rl
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgbW9kaWZpZXJGbGFncykKK3ZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1
bnNpZ25lZCBtb2RpZmllckZsYWdzKQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9t
QWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JE
T01BZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JET01BZ2VudCgpKQogICAgICAgICBkb21BZ2VudC0+bW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQocmVzdWx0LCBtb2RpZmllckZsYWdzKTsKIH0KIAotYm9vbCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmhhbmRsZU1vdXNlUHJlc3NJbXBsKEluc3BlY3RvckFn
ZW50KiBpbnNwZWN0b3JBZ2VudCkKK2Jvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYW5k
bGVNb3VzZVByZXNzSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
KQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JBZ2Vu
dC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlmIChJ
bnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0
b3JET01BZ2VudCgpKQogICAgICAgICByZXR1cm4gZG9tQWdlbnQtPmhhbmRsZU1vdXNlUHJlc3Mo
KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2Vu
dCwgQ2hhcmFjdGVyRGF0YSogY2hhcmFjdGVyRGF0YSkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMsIENoYXJhY3RlckRhdGEqIGNoYXJhY3RlckRhdGEpCiB7Ci0gICAg
aWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVt
ZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvckRP
TUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTUFnZW50
KCkpCiAgICAgICAgIGRvbUFnZW50LT5jaGFyYWN0ZXJEYXRhTW9kaWZpZWQoY2hhcmFjdGVyRGF0
YSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFhNTEh0dHBS
ZXF1ZXN0SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IFN0cmluZyYg
dXJsKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kWE1MSHR0cFJlcXVl
c3RJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnN0IFN0
cmluZyYgdXJsKQogewogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIGlmIChJ
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zcGVjdG9yQWdl
bnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpKQor
ICAgIGlmIChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpKQogICAgICAgICBk
b21EZWJ1Z2dlckFnZW50LT53aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KHVybCk7CiAjZW5kaWYKIH0K
IAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjaGVkdWxlUmVzb3VyY2VSZXF1
ZXN0SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IFN0cmluZyYgdXJs
KQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjaGVkdWxlUmVzb3VyY2VSZXF1
ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBT
dHJpbmcmIHVybCkKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVB
Z2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2VudCkpCisgICAgaWYgKElu
c3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
LT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZFNj
aGVkdWxlUmVzb3VyY2VSZXF1ZXN0KHVybCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRJbnN0YWxsVGltZXJJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2Vu
dCwgaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpCit2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW5zdGFsbFRpbWVySW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnQgdGltZXJJZCwgaW50IHRpbWVvdXQsIGJvb2wg
c2luZ2xlU2hvdCkKIHsKLSAgICBwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChpbnNwZWN0b3JB
Z2VudCwgaW5zdHJ1bWVudGF0aW9uRXZlbnRDYXRlZ29yeVR5cGUsIHNldFRpbWVyRXZlbnROYW1l
LCB0cnVlKTsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9
IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2VudCkpCisgICAgcGF1c2VPbk5hdGl2
ZUV2ZW50SWZOZWVkZWQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zdHJ1bWVudGF0aW9uRXZlbnRD
YXRlZ29yeVR5cGUsIHNldFRpbWVyRXZlbnROYW1lLCB0cnVlKTsKKyAgICBpZiAoSW5zcGVjdG9y
VGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkSW5zdGFsbFRp
bWVyKHRpbWVySWQsIHRpbWVvdXQsIHNpbmdsZVNob3QpOwogfQogCi12b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkUmVtb3ZlVGltZXJJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudCwgaW50IHRpbWVySWQpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
UmVtb3ZlVGltZXJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMs
IGludCB0aW1lcklkKQogewotICAgIHBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKGluc3BlY3Rv
ckFnZW50LCBpbnN0cnVtZW50YXRpb25FdmVudENhdGVnb3J5VHlwZSwgY2xlYXJUaW1lckV2ZW50
TmFtZSwgdHJ1ZSk7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdl
bnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIHBhdXNlT25O
YXRpdmVFdmVudElmTmVlZGVkKGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3RydW1lbnRhdGlvbkV2
ZW50Q2F0ZWdvcnlUeXBlLCBjbGVhclRpbWVyRXZlbnROYW1lLCB0cnVlKTsKKyAgICBpZiAoSW5z
cGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMt
Pmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkUmVt
b3ZlVGltZXIodGltZXJJZCk7CiB9CiAKLUluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxDYWxsRnVuY3Rpb25JbXBsKEluc3BlY3RvckFn
ZW50KiBpbnNwZWN0b3JBZ2VudCwgY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0
TGluZSkKK0luc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxDYWxsRnVuY3Rpb25JbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMsIGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUpCiB7
CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2VudCk7
Ci0gICAgaWYgKHRpbWVsaW5lQWdlbnQpIHsKKyAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclRpbWVsaW5l
QWdlbnQoKSkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsQ2FsbEZ1bmN0aW9uKHNjcmlw
dE5hbWUsIHNjcmlwdExpbmUpOwogICAgICAgICB0aW1lbGluZUFnZW50SWQgPSB0aW1lbGluZUFn
ZW50LT5pZCgpOwogICAgIH0KLSAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llKGluc3BlY3RvckFnZW50LCB0aW1lbGluZUFnZW50SWQpOworICAgIHJldHVybiBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zdHJ1bWVudGluZ0FnZW50cywgdGltZWxpbmVBZ2Vu
dElkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlv
bkltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUpCkBAIC0y
MjQsMTUgKzIyNiwxNSBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FsbEZ1
bmN0aW9uSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpbwogICAgICAgICB0aW1lbGlu
ZUFnZW50LT5kaWRDYWxsRnVuY3Rpb24oKTsKIH0KIAotSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbENoYW5nZVhIUlJlYWR5U3RhdGVJ
bXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgWE1MSHR0cFJlcXVlc3QqIHJlcXVl
c3QpCitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsQ2hhbmdlWEhSUmVhZHlTdGF0ZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgWE1MSHR0cFJlcXVlc3QqIHJlcXVlc3QpCiB7CiAgICAgaW50IHRp
bWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVB
Z2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2VudCk7CisgICAgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmlu
c3BlY3RvclRpbWVsaW5lQWdlbnQoKTsKICAgICBpZiAodGltZWxpbmVBZ2VudCAmJiByZXF1ZXN0
LT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkucmVhZHlzdGF0ZWNoYW5nZUV2ZW50KSkg
ewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsQ2hhbmdlWEhSUmVhZHlTdGF0ZShyZXF1ZXN0
LT51cmwoKS5zdHJpbmcoKSwgcmVxdWVzdC0+cmVhZHlTdGF0ZSgpKTsKICAgICAgICAgdGltZWxp
bmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnNwZWN0b3JBZ2VudCwgdGltZWxpbmVBZ2VudElk
KTsKKyAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3RydW1lbnRp
bmdBZ2VudHMsIHRpbWVsaW5lQWdlbnRJZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRDaGFuZ2VYSFJSZWFkeVN0YXRlSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUmIGNvb2tpZSkKQEAgLTI0MSwxNyArMjQzLDE3IEBAIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VYSFJSZWFkeVN0YXRlSW1wbChjb25zdCBJbnNw
ZWN0b3JJbnN0cnVtCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZENoYW5nZVhIUlJlYWR5U3Rh
dGUoKTsKIH0KIAotSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudCwgY29uc3QgRXZlbnQmIGV2ZW50LCBET01XaW5kb3cqIHdpbmRvdywgTm9kZSogbm9k
ZSwgY29uc3QgVmVjdG9yPEV2ZW50Q29udGV4dD4mIGFuY2VzdG9ycykKK0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2
ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBF
dmVudCYgZXZlbnQsIERPTVdpbmRvdyogd2luZG93LCBOb2RlKiBub2RlLCBjb25zdCBWZWN0b3I8
RXZlbnRDb250ZXh0PiYgYW5jZXN0b3JzKQogewotICAgIHBhdXNlT25OYXRpdmVFdmVudElmTmVl
ZGVkKGluc3BlY3RvckFnZW50LCBsaXN0ZW5lckV2ZW50Q2F0ZWdvcnlUeXBlLCBldmVudC50eXBl
KCksIGZhbHNlKTsKKyAgICBwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChpbnN0cnVtZW50aW5n
QWdlbnRzLCBsaXN0ZW5lckV2ZW50Q2F0ZWdvcnlUeXBlLCBldmVudC50eXBlKCksIGZhbHNlKTsK
IAogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9yQWdlbnQp
OworICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCk7CiAgICAgaWYgKHRpbWVsaW5lQWdl
bnQgJiYgZXZlbnRIYXNMaXN0ZW5lcnMoZXZlbnQudHlwZSgpLCB3aW5kb3csIG5vZGUsIGFuY2Vz
dG9ycykpIHsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbERpc3BhdGNoRXZlbnQoZXZlbnQp
OwogICAgICAgICB0aW1lbGluZUFnZW50SWQgPSB0aW1lbGluZUFnZW50LT5pZCgpOwogICAgIH0K
LSAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3BlY3RvckFnZW50
LCB0aW1lbGluZUFnZW50SWQpOworICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUoaW5zdHJ1bWVudGluZ0FnZW50cywgdGltZWxpbmVBZ2VudElkKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnRJbXBsKGNvbnN0IEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYgY29va2llKQpAQCAtMjYyLDE3ICsyNjQsMTcgQEAg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnRJbXBsKGNvbnN0
IEluc3BlY3Rvckluc3RydW1lbnRhdGkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkRGlzcGF0
Y2hFdmVudCgpOwogfQogCi1JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93SW1wbChJbnNwZWN0b3JB
Z2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IEV2ZW50JiBldmVudCwgRE9NV2luZG93KiB3aW5k
b3cpCitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBFdmVudCYgZXZlbnQsIERPTVdpbmRvdyogd2luZG93
KQogewotICAgIHBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKGluc3BlY3RvckFnZW50LCBsaXN0
ZW5lckV2ZW50Q2F0ZWdvcnlUeXBlLCBldmVudC50eXBlKCksIGZhbHNlKTsKKyAgICBwYXVzZU9u
TmF0aXZlRXZlbnRJZk5lZWRlZChpbnN0cnVtZW50aW5nQWdlbnRzLCBsaXN0ZW5lckV2ZW50Q2F0
ZWdvcnlUeXBlLCBldmVudC50eXBlKCksIGZhbHNlKTsKIAogICAgIGludCB0aW1lbGluZUFnZW50
SWQgPSAwOwotICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRy
aWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9yQWdlbnQpOworICAgIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1l
bGluZUFnZW50KCk7CiAgICAgaWYgKHRpbWVsaW5lQWdlbnQgJiYgd2luZG93LT5oYXNFdmVudExp
c3RlbmVycyhldmVudC50eXBlKCkpKSB7CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxEaXNw
YXRjaEV2ZW50KGV2ZW50KTsKICAgICAgICAgdGltZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2Vu
dC0+aWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZShpbnNwZWN0b3JBZ2VudCwgdGltZWxpbmVBZ2VudElkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3RydW1lbnRpbmdBZ2VudHMsIHRpbWVsaW5lQWdlbnRJ
ZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2ZW50
T25XaW5kb3dJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYgY29va2ll
KQpAQCAtMjgzLDE1ICsyODUsMTQgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZERpc3BhdGNoRXZlbnRPbldpbmRvd0ltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHIKICAgICAgICAg
dGltZWxpbmVBZ2VudC0+ZGlkRGlzcGF0Y2hFdmVudCgpOwogfQogCi1JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVTY3Jp
cHRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgY29uc3QgU3RyaW5nJiB1cmws
IGludCBsaW5lTnVtYmVyKQorSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbEV2YWx1YXRlU2NyaXB0SW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1i
ZXIpCiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JB
Z2VudCk7Ci0gICAgaWYgKHRpbWVsaW5lQWdlbnQpIHsKKyAgICBpZiAoSW5zcGVjdG9yVGltZWxp
bmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclRp
bWVsaW5lQWdlbnQoKSkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsRXZhbHVhdGVTY3Jp
cHQodXJsLCBsaW5lTnVtYmVyKTsKICAgICAgICAgdGltZWxpbmVBZ2VudElkID0gdGltZWxpbmVB
Z2VudC0+aWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZShpbnNwZWN0b3JBZ2VudCwgdGltZWxpbmVBZ2VudElkKTsKKyAgICByZXR1cm4gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3RydW1lbnRpbmdBZ2VudHMsIHRpbWVsaW5lQWdl
bnRJZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRFdmFsdWF0ZVNj
cmlwdEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUpCkBA
IC0zMDAsMTcgKzMwMSwxNiBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRXZh
bHVhdGVTY3JpcHRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdAogICAgICAgICB0aW1l
bGluZUFnZW50LT5kaWRFdmFsdWF0ZVNjcmlwdCgpOwogfQogCi1JbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRmlyZVRpbWVySW1wbChJ
bnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGludCB0aW1lcklkKQorSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEZpcmVUaW1l
ckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgaW50IHRpbWVy
SWQpCiB7Ci0gICAgcGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoaW5zcGVjdG9yQWdlbnQsIGlu
c3RydW1lbnRhdGlvbkV2ZW50Q2F0ZWdvcnlUeXBlLCB0aW1lckZpcmVkRXZlbnROYW1lLCBmYWxz
ZSk7CisgICAgcGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoaW5zdHJ1bWVudGluZ0FnZW50cywg
aW5zdHJ1bWVudGF0aW9uRXZlbnRDYXRlZ29yeVR5cGUsIHRpbWVyRmlyZWRFdmVudE5hbWUsIGZh
bHNlKTsKIAogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9y
QWdlbnQpOwotICAgIGlmICh0aW1lbGluZUFnZW50KSB7CisgICAgaWYgKEluc3BlY3RvclRpbWVs
aW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JU
aW1lbGluZUFnZW50KCkpIHsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbEZpcmVUaW1lcih0
aW1lcklkKTsKICAgICAgICAgdGltZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsK
ICAgICB9Ci0gICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnNwZWN0
b3JBZ2VudCwgdGltZWxpbmVBZ2VudElkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llKGluc3RydW1lbnRpbmdBZ2VudHMsIHRpbWVsaW5lQWdlbnRJZCk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaXJlVGltZXJJbXBsKGNvbnN0IElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYgY29va2llKQpAQCAtMzIxLDE1ICszMjEsMTQg
QEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpcmVUaW1lckltcGwoY29uc3Qg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ28KICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkRmly
ZVRpbWVyKCk7CiB9CiAKLUluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxMYXlvdXRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudCkKK0luc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxMYXlvdXRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMpCiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0
b3JBZ2VudCk7Ci0gICAgaWYgKHRpbWVsaW5lQWdlbnQpIHsKKyAgICBpZiAoSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3Rv
clRpbWVsaW5lQWdlbnQoKSkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsTGF5b3V0KCk7
CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9IHRpbWVsaW5lQWdlbnQtPmlkKCk7CiAgICAgfQot
ICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zcGVjdG9yQWdlbnQs
IHRpbWVsaW5lQWdlbnRJZCk7CisgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZShpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lbGluZUFnZW50SWQpOwogfQogCiB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTGF5b3V0SW1wbChjb25zdCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSkKQEAgLTMzOCwxNSArMzM3LDE1IEBAIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRMYXlvdXRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZExheW91dCgpOwogfQog
Ci1JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsTG9hZFhIUkltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBYTUxIdHRw
UmVxdWVzdCogcmVxdWVzdCkKK0luc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxMb2FkWEhSSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzLCBYTUxIdHRwUmVxdWVzdCogcmVxdWVzdCkKIHsKICAgICBpbnQg
dGltZWxpbmVBZ2VudElkID0gMDsKLSAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGlu
ZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGluc3BlY3RvckFnZW50KTsKKyAgICBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+
aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpOwogICAgIGlmICh0aW1lbGluZUFnZW50ICYmIHJlcXVl
c3QtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQpKSB7CiAgICAgICAg
IHRpbWVsaW5lQWdlbnQtPndpbGxMb2FkWEhSKHJlcXVlc3QtPnVybCgpKTsKICAgICAgICAgdGlt
ZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnNwZWN0b3JBZ2VudCwgdGltZWxpbmVBZ2Vu
dElkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3RydW1l
bnRpbmdBZ2VudHMsIHRpbWVsaW5lQWdlbnRJZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRMb2FkWEhSSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUmIGNvb2tpZSkKQEAgLTM1NSwxNSArMzU0LDE0IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRMb2FkWEhSSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29rCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZExvYWRYSFIoKTsKIH0KIAotSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFBhaW50
SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IEludFJlY3QmIHJlY3Qp
CitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsUGFpbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMs
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0g
ICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxp
bmVBZ2VudChpbnNwZWN0b3JBZ2VudCk7Ci0gICAgaWYgKHRpbWVsaW5lQWdlbnQpIHsKKyAgICBp
ZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMtPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkgewogICAgICAgICB0aW1lbGluZUFnZW50
LT53aWxsUGFpbnQocmVjdCk7CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9IHRpbWVsaW5lQWdl
bnQtPmlkKCk7CiAgICAgfQotICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUoaW5zcGVjdG9yQWdlbnQsIHRpbWVsaW5lQWdlbnRJZCk7CisgICAgcmV0dXJuIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lbGluZUFnZW50
SWQpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUGFpbnRJbXBsKGNv
bnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYgY29va2llKQpAQCAtMzcyLDE1ICsz
NzAsMTQgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFBhaW50SW1wbChjb25z
dCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUKICAgICAgICAgdGltZWxpbmVBZ2VudC0+
ZGlkUGFpbnQoKTsKIH0KIAotSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbFJlY2FsY3VsYXRlU3R5bGVJbXBsKEluc3BlY3RvckFnZW50
KiBpbnNwZWN0b3JBZ2VudCkKK0luc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNhbGN1bGF0ZVN0eWxlSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewogICAgIGludCB0aW1lbGluZUFnZW50SWQg
PSAwOwotICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2
ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9yQWdlbnQpOwotICAgIGlmICh0aW1lbGluZUFnZW50KSB7
CisgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpIHsKICAgICAgICAgdGltZWxp
bmVBZ2VudC0+d2lsbFJlY2FsY3VsYXRlU3R5bGUoKTsKICAgICAgICAgdGltZWxpbmVBZ2VudElk
ID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZShpbnNwZWN0b3JBZ2VudCwgdGltZWxpbmVBZ2VudElkKTsKKyAgICBy
ZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3RydW1lbnRpbmdBZ2VudHMs
IHRpbWVsaW5lQWdlbnRJZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRSZWNhbGN1bGF0ZVN0eWxlSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUmIGNvb2tpZSkKQEAgLTM4OSw0OCArMzg2LDQ4IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRSZWNhbGN1bGF0ZVN0eWxlSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50
CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZFJlY2FsY3VsYXRlU3R5bGUoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFwcGx5VXNlckFnZW50T3ZlcnJpZGVJbXBsKElu
c3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgU3RyaW5nKiB1c2VyQWdlbnQpCit2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZUltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgU3RyaW5nKiB1c2VyQWdlbnQpCiB7
Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSByZXRyaWV2
ZVJlc291cmNlQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlmIChJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVz
b3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5hcHBseVVzZXJBZ2VudE92ZXJy
aWRlKHVzZXJBZ2VudCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
U2VuZFJlcXVlc3RJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgdW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciogbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRSZXF1ZXN0SW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9y
VGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNw
ZWN0b3JBZ2VudCkpCisgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCiAgICAg
ICAgIHRpbWVsaW5lQWdlbnQtPndpbGxTZW5kUmVzb3VyY2VSZXF1ZXN0KGlkZW50aWZpZXIsIHJl
cXVlc3QpOwotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0g
cmV0cmlldmVSZXNvdXJjZUFnZW50KGluc3BlY3RvckFnZW50KSkKKyAgICBpZiAoSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3Bl
Y3RvclJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+d2lsbFNlbmRSZXF1
ZXN0KGlkZW50aWZpZXIsIGxvYWRlciwgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250aW51ZUFmdGVyUGluZ0xvYWRlcklt
cGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6Y29udGludWVBZnRlclBpbmdMb2FkZXJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKIHsKLSAgICB3aWxsU2VuZFJlcXVlc3RJbXBsKGluc3BlY3RvckFnZW50
LCBpZGVudGlmaWVyLCBsb2FkZXIsIHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICB3aWxsU2VuZFJl
cXVlc3RJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIsIGxvYWRlciwgcmVxdWVz
dCwgcmVzcG9uc2UpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bWFya1Jl
c291cmNlQXNDYWNoZWRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1hcmtS
ZXNvdXJjZUFzQ2FjaGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291
cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSByZXRyaWV2ZVJlc291cmNlQWdlbnQoaW5zcGVjdG9y
QWdlbnQpKQorICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQogICAgICAgICBy
ZXNvdXJjZUFnZW50LT5tYXJrUmVzb3VyY2VBc0NhY2hlZChpZGVudGlmaWVyKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNo
ZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBEb2N1bWVudExvYWRlciogbG9h
ZGVyLCBjb25zdCBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCit2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBEb2N1bWVudExvYWRlciogbG9h
ZGVyLCBjb25zdCBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiB7Ci0gICAgaWYgKCFp
bnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgpKQorICAgIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckFnZW50KCk7CisgICAgaWYgKCFp
bnNwZWN0b3JBZ2VudCB8fCAhaW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gcmV0
cmlldmVSZXNvdXJjZUFnZW50KGluc3BlY3RvckFnZW50KSkKKyAgICBpZiAoSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3Rv
clJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkTG9hZFJlc291cmNl
RnJvbU1lbW9yeUNhY2hlKGxvYWRlciwgY2FjaGVkUmVzb3VyY2UpOwogfQogCi1JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVjZWl2
ZVJlc291cmNlRGF0YUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIpCitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVjZWl2ZVJlc291cmNlRGF0YUltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
KQogewogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9yQWdl
bnQpOwotICAgIGlmICh0aW1lbGluZUFnZW50KSB7CisgICAgaWYgKEluc3BlY3RvclRpbWVsaW5l
QWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1l
bGluZUFnZW50KCkpIHsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbFJlY2VpdmVSZXNvdXJj
ZURhdGEoaWRlbnRpZmllcik7CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9IHRpbWVsaW5lQWdl
bnQtPmlkKCk7CiAgICAgfQotICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUoaW5zcGVjdG9yQWdlbnQsIHRpbWVsaW5lQWdlbnRJZCk7CisgICAgcmV0dXJuIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lbGluZUFnZW50
SWQpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVJlc291
cmNlRGF0YUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUp
CkBAIC00MzksMTUgKzQzNiwxNSBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
UmVjZWl2ZVJlc291cmNlRGF0YUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bQogICAgICAgICB0
aW1lbGluZUFnZW50LT5kaWRSZWNlaXZlUmVzb3VyY2VEYXRhKCk7CiB9CiAKLUluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNlaXZl
UmVzb3VyY2VSZXNwb25zZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCB1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQor
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d2lsbFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAg
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5l
QWdlbnQoaW5zcGVjdG9yQWdlbnQpOworICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVs
aW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCk7
CiAgICAgaWYgKHRpbWVsaW5lQWdlbnQpIHsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbFJl
Y2VpdmVSZXNvdXJjZVJlc3BvbnNlKGlkZW50aWZpZXIsIHJlc3BvbnNlKTsKICAgICAgICAgdGlt
ZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnNwZWN0b3JBZ2VudCwgdGltZWxpbmVBZ2Vu
dElkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3RydW1l
bnRpbmdBZ2VudHMsIHRpbWVsaW5lQWdlbnRJZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRSZWNlaXZlUmVzb3VyY2VSZXNwb25zZUltcGwoY29uc3QgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
RG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
CkBAIC00NTYsMTIgKzQ1MywxMyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
UmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBsKGNvbnN0IEluc3BlY3RvcklucwogICAgICAgICB0
aW1lbGluZUFnZW50LT5kaWRSZWNlaXZlUmVzb3VyY2VSZXNwb25zZSgpOwogICAgIGlmICghbG9h
ZGVyKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudCA9IGluc3BlY3RvckFnZW50Rm9yRnJhbWUobG9hZGVyLT5mcmFtZSgpKSkgewotICAgICAg
ICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IHJldHJpZXZlUmVz
b3VyY2VBZ2VudChpbnNwZWN0b3JBZ2VudCkpCi0gICAgICAgICAgICByZXNvdXJjZUFnZW50LT5k
aWRSZWNlaXZlUmVzcG9uc2UoaWRlbnRpZmllciwgbG9hZGVyLCByZXNwb25zZSk7Ci0gICAgICAg
IGlmIChJbnNwZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3BlY3RvckFnZW50
LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckNvbnNvbGVBZ2VudCgpKQotICAgICAg
ICAgICAgY29uc29sZUFnZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaWRlbnRpZmllciwgcmVzcG9u
c2UpOyAvLyBUaGlzIHNob3VsZCBjb21lIEFGVEVSIHJlc291cmNlIG5vdGlmaWNhdGlvbiwgZnJv
bnQtZW5kIHJlbGllcyBvbiB0aGlzLgotICAgIH0KKyAgICBJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzID0gY29va2llLmZpcnN0OworICAgIGlmICghaW5zdHJ1bWVudGlu
Z0FnZW50cykKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50
KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVzb3VyY2VB
Z2VudCgpKQorICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaWRlbnRp
ZmllciwgbG9hZGVyLCByZXNwb25zZSk7CisgICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCog
Y29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ29uc29sZUFnZW50
KCkpCisgICAgICAgIGNvbnNvbGVBZ2VudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGlkZW50aWZpZXIs
IHJlc3BvbnNlKTsgLy8gVGhpcyBzaG91bGQgY29tZSBBRlRFUiByZXNvdXJjZSBub3RpZmljYXRp
b24sIGZyb250LWVuZCByZWxpZXMgb24gdGhpcy4KIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlQnV0Q2FuY2VsZWRJbXBsKEZyYW1l
KiBmcmFtZSwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByKQpAQCAtNDg1LDQ1ICs0ODMsNDUgQEAgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlV2l0aFBvbGljeUlnbm9yZUltcGwoRnJh
bWUqIGZyYW1lLCBEb2N1bWUKICAgICBkaWRSZWNlaXZlUmVzb3VyY2VSZXNwb25zZUJ1dENhbmNl
bGVkSW1wbChmcmFtZSwgbG9hZGVyLCBpZGVudGlmaWVyLCByKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVDb250ZW50TGVuZ3RoSW1wbChJbnNwZWN0b3JB
Z2VudCogaW5zcGVjdG9yQWdlbnQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgaW50IGRhdGFM
ZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRSZWNlaXZlQ29udGVudExlbmd0aEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgZGF0YUxlbmd0
aCwgaW50IGVuY29kZWREYXRhTGVuZ3RoKQogewotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50KiByZXNvdXJjZUFnZW50ID0gcmV0cmlldmVSZXNvdXJjZUFnZW50KGluc3BlY3RvckFnZW50
KSkKKyAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3Vy
Y2VBZ2VudC0+ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoaWRlbnRpZmllciwgZGF0YUxlbmd0aCwg
ZW5jb2RlZERhdGFMZW5ndGgpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkRmluaXNoTG9hZGluZ0ltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCB1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pc2hUaW1lKQordm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZEZpbmlzaExvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZp
bmlzaFRpbWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdl
bnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlmIChJbnNw
ZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+
aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRGaW5p
c2hMb2FkaW5nUmVzb3VyY2UoaWRlbnRpZmllciwgZmFsc2UsIGZpbmlzaFRpbWUpOwotICAgIGlm
IChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gcmV0cmlldmVSZXNvdXJj
ZUFnZW50KGluc3BlY3RvckFnZW50KSkKKyAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCog
cmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJlc291cmNlQWdl
bnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVy
LCBmaW5pc2hUaW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZh
aWxMb2FkaW5nSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkRmFpbExvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVz
b3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRp
bWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAg
IGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy0+aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50
LT5kaWRGaW5pc2hMb2FkaW5nUmVzb3VyY2UoaWRlbnRpZmllciwgdHJ1ZSwgMCk7Ci0gICAgaWYg
KEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSByZXRyaWV2ZVJlc291cmNl
QWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiBy
ZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRGYWlsTG9hZGluZyhpZGVudGlmaWVyLCBl
cnJvcik7Ci0gICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5z
cGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yQ29uc29sZUFnZW50
KCkpCisgICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNvbGVB
Z2VudC0+ZGlkRmFpbExvYWRpbmcoaWRlbnRpZmllciwgZXJyb3IpOyAvLyBUaGlzIHNob3VsZCBj
b21lIEFGVEVSIHJlc291cmNlIG5vdGlmaWNhdGlvbiwgZnJvbnQtZW5kIHJlbGllcyBvbiB0aGlz
LgogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cmVzb3VyY2VSZXRyaWV2ZWRC
eVhNTEh0dHBSZXF1ZXN0SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsIGNvbnN0IFN0
cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNlbmRVUkwsIHVuc2lnbmVkIHNlbmRMaW5lTnVtYmVy
KQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJlc291cmNlUmV0cmlldmVkQnlYTUxI
dHRwUmVxdWVzdEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywgY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2VuZFVSTCwgdW5zaWduZWQgc2VuZExpbmVO
dW1iZXIpCiB7Ci0gICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0g
aW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yQ29uc29sZUFn
ZW50KCkpCisgICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNv
bGVBZ2VudC0+cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVybCwgc2VuZFVSTCwg
c2VuZExpbmVOdW1iZXIpOwotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJj
ZUFnZW50ID0gcmV0cmlldmVSZXNvdXJjZUFnZW50KGluc3BlY3RvckFnZW50KSkKKyAgICBpZiAo
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMtPmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+c2V0
SW5pdGlhbFhIUkNvbnRlbnQoaWRlbnRpZmllciwgc291cmNlU3RyaW5nKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNjcmlwdEltcG9ydGVkSW1wbChJbnNwZWN0b3JBZ2Vu
dCogaW5zcGVjdG9yQWdlbnQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBzb3VyY2VTdHJpbmcpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0SW1w
b3J0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpCiB7Ci0gICAg
aWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSByZXRyaWV2ZVJlc291
cmNlQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50
KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVzb3VyY2VB
Z2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5zZXRJbml0aWFsU2NyaXB0Q29udGVudChp
ZGVudGlmaWVyLCBzb3VyY2VTdHJpbmcpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZG9tQ29udGVudExvYWRlZEV2ZW50RmlyZWRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCwgRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwpCit2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZG9tQ29udGVudExvYWRlZEV2ZW50RmlyZWRJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lKiBmcmFtZSwgY29uc3QgS1VS
TCYgdXJsKQogewogICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKICAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXIpOwpA
QCAtNTMxLDQ5ICs1MjksNDkgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRvbUNv
bnRlbnRMb2FkZWRFdmVudEZpcmVkSW1wbChJbnNwZWN0b3JBZ2VudCogaW4KICAgICBpZiAoZnJh
bWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkgIT0gZnJhbWUgfHwgdXJsICE9IGRvY3VtZW50TG9hZGVy
LT5yZXF1ZXN0VVJMKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGluc3BlY3RvckFnZW50LT5k
b21Db250ZW50TG9hZGVkRXZlbnRGaXJlZCgpOworICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5z
cGVjdG9yQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JBZ2VudCgpKQorICAg
ICAgICBpbnNwZWN0b3JBZ2VudC0+ZG9tQ29udGVudExvYWRlZEV2ZW50RmlyZWQoKTsKIAotICAg
IGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1
bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JE
T01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JET01BZ2Vu
dCgpKQogICAgICAgICBkb21BZ2VudC0+bWFpbkZyYW1lRE9NQ29udGVudExvYWRlZCgpOwogCi0g
ICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnNwZWN0b3JB
Z2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCisg
ICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdl
bnQtPmRpZE1hcmtET01Db250ZW50RXZlbnQoKTsKIAotICAgIGlmIChJbnNwZWN0b3JQYWdlQWdl
bnQqIHBhZ2VBZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmlu
c3BlY3RvclBhZ2VBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclBhZ2VBZ2VudCgpKQogICAgICAgICBw
YWdlQWdlbnQtPmRvbUNvbnRlbnRFdmVudEZpcmVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpsb2FkRXZlbnRGaXJlZEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50LCBGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCkKK3ZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpsb2FkRXZlbnRGaXJlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAg
RG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpOwogICAgIEFTU0VSVChkb2N1bWVudExvYWRlcik7CiAKLSAgICBpZiAoSW5zcGVj
dG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2Vu
dHMoKS0+aW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRv
bUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NQWdlbnQoKSkKICAgICAg
ICAgZG9tQWdlbnQtPmxvYWRFdmVudEZpcmVkKGRvY3VtZW50TG9hZGVyLT5mcmFtZSgpLT5kb2N1
bWVudCgpKTsKIAogICAgIGlmIChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSAhPSBmcmFtZSB8
fCB1cmwgIT0gZG9jdW1lbnRMb2FkZXItPnJlcXVlc3RVUkwoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnNwZWN0
b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkp
CisgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5l
QWdlbnQtPmRpZE1hcmtMb2FkRXZlbnQoKTsKIAotICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQq
IHBhZ2VBZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3Bl
Y3RvclBhZ2VBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclBhZ2VBZ2VudCgpKQogICAgICAgICBwYWdl
QWdlbnQtPmxvYWRFdmVudEZpcmVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpmcmFtZURldGFjaGVkRnJvbVBhcmVudEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50LCBGcmFtZSogZnJhbWUpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJh
bWVEZXRhY2hlZEZyb21QYXJlbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBw
YWdlQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0
b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBp
bnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKICAgICAgICAgcGFnZUFn
ZW50LT5mcmFtZURldGFjaGVkKGZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZENvbW1pdExvYWRJbXBsKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRDb21taXRMb2FkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQogewotICAg
IGlmICghaW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKKyAgICBJbnNwZWN0b3JBZ2VudCogaW5z
cGVjdG9yQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JBZ2VudCgpOworICAg
IGlmICghaW5zcGVjdG9yQWdlbnQgfHwgIWluc3BlY3RvckFnZW50LT5lbmFibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpOwotCiAgICAgaWYgKElu
c3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVj
dG9yUGFnZUFnZW50KCkpCiAgICAgICAgIHBhZ2VBZ2VudC0+ZnJhbWVOYXZpZ2F0ZWQobG9hZGVy
KTsKIApAQCAtNjExLDE1ICs2MDksMTQgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZENvbW1pdExvYWRJbXBsKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBpbnMKICAgICBp
bnNwZWN0b3JBZ2VudC0+ZGlkQ29tbWl0TG9hZCgpOwogfQogCi1JbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsV3JpdGVIVE1MSW1wbChJ
bnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIHVuc2lnbmVkIGludCBsZW5ndGgsIHVuc2ln
bmVkIGludCBzdGFydExpbmUpCitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsV3JpdGVIVE1MSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBpbnQg
c3RhcnRMaW5lKQogewogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5z
cGVjdG9yQWdlbnQpOwotICAgIGlmICh0aW1lbGluZUFnZW50KSB7CisgICAgaWYgKEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNw
ZWN0b3JUaW1lbGluZUFnZW50KCkpIHsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbFdyaXRl
SFRNTChsZW5ndGgsIHN0YXJ0TGluZSk7CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9IHRpbWVs
aW5lQWdlbnQtPmlkKCk7CiAgICAgfQotICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29raWUoaW5zcGVjdG9yQWdlbnQsIHRpbWVsaW5lQWdlbnRJZCk7CisgICAgcmV0dXJuIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lbGlu
ZUFnZW50SWQpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkV3JpdGVI
VE1MSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSwgdW5z
aWduZWQgaW50IGVuZExpbmUpCkBAIC02MjgsMzkgKzYyNSwzOSBAQCB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkV3JpdGVIVE1MSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25DbwogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRXcml0ZUhUTUwoZW5kTGluZSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlSW1w
bChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBN
ZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTY3Jp
cHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjph
ZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxl
dmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1l
bnRzPiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2spCiB7
Ci0gICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zcGVjdG9y
QWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCisg
ICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNvbGVBZ2VudC0+
YWRkTWVzc2FnZVRvQ29uc29sZShzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBhcmd1bWVu
dHMsIGNhbGxTdGFjayk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRN
ZXNzYWdlVG9Db25zb2xlSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIE1lc3Nh
Z2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBz
b3VyY2VJRCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25z
b2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBNZXNzYWdl
U291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291
cmNlSUQpCiB7Ci0gICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0g
aW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yQ29uc29sZUFn
ZW50KCkpCisgICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNv
bGVBZ2VudC0+YWRkTWVzc2FnZVRvQ29uc29sZShzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdl
LCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpjb25zb2xlQ291bnRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgUGFz
c1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTY3JpcHRDYWxs
U3RhY2s+IHN0YWNrKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3Vu
dEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFzc1JlZlB0
cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+
IHN0YWNrKQogewotICAgIGlmIChJbnNwZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9
IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckNvbnNvbGVB
Z2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckNvbnNvbGVBZ2VudCgpKQogICAgICAgICBjb25z
b2xlQWdlbnQtPmNvdW50KGFyZ3VtZW50cywgc3RhY2spOwogfQogCi12b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6c3RhcnRDb25zb2xlVGltaW5nSW1wbChJbnNwZWN0b3JBZ2VudCogaW5z
cGVjdG9yQWdlbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUpCit2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6c3RhcnRDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewotICAgIGlmIChJbnNwZWN0
b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50
aW5nQWdlbnRzKCktPmluc3BlY3RvckNvbnNvbGVBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JD
b25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3Rv
ckNvbnNvbGVBZ2VudCgpKQogICAgICAgICBjb25zb2xlQWdlbnQtPnN0YXJ0VGltaW5nKHRpdGxl
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGltaW5n
SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUs
IFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBzdGFjaykKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgY29uc3QgU3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxTY3JpcHRD
YWxsU3RhY2s+IHN0YWNrKQogewotICAgIGlmIChJbnNwZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNv
bGVBZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3Rv
ckNvbnNvbGVBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckNvbnNvbGVBZ2VudCgpKQogICAg
ICAgICBjb25zb2xlQWdlbnQtPnN0b3BUaW1pbmcodGl0bGUsIHN0YWNrKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVNYXJrVGltZWxpbmVJbXBsKEluc3BlY3Rv
ckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3Vt
ZW50cykKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlTWFya1RpbWVsaW5l
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRy
PFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQogewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGluc3BlY3RvckFn
ZW50KSkgeworICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKSB7CiAgICAgICAg
IFN0cmluZyBtZXNzYWdlOwogICAgICAgICBhcmd1bWVudHMtPmdldEZpcnN0QXJndW1lbnRBc1N0
cmluZyhtZXNzYWdlKTsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkTWFya1RpbWVsaW5lKG1l
c3NhZ2UpOwpAQCAtNjY4LDE2MSArNjY1LDE1MyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6Y29uc29sZU1hcmtUaW1lbGluZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rvcgog
fQogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi12b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6YWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlSW1wbChJbnNwZWN0
b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxp
bmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQordm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5z
aWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCiB7Ci0gICAgaWYgKElu
c3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5z
dHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JQcm9maWxlckFnZW50KCkpCisgICAgaWYgKElu
c3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
LT5pbnNwZWN0b3JQcm9maWxlckFnZW50KCkpCiAgICAgICAgIHByb2ZpbGVyQWdlbnQtPmFkZFN0
YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZSh0aXRsZSwgbGluZU51bWJlciwgc291cmNlVVJM
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZFByb2ZpbGVJbXBsKElu
c3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHByb2Zp
bGUsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2spCit2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6YWRkUHJvZmlsZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHByb2ZpbGUsIFBhc3NSZWZQ
dHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2spCiB7Ci0gICAgaWYgKEluc3BlY3RvclByb2Zp
bGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0Fn
ZW50cygpLT5pbnNwZWN0b3JQcm9maWxlckFnZW50KCkpIHsKKyAgICBpZiAoSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3Rv
clByb2ZpbGVyQWdlbnQoKSkgewogICAgICAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxhc3RD
YWxsZXIgPSBjYWxsU3RhY2stPmF0KDApOwogICAgICAgICBwcm9maWxlckFnZW50LT5hZGRQcm9m
aWxlKHByb2ZpbGUsIGxhc3RDYWxsZXIubGluZU51bWJlcigpLCBsYXN0Q2FsbGVyLnNvdXJjZVVS
TCgpKTsKICAgICB9CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmdldEN1
cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWVJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudCwgYm9vbCBpbmNyZW1lbnRQcm9maWxlTnVtYmVyKQorU3RyaW5nIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZUltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgYm9vbCBpbmNyZW1lbnRQcm9m
aWxlTnVtYmVyKQogewotICAgIGlmIChJbnNwZWN0b3JQcm9maWxlckFnZW50KiBwcm9maWxlckFn
ZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JQcm9maWxlckFnZW50KiBwcm9maWxlckFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUHJvZmlsZXJBZ2VudCgpKQogICAg
ICAgICByZXR1cm4gcHJvZmlsZXJBZ2VudC0+Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxl
TmFtZShpbmNyZW1lbnRQcm9maWxlTnVtYmVyKTsKICAgICByZXR1cm4gIiI7CiB9CiAKLWJvb2wg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwcm9maWxlckVuYWJsZWRJbXBsKEluc3BlY3RvckFn
ZW50KiBpbnNwZWN0b3JBZ2VudCkKK2Jvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwcm9m
aWxlckVuYWJsZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMp
CiB7Ci0gICAgaWYgKEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQgPSBpbnNw
ZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JQcm9maWxlckFnZW50
KCkpCisgICAgaWYgKEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JQcm9maWxlckFnZW50KCkpCiAgICAgICAgIHJldHVy
biBwcm9maWxlckFnZW50LT5lbmFibGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogI2VuZGlm
CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkT3BlbkRhdGFiYXNlSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIFBhc3NS
ZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCit2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5n
JiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQogewot
ICAgIGlmICghaW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKKyAgICBJbnNwZWN0b3JBZ2VudCog
aW5zcGVjdG9yQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JBZ2VudCgpOwor
ICAgIGlmICghaW5zcGVjdG9yQWdlbnQgfHwgIWluc3BlY3RvckFnZW50LT5lbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBpZiAoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogZGJBZ2VudCA9
IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRhdGFiYXNl
QWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogZGJBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRhdGFiYXNlQWdlbnQoKSkKICAgICAgICAgZGJBZ2Vu
dC0+ZGlkT3BlbkRhdGFiYXNlKGRhdGFiYXNlLCBkb21haW4sIG5hbWUsIHZlcnNpb24pOwogfQog
I2VuZGlmCiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi12b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkVXNlRE9NU3RvcmFnZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFn
ZW50LCBTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1l
KiBmcmFtZSkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRVc2VET01TdG9yYWdl
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBTdG9yYWdlQXJl
YSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSkKIHsKLSAg
ICBpZiAoIWluc3BlY3RvckFnZW50LT5lbmFibGVkKCkpCisgICAgSW5zcGVjdG9yQWdlbnQqIGlu
c3BlY3RvckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQWdlbnQoKTsKKyAg
ICBpZiAoIWluc3BlY3RvckFnZW50IHx8ICFpbnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCogZG9tU3RvcmFn
ZUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCogZG9t
U3RvcmFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50KCkpCiAgICAgICAgIGRvbVN0b3JhZ2VBZ2VudC0+ZGlkVXNlRE9NU3RvcmFnZShzdG9yYWdl
QXJlYSwgaXNMb2NhbFN0b3JhZ2UsIGZyYW1lKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFdP
UktFUlMpCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU3RhcnRXb3JrZXJDb250
ZXh0SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIFdvcmtlckNvbnRleHRQcm94
eSogd29ya2VyQ29udGV4dFByb3h5KQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFN0YXJ0V29ya2VyQ29udGV4dEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cywgV29ya2VyQ29udGV4dFByb3h5KiB3b3JrZXJDb250ZXh0UHJveHkpCiB7Ci0gICAg
aWYgKEluc3BlY3RvcldvcmtlckFnZW50KiB3b3JrZXJBZ2VudCA9IGluc3BlY3RvckFnZW50LT5p
bnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvcldvcmtlckFnZW50KCkpCisgICAgaWYgKElu
c3BlY3RvcldvcmtlckFnZW50KiB3b3JrZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmlu
c3BlY3RvcldvcmtlckFnZW50KCkpCiAgICAgICAgIHdvcmtlckFnZW50LT5kaWRTdGFydFdvcmtl
ckNvbnRleHQod29ya2VyQ29udGV4dFByb3h5KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZENyZWF0ZVdvcmtlckltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFn
ZW50LCBpbnRwdHJfdCBpZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWRXb3JrZXIp
Cit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlV29ya2VySW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnRwdHJfdCBpZCwgY29uc3Qg
U3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWRXb3JrZXIpCiB7Ci0gICAgaW5zcGVjdG9yQWdlbnQt
PmRpZENyZWF0ZVdvcmtlcihpZCwgdXJsLCBpc1NoYXJlZFdvcmtlcik7CisgICAgaWYgKEluc3Bl
Y3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3Rv
ckFnZW50KCkpCisgICAgICAgIGluc3BlY3RvckFnZW50LT5kaWRDcmVhdGVXb3JrZXIoaWQsIHVy
bCwgaXNTaGFyZWRXb3JrZXIpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkRGVzdHJveVdvcmtlckltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBpbnRw
dHJfdCBpZCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREZXN0cm95V29ya2Vy
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnRwdHJfdCBp
ZCkKIHsKLSAgICBpbnNwZWN0b3JBZ2VudC0+ZGlkRGVzdHJveVdvcmtlcihpZCk7CisgICAgaWYg
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmlu
c3BlY3RvckFnZW50KCkpCisgICAgICAgIGluc3BlY3RvckFnZW50LT5kaWREZXN0cm95V29ya2Vy
KGlkKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQotdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdlYlNvY2tldEltcGwoSW5zcGVjdG9yQWdlbnQq
IGluc3BlY3RvckFnZW50LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwmIHJl
cXVlc3RVUkwsIGNvbnN0IEtVUkwmKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZENyZWF0ZVdlYlNvY2tldEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBj
b25zdCBLVVJMJikKIHsKLSAgICBpZiAoIWluc3BlY3RvckFnZW50LT5lbmFibGVkKCkpCisgICAg
SW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5z
cGVjdG9yQWdlbnQoKTsKKyAgICBpZiAoIWluc3BlY3RvckFnZW50IHx8ICFpbnNwZWN0b3JBZ2Vu
dC0+ZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNl
QWdlbnQqIHJlc291cmNlQWdlbnQgPSByZXRyaWV2ZVJlc291cmNlQWdlbnQoaW5zcGVjdG9yQWdl
bnQpKQorICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNv
dXJjZUFnZW50LT5kaWRDcmVhdGVXZWJTb2NrZXQoaWRlbnRpZmllciwgcmVxdWVzdFVSTCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFdlYlNvY2tldEhhbmRz
aGFrZVJlcXVlc3RJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgdW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0JiByZXF1ZXN0
KQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kV2ViU29ja2V0SGFuZHNo
YWtlUmVxdWVzdEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0
JiByZXF1ZXN0KQogewotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFn
ZW50ID0gcmV0cmlldmVSZXNvdXJjZUFnZW50KGluc3BlY3RvckFnZW50KSkKKyAgICBpZiAoSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMt
Pmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+d2lsbFNl
bmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KGlkZW50aWZpZXIsIHJlcXVlc3QpOwogfQogCi12
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFr
ZVJlc3BvbnNlSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UmIHJlc3BvbnNl
KQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5k
c2hha2VSZXNwb25zZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXNw
b25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291
cmNlQWdlbnQgPSByZXRyaWV2ZVJlc291cmNlQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlm
IChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy0+aW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5k
aWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UoaWRlbnRpZmllciwgcmVzcG9uc2Up
OwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xvc2VXZWJTb2NrZXRJ
bXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENsb3NlV2ViU29ja2V0SW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNl
QWdlbnQgPSByZXRyaWV2ZVJlc291cmNlQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlmIChJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy0+aW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRD
bG9zZVdlYlNvY2tldChpZGVudGlmaWVyKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKE9GRkxJ
TkVfV0VCX0FQUExJQ0FUSU9OUykKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpuZXR3
b3JrU3RhdGVDaGFuZ2VkSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQpCit2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bmV0d29ya1N0YXRlQ2hhbmdlZEltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykKIHsKLSAgICBpZiAoSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBsaWNhdGlvbkNhY2hlQWdlbnQgPSBpbnNwZWN0b3JB
Z2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBsaWNhdGlv
bkNhY2hlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQoKSkKICAgICAgICAgYXBwbGljYXRpb25DYWNoZUFnZW50LT5uZXR3b3JrU3RhdGVD
aGFuZ2VkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp1cGRhdGVBcHBs
aWNhdGlvbkNhY2hlU3RhdHVzSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIEZy
YW1lKiBmcmFtZSkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp1cGRhdGVBcHBsaWNh
dGlvbkNhY2hlU3RhdHVzSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudCogYXBwbGljYXRpb25DYWNoZUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRp
bmdBZ2VudHMoKS0+aW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KCkpCisgICAgaWYgKElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCogYXBwbGljYXRpb25DYWNoZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KCkpCiAgICAg
ICAgIGFwcGxpY2F0aW9uQ2FjaGVBZ2VudC0+dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhm
cmFtZSk7CiB9CiAjZW5kaWYKIAotYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zy
b250ZW5kKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKK2Jvb2wgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzKQogewotICAgIHJldHVybiBpbnNwZWN0b3JBZ2VudC0+aGFzRnJvbnRlbmQoKTsK
KyAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy0+aW5zcGVjdG9yQWdlbnQoKSkKKyAgICAgICAgcmV0dXJuIGluc3BlY3RvckFnZW50LT5o
YXNGcm9udGVuZCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKEluc3BlY3RvckFnZW50KiBp
bnNwZWN0b3JBZ2VudCwgY29uc3QgU3RyaW5nJiBjYXRlZ29yeVR5cGUsIGNvbnN0IFN0cmluZyYg
ZXZlbnROYW1lLCBib29sIHN5bmNocm9ub3VzKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OnBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIGNvbnN0IFN0cmluZyYgY2F0ZWdvcnlUeXBlLCBjb25zdCBTdHJpbmcm
IGV2ZW50TmFtZSwgYm9vbCBzeW5jaHJvbm91cykKIHsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKLSAgICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJB
Z2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCogZG9t
RGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQoKSkKICAgICAgICAgZG9tRGVidWdnZXJBZ2VudC0+cGF1c2VPbk5hdGl2ZUV2ZW50SWZO
ZWVkZWQoY2F0ZWdvcnlUeXBlLCBldmVudE5hbWUsIHN5bmNocm9ub3VzKTsKICNlbmRpZgogfQog
Ci12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2FuY2VsUGF1c2VPbk5hdGl2ZUV2ZW50
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpjYW5jZWxQYXVzZU9uTmF0aXZlRXZlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cykKIHsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAg
ICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckFn
ZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRlYnVnZ2VyQWdlbnQoKSkKKyAg
ICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMtPmluc3BlY3RvckRlYnVnZ2VyQWdlbnQoKSkKICAgICAgICAgZGVidWdnZXJBZ2Vu
dC0+Y2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKTsKICNlbmRpZgogfQogCi1JbnNwZWN0b3JU
aW1lbGluZUFnZW50KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJldHJpZXZlVGltZWxpbmVB
Z2VudChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQpCi17Ci0gICAgcmV0dXJuIGluc3Bl
Y3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvclRpbWVsaW5lQWdlbnQo
KTsKLX0KLQogSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpyZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llJiBjb29raWUpCiB7CiAgICAgaWYgKCFjb29raWUuZmlyc3QpCiAgICAgICAgIHJldHVybiAw
OwotICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRp
bWVsaW5lQWdlbnQoY29va2llLmZpcnN0KTsKKyAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0
aW1lbGluZUFnZW50ID0gY29va2llLmZpcnN0LT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCk7CiAg
ICAgaWYgKHRpbWVsaW5lQWdlbnQgJiYgdGltZWxpbmVBZ2VudC0+aWQoKSA9PSBjb29raWUuc2Vj
b25kKQogICAgICAgICByZXR1cm4gdGltZWxpbmVBZ2VudDsKICAgICByZXR1cm4gMDsKIH0KIAot
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpyZXRyaWV2
ZVJlc291cmNlQWdlbnQoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50KQotewotICAgIHJl
dHVybiBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JSZXNv
dXJjZUFnZW50KCk7Ci19Ci0KLUluc3BlY3RvclBhZ2VBZ2VudCogSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpyZXRyaWV2ZVBhZ2VBZ2VudChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQp
Ci17Ci0gICAgcmV0dXJuIGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmlu
c3BlY3RvclBhZ2VBZ2VudCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyAhRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCBjYTFiZTM1Y2MzYTNiYzRmYzNkNjM2
ZDg5YjFmZTkyOWUzZTY2NGM1Li44ZmFkNjJhZjE3Njc1ZTFiMDUxOTRiOTI0OGRiYTQwODMwNjdj
ZmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oCkBAIC00NywxMCArNDcsOCBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgRXZl
bnRDb250ZXh0OwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBIaXRUZXN0UmVzdWx0Owot
Y2xhc3MgSW5zcGVjdG9yQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7Ci1jbGFzcyBJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDsKK2Ns
YXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBLVVJMOwogY2xhc3MgTm9kZTsKIGNsYXNz
IFJlc291cmNlUmVxdWVzdDsKQEAgLTY3LDcgKzY1LDcgQEAgY2xhc3MgV2ViU29ja2V0SGFuZHNo
YWtlUmVxdWVzdDsKIGNsYXNzIFdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlOwogI2VuZGlmCiAK
LXR5cGVkZWYgcGFpcjxJbnNwZWN0b3JBZ2VudCosIGludD4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llOwordHlwZWRlZiBwYWlyPEluc3RydW1lbnRpbmdBZ2VudHMqLCBpbnQ+IEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZTsKIAogY2xhc3MgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uIHsKIHB1YmxpYzoKQEAgLTE3OSw4ICsxNzcsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCi0gICAgc3RhdGljIHZvaWQgYmluZEluc3BlY3RvckFnZW50KFBh
Z2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkgeyBpbnNwZWN0b3JBZ2Vu
dHMoKS5zZXQocGFnZSwgaW5zcGVjdG9yQWdlbnQpOyB9Ci0gICAgc3RhdGljIHZvaWQgdW5iaW5k
SW5zcGVjdG9yQWdlbnQoUGFnZSogcGFnZSkgeyBpbnNwZWN0b3JBZ2VudHMoKS5yZW1vdmUocGFn
ZSk7IH0KKyAgICBzdGF0aWMgdm9pZCBiaW5kSW5zdHJ1bWVudGluZ0FnZW50cyhQYWdlKiBwYWdl
LCBJbnN0cnVtZW50aW5nQWdlbnRzKiBhZ2VudHMpIHsgaW5zdHJ1bWVudGluZ0FnZW50cygpLnNl
dChwYWdlLCBhZ2VudHMpOyB9CisgICAgc3RhdGljIHZvaWQgdW5iaW5kSW5zdHJ1bWVudGluZ0Fn
ZW50cyhQYWdlKiBwYWdlKSB7IGluc3RydW1lbnRpbmdBZ2VudHMoKS5yZW1vdmUocGFnZSk7IH0K
ICAgICBzdGF0aWMgdm9pZCBmcm9udGVuZENyZWF0ZWQoKSB7IHNfZnJvbnRlbmRDb3VudGVyICs9
IDE7IH0KICAgICBzdGF0aWMgdm9pZCBmcm9udGVuZERlbGV0ZWQoKSB7IHNfZnJvbnRlbmRDb3Vu
dGVyIC09IDE7IH0KICAgICBzdGF0aWMgYm9vbCBoYXNGcm9udGVuZHMoKSB7IHJldHVybiBzX2Zy
b250ZW5kQ291bnRlcjsgfQpAQCAtMTkyLDEzMCArMTkwLDEyOCBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBzdGF0aWMgdm9pZCBkaWRDbGVhcldpbmRv
d09iamVjdEluV29ybGRJbXBsKEluc3BlY3RvckFnZW50KiwgRnJhbWUqLCBET01XcmFwcGVyV29y
bGQqKTsKLSAgICBzdGF0aWMgdm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkSW1wbChJbnNwZWN0
b3JBZ2VudCopOworICAgIHN0YXRpYyB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIEZyYW1lKiwgRE9NV3JhcHBlcldvcmxkKik7CisgICAg
c3RhdGljIHZvaWQgaW5zcGVjdGVkUGFnZURlc3Ryb3llZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyopOwogCi0gICAgc3RhdGljIHZvaWQgd2lsbEluc2VydERPTU5vZGVJbXBsKEluc3BlY3RvckFn
ZW50KiwgTm9kZSogbm9kZSwgTm9kZSogcGFyZW50KTsKLSAgICBzdGF0aWMgdm9pZCBkaWRJbnNl
cnRET01Ob2RlSW1wbChJbnNwZWN0b3JBZ2VudCosIE5vZGUqKTsKLSAgICBzdGF0aWMgdm9pZCB3
aWxsUmVtb3ZlRE9NTm9kZUltcGwoSW5zcGVjdG9yQWdlbnQqLCBOb2RlKik7Ci0gICAgc3RhdGlj
IHZvaWQgZGlkUmVtb3ZlRE9NTm9kZUltcGwoSW5zcGVjdG9yQWdlbnQqLCBOb2RlKik7Ci0gICAg
c3RhdGljIHZvaWQgd2lsbE1vZGlmeURPTUF0dHJJbXBsKEluc3BlY3RvckFnZW50KiwgRWxlbWVu
dCopOwotICAgIHN0YXRpYyB2b2lkIGRpZE1vZGlmeURPTUF0dHJJbXBsKEluc3BlY3RvckFnZW50
KiwgRWxlbWVudCopOwotICAgIHN0YXRpYyB2b2lkIGNoYXJhY3RlckRhdGFNb2RpZmllZEltcGwo
SW5zcGVjdG9yQWdlbnQqLCBDaGFyYWN0ZXJEYXRhKik7Ci0gICAgc3RhdGljIHZvaWQgZGlkSW52
YWxpZGF0ZVN0eWxlQXR0ckltcGwoSW5zcGVjdG9yQWdlbnQqLCBOb2RlKik7CisgICAgc3RhdGlj
IHZvaWQgd2lsbEluc2VydERPTU5vZGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBOb2RlKiwg
Tm9kZSogcGFyZW50KTsKKyAgICBzdGF0aWMgdm9pZCBkaWRJbnNlcnRET01Ob2RlSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzKiwgTm9kZSopOworICAgIHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVET01O
b2RlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgTm9kZSopOworICAgIHN0YXRpYyB2b2lkIGRp
ZFJlbW92ZURPTU5vZGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBOb2RlKik7CisgICAgc3Rh
dGljIHZvaWQgd2lsbE1vZGlmeURPTUF0dHJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBFbGVt
ZW50Kik7CisgICAgc3RhdGljIHZvaWQgZGlkTW9kaWZ5RE9NQXR0ckltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyosIEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBjaGFyYWN0ZXJEYXRhTW9kaWZp
ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBDaGFyYWN0ZXJEYXRhKik7CisgICAgc3RhdGlj
IHZvaWQgZGlkSW52YWxpZGF0ZVN0eWxlQXR0ckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIE5v
ZGUqKTsKIAotICAgIHN0YXRpYyB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50SW1wbChJbnNw
ZWN0b3JBZ2VudCosIGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdz
KTsKLSAgICBzdGF0aWMgYm9vbCBoYW5kbGVNb3VzZVByZXNzSW1wbChJbnNwZWN0b3JBZ2VudCop
OworICAgIHN0YXRpYyB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50SW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3Mp
OworICAgIHN0YXRpYyBib29sIGhhbmRsZU1vdXNlUHJlc3NJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMqKTsKIAotICAgIHN0YXRpYyB2b2lkIHdpbGxTZW5kWE1MSHR0cFJlcXVlc3RJbXBsKEluc3Bl
Y3RvckFnZW50KiwgY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHN0YXRpYyB2b2lkIGRpZFNjaGVk
dWxlUmVzb3VyY2VSZXF1ZXN0SW1wbChJbnNwZWN0b3JBZ2VudCosIGNvbnN0IFN0cmluZyYgdXJs
KTsKLSAgICBzdGF0aWMgdm9pZCBkaWRJbnN0YWxsVGltZXJJbXBsKEluc3BlY3RvckFnZW50Kiwg
aW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpOwotICAgIHN0YXRpYyB2
b2lkIGRpZFJlbW92ZVRpbWVySW1wbChJbnNwZWN0b3JBZ2VudCosIGludCB0aW1lcklkKTsKKyAg
ICBzdGF0aWMgdm9pZCB3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKiwgY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHN0YXRpYyB2b2lkIGRpZFNjaGVkdWxlUmVz
b3VyY2VSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgY29uc3QgU3RyaW5nJiB1cmwp
OworICAgIHN0YXRpYyB2b2lkIGRpZEluc3RhbGxUaW1lckltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyosIGludCB0aW1lcklkLCBpbnQgdGltZW91dCwgYm9vbCBzaW5nbGVTaG90KTsKKyAgICBzdGF0
aWMgdm9pZCBkaWRSZW1vdmVUaW1lckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIGludCB0aW1l
cklkKTsKIAotICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbENh
bGxGdW5jdGlvbkltcGwoSW5zcGVjdG9yQWdlbnQqLCBjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUs
IGludCBzY3JpcHRMaW5lKTsKKyAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llIHdpbGxDYWxsRnVuY3Rpb25JbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBjb25zdCBTdHJp
bmcmIHNjcmlwdE5hbWUsIGludCBzY3JpcHRMaW5lKTsKICAgICBzdGF0aWMgdm9pZCBkaWRDYWxs
RnVuY3Rpb25JbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwotICAg
IHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbENoYW5nZVhIUlJlYWR5
U3RhdGVJbXBsKEluc3BlY3RvckFnZW50KiwgWE1MSHR0cFJlcXVlc3QqIHJlcXVlc3QpOworICAg
IHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbENoYW5nZVhIUlJlYWR5
U3RhdGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBYTUxIdHRwUmVxdWVzdCopOwogICAgIHN0
YXRpYyB2b2lkIGRpZENoYW5nZVhIUlJlYWR5U3RhdGVJbXBsKGNvbnN0IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSYpOwotICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUgd2lsbERpc3BhdGNoRXZlbnRJbXBsKEluc3BlY3RvckFnZW50KiwgY29uc3QgRXZlbnQm
IGV2ZW50LCBET01XaW5kb3cqIHdpbmRvdywgTm9kZSogbm9kZSwgY29uc3QgVmVjdG9yPEV2ZW50
Q29udGV4dD4mIGFuY2VzdG9ycyk7CisgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSB3aWxsRGlzcGF0Y2hFdmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIGNvbnN0
IEV2ZW50JiwgRE9NV2luZG93KiwgTm9kZSosIGNvbnN0IFZlY3RvcjxFdmVudENvbnRleHQ+JiBh
bmNlc3RvcnMpOwogICAgIHN0YXRpYyB2b2lkIGRpZERpc3BhdGNoRXZlbnRJbXBsKGNvbnN0IElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwotICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZlbnRPbldpbmRvd0ltcGwoSW5zcGVjdG9y
QWdlbnQqLCBjb25zdCBFdmVudCYgZXZlbnQsIERPTVdpbmRvdyogd2luZG93KTsKKyAgICBzdGF0
aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxEaXNwYXRjaEV2ZW50T25XaW5k
b3dJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBjb25zdCBFdmVudCYsIERPTVdpbmRvdyopOwog
ICAgIHN0YXRpYyB2b2lkIGRpZERpc3BhdGNoRXZlbnRPbldpbmRvd0ltcGwoY29uc3QgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7Ci0gICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSB3aWxsRXZhbHVhdGVTY3JpcHRJbXBsKEluc3BlY3RvckFnZW50KiwgY29u
c3QgU3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVyKTsKKyAgICBzdGF0aWMgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIHdpbGxFdmFsdWF0ZVNjcmlwdEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyosIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJlcik7CiAgICAgc3RhdGljIHZv
aWQgZGlkRXZhbHVhdGVTY3JpcHRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSYpOwotICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbEZp
cmVUaW1lckltcGwoSW5zcGVjdG9yQWdlbnQqLCBpbnQgdGltZXJJZCk7CisgICAgc3RhdGljIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsRmlyZVRpbWVySW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgaW50IHRpbWVySWQpOwogICAgIHN0YXRpYyB2b2lkIGRpZEZpcmVUaW1lcklt
cGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7Ci0gICAgc3RhdGljIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsTGF5b3V0SW1wbChJbnNwZWN0b3JBZ2Vu
dCopOworICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbExheW91
dEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyopOwogICAgIHN0YXRpYyB2b2lkIGRpZExheW91dElt
cGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7Ci0gICAgc3RhdGljIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsTG9hZFhIUkltcGwoSW5zcGVjdG9yQWdl
bnQqLCBYTUxIdHRwUmVxdWVzdCogcmVxdWVzdCk7CisgICAgc3RhdGljIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSB3aWxsTG9hZFhIUkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIFhN
TEh0dHBSZXF1ZXN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGlkTG9hZFhIUkltcGwoY29uc3QgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7Ci0gICAgc3RhdGljIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSB3aWxsUGFpbnRJbXBsKEluc3BlY3RvckFnZW50KiwgY29uc3QgSW50
UmVjdCYgcmVjdCk7CisgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3
aWxsUGFpbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAg
c3RhdGljIHZvaWQgZGlkUGFpbnRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSYpOwotICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbFJl
Y2FsY3VsYXRlU3R5bGVJbXBsKEluc3BlY3RvckFnZW50Kik7CisgICAgc3RhdGljIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsUmVjYWxjdWxhdGVTdHlsZUltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyopOwogICAgIHN0YXRpYyB2b2lkIGRpZFJlY2FsY3VsYXRlU3R5bGVJbXBsKGNv
bnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwogCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlVc2VyQWdlbnRPdmVycmlkZUltcGwoSW5zcGVjdG9yQWdlbnQqLCBTdHJpbmcqKTsKLSAg
ICBzdGF0aWMgdm9pZCB3aWxsU2VuZFJlcXVlc3RJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwotICAgIHN0YXRpYyB2b2lk
IGNvbnRpbnVlQWZ0ZXJQaW5nTG9hZGVySW1wbChJbnNwZWN0b3JBZ2VudCosIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgc3RhdGljIHZvaWQgbWFya1Jlc291cmNlQXNDYWNoZWRJ
bXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKLSAgICBzdGF0
aWMgdm9pZCBkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGVJbXBsKEluc3BlY3RvckFnZW50
KiwgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBDYWNoZWRSZXNvdXJjZSopOwotICAgIHN0YXRpYyBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbFJlY2VpdmVSZXNvdXJjZURhdGFJbXBs
KEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKKyAgICBzdGF0aWMg
dm9pZCBhcHBseVVzZXJBZ2VudE92ZXJyaWRlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgU3Ry
aW5nKik7CisgICAgc3RhdGljIHZvaWQgd2lsbFNlbmRSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIFJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwor
ICAgIHN0YXRpYyB2b2lkIGNvbnRpbnVlQWZ0ZXJQaW5nTG9hZGVySW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIFJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICBzdGF0aWMgdm9pZCBt
YXJrUmVzb3VyY2VBc0NhY2hlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllcik7CisgICAgc3RhdGljIHZvaWQgZGlkTG9hZFJlc291cmNlRnJvbU1lbW9y
eUNhY2hlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBD
YWNoZWRSZXNvdXJjZSopOworICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUgd2lsbFJlY2VpdmVSZXNvdXJjZURhdGFJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCB1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIpOwogICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNvdXJj
ZURhdGFJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwotICAgIHN0
YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbFJlY2VpdmVSZXNvdXJjZVJl
c3BvbnNlSW1wbChJbnNwZWN0b3JBZ2VudCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29raWUgd2lsbFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
CiAgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBsKGNvbnN0IElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgc3RhdGljIHZv
aWQgZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VCdXRDYW5jZWxlZEltcGwoRnJhbWUqLCBEb2N1
bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpOwogICAgIHN0YXRpYyB2b2lkIGNvbnRpbnVlQWZ0ZXJYRnJhbWVPcHRpb25zRGVuaWVk
SW1wbChGcmFtZSosIERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgc3RhdGljIHZvaWQgY29udGludWVXaXRoUG9s
aWN5RG93bmxvYWRJbXBsKEZyYW1lKiwgRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICBzdGF0aWMgdm9pZCBjb250
aW51ZVdpdGhQb2xpY3lJZ25vcmVJbXBsKEZyYW1lKiwgRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAgICBzdGF0aWMg
dm9pZCBkaWRSZWNlaXZlQ29udGVudExlbmd0aEltcGwoSW5zcGVjdG9yQWdlbnQqLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGludCBkYXRhTGVuZ3RoLCBpbnQgZW5jb2RlZERhdGFMZW5ndGgp
OwotICAgIHN0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRpbmdJbXBsKEluc3BlY3RvckFnZW50Kiwg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSk7Ci0gICAgc3RhdGlj
IHZvaWQgZGlkRmFpbExvYWRpbmdJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJik7Ci0gICAgc3RhdGljIHZvaWQgcmVzb3Vy
Y2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0SW1wbChJbnNwZWN0b3JBZ2VudCosIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNlbmRVUkwsIHVuc2lnbmVkIHNlbmRMaW5lTnVtYmVyKTsK
LSAgICBzdGF0aWMgdm9pZCBzY3JpcHRJbXBvcnRlZEltcGwoSW5zcGVjdG9yQWdlbnQqLCB1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nKTsKLSAgICBz
dGF0aWMgdm9pZCBkb21Db250ZW50TG9hZGVkRXZlbnRGaXJlZEltcGwoSW5zcGVjdG9yQWdlbnQq
LCBGcmFtZSosIGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkRXZlbnRGaXJlZElt
cGwoSW5zcGVjdG9yQWdlbnQqLCBGcmFtZSosIGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgdm9p
ZCBmcmFtZURldGFjaGVkRnJvbVBhcmVudEltcGwoSW5zcGVjdG9yQWdlbnQqLCBGcmFtZSopOwot
ICAgIHN0YXRpYyB2b2lkIGRpZENvbW1pdExvYWRJbXBsKFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCos
IERvY3VtZW50TG9hZGVyKik7Ci0KLSAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llIHdpbGxXcml0ZUhUTUxJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQgaW50IGxl
bmd0aCwgdW5zaWduZWQgaW50IHN0YXJ0TGluZSk7CisgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2
ZUNvbnRlbnRMZW5ndGhJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGludCBkYXRhTGVuZ3RoLCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpOworICAgIHN0
YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCB1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pc2hUaW1lKTsKKyAgICBzdGF0aWMgdm9p
ZCBkaWRGYWlsTG9hZGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgIHN0YXRpYyB2b2lkIHJlc291
cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsIGNvbnN0
IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNlbmRVUkwsIHVuc2lnbmVkIHNlbmRMaW5lTnVt
YmVyKTsKKyAgICBzdGF0aWMgdm9pZCBzY3JpcHRJbXBvcnRlZEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJp
bmcpOworICAgIHN0YXRpYyB2b2lkIGRvbUNvbnRlbnRMb2FkZWRFdmVudEZpcmVkSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzKiwgRnJhbWUqLCBjb25zdCBLVVJMJik7CisgICAgc3RhdGljIHZvaWQg
bG9hZEV2ZW50RmlyZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBGcmFtZSosIGNvbnN0IEtV
UkwmKTsKKyAgICBzdGF0aWMgdm9pZCBmcmFtZURldGFjaGVkRnJvbVBhcmVudEltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyosIEZyYW1lKik7CisgICAgc3RhdGljIHZvaWQgZGlkQ29tbWl0TG9hZElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBEb2N1bWVudExvYWRlciopOworCisgICAg
c3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsV3JpdGVIVE1MSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgaW50IGxlbmd0aCwgdW5zaWduZWQgaW50IHN0
YXJ0TGluZSk7CiAgICAgc3RhdGljIHZvaWQgZGlkV3JpdGVIVE1MSW1wbChjb25zdCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUmLCB1bnNpZ25lZCBpbnQgZW5kTGluZSk7CiAKLSAgICBz
dGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnNwZWN0b3JBZ2VudCosIE1lc3Nh
Z2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4pOwotICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3BlY3RvckFn
ZW50KiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlE
KTsKLSAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnRJbXBsKEluc3BlY3RvckFnZW50KiwgUGFz
c1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4pOwot
ICAgIHN0YXRpYyB2b2lkIHN0YXJ0Q29uc29sZVRpbWluZ0ltcGwoSW5zcGVjdG9yQWdlbnQqLCBj
b25zdCBTdHJpbmcmIHRpdGxlKTsKLSAgICBzdGF0aWMgdm9pZCBzdG9wQ29uc29sZVRpbWluZ0lt
cGwoSW5zcGVjdG9yQWdlbnQqLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBQYXNzUmVmUHRyPFNjcmlw
dENhbGxTdGFjaz4pOwotICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVNYXJrVGltZWxpbmVJbXBsKElu
c3BlY3RvckFnZW50KiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKKyAgICBzdGF0aWMg
dm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgTWVzc2Fn
ZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4sIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNr
Pik7CisgICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyosIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCk7CisgICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50SW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxT
dGFjaz4pOworICAgIHN0YXRpYyB2b2lkIHN0YXJ0Q29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyosIGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAgIHN0YXRpYyB2b2lkIHN0b3BD
b25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgY29uc3QgU3RyaW5nJiB0aXRs
ZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+KTsKKyAgICBzdGF0aWMgdm9pZCBjb25zb2xl
TWFya1RpbWVsaW5lSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFzc1JlZlB0cjxTY3JpcHRB
cmd1bWVudHM+KTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIHN0YXRp
YyB2b2lkIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zcGVjdG9yQWdl
bnQqLCBjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCk7Ci0gICAgc3RhdGljIHZvaWQgYWRkUHJvZmlsZUltcGwoSW5zcGVjdG9y
QWdlbnQqLCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4sIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNr
Pik7Ci0gICAgc3RhdGljIFN0cmluZyBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1l
SW1wbChJbnNwZWN0b3JBZ2VudCosIGJvb2wgaW5jcmVtZW50UHJvZmlsZU51bWJlcik7Ci0gICAg
c3RhdGljIGJvb2wgcHJvZmlsZXJFbmFibGVkSW1wbChJbnNwZWN0b3JBZ2VudCopOworICAgIHN0
YXRpYyB2b2lkIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyosIGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRQcm9maWxlSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzKiwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+LCBQYXNzUmVmUHRyPFNj
cmlwdENhbGxTdGFjaz4pOworICAgIHN0YXRpYyBTdHJpbmcgZ2V0Q3VycmVudFVzZXJJbml0aWF0
ZWRQcm9maWxlTmFtZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIGJvb2wgaW5jcmVtZW50UHJv
ZmlsZU51bWJlcik7CisgICAgc3RhdGljIGJvb2wgcHJvZmlsZXJFbmFibGVkSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzKik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBzdGF0
aWMgdm9pZCBkaWRPcGVuRGF0YWJhc2VJbXBsKEluc3BlY3RvckFnZW50KiwgUGFzc1JlZlB0cjxE
YXRhYmFzZT4sIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmVyc2lvbik7CisgICAgc3RhdGljIHZvaWQgZGlkT3BlbkRhdGFiYXNlSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzKiwgUGFzc1JlZlB0cjxEYXRhYmFzZT4sIGNvbnN0IFN0cmluZyYg
ZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAjZW5k
aWYKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSAgICBzdGF0aWMgdm9pZCBkaWRVc2VET01T
dG9yYWdlSW1wbChJbnNwZWN0b3JBZ2VudCosIFN0b3JhZ2VBcmVhKiwgYm9vbCBpc0xvY2FsU3Rv
cmFnZSwgRnJhbWUqKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRVc2VET01TdG9yYWdlSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzKiwgU3RvcmFnZUFyZWEqLCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFt
ZSopOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBzdGF0aWMgdm9pZCBkaWRT
dGFydFdvcmtlckNvbnRleHRJbXBsKEluc3BlY3RvckFnZW50KiwgV29ya2VyQ29udGV4dFByb3h5
Kik7Ci0gICAgc3RhdGljIHZvaWQgZGlkQ3JlYXRlV29ya2VySW1wbChJbnNwZWN0b3JBZ2VudCos
IGludHB0cl90IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtlcik7Ci0g
ICAgc3RhdGljIHZvaWQgZGlkRGVzdHJveVdvcmtlckltcGwoSW5zcGVjdG9yQWdlbnQqLCBpbnRw
dHJfdCBpZCk7CisgICAgc3RhdGljIHZvaWQgZGlkU3RhcnRXb3JrZXJDb250ZXh0SW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzKiwgV29ya2VyQ29udGV4dFByb3h5Kik7CisgICAgc3RhdGljIHZvaWQg
ZGlkQ3JlYXRlV29ya2VySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgaW50cHRyX3QgaWQsIGNv
bnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkV29ya2VyKTsKKyAgICBzdGF0aWMgdm9pZCBk
aWREZXN0cm95V29ya2VySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgaW50cHRyX3QgaWQpOwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCi0gICAgc3RhdGljIHZvaWQgZGlkQ3Jl
YXRlV2ViU29ja2V0SW1wbChJbnNwZWN0b3JBZ2VudCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgY29uc3QgS1VSTCYgcmVxdWVzdFVSTCwgY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwpOwotICAg
IHN0YXRpYyB2b2lkIHdpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdEltcGwoSW5zcGVj
dG9yQWdlbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEhhbmRz
aGFrZVJlcXVlc3QmKTsKLSAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNo
YWtlUmVzcG9uc2VJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSYpOwotICAgIHN0YXRpYyB2b2lkIGRp
ZENsb3NlV2ViU29ja2V0SW1wbChJbnNwZWN0b3JBZ2VudCosIHVuc2lnbmVkIGxvbmcgaWRlbnRp
Zmllcik7CisgICAgc3RhdGljIHZvaWQgZGlkQ3JlYXRlV2ViU29ja2V0SW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBLVVJMJiByZXF1ZXN0
VVJMLCBjb25zdCBLVVJMJiBkb2N1bWVudFVSTCk7CisgICAgc3RhdGljIHZvaWQgd2lsbFNlbmRX
ZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0Jik7Cisg
ICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJT
b2NrZXRIYW5kc2hha2VSZXNwb25zZSYpOworICAgIHN0YXRpYyB2b2lkIGRpZENsb3NlV2ViU29j
a2V0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBzdGF0
aWMgdm9pZCBuZXR3b3JrU3RhdGVDaGFuZ2VkSW1wbChJbnNwZWN0b3JBZ2VudCopOwotICAgIHN0
YXRpYyB2b2lkIHVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNJbXBsKEluc3BlY3RvckFnZW50
KiwgRnJhbWUqKTsKLSNlbmRpZgotCi0gICAgc3RhdGljIEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudEZvckZyYW1lKEZyYW1lKik7Ci0gICAgc3RhdGljIEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudEZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotICAgIHN0YXRp
YyBJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnRGb3JQYWdlKFBhZ2UqKTsKLSAgICBzdGF0
aWMgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yQ29udGV4dChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0gICAgc3RhdGljIEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckRvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgc3RhdGlj
IEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckZyYW1lKEZyYW1l
Kik7Ci0gICAgc3RhdGljIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVu
ZEZvclBhZ2UoUGFnZSopOwotCi0gICAgc3RhdGljIGJvb2wgaGFzRnJvbnRlbmQoSW5zcGVjdG9y
QWdlbnQqKTsKLSAgICBzdGF0aWMgdm9pZCBwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChJbnNw
ZWN0b3JBZ2VudCosIGNvbnN0IFN0cmluZyYgY2F0ZWdvcnlUeXBlLCBjb25zdCBTdHJpbmcmIGV2
ZW50TmFtZSwgYm9vbCBzeW5jaHJvbm91cyk7Ci0gICAgc3RhdGljIHZvaWQgY2FuY2VsUGF1c2VP
bk5hdGl2ZUV2ZW50KEluc3BlY3RvckFnZW50Kik7Ci0gICAgc3RhdGljIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQqIHJldHJpZXZlVGltZWxpbmVBZ2VudChJbnNwZWN0b3JBZ2VudCopOworICAgIHN0
YXRpYyB2b2lkIG5ldHdvcmtTdGF0ZUNoYW5nZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqKTsK
KyAgICBzdGF0aWMgdm9pZCB1cGRhdGVBcHBsaWNhdGlvbkNhY2hlU3RhdHVzSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzKiwgRnJhbWUqKTsKKyNlbmRpZgorCisgICAgc3RhdGljIEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqKTsKKyAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvclBhZ2UoUGFnZSopOworICAgIHN0YXRpYyBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoRnJhbWUqKTsKKyAgICBzdGF0aWMgSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50c1dpdGhGcm9udGVuZEZvckZyYW1lKEZyYW1lKik7
CisgICAgc3RhdGljIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHNXaXRo
RnJvbnRlbmRGb3JQYWdlKFBhZ2UqKTsKKyAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50c1dpdGhGcm9udGVuZEZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCopOworICAgIHN0YXRpYyBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzV2l0aEZyb250ZW5kRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKKworICAgIHN0YXRpYyBi
b29sIGhhc0Zyb250ZW5kKEluc3RydW1lbnRpbmdBZ2VudHMqKTsKKyAgICBzdGF0aWMgdm9pZCBw
YXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChJbnN0cnVtZW50aW5nQWdlbnRzKiwgY29uc3QgU3Ry
aW5nJiBjYXRlZ29yeVR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBib29sIHN5bmNocm9u
b3VzKTsKKyAgICBzdGF0aWMgdm9pZCBjYW5jZWxQYXVzZU9uTmF0aXZlRXZlbnQoSW5zdHJ1bWVu
dGluZ0FnZW50cyopOwogICAgIHN0YXRpYyBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiByZXRyaWV2
ZVRpbWVsaW5lQWdlbnQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7Ci0g
ICAgc3RhdGljIEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJldHJpZXZlUmVzb3VyY2VBZ2VudChJ
bnNwZWN0b3JBZ2VudCopOwotICAgIHN0YXRpYyBJbnNwZWN0b3JQYWdlQWdlbnQqIHJldHJpZXZl
UGFnZUFnZW50KEluc3BlY3RvckFnZW50Kik7CiAKLSAgICBzdGF0aWMgSGFzaE1hcDxQYWdlKiwg
SW5zcGVjdG9yQWdlbnQqPiYgaW5zcGVjdG9yQWdlbnRzKCk7CisgICAgdHlwZWRlZiBIYXNoTWFw
PFBhZ2UqLCBJbnN0cnVtZW50aW5nQWdlbnRzKj4gSW5zdHJ1bWVudGluZ0FnZW50c01hcDsKKyAg
ICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50c01hcCYgaW5zdHJ1bWVudGluZ0FnZW50cygpOwog
ICAgIHN0YXRpYyBpbnQgc19mcm9udGVuZENvdW50ZXI7CiAjZW5kaWYKIH07CkBAIC0zMjMsNDEg
KzMxOSw0MSBAQCBwcml2YXRlOgogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBET01XcmFwcGVyV29y
bGQqIHdvcmxkKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFn
ZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9yRnJhbWUoZnJhbWUpKQotICAg
ICAgICBkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGRJbXBsKGluc3BlY3RvckFnZW50LCBmcmFt
ZSwgd29ybGQpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICAgICAgZGlkQ2xl
YXJXaW5kb3dPYmplY3RJbldvcmxkSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSwgd29y
bGQpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
aW5zcGVjdGVkUGFnZURlc3Ryb3llZChQYWdlKiBwYWdlKQogewogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFn
ZW50Rm9yUGFnZShwYWdlKSkKLSAgICAgICAgaW5zcGVjdGVkUGFnZURlc3Ryb3llZEltcGwoaW5z
cGVjdG9yQWdlbnQpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCisgICAgICAgIGluc3Bl
Y3RlZFBhZ2VEZXN0cm95ZWRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMpOwogI2VuZGlmCiB9CiAK
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGUo
RG9jdW1lbnQqIGRvY3VtZW50LCBOb2RlKiBub2RlLCBOb2RlKiBwYXJlbnQpCiB7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0g
aW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JEb2N1bWVudChkb2N1bWVudCkpCi0gICAgICAg
IHdpbGxJbnNlcnRET01Ob2RlSW1wbChpbnNwZWN0b3JBZ2VudCwgbm9kZSwgcGFyZW50KTsKKyAg
ICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNXaXRoRnJvbnRlbmRGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgICAgIHdp
bGxJbnNlcnRET01Ob2RlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBub2RlLCBwYXJlbnQpOwog
I2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW5z
ZXJ0RE9NTm9kZShEb2N1bWVudCogZG9jdW1lbnQsIE5vZGUqIG5vZGUpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5z
cGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JEb2N1bWVudChkb2N1bWVudCkpCi0gICAgICAgIGRp
ZEluc2VydERPTU5vZGVJbXBsKGluc3BlY3RvckFnZW50LCBub2RlKTsKKyAgICBpZiAoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNX
aXRoRnJvbnRlbmRGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgICAgIGRpZEluc2VydERPTU5v
ZGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIG5vZGUpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZURPTU5vZGUoRG9jdW1lbnQq
IGRvY3VtZW50LCBOb2RlKiBub2RlKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYg
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250
ZW5kRm9yRG9jdW1lbnQoZG9jdW1lbnQpKSB7Ci0gICAgICAgIHdpbGxSZW1vdmVET01Ob2RlSW1w
bChpbnNwZWN0b3JBZ2VudCwgbm9kZSk7Ci0gICAgICAgIGRpZFJlbW92ZURPTU5vZGVJbXBsKGlu
c3BlY3RvckFnZW50LCBub2RlKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNXaXRoRnJvbnRlbmRGb3JEb2N1bWVu
dChkb2N1bWVudCkpIHsKKyAgICAgICAgd2lsbFJlbW92ZURPTU5vZGVJbXBsKGluc3RydW1lbnRp
bmdBZ2VudHMsIG5vZGUpOworICAgICAgICBkaWRSZW1vdmVET01Ob2RlSW1wbChpbnN0cnVtZW50
aW5nQWdlbnRzLCBub2RlKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTM2NSw0MCArMzYxLDQwIEBA
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZURPTU5vZGUo
RG9jdW1lbnQqIGRvY3VtZW50LCBOb2RlCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxNb2RpZnlET01BdHRyKERvY3VtZW50KiBkb2N1bWVudCwgRWxlbWVudCogZWxl
bWVudCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCog
aW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckRvY3VtZW50KGRv
Y3VtZW50KSkKLSAgICAgICAgd2lsbE1vZGlmeURPTUF0dHJJbXBsKGluc3BlY3RvckFnZW50LCBl
bGVtZW50KTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHNXaXRoRnJvbnRlbmRGb3JEb2N1bWVudChkb2N1bWVudCkp
CisgICAgICAgIHdpbGxNb2RpZnlET01BdHRySW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBlbGVt
ZW50KTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZE1vZGlmeURPTUF0dHIoRG9jdW1lbnQqIGRvY3VtZW50LCBFbGVtZW50KiBlbGVtZW50KQog
ewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRG9jdW1lbnQoZG9jdW1lbnQp
KQotICAgICAgICBkaWRNb2RpZnlET01BdHRySW1wbChpbnNwZWN0b3JBZ2VudCwgZWxlbWVudCk7
CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzV2l0aEZyb250ZW5kRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQorICAgICAg
ICBkaWRNb2RpZnlET01BdHRySW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBlbGVtZW50KTsKICNl
bmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFs
aWRhdGVTdHlsZUF0dHIoRG9jdW1lbnQqIGRvY3VtZW50LCBOb2RlKiBub2RlKQogewogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9
IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAg
ICBkaWRJbnZhbGlkYXRlU3R5bGVBdHRySW1wbChpbnNwZWN0b3JBZ2VudCwgbm9kZSk7CisgICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzV2l0aEZyb250ZW5kRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQorICAgICAgICBkaWRJ
bnZhbGlkYXRlU3R5bGVBdHRySW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBub2RlKTsKICNlbmRp
ZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1vdXNlRGlkTW92
ZU92ZXJFbGVtZW50KFBhZ2UqIHBhZ2UsIGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5z
aWduZWQgbW9kaWZpZXJGbGFncykKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJ
bnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVu
ZEZvclBhZ2UocGFnZSkpCi0gICAgICAgIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50SW1wbChpbnNw
ZWN0b3JBZ2VudCwgcmVzdWx0LCBtb2RpZmllckZsYWdzKTsKKyAgICBpZiAoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNXaXRoRnJv
bnRlbmRGb3JQYWdlKHBhZ2UpKQorICAgICAgICBtb3VzZURpZE1vdmVPdmVyRWxlbWVudEltcGwo
aW5zdHJ1bWVudGluZ0FnZW50cywgcmVzdWx0LCBtb2RpZmllckZsYWdzKTsKICNlbmRpZgogfQog
CiBpbmxpbmUgYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmhhbmRsZU1vdXNlUHJlc3Mo
UGFnZSogcGFnZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JB
Z2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvclBhZ2Uo
cGFnZSkpCi0gICAgICAgIHJldHVybiBoYW5kbGVNb3VzZVByZXNzSW1wbChpbnNwZWN0b3JBZ2Vu
dCk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBp
bnN0cnVtZW50aW5nQWdlbnRzV2l0aEZyb250ZW5kRm9yUGFnZShwYWdlKSkKKyAgICAgICAgcmV0
dXJuIGhhbmRsZU1vdXNlUHJlc3NJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMpOwogI2VuZGlmCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDA2LDQwICs0MDIsNDAgQEAgaW5saW5lIGJvb2wgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYW5kbGVNb3VzZVByZXNzKFBhZ2UqIHBhZ2UpCiBpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNoYXJhY3RlckRhdGFNb2RpZmllZChE
b2N1bWVudCogZG9jdW1lbnQsIENoYXJhY3RlckRhdGEqIGNoYXJhY3RlckRhdGEpCiB7CiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50
ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JEb2N1bWVudChkb2N1bWVudCkpCi0gICAg
ICAgIGNoYXJhY3RlckRhdGFNb2RpZmllZEltcGwoaW5zcGVjdG9yQWdlbnQsIGNoYXJhY3RlckRh
dGEpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c1dpdGhGcm9udGVuZEZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAg
ICAgICAgY2hhcmFjdGVyRGF0YU1vZGlmaWVkSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBjaGFy
YWN0ZXJEYXRhKTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBp
ZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJv
bnRlbmRGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICB3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0
SW1wbChpbnNwZWN0b3JBZ2VudCwgdXJsKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNXaXRoRnJvbnRlbmRGb3JD
b250ZXh0KGNvbnRleHQpKQorICAgICAgICB3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0SW1wbChpbnN0
cnVtZW50aW5nQWdlbnRzLCB1cmwpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3QoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAg
IGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhG
cm9udGVuZEZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgZGlkU2NoZWR1bGVSZXNvdXJj
ZVJlcXVlc3RJbXBsKGluc3BlY3RvckFnZW50LCB1cmwpOworICAgIGlmIChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c1dpdGhGcm9u
dGVuZEZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICAgICAgZGlkU2NoZWR1bGVSZXNvdXJjZVJl
cXVlc3RJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHVybCk7CiAjZW5kaWYKIH0KIAogaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnN0YWxsVGltZXIoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29sIHNp
bmdsZVNob3QpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdl
bnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JDb250ZXh0
KGNvbnRleHQpKQotICAgICAgICBkaWRJbnN0YWxsVGltZXJJbXBsKGluc3BlY3RvckFnZW50LCB0
aW1lcklkLCB0aW1lb3V0LCBzaW5nbGVTaG90KTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNXaXRoRnJvbnRlbmRG
b3JDb250ZXh0KGNvbnRleHQpKQorICAgICAgICBkaWRJbnN0YWxsVGltZXJJbXBsKGluc3RydW1l
bnRpbmdBZ2VudHMsIHRpbWVySWQsIHRpbWVvdXQsIHNpbmdsZVNob3QpOwogI2VuZGlmCiB9CiAK
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVtb3ZlVGltZXIoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgaW50IHRpbWVySWQpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5z
cGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICBkaWRS
ZW1vdmVUaW1lckltcGwoaW5zcGVjdG9yQWdlbnQsIHRpbWVySWQpOworICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c1dp
dGhGcm9udGVuZEZvckNvbnRleHQoY29udGV4dCkpCisgICAgICAgIGRpZFJlbW92ZVRpbWVySW1w
bChpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lcklkKTsKICNlbmRpZgogfQogCkBAIC00NDcsOCAr
NDQzLDggQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZW1vdmVU
aW1lcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb24KIGlubGluZSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsQ2FsbEZ1bmN0aW9u
KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSkK
IHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVj
dG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckZyYW1lKGZyYW1lKSkKLSAg
ICAgICAgcmV0dXJuIHdpbGxDYWxsRnVuY3Rpb25JbXBsKGluc3BlY3RvckFnZW50LCBzY3JpcHRO
YW1lLCBzY3JpcHRMaW5lKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNXaXRoRnJvbnRlbmRGb3JGcmFtZShmcmFt
ZSkpCisgICAgICAgIHJldHVybiB3aWxsQ2FsbEZ1bmN0aW9uSW1wbChpbnN0cnVtZW50aW5nQWdl
bnRzLCBzY3JpcHROYW1lLCBzY3JpcHRMaW5lKTsKICNlbmRpZgogICAgIHJldHVybiBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKIH0KQEAgLTQ2NCw4ICs0NjAsOCBAQCBpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihjb25zdCBJbnNw
ZWN0b3JJbnN0cnVtZW50YQogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxDaGFuZ2VYSFJSZWFkeVN0YXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFhNTEh0dHBSZXF1ZXN0KiByZXF1ZXN0KQogewogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2Vu
dCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAg
ICAgcmV0dXJuIHdpbGxDaGFuZ2VYSFJSZWFkeVN0YXRlSW1wbChpbnNwZWN0b3JBZ2VudCwgcmVx
dWVzdCk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzV2l0aEZyb250ZW5kRm9yQ29udGV4dChjb250ZXh0KSkKKyAg
ICAgICAgcmV0dXJuIHdpbGxDaGFuZ2VYSFJSZWFkeVN0YXRlSW1wbChpbnN0cnVtZW50aW5nQWdl
bnRzLCByZXF1ZXN0KTsKICNlbmRpZgogICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29raWUoKTsKIH0KQEAgLTQ4MSw4ICs0NzcsOCBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZENoYW5nZVhIUlJlYWR5U3RhdGUoY29uc3QgSW5zcGVjdG9ySW5z
dAogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRXZl
bnQmIGV2ZW50LCBET01XaW5kb3cqIHdpbmRvdywgTm9kZSogbm9kZSwgY29uc3QgVmVjdG9yPEV2
ZW50Q29udGV4dD4mIGFuY2VzdG9ycykKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlm
IChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9u
dGVuZEZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgcmV0dXJuIHdpbGxEaXNwYXRjaEV2
ZW50SW1wbChpbnNwZWN0b3JBZ2VudCwgZXZlbnQsIHdpbmRvdywgbm9kZSwgYW5jZXN0b3JzKTsK
KyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHNXaXRoRnJvbnRlbmRGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgICAg
IHJldHVybiB3aWxsRGlzcGF0Y2hFdmVudEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgZXZlbnQs
IHdpbmRvdywgbm9kZSwgYW5jZXN0b3JzKTsKICNlbmRpZgogICAgIHJldHVybiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUoKTsKIH0KQEAgLTQ5OCw4ICs0OTQsOCBAQCBpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnQoY29uc3QgSW5zcGVj
dG9ySW5zdHJ1bWVudAogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3coRnJhbWUqIGZy
YW1lLCBjb25zdCBFdmVudCYgZXZlbnQsIERPTVdpbmRvdyogd2luZG93KQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGlu
c3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICByZXR1cm4g
d2lsbERpc3BhdGNoRXZlbnRPbldpbmRvd0ltcGwoaW5zcGVjdG9yQWdlbnQsIGV2ZW50LCB3aW5k
b3cpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c1dpdGhGcm9udGVuZEZvckZyYW1lKGZyYW1lKSkKKyAgICAgICAg
cmV0dXJuIHdpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3dJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMs
IGV2ZW50LCB3aW5kb3cpOwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSgpOwogfQpAQCAtNTE1LDggKzUxMSw4IEBAIGlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudE9uV2luZG93KGNvbnN0IEluc3BlY3Rv
ckluCiBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbEV2YWx1YXRlU2NyaXB0KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5n
JiB1cmwsIGludCBsaW5lTnVtYmVyKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYg
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250
ZW5kRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICByZXR1cm4gd2lsbEV2YWx1YXRlU2NyaXB0SW1w
bChpbnNwZWN0b3JBZ2VudCwgdXJsLCBsaW5lTnVtYmVyKTsKKyAgICBpZiAoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNXaXRoRnJv
bnRlbmRGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVybiB3aWxsRXZhbHVhdGVTY3JpcHRJ
bXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHVybCwgbGluZU51bWJlcik7CiAjZW5kaWYKICAgICBy
ZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCk7CiB9CkBAIC01MzIsOCArNTI4
LDggQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRFdmFsdWF0ZVNj
cmlwdChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW4KIGlubGluZSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRmlyZVRpbWVyKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGludCB0aW1lcklkKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3Bl
Y3RvckFnZW50V2l0aEZyb250ZW5kRm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAgICAgcmV0dXJu
IHdpbGxGaXJlVGltZXJJbXBsKGluc3BlY3RvckFnZW50LCB0aW1lcklkKTsKKyAgICBpZiAoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNXaXRoRnJvbnRlbmRGb3JDb250ZXh0KGNvbnRleHQpKQorICAgICAgICByZXR1cm4gd2lsbEZp
cmVUaW1lckltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgdGltZXJJZCk7CiAjZW5kaWYKICAgICBy
ZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCk7CiB9CkBAIC01NDksOCArNTQ1
LDggQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaXJlVGltZXIo
Y29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW8KIGlubGluZSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTGF5b3V0KEZyYW1lKiBm
cmFtZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCog
aW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckZyYW1lKGZyYW1l
KSkKLSAgICAgICAgcmV0dXJuIHdpbGxMYXlvdXRJbXBsKGluc3BlY3RvckFnZW50KTsKKyAgICBp
ZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRp
bmdBZ2VudHNXaXRoRnJvbnRlbmRGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVybiB3aWxs
TGF5b3V0SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzKTsKICNlbmRpZgogICAgIHJldHVybiBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKIH0KQEAgLTU2Niw4ICs1NjIsOCBAQCBpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZExheW91dChjb25zdCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25DbwogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMb2FkWEhSKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFhNTEh0dHBSZXF1ZXN0KiByZXF1ZXN0KQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3Bl
Y3RvckFnZW50V2l0aEZyb250ZW5kRm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAgICAgcmV0dXJu
IHdpbGxMb2FkWEhSSW1wbChpbnNwZWN0b3JBZ2VudCwgcmVxdWVzdCk7CisgICAgaWYgKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRz
V2l0aEZyb250ZW5kRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIHdpbGxMb2Fk
WEhSSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCByZXF1ZXN0KTsKICNlbmRpZgogICAgIHJldHVy
biBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKIH0KQEAgLTU4Myw4ICs1NzksOCBA
QCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZExvYWRYSFIoY29uc3Qg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQwogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQYWludChGcmFtZSogZnJhbWUs
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAo
SW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRl
bmRGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIHJldHVybiB3aWxsUGFpbnRJbXBsKGluc3BlY3Rv
ckFnZW50LCByZWN0KTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNXaXRoRnJvbnRlbmRGb3JGcmFtZShmcmFtZSkp
CisgICAgICAgIHJldHVybiB3aWxsUGFpbnRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHJlY3Qp
OwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpOwog
fQpAQCAtNjAwLDggKzU5Niw4IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkUGFpbnQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29vCiBpbmxpbmUgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bFJlY2FsY3VsYXRlU3R5bGUoRG9jdW1lbnQqIGRvY3VtZW50KQogewogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3Rv
ckFnZW50V2l0aEZyb250ZW5kRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICByZXR1cm4g
d2lsbFJlY2FsY3VsYXRlU3R5bGVJbXBsKGluc3BlY3RvckFnZW50KTsKKyAgICBpZiAoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNX
aXRoRnJvbnRlbmRGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgICAgIHJldHVybiB3aWxsUmVj
YWxjdWxhdGVTdHlsZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50cyk7CiAjZW5kaWYKICAgICByZXR1
cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCk7CiB9CkBAIC02MTcsNDYgKzYxMyw0
OCBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2FsY3VsYXRl
U3R5bGUoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bQogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjphcHBseVVzZXJBZ2VudE92ZXJyaWRlKEZyYW1lKiBmcmFtZSwgU3RyaW5nKiB1
c2VyQWdlbnQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdl
bnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JGcmFtZShm
cmFtZSkpCi0gICAgICAgIGFwcGx5VXNlckFnZW50T3ZlcnJpZGVJbXBsKGluc3BlY3RvckFnZW50
LCB1c2VyQWdlbnQpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c1dpdGhGcm9udGVuZEZvckZyYW1lKGZyYW1lKSkK
KyAgICAgICAgYXBwbHlVc2VyQWdlbnRPdmVycmlkZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywg
dXNlckFnZW50KTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxTZW5kUmVxdWVzdChGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpYyA9IGluc3BlY3RvckFnZW50Rm9y
RnJhbWUoZnJhbWUpKQotICAgICAgICB3aWxsU2VuZFJlcXVlc3RJbXBsKGljLCBpZGVudGlmaWVy
LCBsb2FkZXIsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZy
YW1lKGZyYW1lKSkKKyAgICAgICAgd2lsbFNlbmRSZXF1ZXN0SW1wbChpbnN0cnVtZW50aW5nQWdl
bnRzLCBpZGVudGlmaWVyLCBsb2FkZXIsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwogI2Vu
ZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29udGludWVB
ZnRlclBpbmdMb2FkZXIoRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERv
Y3VtZW50TG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBp
ZiAoSW5zcGVjdG9yQWdlbnQqIGljID0gaW5zcGVjdG9yQWdlbnRGb3JGcmFtZShmcmFtZSkpCi0g
ICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29udGludWVBZnRlclBpbmdMb2FkZXJJ
bXBsKGljLCBpZGVudGlmaWVyLCBsb2FkZXIsIHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICBpZiAo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
Y29udGludWVBZnRlclBpbmdMb2FkZXJJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZp
ZXIsIGxvYWRlciwgcmVxdWVzdCwgcmVzcG9uc2UpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bWFya1Jlc291cmNlQXNDYWNoZWQoUGFnZSogcGFn
ZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0g
ICAgbWFya1Jlc291cmNlQXNDYWNoZWRJbXBsKGluc3BlY3RvckFnZW50Rm9yUGFnZShwYWdlKSwg
aWRlbnRpZmllcik7IAorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCisgICAgICAgIG1hcmtS
ZXNvdXJjZUFzQ2FjaGVkSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVudGlmaWVyKTsgCiAj
ZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRMb2Fk
UmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoUGFnZSogcGFnZSwgRG9jdW1lbnRMb2FkZXIqIGxvYWRl
ciwgY29uc3QgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQogewogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCi0gICAgZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlSW1wbChpbnNwZWN0b3JBZ2Vu
dEZvclBhZ2UocGFnZSksIGxvYWRlciwgcmVzb3VyY2UpOworICAgIGlmIChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2Uo
cGFnZSkpCisgICAgICAgIGRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZUltcGwoaW5zdHJ1
bWVudGluZ0FnZW50cywgbG9hZGVyLCByZXNvdXJjZSk7CiAjZW5kaWYKIH0KIAogaW5saW5lIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxSZWNlaXZlUmVzb3VyY2VEYXRhKEZyYW1lKiBmcmFtZSwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBp
bnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRnJhbWUoZnJhbWUp
KQotICAgICAgICByZXR1cm4gd2lsbFJlY2VpdmVSZXNvdXJjZURhdGFJbXBsKGluc3BlY3RvckFn
ZW50LCBpZGVudGlmaWVyKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNXaXRoRnJvbnRlbmRGb3JGcmFtZShmcmFt
ZSkpCisgICAgICAgIHJldHVybiB3aWxsUmVjZWl2ZVJlc291cmNlRGF0YUltcGwoaW5zdHJ1bWVu
dGluZ0FnZW50cywgaWRlbnRpZmllcik7CiAjZW5kaWYKICAgICByZXR1cm4gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llKCk7CiB9CkBAIC02NzIsOCArNjcwLDggQEAgaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlUmVzb3VyY2VEYXRhKGNvbnN0IElu
c3BlY3Rvckluc3QKIGlubGluZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVjZWl2ZVJlc291cmNlUmVzcG9uc2UoRnJhbWUqIGZy
YW1lLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50
KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9yRnJhbWUoZnJhbWUpKQotICAgICAg
ICByZXR1cm4gd2lsbFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlSW1wbChpbnNwZWN0b3JBZ2VudCwg
aWRlbnRpZmllciwgcmVzcG9uc2UpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAg
ICAgICAgcmV0dXJuIHdpbGxSZWNlaXZlUmVzb3VyY2VSZXNwb25zZUltcGwoaW5zdHJ1bWVudGlu
Z0FnZW50cywgaWRlbnRpZmllciwgcmVzcG9uc2UpOwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpOwogfQpAQCAtNjg5LDcgKzY4Nyw3IEBAIGlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9u
c2UoY29uc3QgSW5zcGVjdG9yCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmNvbnRpbnVlQWZ0ZXJYRnJhbWVPcHRpb25zRGVuaWVkKEZyYW1lKiBmcmFtZSwgRG9jdW1lbnRM
b2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKGluc3BlY3RvckFn
ZW50V2l0aEZyb250ZW5kRm9yRnJhbWUoZnJhbWUpKQorICAgIGlmIChoYXNGcm9udGVuZHMoKSkK
ICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250aW51ZUFmdGVyWEZyYW1lT3B0
aW9uc0RlbmllZEltcGwoZnJhbWUsIGxvYWRlciwgaWRlbnRpZmllciwgcik7CiAjZW5kaWYKIH0K
QEAgLTY5Nyw3ICs2OTUsNyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmNvbnRpbnVlQWZ0ZXJYRnJhbWVPcHRpb25zRGVuaWVkKEZyYW1lKiBmcgogaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250aW51ZVdpdGhQb2xpY3lEb3dubG9hZChGcmFt
ZSogZnJhbWUsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQot
ICAgIGlmIChpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckZyYW1lKGZyYW1lKSkKKyAgICBp
ZiAoaGFzRnJvbnRlbmRzKCkpCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29u
dGludWVXaXRoUG9saWN5RG93bmxvYWRJbXBsKGZyYW1lLCBsb2FkZXIsIGlkZW50aWZpZXIsIHIp
OwogI2VuZGlmCiB9CkBAIC03MDUsNyArNzAzLDcgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpjb250aW51ZVdpdGhQb2xpY3lEb3dubG9hZChGcmFtZSogZnJhbWUsIEQK
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29udGludWVXaXRoUG9saWN5
SWdub3JlKEZyYW1lKiBmcmFtZSwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgaWYgKGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRnJhbWUoZnJh
bWUpKQorICAgIGlmIChoYXNGcm9udGVuZHMoKSkKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpjb250aW51ZVdpdGhQb2xpY3lJZ25vcmVJbXBsKGZyYW1lLCBsb2FkZXIsIGlkZW50
aWZpZXIsIHIpOwogI2VuZGlmCiB9CkBAIC03MTMsNjQgKzcxMSw2NCBAQCBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlV2l0aFBvbGljeUlnbm9yZShGcmFtZSog
ZnJhbWUsIERvYwogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNl
aXZlQ29udGVudExlbmd0aChGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
aW50IGRhdGFMZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCkKIHsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0
b3JBZ2VudEZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAgZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhJ
bXBsKGluc3BlY3RvckFnZW50LCBpZGVudGlmaWVyLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YUxl
bmd0aCk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQorICAgICAgICBkaWRSZWNlaXZl
Q29udGVudExlbmd0aEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRpZmllciwgZGF0YUxl
bmd0aCwgZW5jb2RlZERhdGFMZW5ndGgpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmluaXNoTG9hZGluZyhGcmFtZSogZnJhbWUsIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpCiB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVj
dG9yQWdlbnRGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGRpZEZpbmlzaExvYWRpbmdJbXBsKGlu
c3BlY3RvckFnZW50LCBpZGVudGlmaWVyLCBmaW5pc2hUaW1lKTsKKyAgICBpZiAoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JG
cmFtZShmcmFtZSkpCisgICAgICAgIGRpZEZpbmlzaExvYWRpbmdJbXBsKGluc3RydW1lbnRpbmdB
Z2VudHMsIGlkZW50aWZpZXIsIGZpbmlzaFRpbWUpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmFpbExvYWRpbmcoRnJhbWUqIGZyYW1lLCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudCA9IGluc3BlY3RvckFnZW50Rm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBkaWRGYWlsTG9h
ZGluZ0ltcGwoaW5zcGVjdG9yQWdlbnQsIGlkZW50aWZpZXIsIGVycm9yKTsKKyAgICBpZiAoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIGRpZEZhaWxMb2FkaW5nSW1wbChpbnN0cnVtZW50
aW5nQWdlbnRzLCBpZGVudGlmaWVyLCBlcnJvcik7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVl
c3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgc2VuZFVSTCwgdW5zaWduZWQgc2VuZExpbmVOdW1iZXIpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5z
cGVjdG9yQWdlbnRGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICByZXNvdXJjZVJldHJpZXZl
ZEJ5WE1MSHR0cFJlcXVlc3RJbXBsKGluc3BlY3RvckFnZW50LCBpZGVudGlmaWVyLCBzb3VyY2VT
dHJpbmcsIHVybCwgc2VuZFVSTCwgc2VuZExpbmVOdW1iZXIpOworICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNv
bnRleHQoY29udGV4dCkpCisgICAgICAgIHJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVz
dEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRpZmllciwgc291cmNlU3RyaW5nLCB1cmws
IHNlbmRVUkwsIHNlbmRMaW5lTnVtYmVyKTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnNjcmlwdEltcG9ydGVkKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VTdHJpbmcpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdl
bnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JDb250ZXh0KGNvbnRleHQpKQot
ICAgICAgICBzY3JpcHRJbXBvcnRlZEltcGwoaW5zcGVjdG9yQWdlbnQsIGlkZW50aWZpZXIsIHNv
dXJjZVN0cmluZyk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICAgICAg
c2NyaXB0SW1wb3J0ZWRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIsIHNvdXJj
ZVN0cmluZyk7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkb21Db250ZW50TG9hZGVkRXZlbnRGaXJlZChGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwm
IHVybCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCog
aW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAg
ZG9tQ29udGVudExvYWRlZEV2ZW50RmlyZWRJbXBsKGluc3BlY3RvckFnZW50LCBmcmFtZSwgdXJs
KTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGlu
c3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIGRvbUNvbnRlbnRMb2Fk
ZWRFdmVudEZpcmVkSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSwgdXJsKTsKICNlbmRp
ZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmxvYWRFdmVudEZp
cmVkKEZyYW1lKiBmcmFtZSwgY29uc3QgS1VSTCYgdXJsKQogewogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFn
ZW50Rm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBsb2FkRXZlbnRGaXJlZEltcGwoaW5zcGVjdG9y
QWdlbnQsIGZyYW1lLCB1cmwpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICAg
ICAgbG9hZEV2ZW50RmlyZWRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIGZyYW1lLCB1cmwpOwog
I2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVE
ZXRhY2hlZEZyb21QYXJlbnQoRnJhbWUqIGZyYW1lKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
Ci0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50
Rm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBmcmFtZURldGFjaGVkRnJvbVBhcmVudEltcGwoaW5z
cGVjdG9yQWdlbnQsIGZyYW1lKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAg
ICAgIGZyYW1lRGV0YWNoZWRGcm9tUGFyZW50SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFt
ZSk7CiAjZW5kaWYKIH0KIApAQCAtNzgyLDE2ICs3ODAsMTYgQEAgaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDb21taXRMb2FkKEZyYW1lKiBmcmFtZSwgRG9jdW1lbnRM
b2FkZXIKICAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAg
ICAgICAgIHJldHVybjsKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0g
aW5zcGVjdG9yQWdlbnRGb3JQYWdlKHBhZ2UpKQotICAgICAgICBkaWRDb21taXRMb2FkSW1wbChw
YWdlLCBpbnNwZWN0b3JBZ2VudCwgbG9hZGVyKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2Up
KQorICAgICAgICBkaWRDb21taXRMb2FkSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBwYWdlLCBs
b2FkZXIpOwogI2VuZGlmCiB9CiAKIGlubGluZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsV3JpdGVIVE1MKERvY3VtZW50KiBkb2N1
bWVudCwgdW5zaWduZWQgaW50IGxlbmd0aCwgdW5zaWduZWQgaW50IHN0YXJ0TGluZSkKIHsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdl
bnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAg
ICAgICAgcmV0dXJuIHdpbGxXcml0ZUhUTUxJbXBsKGluc3BlY3RvckFnZW50LCBsZW5ndGgsIHN0
YXJ0TGluZSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzV2l0aEZyb250ZW5kRm9yRG9jdW1lbnQoZG9jdW1lbnQp
KQorICAgICAgICByZXR1cm4gd2lsbFdyaXRlSFRNTEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywg
bGVuZ3RoLCBzdGFydExpbmUpOwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSgpOwogfQpAQCAtODA4LDggKzgwNiw4IEBAIGlubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkV3JpdGVIVE1MKGNvbnN0IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFVzZURPTVN0
b3JhZ2UoUGFnZSogcGFnZSwgU3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9jYWxT
dG9yYWdlLCBGcmFtZSogZnJhbWUpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAo
SW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JQYWdlKHBh
Z2UpKQotICAgICAgICBkaWRVc2VET01TdG9yYWdlSW1wbChpbnNwZWN0b3JBZ2VudCwgc3RvcmFn
ZUFyZWEsIGlzTG9jYWxTdG9yYWdlLCBmcmFtZSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdl
KSkKKyAgICAgICAgZGlkVXNlRE9NU3RvcmFnZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgc3Rv
cmFnZUFyZWEsIGlzTG9jYWxTdG9yYWdlLCBmcmFtZSk7CiAjZW5kaWYKIH0KICNlbmRpZgpAQCAt
ODE4LDcgKzgxNiw3IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
VXNlRE9NU3RvcmFnZShQYWdlKiBwYWdlLCBTdG9yYWdlQXJlYSoKIGlubGluZSBib29sIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFN0YXJ0V29ya2VyQ29udGV4dChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBXb3JrZXJDb250ZXh0UHJveHkqKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgcmV0dXJuIGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yQ29udGV4
dChjb250ZXh0KTsKKyAgICByZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50c1dpdGhGcm9udGVuZEZv
ckNvbnRleHQoY29udGV4dCk7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpAQCAt
ODI5LDI0ICs4MjcsMjQgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRTdGFydFdvcmtlckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGUKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQogICAgIGlmICghcGF1c2VkKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKEluc3Bl
Y3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9y
Q29udGV4dChjb250ZXh0KSkKLSAgICAgICAgZGlkU3RhcnRXb3JrZXJDb250ZXh0SW1wbChpbnNw
ZWN0b3JBZ2VudCwgcHJveHkpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c1dpdGhGcm9udGVuZEZvckNvbnRleHQo
Y29udGV4dCkpCisgICAgICAgIGRpZFN0YXJ0V29ya2VyQ29udGV4dEltcGwoaW5zdHJ1bWVudGlu
Z0FnZW50cywgcHJveHkpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkQ3JlYXRlV29ya2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIGludHB0cl90IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtlcikK
IHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVj
dG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckNvbnRleHQoY29udGV4dCkp
Ci0gICAgICAgIGRpZENyZWF0ZVdvcmtlckltcGwoaW5zcGVjdG9yQWdlbnQsIGlkLCB1cmwsIGlz
U2hhcmVkV29ya2VyKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNXaXRoRnJvbnRlbmRGb3JDb250ZXh0KGNvbnRl
eHQpKQorICAgICAgICBkaWRDcmVhdGVXb3JrZXJJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIGlk
LCB1cmwsIGlzU2hhcmVkV29ya2VyKTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZERlc3Ryb3lXb3JrZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgaW50cHRyX3QgaWQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBp
ZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJv
bnRlbmRGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICBkaWREZXN0cm95V29ya2VySW1wbChp
bnNwZWN0b3JBZ2VudCwgaWQpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c1dpdGhGcm9udGVuZEZvckNvbnRleHQo
Y29udGV4dCkpCisgICAgICAgIGRpZERlc3Ryb3lXb3JrZXJJbXBsKGluc3RydW1lbnRpbmdBZ2Vu
dHMsIGlkKTsKICNlbmRpZgogfQogI2VuZGlmCkBAIC04NTYsMzIgKzg1NCwzMiBAQCBpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERlc3Ryb3lXb3JrZXIoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogYwogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRDcmVhdGVXZWJTb2NrZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBLVVJMJiBk
b2N1bWVudFVSTCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JB
Z2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZvckNvbnRleHQoY29udGV4dCkp
Ci0gICAgICAgIGRpZENyZWF0ZVdlYlNvY2tldEltcGwoaW5zcGVjdG9yQWdlbnQsIGlkZW50aWZp
ZXIsIHJlcXVlc3RVUkwsIGRvY3VtZW50VVJMKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNv
bnRleHQpKQorICAgICAgICBkaWRDcmVhdGVXZWJTb2NrZXRJbXBsKGluc3RydW1lbnRpbmdBZ2Vu
dHMsIGlkZW50aWZpZXIsIHJlcXVlc3RVUkwsIGRvY3VtZW50VVJMKTsKICNlbmRpZgogfQogCiBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kV2ViU29ja2V0SGFu
ZHNoYWtlUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QmIHJlcXVlc3Qp
CiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICB3
aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3RJbXBsKGluc3BlY3RvckFnZW50LCBpZGVu
dGlmaWVyLCByZXF1ZXN0KTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQorICAg
ICAgICB3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3RJbXBsKGluc3RydW1lbnRpbmdB
Z2VudHMsIGlkZW50aWZpZXIsIHJlcXVlc3QpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3Bv
bnNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2Vu
dCA9IGluc3BlY3RvckFnZW50Rm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAgICAgZGlkUmVjZWl2
ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlSW1wbChpbnNwZWN0b3JBZ2VudCwgaWRlbnRpZmll
ciwgcmVzcG9uc2UpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCisgICAgICAg
IGRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZUltcGwoaW5zdHJ1bWVudGluZ0Fn
ZW50cywgaWRlbnRpZmllciwgcmVzcG9uc2UpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xvc2VXZWJTb2NrZXQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGlu
c3BlY3RvckFnZW50Rm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAgICAgZGlkQ2xvc2VXZWJTb2Nr
ZXRJbXBsKGluc3BlY3RvckFnZW50LCBpZGVudGlmaWVyKTsKKyAgICBpZiAoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250
ZXh0KGNvbnRleHQpKQorICAgICAgICBkaWRDbG9zZVdlYlNvY2tldEltcGwoaW5zdHJ1bWVudGlu
Z0FnZW50cywgaWRlbnRpZmllcik7CiAjZW5kaWYKIH0KICNlbmRpZgpAQCAtODg5LDggKzg4Nyw4
IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xvc2VXZWJTb2Nr
ZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCoKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6bmV0d29ya1N0YXRlQ2hhbmdlZChQYWdlKiBwYWdlKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpICYmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgaWYgKElu
c3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5k
Rm9yUGFnZShwYWdlKSkKLSAgICAgICAgbmV0d29ya1N0YXRlQ2hhbmdlZEltcGwoaW5zcGVjdG9y
QWdlbnQpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c1dpdGhGcm9udGVuZEZvclBhZ2UocGFnZSkpCisgICAgICAg
IG5ldHdvcmtTdGF0ZUNoYW5nZWRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMpOwogI2VuZGlmCiB9
CiAKQEAgLTg5OCw4ICs4OTYsOCBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246Om5ldHdvcmtTdGF0ZUNoYW5nZWQoUGFnZSogcGFnZSkKIGlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhGcmFtZSogZnJh
bWUpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGlu
c3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JGcmFtZShmcmFtZSkp
Ci0gICAgICAgIHVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNJbXBsKGluc3BlY3RvckFnZW50
LCBmcmFtZSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzV2l0aEZyb250ZW5kRm9yRnJhbWUoZnJhbWUpKQorICAg
ICAgICB1cGRhdGVBcHBsaWNhdGlvbkNhY2hlU3RhdHVzSW1wbChpbnN0cnVtZW50aW5nQWdlbnRz
LCBmcmFtZSk7CiAjZW5kaWYKIH0KICNlbmRpZgpAQCAtOTA3LDY1ICs5MDUsNTkgQEAgaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp1cGRhdGVBcHBsaWNhdGlvbkNhY2hlU3Rh
dHVzKEZyYW1lKiBmcmFtZSkKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogaW5saW5lIGJvb2wgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZChQYWdlKiBwYWdlKQogewotICAgIHJl
dHVybiBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvclBhZ2UocGFnZSk7CisgICAgaWYgKElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdl
bnRzV2l0aEZyb250ZW5kRm9yUGFnZShwYWdlKSkKKyAgICAgICAgcmV0dXJuIGhhc0Zyb250ZW5k
KGluc3RydW1lbnRpbmdBZ2VudHMpOworICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZgotCiAK
LSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotaW5saW5lIEluc3BlY3RvckFnZW50KiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246Omluc3BlY3RvckFnZW50Rm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KQoraW5saW5lIEluc3RydW1lbnRpbmdBZ2VudHMqIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpCi0gICAgICAgIHJldHVybiBpbnNwZWN0b3JBZ2VudEZvclBhZ2Uoc3RhdGljX2Nh
c3Q8RG9jdW1lbnQqPihjb250ZXh0KS0+cGFnZSgpKTsKKyAgICAgICAgcmV0dXJuIGluc3RydW1l
bnRpbmdBZ2VudHNGb3JQYWdlKHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCktPnBhZ2Uo
KSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWlubGluZSBJbnNwZWN0b3JBZ2VudCogSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0b3JBZ2VudEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKLXsK
LSAgICBpZiAoZnJhbWUpCi0gICAgICAgIHJldHVybiBpbnNwZWN0b3JBZ2VudEZvclBhZ2UoZnJh
bWUtPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlubGluZSBJbnNwZWN0b3JBZ2VudCog
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0b3JBZ2VudEZvclBhZ2UoUGFnZSogcGFn
ZSkKK2lubGluZSBJbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
Omluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKFBhZ2UqIHBhZ2UpCiB7CiAgICAgaWYgKCFwYWdl
KQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaW5zcGVjdG9yQWdlbnRzKCkuZ2V0KHBh
Z2UpOworICAgIHJldHVybiBpbnN0cnVtZW50aW5nQWdlbnRzKCkuZ2V0KHBhZ2UpOwogfQogCi1p
bmxpbmUgSW5zcGVjdG9yQWdlbnQqIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zcGVjdG9y
QWdlbnRXaXRoRnJvbnRlbmRGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCitpbmxpbmUgSW5zdHJ1bWVudGluZ0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjppbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogewotICAgIGlmICho
YXNGcm9udGVuZHMoKSAmJiBjb250ZXh0ICYmIGNvbnRleHQtPmlzRG9jdW1lbnQoKSkKLSAgICAg
ICAgcmV0dXJuIGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yUGFnZShzdGF0aWNfY2FzdDxE
b2N1bWVudCo+KGNvbnRleHQpLT5wYWdlKCkpOworICAgIGlmIChmcmFtZSkKKyAgICAgICAgcmV0
dXJuIGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKGZyYW1lLT5wYWdlKCkpOwogICAgIHJldHVy
biAwOwogfQogCi1pbmxpbmUgSW5zcGVjdG9yQWdlbnQqIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6aW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1l
bnQpCitpbmxpbmUgSW5zdHJ1bWVudGluZ0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjppbnN0cnVtZW50aW5nQWdlbnRzV2l0aEZyb250ZW5kRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQog
ewotICAgIGlmIChoYXNGcm9udGVuZHMoKSAmJiBkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIGlu
c3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yUGFnZShkb2N1bWVudC0+cGFnZSgpKTsKLSAgICBy
ZXR1cm4gMDsKKyAgICBpZiAoIWhhc0Zyb250ZW5kcygpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKTsKIH0KIAotaW5saW5l
IEluc3BlY3RvckFnZW50KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3BlY3RvckFnZW50
V2l0aEZyb250ZW5kRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQoraW5saW5lIEluc3RydW1lbnRpbmdB
Z2VudHMqIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c1dpdGhG
cm9udGVuZEZvclBhZ2UoUGFnZSogcGFnZSkKIHsKLSAgICBpZiAoaGFzRnJvbnRlbmRzKCkgJiYg
ZnJhbWUpCi0gICAgICAgIHJldHVybiBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvclBhZ2Uo
ZnJhbWUtPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFoYXNGcm9udGVuZHMoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdl
KHBhZ2UpOwogfQogCi1pbmxpbmUgSW5zcGVjdG9yQWdlbnQqIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6aW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JQYWdlKFBhZ2UqIHBhZ2UpCitpbmxp
bmUgSW5zdHJ1bWVudGluZ0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVt
ZW50aW5nQWdlbnRzV2l0aEZyb250ZW5kRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KQogewotICAgIGlmIChwYWdlKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JBZ2Vu
dCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZvclBhZ2UocGFnZSkpIHsKLSAgICAg
ICAgICAgIGlmIChoYXNGcm9udGVuZChpbnNwZWN0b3JBZ2VudCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGluc3BlY3RvckFnZW50OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOwor
ICAgIGlmICghaGFzRnJvbnRlbmRzKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBp
bnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KTsKIH0KIAoraW5saW5lIEluc3Ry
dW1lbnRpbmdBZ2VudHMqIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0Fn
ZW50c1dpdGhGcm9udGVuZEZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBp
ZiAoaGFzRnJvbnRlbmRzKCkgJiYgZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yUGFnZShkb2N1bWVudC0+cGFnZSgpKTsKKyAgICByZXR1cm4gMDsKK30KICNl
bmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93636</attachid>
            <date>2011-05-16 05:34:34 -0700</date>
            <delta_ts>2011-05-16 06:02:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60624-20110516163431.patch</filename>
            <type>text/plain</type>
            <size>130189</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY1NDYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkMzcwMTJhNDRlMjQ3YzEz
OTkyNmMyMzM0NDFiZmFkZjc0NTQ0ZDM5Li43Nzk5NGZhOWRmMTc1NDcyNDhjNmE2M2Y5ZTEzY2Qw
Yjk4MmVhNzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTc2IEBACisyMDExLTA1LTExICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHVzZSBJbnN0cnVtZW50
aW5nQWdlbnRzIHRvIGFjY2VzcyBhZ2VudHMgZnJvbSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwNjI0CisK
KyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uIHJldHJpZXZlcyBpbnNwZWN0b3IgYWdl
bnRzIGZyb20gY29ycmVzcG9uZGluZyBJbnN0cnVtZW50aW5nQWdlbnRzCisgICAgICAgIGluc3Rh
bmNlLiBFYWNoIGFnZW50IG5vdGlmaWVzIEluc3RydW1lbnRpbmdBZ2VudHMgd2hlbmV2ZXIgaXQg
d2FudHMgdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zCisgICAgICAgIGFib3V0IGNoYW5nZXMgaW4g
V2ViQ29yZS4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6SW5zcGVjdG9yQWdlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdGFydENvbnNvbGVUaW1pbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVN
YXJrVGltZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cHJvZmlsZXJFbmFibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQ
cm9maWxlTmFtZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJv
bGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQ
YWdlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRp
ZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjppbnNwZWN0ZWRQYWdlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUluc3Ry
dW1lbnRhdGlvbi5oOiBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMgbWFjcm9zCisgICAgICAg
IGlzIHVzZWQgZm9yIGVhcmx5IHJldHVybiBpbiBjb21tb24gY2FzZSB3aGVuIGluc3BlY3RvciBp
cyBub3Qgb3BlbmVkLiBJbiB0aGlzCisgICAgICAgIGNhc2UgaW5zcGVjdG9yIGluc3RydW1lbnRh
dGlvbiBjb3N0cyBvbmUgYWRkaXRpb25hbCBjaGVjayBvZiBhIHN0YXRpYyBmaWVsZC4KKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENsZWFy
V2luZG93T2JqZWN0SW5Xb3JsZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkSW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxJbnNlcnRET01Ob2RlSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEluc2VydERPTU5v
ZGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bFJlbW92ZURPTU5vZGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkUmVtb3ZlRE9NTm9kZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTW9kaWZ5RE9NQXR0ckltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNb2RpZnlET01BdHRySW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRhdGVT
dHlsZUF0dHJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6aGFuZGxlTW91c2VQcmVzc0ltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWRJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRY
TUxIdHRwUmVxdWVzdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRTY2hlZHVsZVJlc291cmNlUmVxdWVzdEltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnN0YWxsVGltZXJJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVtb3ZlVGltZXJJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbENhbGxG
dW5jdGlvbkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsQ2hhbmdlWEhSUmVhZHlTdGF0ZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudEltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxF
dmFsdWF0ZVNjcmlwdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsRmlyZVRpbWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxMYXlvdXRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFBhaW50SW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNhbGN1bGF0ZVN0eWxlSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFwcGx5VXNlckFn
ZW50T3ZlcnJpZGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbFNlbmRSZXF1ZXN0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0ZXJQaW5nTG9hZGVySW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1hcmtSZXNvdXJjZUFzQ2FjaGVkSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZExvYWRS
ZXNvdXJjZUZyb21NZW1vcnlDYWNoZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVjZWl2ZVJlc291cmNlRGF0YUltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVjZWl2ZVJlc291cmNlUmVz
cG9uc2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmluaXNoTG9hZGluZ0lt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWls
TG9hZGluZ0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3RJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0SW1wb3J0ZWRJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZG9tQ29udGVudExvYWRlZEV2
ZW50RmlyZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6bG9hZEV2ZW50RmlyZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZnJhbWVEZXRhY2hlZEZyb21QYXJlbnRJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ29tbWl0TG9hZEltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsV3JpdGVIVE1MSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VU
b0NvbnNvbGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6Y29uc29sZUNvdW50SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnN0YXJ0Q29uc29sZVRpbWluZ0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZ0ltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlTWFya1RpbWVsaW5lSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZFN0YXJ0
UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjphZGRQcm9maWxlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5h
bWVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cHJv
ZmlsZXJFbmFibGVkSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZE9wZW5EYXRhYmFzZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRVc2VET01TdG9yYWdlSW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFN0YXJ0V29ya2VyQ29udGV4dEltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVXb3Jr
ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
RGVzdHJveVdvcmtlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRDcmVhdGVXZWJTb2NrZXRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2Vp
dmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDbG9zZVdlYlNvY2tldEltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2VkSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnVwZGF0ZUFw
cGxpY2F0aW9uQ2FjaGVTdGF0dXNJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNhbmNlbFBhdXNlT25OYXRpdmVFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJldHJpZXZl
VGltZWxpbmVBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpiaW5k
SW5zdHJ1bWVudGluZ0FnZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnVuYmluZEluc3RydW1lbnRpbmdBZ2VudHMpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0ZWRQYWdl
RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d2lsbEluc2VydERPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRJbnNlcnRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZURPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTW9kaWZ5RE9NQXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1vZGlmeURPTUF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVB
dHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpoYW5kbGVNb3VzZVByZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjaGVkdWxlUmVzb3Vy
Y2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkSW5zdGFsbFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkUmVtb3ZlVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsQ2FsbEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbENoYW5nZVhIUlJlYWR5U3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50
T25XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsRmlyZVRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxMb2FkWEhSKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbFJlY2FsY3VsYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVVzZXJBZ2VudE92ZXJyaWRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRSZXF1ZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29udGludWVBZnRl
clBpbmdMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjptYXJrUmVzb3VyY2VBc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNlaXZlUmVzb3VyY2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlY2Vp
dmVSZXNvdXJjZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6Y29udGludWVBZnRlclhGcmFtZU9wdGlvbnNEZW5pZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250aW51ZVdpdGhQb2xpY3lEb3dubG9h
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVl
V2l0aFBvbGljeUlnbm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZFJlY2VpdmVDb250ZW50TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZhaWxMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0
dHBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c2NyaXB0SW1wb3J0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkb21Db250ZW50TG9hZGVkRXZlbnRGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmxvYWRFdmVudEZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVEZXRhY2hlZEZyb21QYXJlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDb21taXRMb2FkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFdyaXRlSFRN
TCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFVzZURP
TVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsU3RhcnRXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkU3RhcnRXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlV29ya2VyKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGVzdHJveVdvcmtlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdlYlNvY2tldCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kV2Vi
U29ja2V0SGFuZHNoYWtlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENsb3NlV2ViU29ja2V0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bmV0d29ya1N0
YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OnVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjppbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzV2l0aEZyb250ZW5kRm9yRnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVt
ZW50aW5nQWdlbnRzV2l0aEZyb250ZW5kRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNXaXRoRnJvbnRlbmRGb3JD
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5z
dHJ1bWVudGluZ0FnZW50c1dpdGhGcm9udGVuZEZvckRvY3VtZW50KToKKwogMjAxMS0wNS0xNiAg
Tmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEaXJrIFNjaHVsemUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKaW5k
ZXggYTFiZTkzZDhkYzg3MDRkNjM3ZDg1MGYxN2Q4ZTdhNzRiMDZjODVkOC4uNWVhZTgxYzQ5ZDI4
NjE2Y2I2Y2I5NDVhYzM0YWFkYjliOWY2Zjk4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3Vt
ZW50LmNwcApAQCAtMjc3LDcgKzI3Nyw3IEBAIHZvaWQgSFRNTERvY3VtZW50OjpyZWxlYXNlRXZl
bnRzKCkKIAogUGFzc1JlZlB0cjxEb2N1bWVudFBhcnNlcj4gSFRNTERvY3VtZW50OjpjcmVhdGVQ
YXJzZXIoKQogewotICAgIGJvb2wgcmVwb3J0RXJyb3JzID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpoYXNGcm9udGVuZCh0aGlzLT5wYWdlKCkpOworICAgIGJvb2wgcmVwb3J0RXJyb3JzID0g
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb2xsZWN0aW5nSFRNTFBhcnNlRXJyb3JzKHRoaXMt
PnBhZ2UoKSk7CiAgICAgcmV0dXJuIEhUTUxEb2N1bWVudFBhcnNlcjo6Y3JlYXRlKHRoaXMsIHJl
cG9ydEVycm9ycyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdl
bnQuY3BwCmluZGV4IGQwNTI4OTZhNGFhMTk3YmZiZWQ1Y2E0ZmZjMDkwMTFkZDI5OTVjNzUuLjll
YTliNzRlZjFkNDYzZDEzOTkzZDQxZDQ3MWFmZDQ2NDQ3MjIyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcApAQCAtNjksNyArNjksNiBAQCBJbnNwZWN0
b3JBZ2VudDo6SW5zcGVjdG9yQWdlbnQoUGFnZSogcGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KiBpbmplY3RlZFNjcmlwdAogICAgICwgbV9jYW5Jc3N1ZUV2YWx1YXRlRm9yVGVzdEluRnJvbnRl
bmQoZmFsc2UpCiB7CiAgICAgQVNTRVJUX0FSRyhwYWdlLCBwYWdlKTsKLSAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmJpbmRJbnNwZWN0b3JBZ2VudChtX2luc3BlY3RlZFBhZ2UsIHRoaXMp
OwogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yQWdlbnQodGhpcyk7CiB9
CiAKQEAgLTg2LDcgKzg1LDYgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdGVkUGFnZURl
c3Ryb3llZCgpCiAgICAgaWYgKG1fZnJvbnRlbmQpCiAgICAgICAgIG1fZnJvbnRlbmQtPmluc3Bl
Y3RvcigpLT5kaXNjb25uZWN0RnJvbUJhY2tlbmQoKTsKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQ
YWdlKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnVuYmluZEluc3BlY3RvckFnZW50
KG1faW5zcGVjdGVkUGFnZSk7CiAgICAgbV9pbnNwZWN0ZWRQYWdlID0gMDsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaAppbmRleCBiYThhN2JiZjRkM2IzMDcw
YTFjMzBkZTI1OGRmZjUzYmE2OGJjZDQ5Li4wYjZjMjk1NzBiMmQzYTA4ODFkODVjMDVlNjYwNjA4
ODMyMDQ3MTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaApA
QCAtNjEsNyArNjEsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKIAot
ICAgIFBhZ2UqIGluc3BlY3RlZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7
IH0KICAgICBLVVJMIGluc3BlY3RlZFVSTCgpIGNvbnN0OwogICAgIEtVUkwgaW5zcGVjdGVkVVJM
V2l0aG91dEZyYWdtZW50KCkgY29uc3Q7CiAgICAgdm9pZCByZWxvYWRQYWdlKEVycm9yU3RyaW5n
KiwgYm9vbCBpZ25vcmVDYWNoZSk7CkBAIC03Miw4ICs3MSw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNsZWFyRnJvbnRlbmQoKTsKICAgICB2b2lkIHJlc3RvcmUoKTsKIAotICAgIEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydW1l
bnRpbmdBZ2VudHM7IH0KLQogICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZy
YW1lKiwgRE9NV3JhcHBlcldvcmxkKik7CiAKICAgICB2b2lkIGRpZENvbW1pdExvYWQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1
bWVudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUlu
c3RydW1lbnRhdGlvbi5oCmluZGV4IDgzMjY3NDEwZGVlZWRkNWJkNzg5MmY3N2Q3MzY5NDE0MTM2
MWJhZDkuLjc3Yzc1NmExNmY5YzVkZjAyZWNmYzliNGU3ODhlZWY2NzFjNmZlMmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVJbnN0
cnVtZW50YXRpb24uaApAQCAtNDEsNDggKzQxLDQ5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZShQ
YWdlKiBwYWdlLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2Fn
ZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8U2NyaXB0QXJn
dW1lbnRzPiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2sp
CiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JQYWdlKHBhZ2UpKQotICAgICAgICBhZGRNZXNz
YWdlVG9Db25zb2xlSW1wbChpbnNwZWN0b3JBZ2VudCwgc291cmNlLCB0eXBlLCBsZXZlbCwgbWVz
c2FnZSwgYXJndW1lbnRzLCBjYWxsU3RhY2spOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkp
CisgICAgICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHNv
dXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGFyZ3VtZW50cywgY2FsbFN0YWNrKTsKICNlbmRp
ZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VU
b0NvbnNvbGUoUGFnZSogcGFnZSwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5
cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQogewogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFn
ZW50Rm9yUGFnZShwYWdlKSkKLSAgICAgICAgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoaW5zcGVj
dG9yQWdlbnQsIHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJj
ZUlEKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQorICAgICAgICBhZGRNZXNzYWdlVG9D
b25zb2xlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNz
YWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnQoUGFnZSogcGFnZSwgUGFzc1JlZlB0
cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+
IHN0YWNrKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50
KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9yUGFnZShwYWdlKSkKLSAgICAgICAg
Y29uc29sZUNvdW50SW1wbChpbnNwZWN0b3JBZ2VudCwgYXJndW1lbnRzLCBzdGFjayk7CisgICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgY29uc29sZUNvdW50SW1wbChpbnN0cnVt
ZW50aW5nQWdlbnRzLCBhcmd1bWVudHMsIHN0YWNrKTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0Q29uc29sZVRpbWluZyhQYWdlKiBwYWdl
LCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYg
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9yUGFnZShw
YWdlKSkKLSAgICAgICAgc3RhcnRDb25zb2xlVGltaW5nSW1wbChpbnNwZWN0b3JBZ2VudCwgdGl0
bGUpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCisgICAgICAgIHN0YXJ0Q29uc29sZVRp
bWluZ0ltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgdGl0bGUpOwogI2VuZGlmCiB9CiAKIGlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcENvbnNvbGVUaW1pbmcoUGFnZSog
cGFnZSwgY29uc3QgU3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IHN0
YWNrKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBp
bnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9yUGFnZShwYWdlKSkKLSAgICAgICAgc3Rv
cENvbnNvbGVUaW1pbmdJbXBsKGluc3BlY3RvckFnZW50LCB0aXRsZSwgc3RhY2spOworICAgIGlm
IChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGlu
Z0FnZW50c0ZvclBhZ2UocGFnZSkpCisgICAgICAgIHN0b3BDb25zb2xlVGltaW5nSW1wbChpbnN0
cnVtZW50aW5nQWdlbnRzLCB0aXRsZSwgc3RhY2spOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZU1hcmtUaW1lbGluZShQYWdlKiBwYWdl
LCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3Bl
Y3RvckFnZW50V2l0aEZyb250ZW5kRm9yUGFnZShwYWdlKSkKLSAgICAgICAgY29uc29sZU1hcmtU
aW1lbGluZUltcGwoaW5zcGVjdG9yQWdlbnQsIGFyZ3VtZW50cyk7CisgICAgRkFTVF9SRVRVUk5f
SUZfTk9fRlJPTlRFTkRTKCk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAg
Y29uc29sZU1hcmtUaW1lbGluZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgYXJndW1lbnRzKTsK
ICNlbmRpZgogfQogCkBAIC05MCwyNCArOTEsMjQgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpjb25zb2xlTWFya1RpbWVsaW5lKFBhZ2UqIHBhZ2UsIFBhc3NSZWZQdHIK
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkU3RhcnRQcm9maWxpbmdN
ZXNzYWdlVG9Db25zb2xlKFBhZ2UqIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQogewogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3Rv
ckFnZW50Rm9yUGFnZShwYWdlKSkKLSAgICAgICAgYWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9D
b25zb2xlSW1wbChpbnNwZWN0b3JBZ2VudCwgdGl0bGUsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7
CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgYWRkU3RhcnRQcm9maWxpbmdN
ZXNzYWdlVG9Db25zb2xlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCB0aXRsZSwgbGluZU51bWJl
ciwgc291cmNlVVJMKTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmFkZFByb2ZpbGUoUGFnZSogcGFnZSwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHBy
b2ZpbGUsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2spCiB7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0g
aW5zcGVjdG9yQWdlbnRGb3JQYWdlKHBhZ2UpKQotICAgICAgICBhZGRQcm9maWxlSW1wbChpbnNw
ZWN0b3JBZ2VudCwgcHJvZmlsZSwgY2FsbFN0YWNrKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBh
Z2UpKQorICAgICAgICBhZGRQcm9maWxlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBwcm9maWxl
LCBjYWxsU3RhY2spOwogI2VuZGlmCiB9CiAKIGlubGluZSBib29sIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6cHJvZmlsZXJFbmFibGVkKFBhZ2UqIHBhZ2UpCiB7CiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9y
QWdlbnRGb3JQYWdlKHBhZ2UpKQotICAgICAgICByZXR1cm4gcHJvZmlsZXJFbmFibGVkSW1wbChp
bnNwZWN0b3JBZ2VudCk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgcmV0
dXJuIHByb2ZpbGVyRW5hYmxlZEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cyk7CiAjZW5kaWYKICAg
ICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xMTUsOCArMTE2LDggQEAgaW5saW5lIGJvb2wgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpwcm9maWxlckVuYWJsZWQoUGFnZSogcGFnZSkKIGlubGluZSBT
dHJpbmcgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpnZXRDdXJyZW50VXNlckluaXRpYXRlZFBy
b2ZpbGVOYW1lKFBhZ2UqIHBhZ2UsIGJvb2wgaW5jcmVtZW50UHJvZmlsZU51bWJlcikKIHsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdl
bnQgPSBpbnNwZWN0b3JBZ2VudEZvclBhZ2UocGFnZSkpCi0gICAgICAgIHJldHVybiBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWVJbXBs
KGluc3BlY3RvckFnZW50LCBpbmNyZW1lbnRQcm9maWxlTnVtYmVyKTsKKyAgICBpZiAoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3JQYWdlKHBhZ2UpKQorICAgICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpn
ZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lSW1wbChpbnN0cnVtZW50aW5nQWdlbnRz
LCBpbmNyZW1lbnRQcm9maWxlTnVtYmVyKTsKICNlbmRpZgogICAgIHJldHVybiAiIjsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRl
eCBlZTQzNTlkODg5NjZmYTVmY2YyNDE3MTBmOWI5NzNlOGNiYjM1MjdiLi5lY2ZlYmQ0MWZkOGE0
MDA4YTcxOTBlOTMwOTYyMmFlZDFmODFmNDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xMTIsNiArMTEyLDcgQEAgSW5zcGVj
dG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JD
bGllbnQqIGluc3BlY3RvckMKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICAsIG1fd29ya2VyQWdl
bnQoSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0
KCkpKQogI2VuZGlmCisgICAgLCBtX3BhZ2UocGFnZSkKICAgICAsIG1faW5zcGVjdG9yQ2xpZW50
KGluc3BlY3RvckNsaWVudCkKICAgICAsIG1fb3BlbmluZ0Zyb250ZW5kKGZhbHNlKQogICAgICwg
bV9zdGFydFVzZXJJbml0aWF0ZWREZWJ1Z2dpbmdXaGVuRnJvbnRlZElzQ29ubmVjdGVkKGZhbHNl
KQpAQCAtMTI2LDYgKzEyNyw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRy
b2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAgICAgICAgICwg
bV9kb21TdG9yYWdlQWdlbnQuZ2V0KCkKICNlbmRpZgogICAgICk7CisgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpiaW5kSW5zdHJ1bWVudGluZ0FnZW50cyhtX3BhZ2UsIG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5nZXQoKSk7CiB9CiAKIEluc3BlY3RvckNvbnRyb2xsZXI6On5JbnNwZWN0b3JD
b250cm9sbGVyKCkKQEAgLTEzNSw2ICsxMzcsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5z
cGVjdG9yQ29udHJvbGxlcigpCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVk
UGFnZURlc3Ryb3llZCgpCiB7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp1bmJpbmRJ
bnN0cnVtZW50aW5nQWdlbnRzKG1fcGFnZSk7CiAgICAgZGlzY29ubmVjdEZyb250ZW5kKCk7CiAj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgbV9kb21EZWJ1Z2dlckFnZW50LmNs
ZWFyKCk7CkBAIC0xNDMsNiArMTQ2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNw
ZWN0ZWRQYWdlRGVzdHJveWVkKCkKICAgICBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+ZGlzY29u
bmVjdCgpOwogICAgIG1faW5zcGVjdG9yQ2xpZW50LT5pbnNwZWN0b3JEZXN0cm95ZWQoKTsKICAg
ICBtX2luc3BlY3RvckNsaWVudCA9IDA7CisgICAgbV9wYWdlID0gMDsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3duUHRyPElu
c3BlY3RvckZyb250ZW5kQ2xpZW50PiBpbnNwZWN0b3JGcm9udGVuZENsaWVudCkKQEAgLTE2Miw3
ICsxNjYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXbwogCiAgICAgLy8gSWYgdGhlIHBhZ2Ug
aXMgc3VwcG9zZWQgdG8gc2VydmUgYXMgSW5zcGVjdG9yRnJvbnRlbmQgbm90aWZ5IGluc3BlY3Rv
ciBmcm9udGVuZAogICAgIC8vIGNsaWVudCB0aGF0IGl0J3MgY2xlYXJlZCBzbyB0aGF0IHRoZSBj
bGllbnQgY2FuIGV4cG9zZSBpbnNwZWN0b3IgYmluZGluZ3MuCi0gICAgaWYgKG1faW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQgJiYgZnJhbWUgPT0gbV9pbnNwZWN0b3JBZ2VudC0+aW5zcGVjdGVkUGFn
ZSgpLT5tYWluRnJhbWUoKSkKKyAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCAmJiBm
cmFtZSA9PSBtX3BhZ2UtPm1haW5GcmFtZSgpKQogICAgICAgICBtX2luc3BlY3RvckZyb250ZW5k
Q2xpZW50LT53aW5kb3dPYmplY3RDbGVhcmVkKCk7CiB9CiAKQEAgLTM3Niw3ICszODAsNyBAQCBi
b29sIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZWQoKSBjb25zdAogCiBQYWdlKiBJbnNwZWN0
b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbnNw
ZWN0b3JBZ2VudC0+aW5zcGVjdGVkUGFnZSgpOworICAgIHJldHVybiBtX3BhZ2U7CiB9CiAKIGJv
b2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggNjcyMjQx
ODYzNmE2Zjg1ZDdlODI0N2IxNzQ4OWNkN2Q5N2FiMzkzMy4uNzk4ZWJiYTU2NTkzYjc1ZWIyZGIx
YmQ2MzllZjQ2MzY5ZTIyMTkyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCkBAIC0xNTUsNiArMTU1LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQ
dHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI7CiAgICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBtX2luc3BlY3RvckZyb250
ZW5kQ2xpZW50OwogICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZD4gbV9pbnNwZWN0b3JGcm9u
dGVuZDsKKyAgICBQYWdlKiBtX3BhZ2U7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2luc3BlY3Rv
ckNsaWVudDsKICAgICBib29sIG1fb3BlbmluZ0Zyb250ZW5kOwogICAgIGJvb2wgbV9zdGFydFVz
ZXJJbml0aWF0ZWREZWJ1Z2dpbmdXaGVuRnJvbnRlZElzQ29ubmVjdGVkOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlSW5zdHJ1bWVudGF0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VJbnN0cnVtZW50
YXRpb24uaAppbmRleCAwYWQxNDYwZmFjYzZmMWExZmQ0ZmE1YzViZTRhNjg4Y2IzZjFiNTljLi4x
ZjZkN2Y3MTg1Y2I1YTllZmQxMjk4Zjg1N2JiNmJkODE1NWI2NTRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VJbnN0cnVtZW50YXRpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VJbnN0cnVtZW50
YXRpb24uaApAQCAtNDEsOCArNDEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3Qg
U3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAgICAg
ZGlkT3BlbkRhdGFiYXNlSW1wbChpbnNwZWN0b3JBZ2VudCwgZGF0YWJhc2UsIGRvbWFpbiwgbmFt
ZSwgdmVyc2lvbik7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICAgICAg
ZGlkT3BlbkRhdGFiYXNlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBkYXRhYmFzZSwgZG9tYWlu
LCBuYW1lLCB2ZXJzaW9uKTsKICNlbmRpZgogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCmluZGV4IDc5OGVm
MWJjODYxYjQwYWQ1NWQxYTAyMDAxMDJmZjMyYzJjYWM5MDcuLmQ1YjBiZTEzODBkYjA1NTZmYzM5
YmUwMzhjOWNjMzNiMGM1MzVlY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5j
bHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2lu
Y2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NjgsOSArNjksOSBAQCBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc2V0VGltZXJFdmVudE5hbWUg
PSAic2V0VGltZXIiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGNsZWFyVGltZXJFdmVudE5h
bWUgPSAiY2xlYXJUaW1lciI7CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgdGltZXJGaXJlZEV2
ZW50TmFtZSA9ICJ0aW1lckZpcmVkIjsKIAotSGFzaE1hcDxQYWdlKiwgSW5zcGVjdG9yQWdlbnQq
PiYgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0b3JBZ2VudHMoKQorSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpJbnN0cnVtZW50aW5nQWdlbnRzTWFwJiBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHMoKQogewotICAgIHN0YXRpYyBIYXNoTWFwPFBh
Z2UqLCBJbnNwZWN0b3JBZ2VudCo+JiBhZ2VudHMgPSAqbmV3IEhhc2hNYXA8UGFnZSosIEluc3Bl
Y3RvckFnZW50Kj47CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChJbnN0cnVtZW50aW5nQWdlbnRz
TWFwLCBhZ2VudHMsICgpKTsKICAgICByZXR1cm4gYWdlbnRzOwogfQogCkBAIC05MywxMzAgKzk0
LDEzMSBAQCBzdGF0aWMgYm9vbCBldmVudEhhc0xpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSwgRE9NV2luZG93KiB3aW5kb3csCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxk
SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIEZyYW1lKiBmcmFtZSwgRE9NV3Jh
cHBlcldvcmxkKiB3b3JsZCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDbGVh
cldpbmRvd09iamVjdEluV29ybGRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMsIEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKIHsKLSAgICBp
ZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1
bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9y
UGFnZUFnZW50KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JQYWdl
QWdlbnQoKSkKICAgICAgICAgcGFnZUFnZW50LT5kaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQo
ZnJhbWUsIHdvcmxkKTsKLSAgICBpbnNwZWN0b3JBZ2VudC0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RJ
bldvcmxkKGZyYW1lLCB3b3JsZCk7CisgICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckFnZW50KCkpCisgICAgICAgIGlu
c3BlY3RvckFnZW50LT5kaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoZnJhbWUsIHdvcmxkKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3BlY3RlZFBhZ2VEZXN0cm95
ZWRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKK3ZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewotICAgIGluc3BlY3RvckFnZW50LT5pbnNwZWN0
ZWRQYWdlRGVzdHJveWVkKCk7CisgICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckFnZW50KCkpCisgICAgICAgIGluc3Bl
Y3RvckFnZW50LT5pbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZUltcGwoSW5zcGVjdG9yQWdlbnQqIGlu
c3BlY3RvckFnZW50LCBOb2RlKiBub2RlLCBOb2RlKiBwYXJlbnQpCit2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMsIE5vZGUqIG5vZGUsIE5vZGUqIHBhcmVudCkKIHsKICNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudCogZG9tRGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdl
bnRzKCktPmluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yRE9N
RGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmlu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQoKSkKICAgICAgICAgZG9tRGVidWdnZXJBZ2VudC0+d2ls
bEluc2VydERPTU5vZGUobm9kZSwgcGFyZW50KTsKICNlbmRpZgogfQogCi12b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkSW5zZXJ0RE9NTm9kZUltcGwoSW5zcGVjdG9yQWdlbnQqIGlu
c3BlY3RvckFnZW50LCBOb2RlKiBub2RlKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZEluc2VydERPTU5vZGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMsIE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2Vu
dCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRPTUFn
ZW50KCkpCisgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMtPmluc3BlY3RvckRPTUFnZW50KCkpCiAgICAgICAgIGRvbUFnZW50LT5kaWRJbnNl
cnRET01Ob2RlKG5vZGUpOwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIGlm
IChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zcGVjdG9y
QWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgp
KQorICAgIGlmIChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpKQogICAgICAg
ICBkb21EZWJ1Z2dlckFnZW50LT5kaWRJbnNlcnRET01Ob2RlKG5vZGUpOwogI2VuZGlmCiB9CiAK
LXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9NTm9kZUltcGwoSW5z
cGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBOb2RlKiBub2RlKQordm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxSZW1vdmVET01Ob2RlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBOb2RlKiBub2RlKQogewogI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQotICAgIGlmIChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1
Z2dlckFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudCgpKQogICAgICAgICBkb21EZWJ1Z2dlckFnZW50LT53aWxsUmVtb3ZlRE9NTm9k
ZShub2RlKTsKICNlbmRpZgogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
UmVtb3ZlRE9NTm9kZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBOb2RlKiBu
b2RlKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlbW92ZURPTU5vZGVJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIE5vZGUqIG5vZGUpCiB7
CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgaWYgKEluc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVu
dGluZ0FnZW50cygpLT5pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KCkpCisgICAgaWYgKEluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLT5pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgIGRvbURlYnVnZ2VyQWdl
bnQtPmRpZFJlbW92ZURPTU5vZGUobm9kZSk7CiAjZW5kaWYKLSAgICBpZiAoSW5zcGVjdG9yRE9N
QWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+
aW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NQWdlbnQoKSkKICAgICAgICAgZG9t
QWdlbnQtPmRpZFJlbW92ZURPTU5vZGUobm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsTW9kaWZ5RE9NQXR0ckltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50LCBFbGVtZW50KiBlbGVtZW50KQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxNb2RpZnlET01BdHRySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBFbGVtZW50KiBlbGVtZW50KQogewogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQotICAgIGlmIChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50
ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1
Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NRGVidWdnZXJBZ2Vu
dCgpKQogICAgICAgICBkb21EZWJ1Z2dlckFnZW50LT53aWxsTW9kaWZ5RE9NQXR0cihlbGVtZW50
KTsKICNlbmRpZgogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTW9kaWZ5
RE9NQXR0ckltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBFbGVtZW50KiBlbGVt
ZW50KQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1vZGlmeURPTUF0dHJJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEVsZW1lbnQqIGVsZW1l
bnQpCiB7Ci0gICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckFn
ZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYg
KEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3Bl
Y3RvckRPTUFnZW50KCkpCiAgICAgICAgIGRvbUFnZW50LT5kaWRNb2RpZnlET01BdHRyKGVsZW1l
bnQpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW52YWxpZGF0ZVN0
eWxlQXR0ckltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBOb2RlKiBub2RlKQor
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRhdGVTdHlsZUF0dHJJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIE5vZGUqIG5vZGUpCiB7
Ci0gICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckFnZW50LT5p
bnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKEluc3Bl
Y3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRP
TUFnZW50KCkpCiAgICAgICAgIGRvbUFnZW50LT5kaWRJbnZhbGlkYXRlU3R5bGVBdHRyKG5vZGUp
OwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgY29uc3QgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKQordm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50SW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVu
c2lnbmVkIG1vZGlmaWVyRmxhZ3MpCiB7Ci0gICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21B
Z2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRP
TUFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTUFnZW50KCkpCiAgICAgICAgIGRvbUFnZW50LT5tb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudChyZXN1bHQsIG1vZGlmaWVyRmxhZ3MpOwogfQogCi1ib29sIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFuZGxlTW91c2VQcmVzc0ltcGwoSW5zcGVjdG9yQWdl
bnQqIGluc3BlY3RvckFnZW50KQorYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmhhbmRs
ZU1vdXNlUHJlc3NJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMp
CiB7Ci0gICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckFnZW50
LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKElu
c3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3Rv
ckRPTUFnZW50KCkpCiAgICAgICAgIHJldHVybiBkb21BZ2VudC0+aGFuZGxlTW91c2VQcmVzcygp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmNoYXJhY3RlckRhdGFNb2RpZmllZEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50
LCBDaGFyYWN0ZXJEYXRhKiBjaGFyYWN0ZXJEYXRhKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmNoYXJhY3RlckRhdGFNb2RpZmllZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgQ2hhcmFjdGVyRGF0YSogY2hhcmFjdGVyRGF0YSkKIHsKLSAgICBp
ZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1l
bnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yRE9N
QWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NQWdlbnQo
KSkKICAgICAgICAgZG9tQWdlbnQtPmNoYXJhY3RlckRhdGFNb2RpZmllZChjaGFyYWN0ZXJEYXRh
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kWE1MSHR0cFJl
cXVlc3RJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgY29uc3QgU3RyaW5nJiB1
cmwpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRYTUxIdHRwUmVxdWVz
dEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgU3Ry
aW5nJiB1cmwpCiB7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgaWYgKElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JBZ2Vu
dC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KCkpCisg
ICAgaWYgKEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgIGRv
bURlYnVnZ2VyQWdlbnQtPndpbGxTZW5kWE1MSHR0cFJlcXVlc3QodXJsKTsKICNlbmRpZgogfQog
Ci12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2NoZWR1bGVSZXNvdXJjZVJlcXVl
c3RJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgY29uc3QgU3RyaW5nJiB1cmwp
Cit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2NoZWR1bGVSZXNvdXJjZVJlcXVl
c3RJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnN0IFN0
cmluZyYgdXJsKQogewotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFn
ZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGluc3BlY3RvckFnZW50KSkKKyAgICBpZiAoSW5z
cGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMt
Pmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkU2No
ZWR1bGVSZXNvdXJjZVJlcXVlc3QodXJsKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZEluc3RhbGxUaW1lckltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50
LCBpbnQgdGltZXJJZCwgaW50IHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hvdCkKK3ZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnN0YWxsVGltZXJJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIGludCB0aW1lcklkLCBpbnQgdGltZW91dCwgYm9vbCBz
aW5nbGVTaG90KQogewotICAgIHBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKGluc3BlY3RvckFn
ZW50LCBpbnN0cnVtZW50YXRpb25FdmVudENhdGVnb3J5VHlwZSwgc2V0VGltZXJFdmVudE5hbWUs
IHRydWUpOwotICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0g
cmV0cmlldmVUaW1lbGluZUFnZW50KGluc3BlY3RvckFnZW50KSkKKyAgICBwYXVzZU9uTmF0aXZl
RXZlbnRJZk5lZWRlZChpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnN0cnVtZW50YXRpb25FdmVudENh
dGVnb3J5VHlwZSwgc2V0VGltZXJFdmVudE5hbWUsIHRydWUpOworICAgIGlmIChJbnNwZWN0b3JU
aW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVj
dG9yVGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRJbnN0YWxsVGlt
ZXIodGltZXJJZCwgdGltZW91dCwgc2luZ2xlU2hvdCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRSZW1vdmVUaW1lckltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50LCBpbnQgdGltZXJJZCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRS
ZW1vdmVUaW1lckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywg
aW50IHRpbWVySWQpCiB7Ci0gICAgcGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoaW5zcGVjdG9y
QWdlbnQsIGluc3RydW1lbnRhdGlvbkV2ZW50Q2F0ZWdvcnlUeXBlLCBjbGVhclRpbWVyRXZlbnRO
YW1lLCB0cnVlKTsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2Vu
dCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2VudCkpCisgICAgcGF1c2VPbk5h
dGl2ZUV2ZW50SWZOZWVkZWQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zdHJ1bWVudGF0aW9uRXZl
bnRDYXRlZ29yeVR5cGUsIGNsZWFyVGltZXJFdmVudE5hbWUsIHRydWUpOworICAgIGlmIChJbnNw
ZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+
aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRSZW1v
dmVUaW1lcih0aW1lcklkKTsKIH0KIAotSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbENhbGxGdW5jdGlvbkltcGwoSW5zcGVjdG9yQWdl
bnQqIGluc3BlY3RvckFnZW50LCBjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUsIGludCBzY3JpcHRM
aW5lKQorSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbENhbGxGdW5jdGlvbkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cywgY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSkKIHsK
ICAgICBpbnQgdGltZWxpbmVBZ2VudElkID0gMDsKLSAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50
KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGluc3BlY3RvckFnZW50KTsK
LSAgICBpZiAodGltZWxpbmVBZ2VudCkgeworICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50
KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yVGltZWxpbmVB
Z2VudCgpKSB7CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxDYWxsRnVuY3Rpb24oc2NyaXB0
TmFtZSwgc2NyaXB0TGluZSk7CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9IHRpbWVsaW5lQWdl
bnQtPmlkKCk7CiAgICAgfQotICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUoaW5zcGVjdG9yQWdlbnQsIHRpbWVsaW5lQWdlbnRJZCk7CisgICAgcmV0dXJuIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lbGluZUFnZW50
SWQpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FsbEZ1bmN0aW9u
SW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSkKQEAgLTIy
NSwxNSArMjI3LDE1IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVu
Y3Rpb25JbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvCiAgICAgICAgIHRpbWVsaW5l
QWdlbnQtPmRpZENhbGxGdW5jdGlvbigpOwogfQogCi1JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsQ2hhbmdlWEhSUmVhZHlTdGF0ZUlt
cGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBYTUxIdHRwUmVxdWVzdCogcmVxdWVz
dCkKK0luc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxDaGFuZ2VYSFJSZWFkeVN0YXRlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBYTUxIdHRwUmVxdWVzdCogcmVxdWVzdCkKIHsKICAgICBpbnQgdGlt
ZWxpbmVBZ2VudElkID0gMDsKLSAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFn
ZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGluc3BlY3RvckFnZW50KTsKKyAgICBJbnNwZWN0
b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5z
cGVjdG9yVGltZWxpbmVBZ2VudCgpOwogICAgIGlmICh0aW1lbGluZUFnZW50ICYmIHJlcXVlc3Qt
Pmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5yZWFkeXN0YXRlY2hhbmdlRXZlbnQpKSB7
CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxDaGFuZ2VYSFJSZWFkeVN0YXRlKHJlcXVlc3Qt
PnVybCgpLnN0cmluZygpLCByZXF1ZXN0LT5yZWFkeVN0YXRlKCkpOwogICAgICAgICB0aW1lbGlu
ZUFnZW50SWQgPSB0aW1lbGluZUFnZW50LT5pZCgpOwogICAgIH0KLSAgICByZXR1cm4gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3BlY3RvckFnZW50LCB0aW1lbGluZUFnZW50SWQp
OworICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zdHJ1bWVudGlu
Z0FnZW50cywgdGltZWxpbmVBZ2VudElkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZENoYW5nZVhIUlJlYWR5U3RhdGVJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSYgY29va2llKQpAQCAtMjQyLDE3ICsyNDQsMTcgQEAgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5nZVhIUlJlYWR5U3RhdGVJbXBsKGNvbnN0IEluc3Bl
Y3Rvckluc3RydW0KICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkQ2hhbmdlWEhSUmVhZHlTdGF0
ZSgpOwogfQogCi1JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50LCBjb25zdCBFdmVudCYgZXZlbnQsIERPTVdpbmRvdyogd2luZG93LCBOb2RlKiBub2Rl
LCBjb25zdCBWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5jZXN0b3JzKQorSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZl
bnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnN0IEV2
ZW50JiBldmVudCwgRE9NV2luZG93KiB3aW5kb3csIE5vZGUqIG5vZGUsIGNvbnN0IFZlY3RvcjxF
dmVudENvbnRleHQ+JiBhbmNlc3RvcnMpCiB7Ci0gICAgcGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVk
ZWQoaW5zcGVjdG9yQWdlbnQsIGxpc3RlbmVyRXZlbnRDYXRlZ29yeVR5cGUsIGV2ZW50LnR5cGUo
KSwgZmFsc2UpOworICAgIHBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKGluc3RydW1lbnRpbmdB
Z2VudHMsIGxpc3RlbmVyRXZlbnRDYXRlZ29yeVR5cGUsIGV2ZW50LnR5cGUoKSwgZmFsc2UpOwog
CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2VudCk7
CisgICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMtPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKTsKICAgICBpZiAodGltZWxpbmVBZ2Vu
dCAmJiBldmVudEhhc0xpc3RlbmVycyhldmVudC50eXBlKCksIHdpbmRvdywgbm9kZSwgYW5jZXN0
b3JzKSkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsRGlzcGF0Y2hFdmVudChldmVudCk7
CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9IHRpbWVsaW5lQWdlbnQtPmlkKCk7CiAgICAgfQot
ICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zcGVjdG9yQWdlbnQs
IHRpbWVsaW5lQWdlbnRJZCk7CisgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZShpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lbGluZUFnZW50SWQpOwogfQogCiB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudEltcGwoY29uc3QgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUpCkBAIC0yNjMsMTcgKzI2NSwxNyBAQCB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudEltcGwoY29uc3Qg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWREaXNwYXRj
aEV2ZW50KCk7CiB9CiAKLUluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3dJbXBsKEluc3BlY3RvckFn
ZW50KiBpbnNwZWN0b3JBZ2VudCwgY29uc3QgRXZlbnQmIGV2ZW50LCBET01XaW5kb3cqIHdpbmRv
dykKK0luc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3dJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMsIGNvbnN0IEV2ZW50JiBldmVudCwgRE9NV2luZG93KiB3aW5kb3cp
CiB7Ci0gICAgcGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoaW5zcGVjdG9yQWdlbnQsIGxpc3Rl
bmVyRXZlbnRDYXRlZ29yeVR5cGUsIGV2ZW50LnR5cGUoKSwgZmFsc2UpOworICAgIHBhdXNlT25O
YXRpdmVFdmVudElmTmVlZGVkKGluc3RydW1lbnRpbmdBZ2VudHMsIGxpc3RlbmVyRXZlbnRDYXRl
Z29yeVR5cGUsIGV2ZW50LnR5cGUoKSwgZmFsc2UpOwogCiAgICAgaW50IHRpbWVsaW5lQWdlbnRJ
ZCA9IDA7Ci0gICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJp
ZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2VudCk7CisgICAgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclRpbWVs
aW5lQWdlbnQoKTsKICAgICBpZiAodGltZWxpbmVBZ2VudCAmJiB3aW5kb3ctPmhhc0V2ZW50TGlz
dGVuZXJzKGV2ZW50LnR5cGUoKSkpIHsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbERpc3Bh
dGNoRXZlbnQoZXZlbnQpOwogICAgICAgICB0aW1lbGluZUFnZW50SWQgPSB0aW1lbGluZUFnZW50
LT5pZCgpOwogICAgIH0KLSAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2ll
KGluc3BlY3RvckFnZW50LCB0aW1lbGluZUFnZW50SWQpOworICAgIHJldHVybiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUoaW5zdHJ1bWVudGluZ0FnZW50cywgdGltZWxpbmVBZ2VudElk
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnRP
bldpbmRvd0ltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUp
CkBAIC0yODQsMTUgKzI4NiwxNCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
RGlzcGF0Y2hFdmVudE9uV2luZG93SW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cgogICAgICAgICB0
aW1lbGluZUFnZW50LT5kaWREaXNwYXRjaEV2ZW50KCk7CiB9CiAKLUluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVNjcmlw
dEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBjb25zdCBTdHJpbmcmIHVybCwg
aW50IGxpbmVOdW1iZXIpCitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVTY3JpcHRJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJl
cikKIHsKICAgICBpbnQgdGltZWxpbmVBZ2VudElkID0gMDsKLSAgICBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGluc3BlY3RvckFn
ZW50KTsKLSAgICBpZiAodGltZWxpbmVBZ2VudCkgeworICAgIGlmIChJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudCgpKSB7CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxFdmFsdWF0ZVNjcmlw
dCh1cmwsIGxpbmVOdW1iZXIpOwogICAgICAgICB0aW1lbGluZUFnZW50SWQgPSB0aW1lbGluZUFn
ZW50LT5pZCgpOwogICAgIH0KLSAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llKGluc3BlY3RvckFnZW50LCB0aW1lbGluZUFnZW50SWQpOworICAgIHJldHVybiBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zdHJ1bWVudGluZ0FnZW50cywgdGltZWxpbmVBZ2Vu
dElkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEV2YWx1YXRlU2Ny
aXB0SW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSkKQEAg
LTMwMSwxNyArMzAyLDE2IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRFdmFs
dWF0ZVNjcmlwdEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0CiAgICAgICAgIHRpbWVs
aW5lQWdlbnQtPmRpZEV2YWx1YXRlU2NyaXB0KCk7CiB9CiAKLUluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxGaXJlVGltZXJJbXBsKElu
c3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgaW50IHRpbWVySWQpCitJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRmlyZVRpbWVy
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnQgdGltZXJJ
ZCkKIHsKLSAgICBwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChpbnNwZWN0b3JBZ2VudCwgaW5z
dHJ1bWVudGF0aW9uRXZlbnRDYXRlZ29yeVR5cGUsIHRpbWVyRmlyZWRFdmVudE5hbWUsIGZhbHNl
KTsKKyAgICBwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChpbnN0cnVtZW50aW5nQWdlbnRzLCBp
bnN0cnVtZW50YXRpb25FdmVudENhdGVnb3J5VHlwZSwgdGltZXJGaXJlZEV2ZW50TmFtZSwgZmFs
c2UpOwogCiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JB
Z2VudCk7Ci0gICAgaWYgKHRpbWVsaW5lQWdlbnQpIHsKKyAgICBpZiAoSW5zcGVjdG9yVGltZWxp
bmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclRp
bWVsaW5lQWdlbnQoKSkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsRmlyZVRpbWVyKHRp
bWVySWQpOwogICAgICAgICB0aW1lbGluZUFnZW50SWQgPSB0aW1lbGluZUFnZW50LT5pZCgpOwog
ICAgIH0KLSAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3BlY3Rv
ckFnZW50LCB0aW1lbGluZUFnZW50SWQpOworICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUoaW5zdHJ1bWVudGluZ0FnZW50cywgdGltZWxpbmVBZ2VudElkKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpcmVUaW1lckltcGwoY29uc3QgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUpCkBAIC0zMjIsMTUgKzMyMiwxNCBA
QCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmlyZVRpbWVySW1wbChjb25zdCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25DbwogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRGaXJl
VGltZXIoKTsKIH0KIAotSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbExheW91dEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFn
ZW50KQorSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbExheW91dEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cykKIHsKICAgICBpbnQgdGltZWxpbmVBZ2VudElkID0gMDsKLSAgICBJbnNwZWN0b3JUaW1l
bGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGluc3BlY3Rv
ckFnZW50KTsKLSAgICBpZiAodGltZWxpbmVBZ2VudCkgeworICAgIGlmIChJbnNwZWN0b3JUaW1l
bGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9y
VGltZWxpbmVBZ2VudCgpKSB7CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxMYXlvdXQoKTsK
ICAgICAgICAgdGltZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9Ci0g
ICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnNwZWN0b3JBZ2VudCwg
dGltZWxpbmVBZ2VudElkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llKGluc3RydW1lbnRpbmdBZ2VudHMsIHRpbWVsaW5lQWdlbnRJZCk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRMYXlvdXRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSYgY29va2llKQpAQCAtMzM5LDE1ICszMzgsMTUgQEAgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZExheW91dEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2kKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkTGF5b3V0KCk7CiB9CiAK
LUluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxMb2FkWEhSSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIFhNTEh0dHBS
ZXF1ZXN0KiByZXF1ZXN0KQorSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMsIFhNTEh0dHBSZXF1ZXN0KiByZXF1ZXN0KQogewogICAgIGludCB0
aW1lbGluZUFnZW50SWQgPSAwOwotICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5l
QWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9yQWdlbnQpOworICAgIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5p
bnNwZWN0b3JUaW1lbGluZUFnZW50KCk7CiAgICAgaWYgKHRpbWVsaW5lQWdlbnQgJiYgcmVxdWVz
dC0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLmxvYWRFdmVudCkpIHsKICAgICAgICAg
dGltZWxpbmVBZ2VudC0+d2lsbExvYWRYSFIocmVxdWVzdC0+dXJsKCkpOwogICAgICAgICB0aW1l
bGluZUFnZW50SWQgPSB0aW1lbGluZUFnZW50LT5pZCgpOwogICAgIH0KLSAgICByZXR1cm4gSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3BlY3RvckFnZW50LCB0aW1lbGluZUFnZW50
SWQpOworICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zdHJ1bWVu
dGluZ0FnZW50cywgdGltZWxpbmVBZ2VudElkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZExvYWRYSFJJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSYgY29va2llKQpAQCAtMzU2LDE1ICszNTUsMTQgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZExvYWRYSFJJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2sKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkTG9hZFhIUigpOwogfQogCi1JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUGFpbnRJ
bXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgY29uc3QgSW50UmVjdCYgcmVjdCkK
K0luc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxQYWludEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpbnQgdGltZWxpbmVBZ2VudElkID0gMDsKLSAg
ICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGlu
ZUFnZW50KGluc3BlY3RvckFnZW50KTsKLSAgICBpZiAodGltZWxpbmVBZ2VudCkgeworICAgIGlm
IChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy0+aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKSB7CiAgICAgICAgIHRpbWVsaW5lQWdlbnQt
PndpbGxQYWludChyZWN0KTsKICAgICAgICAgdGltZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2Vu
dC0+aWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZShpbnNwZWN0b3JBZ2VudCwgdGltZWxpbmVBZ2VudElkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3RydW1lbnRpbmdBZ2VudHMsIHRpbWVsaW5lQWdlbnRJ
ZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQYWludEltcGwoY29u
c3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUpCkBAIC0zNzMsMTUgKzM3
MSwxNCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUGFpbnRJbXBsKGNvbnN0
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZQogICAgICAgICB0aW1lbGluZUFnZW50LT5k
aWRQYWludCgpOwogfQogCi1JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVjYWxjdWxhdGVTdHlsZUltcGwoSW5zcGVjdG9yQWdlbnQq
IGluc3BlY3RvckFnZW50KQorSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbFJlY2FsY3VsYXRlU3R5bGVJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMpCiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9
IDA7Ci0gICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZl
VGltZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2VudCk7Ci0gICAgaWYgKHRpbWVsaW5lQWdlbnQpIHsK
KyAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMtPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkgewogICAgICAgICB0aW1lbGlu
ZUFnZW50LT53aWxsUmVjYWxjdWxhdGVTdHlsZSgpOwogICAgICAgICB0aW1lbGluZUFnZW50SWQg
PSB0aW1lbGluZUFnZW50LT5pZCgpOwogICAgIH0KLSAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llKGluc3BlY3RvckFnZW50LCB0aW1lbGluZUFnZW50SWQpOworICAgIHJl
dHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zdHJ1bWVudGluZ0FnZW50cywg
dGltZWxpbmVBZ2VudElkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFJlY2FsY3VsYXRlU3R5bGVJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSYgY29va2llKQpAQCAtMzkwLDQ4ICszODcsNDggQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZFJlY2FsY3VsYXRlU3R5bGVJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnQK
ICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkUmVjYWxjdWxhdGVTdHlsZSgpOwogfQogCi12b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZUltcGwoSW5z
cGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBTdHJpbmcqIHVzZXJBZ2VudCkKK3ZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVVzZXJBZ2VudE92ZXJyaWRlSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBTdHJpbmcqIHVzZXJBZ2VudCkKIHsK
LSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IHJldHJpZXZl
UmVzb3VyY2VBZ2VudChpbnNwZWN0b3JBZ2VudCkpCisgICAgaWYgKEluc3BlY3RvclJlc291cmNl
QWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JSZXNv
dXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmFwcGx5VXNlckFnZW50T3ZlcnJp
ZGUodXNlckFnZW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxT
ZW5kUmVxdWVzdEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3ZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFJlcXVlc3RJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
RG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewotICAgIGlmIChJbnNwZWN0b3JU
aW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGluc3Bl
Y3RvckFnZW50KSkKKyAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKICAgICAg
ICAgdGltZWxpbmVBZ2VudC0+d2lsbFNlbmRSZXNvdXJjZVJlcXVlc3QoaWRlbnRpZmllciwgcmVx
dWVzdCk7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBy
ZXRyaWV2ZVJlc291cmNlQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlmIChJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVj
dG9yUmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT53aWxsU2VuZFJlcXVl
c3QoaWRlbnRpZmllciwgbG9hZGVyLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0ZXJQaW5nTG9hZGVySW1w
bChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpjb250aW51ZUFmdGVyUGluZ0xvYWRlckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRl
ciogbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQogewotICAgIHdpbGxTZW5kUmVxdWVzdEltcGwoaW5zcGVjdG9yQWdlbnQs
IGlkZW50aWZpZXIsIGxvYWRlciwgcmVxdWVzdCwgcmVzcG9uc2UpOworICAgIHdpbGxTZW5kUmVx
dWVzdEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRpZmllciwgbG9hZGVyLCByZXF1ZXN0
LCByZXNwb25zZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptYXJrUmVz
b3VyY2VBc0NhY2hlZEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bWFya1Jl
c291cmNlQXNDYWNoZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IHJldHJpZXZlUmVzb3VyY2VBZ2VudChpbnNwZWN0b3JB
Z2VudCkpCisgICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBp
bnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJl
c291cmNlQWdlbnQtPm1hcmtSZXNvdXJjZUFzQ2FjaGVkKGlkZW50aWZpZXIpOwogfQogCi12b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hl
SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSkKK3ZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGVJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSkKIHsKLSAgICBpZiAoIWlu
c3BlY3RvckFnZW50LT5lbmFibGVkKCkpCisgICAgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQWdlbnQoKTsKKyAgICBpZiAoIWlu
c3BlY3RvckFnZW50IHx8ICFpbnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSByZXRy
aWV2ZVJlc291cmNlQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlmIChJbnNwZWN0b3JSZXNv
dXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9y
UmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRMb2FkUmVzb3VyY2VG
cm9tTWVtb3J5Q2FjaGUobG9hZGVyLCBjYWNoZWRSZXNvdXJjZSk7CiB9CiAKLUluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNlaXZl
UmVzb3VyY2VEYXRhSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllcikKK0luc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNlaXZlUmVzb3VyY2VEYXRhSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIp
CiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2Vu
dCk7Ci0gICAgaWYgKHRpbWVsaW5lQWdlbnQpIHsKKyAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclRpbWVs
aW5lQWdlbnQoKSkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsUmVjZWl2ZVJlc291cmNl
RGF0YShpZGVudGlmaWVyKTsKICAgICAgICAgdGltZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2Vu
dC0+aWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZShpbnNwZWN0b3JBZ2VudCwgdGltZWxpbmVBZ2VudElkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3RydW1lbnRpbmdBZ2VudHMsIHRpbWVsaW5lQWdlbnRJ
ZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlUmVzb3Vy
Y2VEYXRhSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSkK
QEAgLTQ0MCwxNSArNDM3LDE1IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRS
ZWNlaXZlUmVzb3VyY2VEYXRhSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtCiAgICAgICAgIHRp
bWVsaW5lQWdlbnQtPmRpZFJlY2VpdmVSZXNvdXJjZURhdGEoKTsKIH0KIAotSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlY2VpdmVS
ZXNvdXJjZVJlc3BvbnNlSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCitJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVB
Z2VudChpbnNwZWN0b3JBZ2VudCk7CisgICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxp
bmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKTsK
ICAgICBpZiAodGltZWxpbmVBZ2VudCkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsUmVj
ZWl2ZVJlc291cmNlUmVzcG9uc2UoaWRlbnRpZmllciwgcmVzcG9uc2UpOwogICAgICAgICB0aW1l
bGluZUFnZW50SWQgPSB0aW1lbGluZUFnZW50LT5pZCgpOwogICAgIH0KLSAgICByZXR1cm4gSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3BlY3RvckFnZW50LCB0aW1lbGluZUFnZW50
SWQpOworICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zdHJ1bWVu
dGluZ0FnZW50cywgdGltZWxpbmVBZ2VudElkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlSW1wbChjb25zdCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBE
b2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
QEAgLTQ1NywxMiArNDU0LDEzIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRS
ZWNlaXZlUmVzb3VyY2VSZXNwb25zZUltcGwoY29uc3QgSW5zcGVjdG9ySW5zCiAgICAgICAgIHRp
bWVsaW5lQWdlbnQtPmRpZFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlKCk7CiAgICAgaWYgKCFsb2Fk
ZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFn
ZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JGcmFtZShsb2FkZXItPmZyYW1lKCkpKSB7Ci0gICAgICAg
IGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gcmV0cmlldmVSZXNv
dXJjZUFnZW50KGluc3BlY3RvckFnZW50KSkKLSAgICAgICAgICAgIHJlc291cmNlQWdlbnQtPmRp
ZFJlY2VpdmVSZXNwb25zZShpZGVudGlmaWVyLCBsb2FkZXIsIHJlc3BvbnNlKTsKLSAgICAgICAg
aWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zcGVjdG9yQWdlbnQt
Pmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCi0gICAgICAg
ICAgICBjb25zb2xlQWdlbnQtPmRpZFJlY2VpdmVSZXNwb25zZShpZGVudGlmaWVyLCByZXNwb25z
ZSk7IC8vIFRoaXMgc2hvdWxkIGNvbWUgQUZURVIgcmVzb3VyY2Ugbm90aWZpY2F0aW9uLCBmcm9u
dC1lbmQgcmVsaWVzIG9uIHRoaXMuCi0gICAgfQorICAgIEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMgPSBjb29raWUuZmlyc3Q7CisgICAgaWYgKCFpbnN0cnVtZW50aW5n
QWdlbnRzKQorICAgICAgICByZXR1cm47CisgICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQq
IHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JSZXNvdXJjZUFn
ZW50KCkpCisgICAgICAgIHJlc291cmNlQWdlbnQtPmRpZFJlY2VpdmVSZXNwb25zZShpZGVudGlm
aWVyLCBsb2FkZXIsIHJlc3BvbnNlKTsKKyAgICBpZiAoSW5zcGVjdG9yQ29uc29sZUFnZW50KiBj
b25zb2xlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JDb25zb2xlQWdlbnQo
KSkKKyAgICAgICAgY29uc29sZUFnZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaWRlbnRpZmllciwg
cmVzcG9uc2UpOyAvLyBUaGlzIHNob3VsZCBjb21lIEFGVEVSIHJlc291cmNlIG5vdGlmaWNhdGlv
biwgZnJvbnQtZW5kIHJlbGllcyBvbiB0aGlzLgogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VCdXRDYW5jZWxlZEltcGwoRnJhbWUq
IGZyYW1lLCBEb2N1bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHIpCkBAIC00ODYsNDUgKzQ4NCw0NSBAQCB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29udGludWVXaXRoUG9saWN5SWdub3JlSW1wbChGcmFt
ZSogZnJhbWUsIERvY3VtZQogICAgIGRpZFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlQnV0Q2FuY2Vs
ZWRJbXBsKGZyYW1lLCBsb2FkZXIsIGlkZW50aWZpZXIsIHIpOwogfQogCi12b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhJbXBsKEluc3BlY3RvckFn
ZW50KiBpbnNwZWN0b3JBZ2VudCwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgZGF0YUxl
bmd0aCwgaW50IGVuY29kZWREYXRhTGVuZ3RoKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZFJlY2VpdmVDb250ZW50TGVuZ3RoSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGludCBkYXRhTGVuZ3Ro
LCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdl
bnQqIHJlc291cmNlQWdlbnQgPSByZXRyaWV2ZVJlc291cmNlQWdlbnQoaW5zcGVjdG9yQWdlbnQp
KQorICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJj
ZUFnZW50LT5kaWRSZWNlaXZlQ29udGVudExlbmd0aChpZGVudGlmaWVyLCBkYXRhTGVuZ3RoLCBl
bmNvZGVkRGF0YUxlbmd0aCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRGaW5pc2hMb2FkaW5nSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpCit2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkRmluaXNoTG9hZGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmlu
aXNoVGltZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2Vu
dCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2VudCkpCisgICAgaWYgKEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5p
bnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZEZpbmlz
aExvYWRpbmdSZXNvdXJjZShpZGVudGlmaWVyLCBmYWxzZSwgZmluaXNoVGltZSk7Ci0gICAgaWYg
KEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSByZXRyaWV2ZVJlc291cmNl
QWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiBy
ZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIs
IGZpbmlzaFRpbWUpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmFp
bExvYWRpbmdJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3ZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsTG9hZGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGlt
ZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2VudCkpCisgICAg
aWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQt
PmRpZEZpbmlzaExvYWRpbmdSZXNvdXJjZShpZGVudGlmaWVyLCB0cnVlLCAwKTsKLSAgICBpZiAo
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IHJldHJpZXZlUmVzb3VyY2VB
Z2VudChpbnNwZWN0b3JBZ2VudCkpCisgICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJl
c291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JSZXNvdXJjZUFnZW50
KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRpZEZhaWxMb2FkaW5nKGlkZW50aWZpZXIsIGVy
cm9yKTsKLSAgICBpZiAoSW5zcGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnNw
ZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JDb25zb2xlQWdlbnQo
KSkKKyAgICBpZiAoSW5zcGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFn
ZW50LT5kaWRGYWlsTG9hZGluZyhpZGVudGlmaWVyLCBlcnJvcik7IC8vIFRoaXMgc2hvdWxkIGNv
bWUgQUZURVIgcmVzb3VyY2Ugbm90aWZpY2F0aW9uLCBmcm9udC1lbmQgcmVsaWVzIG9uIHRoaXMu
CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpyZXNvdXJjZVJldHJpZXZlZEJ5
WE1MSHR0cFJlcXVlc3RJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2VuZFVSTCwgdW5zaWduZWQgc2VuZExpbmVOdW1iZXIp
Cit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0
dHBSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBzZW5kVVJMLCB1bnNpZ25lZCBzZW5kTGluZU51
bWJlcikKIHsKLSAgICBpZiAoSW5zcGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBp
bnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JDb25zb2xlQWdl
bnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29s
ZUFnZW50LT5yZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodXJsLCBzZW5kVVJMLCBz
ZW5kTGluZU51bWJlcik7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNl
QWdlbnQgPSByZXRyaWV2ZVJlc291cmNlQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlmIChJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy0+aW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5zZXRJ
bml0aWFsWEhSQ29udGVudChpZGVudGlmaWVyLCBzb3VyY2VTdHJpbmcpOwogfQogCi12b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0SW1wb3J0ZWRJbXBsKEluc3BlY3RvckFnZW50
KiBpbnNwZWN0b3JBZ2VudCwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IHNvdXJjZVN0cmluZykKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzY3JpcHRJbXBv
cnRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZykKIHsKLSAgICBp
ZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IHJldHJpZXZlUmVzb3Vy
Y2VBZ2VudChpbnNwZWN0b3JBZ2VudCkpCisgICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQq
IHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JSZXNvdXJjZUFn
ZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPnNldEluaXRpYWxTY3JpcHRDb250ZW50KGlk
ZW50aWZpZXIsIHNvdXJjZVN0cmluZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkb21Db250ZW50TG9hZGVkRXZlbnRGaXJlZEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50LCBGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCkKK3ZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkb21Db250ZW50TG9hZGVkRXZlbnRGaXJlZEltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJM
JiB1cmwpCiB7CiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpOwogICAgIEFTU0VSVChkb2N1bWVudExvYWRlcik7CkBA
IC01MzIsNDkgKzUzMCw0OSBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZG9tQ29u
dGVudExvYWRlZEV2ZW50RmlyZWRJbXBsKEluc3BlY3RvckFnZW50KiBpbgogICAgIGlmIChmcmFt
ZS0+cGFnZSgpLT5tYWluRnJhbWUoKSAhPSBmcmFtZSB8fCB1cmwgIT0gZG9jdW1lbnRMb2FkZXIt
PnJlcXVlc3RVUkwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW5zcGVjdG9yQWdlbnQtPmRv
bUNvbnRlbnRMb2FkZWRFdmVudEZpcmVkKCk7CisgICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckFnZW50KCkpCisgICAg
ICAgIGluc3BlY3RvckFnZW50LT5kb21Db250ZW50TG9hZGVkRXZlbnRGaXJlZCgpOwogCi0gICAg
aWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVt
ZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvckRP
TUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTUFnZW50
KCkpCiAgICAgICAgIGRvbUFnZW50LT5tYWluRnJhbWVET01Db250ZW50TG9hZGVkKCk7CiAKLSAg
ICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3BlY3RvckFn
ZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKKyAg
ICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMtPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2Vu
dC0+ZGlkTWFya0RPTUNvbnRlbnRFdmVudCgpOwogCi0gICAgaWYgKEluc3BlY3RvclBhZ2VBZ2Vu
dCogcGFnZUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5z
cGVjdG9yUGFnZUFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUGFnZUFnZW50KCkpCiAgICAgICAgIHBh
Z2VBZ2VudC0+ZG9tQ29udGVudEV2ZW50RmlyZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmxvYWRFdmVudEZpcmVkSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9y
QWdlbnQsIEZyYW1lKiBmcmFtZSwgY29uc3QgS1VSTCYgdXJsKQordm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmxvYWRFdmVudEZpcmVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBE
b2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCk7CiAgICAgQVNTRVJUKGRvY3VtZW50TG9hZGVyKTsKIAotICAgIGlmIChJbnNwZWN0
b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50
cygpLT5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9t
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JET01BZ2VudCgpKQogICAgICAg
ICBkb21BZ2VudC0+bG9hZEV2ZW50RmlyZWQoZG9jdW1lbnRMb2FkZXItPmZyYW1lKCktPmRvY3Vt
ZW50KCkpOwogCiAgICAgaWYgKGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpICE9IGZyYW1lIHx8
IHVybCAhPSBkb2N1bWVudExvYWRlci0+cmVxdWVzdFVSTCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3BlY3Rv
ckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkK
KyAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMtPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGltZWxpbmVB
Z2VudC0+ZGlkTWFya0xvYWRFdmVudCgpOwogCi0gICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCog
cGFnZUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVj
dG9yUGFnZUFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUGFnZUFnZW50KCkpCiAgICAgICAgIHBhZ2VB
Z2VudC0+bG9hZEV2ZW50RmlyZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmZyYW1lRGV0YWNoZWRGcm9tUGFyZW50SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9y
QWdlbnQsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFt
ZURldGFjaGVkRnJvbVBhcmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cywgRnJhbWUqIGZyYW1lKQogewotICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBh
Z2VBZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3Rv
clBhZ2VBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclBhZ2VBZ2VudCgpKQogICAgICAgICBwYWdlQWdl
bnQtPmZyYW1lRGV0YWNoZWQoZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkQ29tbWl0TG9hZEltcGwoUGFnZSogcGFnZSwgSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50LCBEb2N1bWVudExvYWRlciogbG9hZGVyKQordm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZENvbW1pdExvYWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMsIFBhZ2UqIHBhZ2UsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiB7Ci0gICAg
aWYgKCFpbnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgpKQorICAgIEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckFnZW50KCk7CisgICAg
aWYgKCFpbnNwZWN0b3JBZ2VudCB8fCAhaW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCk7Ci0KICAgICBpZiAoSW5z
cGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0
b3JQYWdlQWdlbnQoKSkKICAgICAgICAgcGFnZUFnZW50LT5mcmFtZU5hdmlnYXRlZChsb2FkZXIp
OwogCkBAIC02MTIsMTUgKzYxMCwxNCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkQ29tbWl0TG9hZEltcGwoUGFnZSogcGFnZSwgSW5zcGVjdG9yQWdlbnQqIGlucwogICAgIGlu
c3BlY3RvckFnZW50LT5kaWRDb21taXRMb2FkKCk7CiB9CiAKLUluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxXcml0ZUhUTUxJbXBsKElu
c3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgdW5zaWduZWQgaW50IGxlbmd0aCwgdW5zaWdu
ZWQgaW50IHN0YXJ0TGluZSkKK0luc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxXcml0ZUhUTUxJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVkIGludCBsZW5ndGgsIHVuc2lnbmVkIGludCBz
dGFydExpbmUpCiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNw
ZWN0b3JBZ2VudCk7Ci0gICAgaWYgKHRpbWVsaW5lQWdlbnQpIHsKKyAgICBpZiAoSW5zcGVjdG9y
VGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQoKSkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsV3JpdGVI
VE1MKGxlbmd0aCwgc3RhcnRMaW5lKTsKICAgICAgICAgdGltZWxpbmVBZ2VudElkID0gdGltZWxp
bmVBZ2VudC0+aWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZShpbnNwZWN0b3JBZ2VudCwgdGltZWxpbmVBZ2VudElkKTsKKyAgICByZXR1cm4gSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3RydW1lbnRpbmdBZ2VudHMsIHRpbWVsaW5l
QWdlbnRJZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRXcml0ZUhU
TUxJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYgY29va2llLCB1bnNp
Z25lZCBpbnQgZW5kTGluZSkKQEAgLTYyOSwzOSArNjI2LDM5IEBAIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRXcml0ZUhUTUxJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZFdyaXRlSFRNTChlbmRMaW5lKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBs
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1l
c3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNjcmlw
dENhbGxTdGFjaz4gY2FsbFN0YWNrKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFk
ZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2
ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVu
dHM+IGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKIHsK
LSAgICBpZiAoSW5zcGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnNwZWN0b3JB
Z2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JDb25zb2xlQWdlbnQoKSkKKyAg
ICBpZiAoSW5zcGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzLT5pbnNwZWN0b3JDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFnZW50LT5h
ZGRNZXNzYWdlVG9Db25zb2xlKHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGFyZ3VtZW50
cywgY2FsbFN0YWNrKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1l
c3NhZ2VUb0NvbnNvbGVJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgTWVzc2Fn
ZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZUlEKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNv
bGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIE1lc3NhZ2VT
b3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCkKIHsKLSAgICBpZiAoSW5zcGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBp
bnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JDb25zb2xlQWdl
bnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29s
ZUFnZW50LT5hZGRNZXNzYWdlVG9Db25zb2xlKHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2Us
IGxpbmVOdW1iZXIsIHNvdXJjZUlEKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmNvbnNvbGVDb3VudEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBQYXNz
UmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxT
dGFjaz4gc3RhY2spCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRy
PFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4g
c3RhY2spCiB7Ci0gICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0g
aW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yQ29uc29sZUFn
ZW50KCkpCisgICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNv
bGVBZ2VudC0+Y291bnQoYXJndW1lbnRzLCBzdGFjayk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpzdGFydENvbnNvbGVUaW1pbmdJbXBsKEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpzdGFydENvbnNvbGVUaW1pbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAgaWYgKEluc3BlY3Rv
ckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRp
bmdBZ2VudHMoKS0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvckNv
bnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9y
Q29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNvbGVBZ2VudC0+c3RhcnRUaW1pbmcodGl0bGUp
OwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcENvbnNvbGVUaW1pbmdJ
bXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgY29uc3QgU3RyaW5nJiB0aXRsZSwg
UGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IHN0YWNrKQordm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnN0b3BDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBQYXNzUmVmUHRyPFNjcmlwdENh
bGxTdGFjaz4gc3RhY2spCiB7Ci0gICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29s
ZUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9y
Q29uc29sZUFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCiAgICAg
ICAgIGNvbnNvbGVBZ2VudC0+c3RvcFRpbWluZyh0aXRsZSwgc3RhY2spOwogfQogCi12b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZU1hcmtUaW1lbGluZUltcGwoSW5zcGVjdG9y
QWdlbnQqIGluc3BlY3RvckFnZW50LCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1l
bnRzKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVNYXJrVGltZWxpbmVJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhc3NSZWZQdHI8
U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5l
QWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9yQWdl
bnQpKSB7CisgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBp
bnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpIHsKICAgICAgICAg
U3RyaW5nIG1lc3NhZ2U7CiAgICAgICAgIGFyZ3VtZW50cy0+Z2V0Rmlyc3RBcmd1bWVudEFzU3Ry
aW5nKG1lc3NhZ2UpOwogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRNYXJrVGltZWxpbmUobWVz
c2FnZSk7CkBAIC02NjksMTYxICs2NjYsMTUzIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpjb25zb2xlTWFya1RpbWVsaW5lSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yCiB9
CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3BlY3Rv
ckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGlu
ZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6YWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNp
Z25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKLSAgICBpZiAoSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0
cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvclByb2ZpbGVyQWdlbnQoKSkKKyAgICBpZiAoSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMt
Pmluc3BlY3RvclByb2ZpbGVyQWdlbnQoKSkKICAgICAgICAgcHJvZmlsZXJBZ2VudC0+YWRkU3Rh
cnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlKHRpdGxlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwp
OwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkUHJvZmlsZUltcGwoSW5z
cGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJvZmls
ZSwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKK3ZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjphZGRQcm9maWxlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJvZmlsZSwgUGFzc1JlZlB0
cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKIHsKLSAgICBpZiAoSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudCogcHJvZmlsZXJBZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdl
bnRzKCktPmluc3BlY3RvclByb2ZpbGVyQWdlbnQoKSkgeworICAgIGlmIChJbnNwZWN0b3JQcm9m
aWxlckFnZW50KiBwcm9maWxlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9y
UHJvZmlsZXJBZ2VudCgpKSB7CiAgICAgICAgIGNvbnN0IFNjcmlwdENhbGxGcmFtZSYgbGFzdENh
bGxlciA9IGNhbGxTdGFjay0+YXQoMCk7CiAgICAgICAgIHByb2ZpbGVyQWdlbnQtPmFkZFByb2Zp
bGUocHJvZmlsZSwgbGFzdENhbGxlci5saW5lTnVtYmVyKCksIGxhc3RDYWxsZXIuc291cmNlVVJM
KCkpOwogICAgIH0KIH0KIAotU3RyaW5nIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Z2V0Q3Vy
cmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50LCBib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIpCitTdHJpbmcgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBib29sIGluY3JlbWVudFByb2Zp
bGVOdW1iZXIpCiB7Ci0gICAgaWYgKEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdl
bnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JQcm9m
aWxlckFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JQcm9maWxlckFnZW50KCkpCiAgICAg
ICAgIHJldHVybiBwcm9maWxlckFnZW50LT5nZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVO
YW1lKGluY3JlbWVudFByb2ZpbGVOdW1iZXIpOwogICAgIHJldHVybiAiIjsKIH0KIAotYm9vbCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnByb2ZpbGVyRW5hYmxlZEltcGwoSW5zcGVjdG9yQWdl
bnQqIGluc3BlY3RvckFnZW50KQorYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnByb2Zp
bGVyRW5hYmxlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykK
IHsKLSAgICBpZiAoSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2VudCA9IGluc3Bl
Y3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvclByb2ZpbGVyQWdlbnQo
KSkKKyAgICBpZiAoSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclByb2ZpbGVyQWdlbnQoKSkKICAgICAgICAgcmV0dXJu
IHByb2ZpbGVyQWdlbnQtPmVuYWJsZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRPcGVuRGF0YWJhc2VJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgUGFzc1Jl
ZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRPcGVuRGF0YWJhc2VJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMsIFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcm
IGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCiB7Ci0g
ICAgaWYgKCFpbnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgpKQorICAgIEluc3BlY3RvckFnZW50KiBp
bnNwZWN0b3JBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckFnZW50KCk7Cisg
ICAgaWYgKCFpbnNwZWN0b3JBZ2VudCB8fCAhaW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGlmIChJbnNwZWN0b3JEYXRhYmFzZUFnZW50KiBkYkFnZW50ID0g
aW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yRGF0YWJhc2VB
Z2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JEYXRhYmFzZUFnZW50KiBkYkFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRGF0YWJhc2VBZ2VudCgpKQogICAgICAgICBkYkFnZW50
LT5kaWRPcGVuRGF0YWJhc2UoZGF0YWJhc2UsIGRvbWFpbiwgbmFtZSwgdmVyc2lvbik7CiB9CiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRVc2VET01TdG9yYWdlSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdl
bnQsIFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUq
IGZyYW1lKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFVzZURPTVN0b3JhZ2VJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFN0b3JhZ2VBcmVh
KiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKQogewotICAg
IGlmICghaW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKKyAgICBJbnNwZWN0b3JBZ2VudCogaW5z
cGVjdG9yQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JBZ2VudCgpOworICAg
IGlmICghaW5zcGVjdG9yQWdlbnQgfHwgIWluc3BlY3RvckFnZW50LT5lbmFibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAoSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KiBkb21TdG9yYWdl
QWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KiBkb21T
dG9yYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQoKSkKICAgICAgICAgZG9tU3RvcmFnZUFnZW50LT5kaWRVc2VET01TdG9yYWdlKHN0b3JhZ2VB
cmVhLCBpc0xvY2FsU3RvcmFnZSwgZnJhbWUpOwogfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoV09S
S0VSUykKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTdGFydFdvcmtlckNvbnRl
eHRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgV29ya2VyQ29udGV4dFByb3h5
KiB3b3JrZXJDb250ZXh0UHJveHkpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
U3RhcnRXb3JrZXJDb250ZXh0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBXb3JrZXJDb250ZXh0UHJveHkqIHdvcmtlckNvbnRleHRQcm94eSkKIHsKLSAgICBp
ZiAoSW5zcGVjdG9yV29ya2VyQWdlbnQqIHdvcmtlckFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmlu
c3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yV29ya2VyQWdlbnQoKSkKKyAgICBpZiAoSW5z
cGVjdG9yV29ya2VyQWdlbnQqIHdvcmtlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5z
cGVjdG9yV29ya2VyQWdlbnQoKSkKICAgICAgICAgd29ya2VyQWdlbnQtPmRpZFN0YXJ0V29ya2Vy
Q29udGV4dCh3b3JrZXJDb250ZXh0UHJveHkpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkQ3JlYXRlV29ya2VySW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdl
bnQsIGludHB0cl90IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtlcikK
K3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVXb3JrZXJJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIGludHB0cl90IGlkLCBjb25zdCBT
dHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtlcikKIHsKLSAgICBpbnNwZWN0b3JBZ2VudC0+
ZGlkQ3JlYXRlV29ya2VyKGlkLCB1cmwsIGlzU2hhcmVkV29ya2VyKTsKKyAgICBpZiAoSW5zcGVj
dG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9y
QWdlbnQoKSkKKyAgICAgICAgaW5zcGVjdG9yQWdlbnQtPmRpZENyZWF0ZVdvcmtlcihpZCwgdXJs
LCBpc1NoYXJlZFdvcmtlcik7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWREZXN0cm95V29ya2VySW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGludHB0
cl90IGlkKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERlc3Ryb3lXb3JrZXJJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIGludHB0cl90IGlk
KQogewotICAgIGluc3BlY3RvckFnZW50LT5kaWREZXN0cm95V29ya2VyKGlkKTsKKyAgICBpZiAo
SW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5z
cGVjdG9yQWdlbnQoKSkKKyAgICAgICAgaW5zcGVjdG9yQWdlbnQtPmRpZERlc3Ryb3lXb3JrZXIo
aWQpOwogfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCi12b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlV2ViU29ja2V0SW1wbChJbnNwZWN0b3JBZ2VudCog
aW5zcGVjdG9yQWdlbnQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgS1VSTCYgcmVx
dWVzdFVSTCwgY29uc3QgS1VSTCYpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
Q3JlYXRlV2ViU29ja2V0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwsIGNv
bnN0IEtVUkwmKQogewotICAgIGlmICghaW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKKyAgICBJ
bnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNw
ZWN0b3JBZ2VudCgpOworICAgIGlmICghaW5zcGVjdG9yQWdlbnQgfHwgIWluc3BlY3RvckFnZW50
LT5lbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudCogcmVzb3VyY2VBZ2VudCA9IHJldHJpZXZlUmVzb3VyY2VBZ2VudChpbnNwZWN0b3JBZ2Vu
dCkpCisgICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291
cmNlQWdlbnQtPmRpZENyZWF0ZVdlYlNvY2tldChpZGVudGlmaWVyLCByZXF1ZXN0VVJMKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kV2ViU29ja2V0SGFuZHNo
YWtlUmVxdWVzdEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QmIHJlcXVlc3Qp
Cit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hh
a2VSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3Qm
IHJlcXVlc3QpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdl
bnQgPSByZXRyaWV2ZVJlc291cmNlQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlmIChJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+
aW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT53aWxsU2Vu
ZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QoaWRlbnRpZmllciwgcmVxdWVzdCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtl
UmVzcG9uc2VJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRz
aGFrZVJlc3BvbnNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEhhbmRzaGFrZVJlc3Bv
bnNlJiByZXNwb25zZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3Vy
Y2VBZ2VudCA9IHJldHJpZXZlUmVzb3VyY2VBZ2VudChpbnNwZWN0b3JBZ2VudCkpCisgICAgaWYg
KEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLT5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRp
ZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZShpZGVudGlmaWVyLCByZXNwb25zZSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDbG9zZVdlYlNvY2tldElt
cGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xvc2VXZWJTb2NrZXRJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllcikKIHsKLSAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VB
Z2VudCA9IHJldHJpZXZlUmVzb3VyY2VBZ2VudChpbnNwZWN0b3JBZ2VudCkpCisgICAgaWYgKElu
c3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
LT5pbnNwZWN0b3JSZXNvdXJjZUFnZW50KCkpCiAgICAgICAgIHJlc291cmNlQWdlbnQtPmRpZENs
b3NlV2ViU29ja2V0KGlkZW50aWZpZXIpOwogfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKQotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om5ldHdv
cmtTdGF0ZUNoYW5nZWRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKK3ZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2VkSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewotICAgIGlmIChJbnNwZWN0b3JB
cHBsaWNhdGlvbkNhY2hlQWdlbnQqIGFwcGxpY2F0aW9uQ2FjaGVBZ2VudCA9IGluc3BlY3RvckFn
ZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dCgpKQorICAgIGlmIChJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQqIGFwcGxpY2F0aW9u
Q2FjaGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudCgpKQogICAgICAgICBhcHBsaWNhdGlvbkNhY2hlQWdlbnQtPm5ldHdvcmtTdGF0ZUNo
YW5nZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnVwZGF0ZUFwcGxp
Y2F0aW9uQ2FjaGVTdGF0dXNJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgRnJh
bWUqIGZyYW1lKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnVwZGF0ZUFwcGxpY2F0
aW9uQ2FjaGVTdGF0dXNJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50KiBhcHBsaWNhdGlvbkNhY2hlQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGlu
Z0FnZW50cygpLT5pbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSkKKyAgICBpZiAoSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBsaWNhdGlvbkNhY2hlQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSkKICAgICAg
ICAgYXBwbGljYXRpb25DYWNoZUFnZW50LT51cGRhdGVBcHBsaWNhdGlvbkNhY2hlU3RhdHVzKGZy
YW1lKTsKIH0KICNlbmRpZgogCi1ib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJv
bnRlbmQoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50KQorYm9vbCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmNvbGxlY3RpbmdIVE1MUGFyc2VFcnJvcnMoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cykKIHsKLSAgICByZXR1cm4gaW5zcGVjdG9yQWdlbnQtPmhh
c0Zyb250ZW5kKCk7CisgICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckFnZW50KCkpCisgICAgICAgIHJldHVybiBpbnNw
ZWN0b3JBZ2VudC0+aGFzRnJvbnRlbmQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChJbnNw
ZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IFN0cmluZyYgY2F0ZWdvcnlUeXBlLCBj
b25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgYm9vbCBzeW5jaHJvbm91cykKK3ZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBTdHJpbmcmIGNhdGVnb3J5VHlwZSwg
Y29uc3QgU3RyaW5nJiBldmVudE5hbWUsIGJvb2wgc3luY2hyb25vdXMpCiB7CiAjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgaWYgKEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQq
IGRvbURlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygp
LT5pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgIGRvbURlYnVnZ2VyQWdlbnQtPnBhdXNlT25O
YXRpdmVFdmVudElmTmVlZGVkKGNhdGVnb3J5VHlwZSwgZXZlbnROYW1lLCBzeW5jaHJvbm91cyk7
CiAjZW5kaWYKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNhbmNlbFBhdXNl
T25OYXRpdmVFdmVudChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQpCit2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6Y2FuY2VsUGF1c2VPbk5hdGl2ZUV2ZW50KEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMpCiB7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCi0gICAgaWYgKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQg
PSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JEZWJ1Z2dlckFnZW50KCkpCiAgICAgICAg
IGRlYnVnZ2VyQWdlbnQtPmNhbmNlbFBhdXNlT25OZXh0U3RhdGVtZW50KCk7CiAjZW5kaWYKIH0K
IAotSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpyZXRy
aWV2ZVRpbWVsaW5lQWdlbnQoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50KQotewotICAg
IHJldHVybiBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JU
aW1lbGluZUFnZW50KCk7Ci19Ci0KIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6cmV0cmlldmVUaW1lbGluZUFnZW50KGNvbnN0IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSYgY29va2llKQogewogICAgIGlmICghY29va2llLmZpcnN0KQogICAg
ICAgICByZXR1cm4gMDsKLSAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50
ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZS5maXJzdCk7CisgICAgSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGNvb2tpZS5maXJzdC0+aW5zcGVjdG9yVGltZWxp
bmVBZ2VudCgpOwogICAgIGlmICh0aW1lbGluZUFnZW50ICYmIHRpbWVsaW5lQWdlbnQtPmlkKCkg
PT0gY29va2llLnNlY29uZCkKICAgICAgICAgcmV0dXJuIHRpbWVsaW5lQWdlbnQ7CiAgICAgcmV0
dXJuIDA7CiB9CiAKLUluc3BlY3RvclJlc291cmNlQWdlbnQqIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6cmV0cmlldmVSZXNvdXJjZUFnZW50KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2Vu
dCkKLXsKLSAgICByZXR1cm4gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+
aW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpOwotfQotCi1JbnNwZWN0b3JQYWdlQWdlbnQqIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6cmV0cmlldmVQYWdlQWdlbnQoSW5zcGVjdG9yQWdlbnQqIGlu
c3BlY3RvckFnZW50KQotewotICAgIHJldHVybiBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGlu
Z0FnZW50cygpLT5pbnNwZWN0b3JQYWdlQWdlbnQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gIUVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKaW5kZXggMzgxMDI2ZDk4
MTQ0YWM0OTllYjJkMDhmY2E4NGFiYjVlZDNkY2ViZi4uYmE1MjNmNGZhZmZiNDQ2M2ViNWRjM2Ni
ZGNjZDAxMzVlMTE0ZTViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAtNDcsMTAgKzQ3LDggQEAgY2xhc3MgRWxlbWVu
dDsKIGNsYXNzIEV2ZW50Q29udGV4dDsKIGNsYXNzIERvY3VtZW50TG9hZGVyOwogY2xhc3MgSGl0
VGVzdFJlc3VsdDsKLWNsYXNzIEluc3BlY3RvckFnZW50OwotY2xhc3MgSW5zcGVjdG9yUGFnZUFn
ZW50OwotY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQ7CitjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xhc3MgS1VSTDsKIGNsYXNz
IE5vZGU7CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CkBAIC02OCw3ICs2Niw5IEBAIGNsYXNzIFdl
YlNvY2tldEhhbmRzaGFrZVJlcXVlc3Q7CiBjbGFzcyBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25z
ZTsKICNlbmRpZgogCi10eXBlZGVmIHBhaXI8SW5zcGVjdG9yQWdlbnQqLCBpbnQ+IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZTsKKyNkZWZpbmUgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRF
TkRTKHZhbHVlKSBpZiAoIWhhc0Zyb250ZW5kcygpKSByZXR1cm4gdmFsdWU7CisKK3R5cGVkZWYg
cGFpcjxJbnN0cnVtZW50aW5nQWdlbnRzKiwgaW50PiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWU7CiAKIGNsYXNzIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbiB7CiBwdWJsaWM6CkBAIC0x
ODAsMTQzICsxODAsMTM4IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKLSAgICBzdGF0aWMgdm9pZCBiaW5kSW5zcGVjdG9yQWdlbnQoUGFnZSogcGFnZSwgSW5zcGVj
dG9yQWdlbnQqIGluc3BlY3RvckFnZW50KSB7IGluc3BlY3RvckFnZW50cygpLnNldChwYWdlLCBp
bnNwZWN0b3JBZ2VudCk7IH0KLSAgICBzdGF0aWMgdm9pZCB1bmJpbmRJbnNwZWN0b3JBZ2VudChQ
YWdlKiBwYWdlKSB7IGluc3BlY3RvckFnZW50cygpLnJlbW92ZShwYWdlKTsgfQorICAgIHN0YXRp
YyB2b2lkIGJpbmRJbnN0cnVtZW50aW5nQWdlbnRzKFBhZ2UqIHBhZ2UsIEluc3RydW1lbnRpbmdB
Z2VudHMqIGFnZW50cykgeyBpbnN0cnVtZW50aW5nQWdlbnRzKCkuc2V0KHBhZ2UsIGFnZW50cyk7
IH0KKyAgICBzdGF0aWMgdm9pZCB1bmJpbmRJbnN0cnVtZW50aW5nQWdlbnRzKFBhZ2UqIHBhZ2Up
IHsgaW5zdHJ1bWVudGluZ0FnZW50cygpLnJlbW92ZShwYWdlKTsgfQogICAgIHN0YXRpYyB2b2lk
IGZyb250ZW5kQ3JlYXRlZCgpIHsgc19mcm9udGVuZENvdW50ZXIgKz0gMTsgfQogICAgIHN0YXRp
YyB2b2lkIGZyb250ZW5kRGVsZXRlZCgpIHsgc19mcm9udGVuZENvdW50ZXIgLT0gMTsgfQogICAg
IHN0YXRpYyBib29sIGhhc0Zyb250ZW5kcygpIHsgcmV0dXJuIHNfZnJvbnRlbmRDb3VudGVyOyB9
Ci0gICAgc3RhdGljIGJvb2wgaGFzRnJvbnRlbmQoUGFnZSopOworICAgIHN0YXRpYyBib29sIGNv
bGxlY3RpbmdIVE1MUGFyc2VFcnJvcnMoUGFnZSopOwogI2Vsc2UKICAgICBzdGF0aWMgYm9vbCBo
YXNGcm9udGVuZHMoKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHN0YXRpYyBib29sIGhhc0Zyb250
ZW5kKFBhZ2UqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRpYyBib29sIGNvbGxlY3RpbmdI
VE1MUGFyc2VFcnJvcnMoUGFnZSopIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAogcHJpdmF0
ZToKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIHN0YXRpYyB2b2lkIGRpZENsZWFyV2luZG93
T2JqZWN0SW5Xb3JsZEltcGwoSW5zcGVjdG9yQWdlbnQqLCBGcmFtZSosIERPTVdyYXBwZXJXb3Js
ZCopOwotICAgIHN0YXRpYyB2b2lkIGluc3BlY3RlZFBhZ2VEZXN0cm95ZWRJbXBsKEluc3BlY3Rv
ckFnZW50Kik7CisgICAgc3RhdGljIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzKiwgRnJhbWUqLCBET01XcmFwcGVyV29ybGQqKTsKKyAgICBz
dGF0aWMgdm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
Kik7CiAKLSAgICBzdGF0aWMgdm9pZCB3aWxsSW5zZXJ0RE9NTm9kZUltcGwoSW5zcGVjdG9yQWdl
bnQqLCBOb2RlKiBub2RlLCBOb2RlKiBwYXJlbnQpOwotICAgIHN0YXRpYyB2b2lkIGRpZEluc2Vy
dERPTU5vZGVJbXBsKEluc3BlY3RvckFnZW50KiwgTm9kZSopOwotICAgIHN0YXRpYyB2b2lkIHdp
bGxSZW1vdmVET01Ob2RlSW1wbChJbnNwZWN0b3JBZ2VudCosIE5vZGUqKTsKLSAgICBzdGF0aWMg
dm9pZCBkaWRSZW1vdmVET01Ob2RlSW1wbChJbnNwZWN0b3JBZ2VudCosIE5vZGUqKTsKLSAgICBz
dGF0aWMgdm9pZCB3aWxsTW9kaWZ5RE9NQXR0ckltcGwoSW5zcGVjdG9yQWdlbnQqLCBFbGVtZW50
Kik7Ci0gICAgc3RhdGljIHZvaWQgZGlkTW9kaWZ5RE9NQXR0ckltcGwoSW5zcGVjdG9yQWdlbnQq
LCBFbGVtZW50Kik7Ci0gICAgc3RhdGljIHZvaWQgY2hhcmFjdGVyRGF0YU1vZGlmaWVkSW1wbChJ
bnNwZWN0b3JBZ2VudCosIENoYXJhY3RlckRhdGEqKTsKLSAgICBzdGF0aWMgdm9pZCBkaWRJbnZh
bGlkYXRlU3R5bGVBdHRySW1wbChJbnNwZWN0b3JBZ2VudCosIE5vZGUqKTsKKyAgICBzdGF0aWMg
dm9pZCB3aWxsSW5zZXJ0RE9NTm9kZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIE5vZGUqLCBO
b2RlKiBwYXJlbnQpOworICAgIHN0YXRpYyB2b2lkIGRpZEluc2VydERPTU5vZGVJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMqLCBOb2RlKik7CisgICAgc3RhdGljIHZvaWQgd2lsbFJlbW92ZURPTU5v
ZGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBOb2RlKik7CisgICAgc3RhdGljIHZvaWQgZGlk
UmVtb3ZlRE9NTm9kZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIE5vZGUqKTsKKyAgICBzdGF0
aWMgdm9pZCB3aWxsTW9kaWZ5RE9NQXR0ckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIEVsZW1l
bnQqKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRNb2RpZnlET01BdHRySW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzKiwgRWxlbWVudCopOworICAgIHN0YXRpYyB2b2lkIGNoYXJhY3RlckRhdGFNb2RpZmll
ZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIENoYXJhY3RlckRhdGEqKTsKKyAgICBzdGF0aWMg
dm9pZCBkaWRJbnZhbGlkYXRlU3R5bGVBdHRySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgTm9k
ZSopOwogCi0gICAgc3RhdGljIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRJbXBsKEluc3Bl
Y3RvckFnZW50KiwgY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3Mp
OwotICAgIHN0YXRpYyBib29sIGhhbmRsZU1vdXNlUHJlc3NJbXBsKEluc3BlY3RvckFnZW50Kik7
CisgICAgc3RhdGljIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMqLCBjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7
CisgICAgc3RhdGljIGJvb2wgaGFuZGxlTW91c2VQcmVzc0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyopOwogCi0gICAgc3RhdGljIHZvaWQgd2lsbFNlbmRYTUxIdHRwUmVxdWVzdEltcGwoSW5zcGVj
dG9yQWdlbnQqLCBjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgc3RhdGljIHZvaWQgZGlkU2NoZWR1
bGVSZXNvdXJjZVJlcXVlc3RJbXBsKEluc3BlY3RvckFnZW50KiwgY29uc3QgU3RyaW5nJiB1cmwp
OwotICAgIHN0YXRpYyB2b2lkIGRpZEluc3RhbGxUaW1lckltcGwoSW5zcGVjdG9yQWdlbnQqLCBp
bnQgdGltZXJJZCwgaW50IHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hvdCk7Ci0gICAgc3RhdGljIHZv
aWQgZGlkUmVtb3ZlVGltZXJJbXBsKEluc3BlY3RvckFnZW50KiwgaW50IHRpbWVySWQpOworICAg
IHN0YXRpYyB2b2lkIHdpbGxTZW5kWE1MSHR0cFJlcXVlc3RJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMqLCBjb25zdCBTdHJpbmcmIHVybCk7CisgICAgc3RhdGljIHZvaWQgZGlkU2NoZWR1bGVSZXNv
dXJjZVJlcXVlc3RJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBjb25zdCBTdHJpbmcmIHVybCk7
CisgICAgc3RhdGljIHZvaWQgZGlkSW5zdGFsbFRpbWVySW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
KiwgaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpOworICAgIHN0YXRp
YyB2b2lkIGRpZFJlbW92ZVRpbWVySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgaW50IHRpbWVy
SWQpOwogCi0gICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsQ2Fs
bEZ1bmN0aW9uSW1wbChJbnNwZWN0b3JBZ2VudCosIGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwg
aW50IHNjcmlwdExpbmUpOworICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUgd2lsbENhbGxGdW5jdGlvbkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIGNvbnN0IFN0cmlu
ZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUpOwogICAgIHN0YXRpYyB2b2lkIGRpZENhbGxG
dW5jdGlvbkltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7Ci0gICAg
c3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsQ2hhbmdlWEhSUmVhZHlT
dGF0ZUltcGwoSW5zcGVjdG9yQWdlbnQqLCBYTUxIdHRwUmVxdWVzdCogcmVxdWVzdCk7CisgICAg
c3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsQ2hhbmdlWEhSUmVhZHlT
dGF0ZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIFhNTEh0dHBSZXF1ZXN0Kik7CiAgICAgc3Rh
dGljIHZvaWQgZGlkQ2hhbmdlWEhSUmVhZHlTdGF0ZUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llJik7Ci0gICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSB3aWxsRGlzcGF0Y2hFdmVudEltcGwoSW5zcGVjdG9yQWdlbnQqLCBjb25zdCBFdmVudCYg
ZXZlbnQsIERPTVdpbmRvdyogd2luZG93LCBOb2RlKiBub2RlLCBjb25zdCBWZWN0b3I8RXZlbnRD
b250ZXh0PiYgYW5jZXN0b3JzKTsKKyAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llIHdpbGxEaXNwYXRjaEV2ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgY29uc3Qg
RXZlbnQmLCBET01XaW5kb3cqLCBOb2RlKiwgY29uc3QgVmVjdG9yPEV2ZW50Q29udGV4dD4mIGFu
Y2VzdG9ycyk7CiAgICAgc3RhdGljIHZvaWQgZGlkRGlzcGF0Y2hFdmVudEltcGwoY29uc3QgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7Ci0gICAgc3RhdGljIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSB3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93SW1wbChJbnNwZWN0b3JB
Z2VudCosIGNvbnN0IEV2ZW50JiBldmVudCwgRE9NV2luZG93KiB3aW5kb3cpOworICAgIHN0YXRp
YyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZlbnRPbldpbmRv
d0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIGNvbnN0IEV2ZW50JiwgRE9NV2luZG93Kik7CiAg
ICAgc3RhdGljIHZvaWQgZGlkRGlzcGF0Y2hFdmVudE9uV2luZG93SW1wbChjb25zdCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKLSAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIHdpbGxFdmFsdWF0ZVNjcmlwdEltcGwoSW5zcGVjdG9yQWdlbnQqLCBjb25z
dCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIpOworICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUgd2lsbEV2YWx1YXRlU2NyaXB0SW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKiwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVyKTsKICAgICBzdGF0aWMgdm9p
ZCBkaWRFdmFsdWF0ZVNjcmlwdEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llJik7Ci0gICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsRmly
ZVRpbWVySW1wbChJbnNwZWN0b3JBZ2VudCosIGludCB0aW1lcklkKTsKKyAgICBzdGF0aWMgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxGaXJlVGltZXJJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMqLCBpbnQgdGltZXJJZCk7CiAgICAgc3RhdGljIHZvaWQgZGlkRmlyZVRpbWVySW1w
bChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKLSAgICBzdGF0aWMgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxMYXlvdXRJbXBsKEluc3BlY3RvckFnZW50
Kik7CisgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsTGF5b3V0
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKik7CiAgICAgc3RhdGljIHZvaWQgZGlkTGF5b3V0SW1w
bChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKLSAgICBzdGF0aWMgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxMb2FkWEhSSW1wbChJbnNwZWN0b3JBZ2Vu
dCosIFhNTEh0dHBSZXF1ZXN0KiByZXF1ZXN0KTsKKyAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llIHdpbGxMb2FkWEhSSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgWE1M
SHR0cFJlcXVlc3QqKTsKICAgICBzdGF0aWMgdm9pZCBkaWRMb2FkWEhSSW1wbChjb25zdCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKLSAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llIHdpbGxQYWludEltcGwoSW5zcGVjdG9yQWdlbnQqLCBjb25zdCBJbnRS
ZWN0JiByZWN0KTsKKyAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdp
bGxQYWludEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIGNvbnN0IEludFJlY3QmKTsKICAgICBz
dGF0aWMgdm9pZCBkaWRQYWludEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llJik7Ci0gICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsUmVj
YWxjdWxhdGVTdHlsZUltcGwoSW5zcGVjdG9yQWdlbnQqKTsKKyAgICBzdGF0aWMgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxSZWNhbGN1bGF0ZVN0eWxlSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKik7CiAgICAgc3RhdGljIHZvaWQgZGlkUmVjYWxjdWxhdGVTdHlsZUltcGwoY29u
c3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAKLSAgICBzdGF0aWMgdm9pZCBh
cHBseVVzZXJBZ2VudE92ZXJyaWRlSW1wbChJbnNwZWN0b3JBZ2VudCosIFN0cmluZyopOwotICAg
IHN0YXRpYyB2b2lkIHdpbGxTZW5kUmVxdWVzdEltcGwoSW5zcGVjdG9yQWdlbnQqLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7Ci0gICAgc3RhdGljIHZvaWQg
Y29udGludWVBZnRlclBpbmdMb2FkZXJJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKLSAgICBzdGF0aWMgdm9pZCBtYXJrUmVzb3VyY2VBc0NhY2hlZElt
cGwoSW5zcGVjdG9yQWdlbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwotICAgIHN0YXRp
YyB2b2lkIGRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZUltcGwoSW5zcGVjdG9yQWdlbnQq
LCBEb2N1bWVudExvYWRlciosIGNvbnN0IENhY2hlZFJlc291cmNlKik7Ci0gICAgc3RhdGljIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsUmVjZWl2ZVJlc291cmNlRGF0YUltcGwo
SW5zcGVjdG9yQWdlbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOworICAgIHN0YXRpYyB2
b2lkIGFwcGx5VXNlckFnZW50T3ZlcnJpZGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBTdHJp
bmcqKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsU2VuZFJlcXVlc3RJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgUmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7Cisg
ICAgc3RhdGljIHZvaWQgY29udGludWVBZnRlclBpbmdMb2FkZXJJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgUmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHN0YXRpYyB2b2lkIG1h
cmtSZXNvdXJjZUFzQ2FjaGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5
Q2FjaGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBEb2N1bWVudExvYWRlciosIGNvbnN0IENh
Y2hlZFJlc291cmNlKik7CisgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSB3aWxsUmVjZWl2ZVJlc291cmNlRGF0YUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllcik7CiAgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc291cmNl
RGF0YUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7Ci0gICAgc3Rh
dGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsUmVjZWl2ZVJlc291cmNlUmVz
cG9uc2VJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSB3aWxsUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsK
ICAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlUmVzb3VyY2VSZXNwb25zZUltcGwoY29uc3QgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBE
b2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICBzdGF0aWMgdm9p
ZCBkaWRSZWNlaXZlUmVzb3VyY2VSZXNwb25zZUJ1dENhbmNlbGVkSW1wbChGcmFtZSosIERvY3Vt
ZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7CiAgICAgc3RhdGljIHZvaWQgY29udGludWVBZnRlclhGcmFtZU9wdGlvbnNEZW5pZWRJ
bXBsKEZyYW1lKiwgRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICBzdGF0aWMgdm9pZCBjb250aW51ZVdpdGhQb2xp
Y3lEb3dubG9hZEltcGwoRnJhbWUqLCBEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgIHN0YXRpYyB2b2lkIGNvbnRp
bnVlV2l0aFBvbGljeUlnbm9yZUltcGwoRnJhbWUqLCBEb2N1bWVudExvYWRlciosIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHN0YXRpYyB2
b2lkIGRpZFJlY2VpdmVDb250ZW50TGVuZ3RoSW1wbChJbnNwZWN0b3JBZ2VudCosIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgaW50IGRhdGFMZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCk7
Ci0gICAgc3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZGluZ0ltcGwoSW5zcGVjdG9yQWdlbnQqLCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pc2hUaW1lKTsKLSAgICBzdGF0aWMg
dm9pZCBkaWRGYWlsTG9hZGluZ0ltcGwoSW5zcGVjdG9yQWdlbnQqLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLSAgICBzdGF0aWMgdm9pZCByZXNvdXJj
ZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3RJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgc2VuZFVSTCwgdW5zaWduZWQgc2VuZExpbmVOdW1iZXIpOwot
ICAgIHN0YXRpYyB2b2lkIHNjcmlwdEltcG9ydGVkSW1wbChJbnNwZWN0b3JBZ2VudCosIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpOwotICAgIHN0
YXRpYyB2b2lkIGRvbUNvbnRlbnRMb2FkZWRFdmVudEZpcmVkSW1wbChJbnNwZWN0b3JBZ2VudCos
IEZyYW1lKiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRFdmVudEZpcmVkSW1w
bChJbnNwZWN0b3JBZ2VudCosIEZyYW1lKiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRpYyB2b2lk
IGZyYW1lRGV0YWNoZWRGcm9tUGFyZW50SW1wbChJbnNwZWN0b3JBZ2VudCosIEZyYW1lKik7Ci0g
ICAgc3RhdGljIHZvaWQgZGlkQ29tbWl0TG9hZEltcGwoUGFnZSosIEluc3BlY3RvckFnZW50Kiwg
RG9jdW1lbnRMb2FkZXIqKTsKLQotICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUgd2lsbFdyaXRlSFRNTEltcGwoSW5zcGVjdG9yQWdlbnQqLCB1bnNpZ25lZCBpbnQgbGVu
Z3RoLCB1bnNpZ25lZCBpbnQgc3RhcnRMaW5lKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZl
Q29udGVudExlbmd0aEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgaW50IGRhdGFMZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCk7CisgICAgc3Rh
dGljIHZvaWQgZGlkRmluaXNoTG9hZGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpOworICAgIHN0YXRpYyB2b2lk
IGRpZEZhaWxMb2FkaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgc3RhdGljIHZvaWQgcmVzb3Vy
Y2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgdW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2VuZFVSTCwgdW5zaWduZWQgc2VuZExpbmVOdW1i
ZXIpOworICAgIHN0YXRpYyB2b2lkIHNjcmlwdEltcG9ydGVkSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmlu
Zyk7CisgICAgc3RhdGljIHZvaWQgZG9tQ29udGVudExvYWRlZEV2ZW50RmlyZWRJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMqLCBGcmFtZSosIGNvbnN0IEtVUkwmKTsKKyAgICBzdGF0aWMgdm9pZCBs
b2FkRXZlbnRGaXJlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIEZyYW1lKiwgY29uc3QgS1VS
TCYpOworICAgIHN0YXRpYyB2b2lkIGZyYW1lRGV0YWNoZWRGcm9tUGFyZW50SW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzKiwgRnJhbWUqKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRDb21taXRMb2FkSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZSosIERvY3VtZW50TG9hZGVyKik7CisKKyAgICBz
dGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxXcml0ZUhUTUxJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMqLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgc3Rh
cnRMaW5lKTsKICAgICBzdGF0aWMgdm9pZCBkaWRXcml0ZUhUTUxJbXBsKGNvbnN0IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSYsIHVuc2lnbmVkIGludCBlbmRMaW5lKTsKIAotICAgIHN0
YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3BlY3RvckFnZW50KiwgTWVzc2Fn
ZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4sIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNr
Pik7Ci0gICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zcGVjdG9yQWdl
bnQqLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQp
OwotICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVDb3VudEltcGwoSW5zcGVjdG9yQWdlbnQqLCBQYXNz
UmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4sIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPik7Ci0g
ICAgc3RhdGljIHZvaWQgc3RhcnRDb25zb2xlVGltaW5nSW1wbChJbnNwZWN0b3JBZ2VudCosIGNv
bnN0IFN0cmluZyYgdGl0bGUpOwotICAgIHN0YXRpYyB2b2lkIHN0b3BDb25zb2xlVGltaW5nSW1w
bChJbnNwZWN0b3JBZ2VudCosIGNvbnN0IFN0cmluZyYgdGl0bGUsIFBhc3NSZWZQdHI8U2NyaXB0
Q2FsbFN0YWNrPik7Ci0gICAgc3RhdGljIHZvaWQgY29uc29sZU1hcmtUaW1lbGluZUltcGwoSW5z
cGVjdG9yQWdlbnQqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4pOworICAgIHN0YXRpYyB2
b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBNZXNzYWdl
U291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+
KTsKKyAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzKiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUlEKTsKKyAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnRJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMqLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4sIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0
YWNrPik7CisgICAgc3RhdGljIHZvaWQgc3RhcnRDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgc3RhdGljIHZvaWQgc3RvcENv
bnNvbGVUaW1pbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBjb25zdCBTdHJpbmcmIHRpdGxl
LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4pOworICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVN
YXJrVGltZWxpbmVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYXNzUmVmUHRyPFNjcmlwdEFy
Z3VtZW50cz4pOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgc3RhdGlj
IHZvaWQgYWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlSW1wbChJbnNwZWN0b3JBZ2Vu
dCosIGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgc291cmNlVVJMKTsKLSAgICBzdGF0aWMgdm9pZCBhZGRQcm9maWxlSW1wbChJbnNwZWN0b3JB
Z2VudCosIFJlZlB0cjxTY3JpcHRQcm9maWxlPiwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+
KTsKLSAgICBzdGF0aWMgU3RyaW5nIGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWVJ
bXBsKEluc3BlY3RvckFnZW50KiwgYm9vbCBpbmNyZW1lbnRQcm9maWxlTnVtYmVyKTsKLSAgICBz
dGF0aWMgYm9vbCBwcm9maWxlckVuYWJsZWRJbXBsKEluc3BlY3RvckFnZW50Kik7CisgICAgc3Rh
dGljIHZvaWQgYWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwpOworICAgIHN0YXRpYyB2b2lkIGFkZFByb2ZpbGVJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMqLCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4sIFBhc3NSZWZQdHI8U2Ny
aXB0Q2FsbFN0YWNrPik7CisgICAgc3RhdGljIFN0cmluZyBnZXRDdXJyZW50VXNlckluaXRpYXRl
ZFByb2ZpbGVOYW1lSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgYm9vbCBpbmNyZW1lbnRQcm9m
aWxlTnVtYmVyKTsKKyAgICBzdGF0aWMgYm9vbCBwcm9maWxlckVuYWJsZWRJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMqKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotICAgIHN0YXRp
YyB2b2lkIGRpZE9wZW5EYXRhYmFzZUltcGwoSW5zcGVjdG9yQWdlbnQqLCBQYXNzUmVmUHRyPERh
dGFiYXNlPiwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2ZXJzaW9uKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRPcGVuRGF0YWJhc2VJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMqLCBQYXNzUmVmUHRyPERhdGFiYXNlPiwgY29uc3QgU3RyaW5nJiBk
b21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgIHN0YXRpYyB2b2lkIGRpZFVzZURPTVN0
b3JhZ2VJbXBsKEluc3BlY3RvckFnZW50KiwgU3RvcmFnZUFyZWEqLCBib29sIGlzTG9jYWxTdG9y
YWdlLCBGcmFtZSopOworICAgIHN0YXRpYyB2b2lkIGRpZFVzZURPTVN0b3JhZ2VJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMqLCBTdG9yYWdlQXJlYSosIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1l
Kik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXT1JLRVJTKQotICAgIHN0YXRpYyB2b2lkIGRpZFN0
YXJ0V29ya2VyQ29udGV4dEltcGwoSW5zcGVjdG9yQWdlbnQqLCBXb3JrZXJDb250ZXh0UHJveHkq
KTsKLSAgICBzdGF0aWMgdm9pZCBkaWRDcmVhdGVXb3JrZXJJbXBsKEluc3BlY3RvckFnZW50Kiwg
aW50cHRyX3QgaWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkV29ya2VyKTsKLSAg
ICBzdGF0aWMgdm9pZCBkaWREZXN0cm95V29ya2VySW1wbChJbnNwZWN0b3JBZ2VudCosIGludHB0
cl90IGlkKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRTdGFydFdvcmtlckNvbnRleHRJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMqLCBXb3JrZXJDb250ZXh0UHJveHkqKTsKKyAgICBzdGF0aWMgdm9pZCBk
aWRDcmVhdGVXb3JrZXJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBpbnRwdHJfdCBpZCwgY29u
c3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWRXb3JrZXIpOworICAgIHN0YXRpYyB2b2lkIGRp
ZERlc3Ryb3lXb3JrZXJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBpbnRwdHJfdCBpZCk7CiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKLSAgICBzdGF0aWMgdm9pZCBkaWRDcmVh
dGVXZWJTb2NrZXRJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBLVVJMJiBkb2N1bWVudFVSTCk7Ci0gICAg
c3RhdGljIHZvaWQgd2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0SW1wbChJbnNwZWN0
b3JBZ2VudCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNo
YWtlUmVxdWVzdCYpOwotICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hh
a2VSZXNwb25zZUltcGwoSW5zcGVjdG9yQWdlbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlJik7Ci0gICAgc3RhdGljIHZvaWQgZGlk
Q2xvc2VXZWJTb2NrZXRJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRDcmVhdGVXZWJTb2NrZXRJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RV
UkwsIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsU2VuZFdl
YlNvY2tldEhhbmRzaGFrZVJlcXVlc3RJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QmKTsKKyAg
ICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2VJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNv
Y2tldEhhbmRzaGFrZVJlc3BvbnNlJik7CisgICAgc3RhdGljIHZvaWQgZGlkQ2xvc2VXZWJTb2Nr
ZXRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgIHN0YXRp
YyB2b2lkIG5ldHdvcmtTdGF0ZUNoYW5nZWRJbXBsKEluc3BlY3RvckFnZW50Kik7Ci0gICAgc3Rh
dGljIHZvaWQgdXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1c0ltcGwoSW5zcGVjdG9yQWdlbnQq
LCBGcmFtZSopOwotI2VuZGlmCi0KLSAgICBzdGF0aWMgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50Rm9yRnJhbWUoRnJhbWUqKTsKLSAgICBzdGF0aWMgSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50Rm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0gICAgc3RhdGlj
IEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudEZvclBhZ2UoUGFnZSopOwotICAgIHN0YXRp
YyBJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JDb250ZXh0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLSAgICBzdGF0aWMgSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50V2l0aEZyb250ZW5kRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICBzdGF0aWMg
SW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRnJhbWUoRnJhbWUq
KTsKLSAgICBzdGF0aWMgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5k
Rm9yUGFnZShQYWdlKik7Ci0KLSAgICBzdGF0aWMgYm9vbCBoYXNGcm9udGVuZChJbnNwZWN0b3JB
Z2VudCopOwotICAgIHN0YXRpYyB2b2lkIHBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKEluc3Bl
Y3RvckFnZW50KiwgY29uc3QgU3RyaW5nJiBjYXRlZ29yeVR5cGUsIGNvbnN0IFN0cmluZyYgZXZl
bnROYW1lLCBib29sIHN5bmNocm9ub3VzKTsKLSAgICBzdGF0aWMgdm9pZCBjYW5jZWxQYXVzZU9u
TmF0aXZlRXZlbnQoSW5zcGVjdG9yQWdlbnQqKTsKLSAgICBzdGF0aWMgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudCogcmV0cmlldmVUaW1lbGluZUFnZW50KEluc3BlY3RvckFnZW50Kik7CisgICAgc3Rh
dGljIHZvaWQgbmV0d29ya1N0YXRlQ2hhbmdlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyopOwor
ICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMqLCBGcmFtZSopOworI2VuZGlmCisKKyAgICBzdGF0aWMgSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UoUGFnZSopOworICAgIHN0YXRpYyBJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoRnJhbWUqKTsK
KyAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNv
bnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHN0YXRpYyBJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKKworICAg
IHN0YXRpYyBib29sIGNvbGxlY3RpbmdIVE1MUGFyc2VFcnJvcnMoSW5zdHJ1bWVudGluZ0FnZW50
cyopOworICAgIHN0YXRpYyB2b2lkIHBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKEluc3RydW1l
bnRpbmdBZ2VudHMqLCBjb25zdCBTdHJpbmcmIGNhdGVnb3J5VHlwZSwgY29uc3QgU3RyaW5nJiBl
dmVudE5hbWUsIGJvb2wgc3luY2hyb25vdXMpOworICAgIHN0YXRpYyB2b2lkIGNhbmNlbFBhdXNl
T25OYXRpdmVFdmVudChJbnN0cnVtZW50aW5nQWdlbnRzKik7CiAgICAgc3RhdGljIEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQqIHJldHJpZXZlVGltZWxpbmVBZ2VudChjb25zdCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUmKTsKLSAgICBzdGF0aWMgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCog
cmV0cmlldmVSZXNvdXJjZUFnZW50KEluc3BlY3RvckFnZW50Kik7Ci0gICAgc3RhdGljIEluc3Bl
Y3RvclBhZ2VBZ2VudCogcmV0cmlldmVQYWdlQWdlbnQoSW5zcGVjdG9yQWdlbnQqKTsKIAotICAg
IHN0YXRpYyBIYXNoTWFwPFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCo+JiBpbnNwZWN0b3JBZ2VudHMo
KTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UGFnZSosIEluc3RydW1lbnRpbmdBZ2VudHMqPiBJbnN0
cnVtZW50aW5nQWdlbnRzTWFwOworICAgIHN0YXRpYyBJbnN0cnVtZW50aW5nQWdlbnRzTWFwJiBp
bnN0cnVtZW50aW5nQWdlbnRzKCk7CiAgICAgc3RhdGljIGludCBzX2Zyb250ZW5kQ291bnRlcjsK
ICNlbmRpZgogfTsKQEAgLTMyNCw0MSArMzE5LDQ0IEBAIHByaXZhdGU6CiBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFt
ZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdl
bnRGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZElt
cGwoaW5zcGVjdG9yQWdlbnQsIGZyYW1lLCB3b3JsZCk7CisgICAgaWYgKEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUo
ZnJhbWUpKQorICAgICAgICBkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGRJbXBsKGluc3RydW1l
bnRpbmdBZ2VudHMsIGZyYW1lLCB3b3JsZCk7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKFBhZ2UqIHBhZ2Up
CiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JQYWdlKHBhZ2UpKQotICAgICAgICBpbnNwZWN0
ZWRQYWdlRGVzdHJveWVkSW1wbChpbnNwZWN0b3JBZ2VudCk7CisgICAgaWYgKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFn
ZShwYWdlKSkKKyAgICAgICAgaW5zcGVjdGVkUGFnZURlc3Ryb3llZEltcGwoaW5zdHJ1bWVudGlu
Z0FnZW50cyk7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZShEb2N1bWVudCogZG9jdW1lbnQsIE5vZGUqIG5vZGUsIE5v
ZGUqIHBhcmVudCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JB
Z2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckRvY3Vt
ZW50KGRvY3VtZW50KSkKLSAgICAgICAgd2lsbEluc2VydERPTU5vZGVJbXBsKGluc3BlY3RvckFn
ZW50LCBub2RlLCBwYXJlbnQpOworICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUygpOwor
ICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICAgICAgd2lsbEluc2VydERP
TU5vZGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIG5vZGUsIHBhcmVudCk7CiAjZW5kaWYKIH0K
IAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnNlcnRET01Ob2Rl
KERvY3VtZW50KiBkb2N1bWVudCwgTm9kZSogbm9kZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2Vu
dFdpdGhGcm9udGVuZEZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgZGlkSW5zZXJ0RE9N
Tm9kZUltcGwoaW5zcGVjdG9yQWdlbnQsIG5vZGUpOworICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZS
T05URU5EUygpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICAgICAg
ZGlkSW5zZXJ0RE9NTm9kZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgbm9kZSk7CiAjZW5kaWYK
IH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9N
Tm9kZShEb2N1bWVudCogZG9jdW1lbnQsIE5vZGUqIG5vZGUpCiB7CiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9y
QWdlbnRXaXRoRnJvbnRlbmRGb3JEb2N1bWVudChkb2N1bWVudCkpIHsKLSAgICAgICAgd2lsbFJl
bW92ZURPTU5vZGVJbXBsKGluc3BlY3RvckFnZW50LCBub2RlKTsKLSAgICAgICAgZGlkUmVtb3Zl
RE9NTm9kZUltcGwoaW5zcGVjdG9yQWdlbnQsIG5vZGUpOworICAgIEZBU1RfUkVUVVJOX0lGX05P
X0ZST05URU5EUygpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkgeworICAg
ICAgICB3aWxsUmVtb3ZlRE9NTm9kZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgbm9kZSk7Cisg
ICAgICAgIGRpZFJlbW92ZURPTU5vZGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIG5vZGUpOwog
ICAgIH0KICNlbmRpZgogfQpAQCAtMzY2LDQwICszNjQsNDUgQEAgaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9NTm9kZShEb2N1bWVudCogZG9jdW1lbnQs
IE5vZGUKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1vZGlmeURP
TUF0dHIoRG9jdW1lbnQqIGRvY3VtZW50LCBFbGVtZW50KiBlbGVtZW50KQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGlu
c3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICB3
aWxsTW9kaWZ5RE9NQXR0ckltcGwoaW5zcGVjdG9yQWdlbnQsIGVsZW1lbnQpOworICAgIEZBU1Rf
UkVUVVJOX0lGX05PX0ZST05URU5EUygpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3Vt
ZW50KSkKKyAgICAgICAgd2lsbE1vZGlmeURPTUF0dHJJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMs
IGVsZW1lbnQpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkTW9kaWZ5RE9NQXR0cihEb2N1bWVudCogZG9jdW1lbnQsIEVsZW1lbnQqIGVsZW1l
bnQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGlu
c3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JEb2N1bWVudChkb2N1
bWVudCkpCi0gICAgICAgIGRpZE1vZGlmeURPTUF0dHJJbXBsKGluc3BlY3RvckFnZW50LCBlbGVt
ZW50KTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoKTsKKyAgICBpZiAoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgICAgIGRpZE1vZGlmeURPTUF0dHJJbXBsKGluc3Ry
dW1lbnRpbmdBZ2VudHMsIGVsZW1lbnQpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihEb2N1bWVudCogZG9j
dW1lbnQsIE5vZGUqIG5vZGUpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5z
cGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRG
b3JEb2N1bWVudChkb2N1bWVudCkpCi0gICAgICAgIGRpZEludmFsaWRhdGVTdHlsZUF0dHJJbXBs
KGluc3BlY3RvckFnZW50LCBub2RlKTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMo
KTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGlu
c3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgICAgIGRpZEludmFs
aWRhdGVTdHlsZUF0dHJJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIG5vZGUpOwogI2VuZGlmCiB9
CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VEaWRNb3ZlT3Zl
ckVsZW1lbnQoUGFnZSogcGFnZSwgY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25l
ZCBtb2RpZmllckZsYWdzKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3Bl
Y3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9y
UGFnZShwYWdlKSkKLSAgICAgICAgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRJbXBsKGluc3BlY3Rv
ckFnZW50LCByZXN1bHQsIG1vZGlmaWVyRmxhZ3MpOworICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZS
T05URU5EUygpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCisgICAgICAgIG1vdXNlRGlk
TW92ZU92ZXJFbGVtZW50SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCByZXN1bHQsIG1vZGlmaWVy
RmxhZ3MpOwogI2VuZGlmCiB9CiAKIGlubGluZSBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6aGFuZGxlTW91c2VQcmVzcyhQYWdlKiBwYWdlKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
Ci0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50
V2l0aEZyb250ZW5kRm9yUGFnZShwYWdlKSkKLSAgICAgICAgcmV0dXJuIGhhbmRsZU1vdXNlUHJl
c3NJbXBsKGluc3BlY3RvckFnZW50KTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMo
ZmFsc2UpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCisgICAgICAgIHJldHVybiBoYW5k
bGVNb3VzZVByZXNzSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzKTsKICNlbmRpZgogICAgIHJldHVy
biBmYWxzZTsKIH0KQEAgLTQwNyw0MCArNDEwLDQ1IEBAIGlubGluZSBib29sIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aGFuZGxlTW91c2VQcmVzcyhQYWdlKiBwYWdlKQogaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoRG9jdW1lbnQq
IGRvY3VtZW50LCBDaGFyYWN0ZXJEYXRhKiBjaGFyYWN0ZXJEYXRhKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3Bl
Y3RvckFnZW50V2l0aEZyb250ZW5kRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICBjaGFy
YWN0ZXJEYXRhTW9kaWZpZWRJbXBsKGluc3BlY3RvckFnZW50LCBjaGFyYWN0ZXJEYXRhKTsKKyAg
ICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVu
dChkb2N1bWVudCkpCisgICAgICAgIGNoYXJhY3RlckRhdGFNb2RpZmllZEltcGwoaW5zdHJ1bWVu
dGluZ0FnZW50cywgY2hhcmFjdGVyRGF0YSk7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3Bl
Y3RvckFnZW50V2l0aEZyb250ZW5kRm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAgICAgd2lsbFNl
bmRYTUxIdHRwUmVxdWVzdEltcGwoaW5zcGVjdG9yQWdlbnQsIHVybCk7CisgICAgRkFTVF9SRVRV
Uk5fSUZfTk9fRlJPTlRFTkRTKCk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkK
KyAgICAgICAgd2lsbFNlbmRYTUxIdHRwUmVxdWVzdEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywg
dXJsKTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3Ry
aW5nJiB1cmwpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdl
bnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JEb2N1bWVu
dChkb2N1bWVudCkpCi0gICAgICAgIGRpZFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0SW1wbChpbnNw
ZWN0b3JBZ2VudCwgdXJsKTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoKTsKKyAg
ICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgICAgIGRpZFNjaGVkdWxlUmVz
b3VyY2VSZXF1ZXN0SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCB1cmwpOwogI2VuZGlmCiB9CiAK
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW5zdGFsbFRpbWVyKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGludCB0aW1lcklkLCBpbnQgdGltZW91dCwg
Ym9vbCBzaW5nbGVTaG90KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3Bl
Y3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9y
Q29udGV4dChjb250ZXh0KSkKLSAgICAgICAgZGlkSW5zdGFsbFRpbWVySW1wbChpbnNwZWN0b3JB
Z2VudCwgdGltZXJJZCwgdGltZW91dCwgc2luZ2xlU2hvdCk7CisgICAgRkFTVF9SRVRVUk5fSUZf
Tk9fRlJPTlRFTkRTKCk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICAg
ICAgZGlkSW5zdGFsbFRpbWVySW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lcklkLCB0aW1l
b3V0LCBzaW5nbGVTaG90KTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFJlbW92ZVRpbWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIGludCB0aW1lcklkKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3Bl
Y3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9y
Q29udGV4dChjb250ZXh0KSkKLSAgICAgICAgZGlkUmVtb3ZlVGltZXJJbXBsKGluc3BlY3RvckFn
ZW50LCB0aW1lcklkKTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoKTsKKyAgICBp
ZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRp
bmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQorICAgICAgICBkaWRSZW1vdmVUaW1lckltcGwo
aW5zdHJ1bWVudGluZ0FnZW50cywgdGltZXJJZCk7CiAjZW5kaWYKIH0KIApAQCAtNDQ4LDggKzQ1
Niw5IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVtb3ZlVGlt
ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29uCiBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbENhbGxGdW5jdGlvbihG
cmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUpCiB7
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JGcmFtZShmcmFtZSkpCi0gICAg
ICAgIHJldHVybiB3aWxsQ2FsbEZ1bmN0aW9uSW1wbChpbnNwZWN0b3JBZ2VudCwgc2NyaXB0TmFt
ZSwgc2NyaXB0TGluZSk7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSgpKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkp
CisgICAgICAgIHJldHVybiB3aWxsQ2FsbEZ1bmN0aW9uSW1wbChpbnN0cnVtZW50aW5nQWdlbnRz
LCBzY3JpcHROYW1lLCBzY3JpcHRMaW5lKTsKICNlbmRpZgogICAgIHJldHVybiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUoKTsKIH0KQEAgLTQ2NSw4ICs0NzQsOSBAQCBpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihjb25zdCBJbnNwZWN0
b3JJbnN0cnVtZW50YQogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxDaGFuZ2VYSFJSZWFkeVN0YXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFhNTEh0dHBSZXF1ZXN0KiByZXF1ZXN0KQogewogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9
IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAgICAg
cmV0dXJuIHdpbGxDaGFuZ2VYSFJSZWFkeVN0YXRlSW1wbChpbnNwZWN0b3JBZ2VudCwgcmVxdWVz
dCk7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSgpKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQorICAgICAg
ICByZXR1cm4gd2lsbENoYW5nZVhIUlJlYWR5U3RhdGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMs
IHJlcXVlc3QpOwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSgpOwogfQpAQCAtNDgyLDggKzQ5Miw5IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkQ2hhbmdlWEhSUmVhZHlTdGF0ZShjb25zdCBJbnNwZWN0b3JJbnN0CiBp
bmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbERpc3BhdGNoRXZlbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBFdmVudCYg
ZXZlbnQsIERPTVdpbmRvdyogd2luZG93LCBOb2RlKiBub2RlLCBjb25zdCBWZWN0b3I8RXZlbnRD
b250ZXh0PiYgYW5jZXN0b3JzKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKElu
c3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5k
Rm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICByZXR1cm4gd2lsbERpc3BhdGNoRXZlbnRJ
bXBsKGluc3BlY3RvckFnZW50LCBldmVudCwgd2luZG93LCBub2RlLCBhbmNlc3RvcnMpOworICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyhJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQorICAgICAgICByZXR1
cm4gd2lsbERpc3BhdGNoRXZlbnRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIGV2ZW50LCB3aW5k
b3csIG5vZGUsIGFuY2VzdG9ycyk7CiAjZW5kaWYKICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llKCk7CiB9CkBAIC00OTksOCArNTEwLDkgQEAgaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2ZW50KGNvbnN0IEluc3BlY3Rvcklu
c3RydW1lbnQKIGlubGluZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93KEZyYW1lKiBmcmFtZSwg
Y29uc3QgRXZlbnQmIGV2ZW50LCBET01XaW5kb3cqIHdpbmRvdykKIHsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0
b3JBZ2VudFdpdGhGcm9udGVuZEZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAgcmV0dXJuIHdpbGxE
aXNwYXRjaEV2ZW50T25XaW5kb3dJbXBsKGluc3BlY3RvckFnZW50LCBldmVudCwgd2luZG93KTsK
KyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llKCkpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJu
IHdpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3dJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIGV2ZW50
LCB3aW5kb3cpOwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSgpOwogfQpAQCAtNTE2LDggKzUyOCw5IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudE9uV2luZG93KGNvbnN0IEluc3BlY3RvckluCiBp
bmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbEV2YWx1YXRlU2NyaXB0KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiB1cmws
IGludCBsaW5lTnVtYmVyKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3Bl
Y3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9y
RnJhbWUoZnJhbWUpKQotICAgICAgICByZXR1cm4gd2lsbEV2YWx1YXRlU2NyaXB0SW1wbChpbnNw
ZWN0b3JBZ2VudCwgdXJsLCBsaW5lTnVtYmVyKTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9O
VEVORFMoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCkpOworICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
ckZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuIHdpbGxFdmFsdWF0ZVNjcmlwdEltcGwoaW5z
dHJ1bWVudGluZ0FnZW50cywgdXJsLCBsaW5lTnVtYmVyKTsKICNlbmRpZgogICAgIHJldHVybiBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKIH0KQEAgLTUzMyw4ICs1NDYsOSBAQCBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEV2YWx1YXRlU2NyaXB0KGNv
bnN0IEluc3BlY3Rvckluc3RydW1lbgogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxGaXJlVGltZXIoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgaW50IHRpbWVySWQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdl
bnRXaXRoRnJvbnRlbmRGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICByZXR1cm4gd2lsbEZp
cmVUaW1lckltcGwoaW5zcGVjdG9yQWdlbnQsIHRpbWVySWQpOworICAgIEZBU1RfUkVUVVJOX0lG
X05PX0ZST05URU5EUyhJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKSk7CisgICAgaWYg
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIHdpbGxGaXJlVGltZXJJ
bXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHRpbWVySWQpOwogI2VuZGlmCiAgICAgcmV0dXJuIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpOwogfQpAQCAtNTUwLDggKzU2NCw5IEBAIGlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmlyZVRpbWVyKGNvbnN0IElu
c3BlY3Rvckluc3RydW1lbnRhdGlvCiBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExheW91dChGcmFtZSogZnJhbWUpCiB7
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JGcmFtZShmcmFtZSkpCi0gICAg
ICAgIHJldHVybiB3aWxsTGF5b3V0SW1wbChpbnNwZWN0b3JBZ2VudCk7CisgICAgRkFTVF9SRVRV
Uk5fSUZfTk9fRlJPTlRFTkRTKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpKTsKKyAg
ICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVybiB3aWxsTGF5b3V0SW1w
bChpbnN0cnVtZW50aW5nQWdlbnRzKTsKICNlbmRpZgogICAgIHJldHVybiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUoKTsKIH0KQEAgLTU2Nyw4ICs1ODIsOSBAQCBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZExheW91dChjb25zdCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25DbwogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxMb2FkWEhSKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFhNTEh0dHBSZXF1ZXN0KiByZXF1ZXN0KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
Ci0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50
V2l0aEZyb250ZW5kRm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIHdpbGxMb2Fk
WEhSSW1wbChpbnNwZWN0b3JBZ2VudCwgcmVxdWVzdCk7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9f
RlJPTlRFTkRTKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpKTsKKyAgICBpZiAoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JDb250ZXh0KGNvbnRleHQpKQorICAgICAgICByZXR1cm4gd2lsbExvYWRYSFJJbXBsKGlu
c3RydW1lbnRpbmdBZ2VudHMsIHJlcXVlc3QpOwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSgpOwogfQpAQCAtNTg0LDggKzYwMCw5IEBAIGlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFhIUihjb25zdCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25DCiBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFBhaW50KEZyYW1lKiBmcmFtZSwgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JB
Z2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckZyYW1l
KGZyYW1lKSkKLSAgICAgICAgcmV0dXJuIHdpbGxQYWludEltcGwoaW5zcGVjdG9yQWdlbnQsIHJl
Y3QpOworICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyhJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQorICAgICAgICBy
ZXR1cm4gd2lsbFBhaW50SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCByZWN0KTsKICNlbmRpZgog
ICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKIH0KQEAgLTYwMSw4
ICs2MTgsOSBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFBhaW50
KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvbwogaW5saW5lIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNhbGN1bGF0
ZVN0eWxlKERvY3VtZW50KiBkb2N1bWVudCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAg
IGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhG
cm9udGVuZEZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgcmV0dXJuIHdpbGxSZWNhbGN1
bGF0ZVN0eWxlSW1wbChpbnNwZWN0b3JBZ2VudCk7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJP
TlRFTkRTKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpKTsKKyAgICBpZiAoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgICAgIHJldHVybiB3aWxsUmVjYWxjdWxhdGVTdHls
ZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50cyk7CiAjZW5kaWYKICAgICByZXR1cm4gSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llKCk7CiB9CkBAIC02MTgsNDYgKzYzNiw1MCBAQCBpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2FsY3VsYXRlU3R5bGUoY29uc3Qg
SW5zcGVjdG9ySW5zdHJ1bQogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjph
cHBseVVzZXJBZ2VudE92ZXJyaWRlKEZyYW1lKiBmcmFtZSwgU3RyaW5nKiB1c2VyQWdlbnQpCiB7
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JGcmFtZShmcmFtZSkpCi0gICAg
ICAgIGFwcGx5VXNlckFnZW50T3ZlcnJpZGVJbXBsKGluc3BlY3RvckFnZW50LCB1c2VyQWdlbnQp
OworICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUygpOworICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZy
YW1lKGZyYW1lKSkKKyAgICAgICAgYXBwbHlVc2VyQWdlbnRPdmVycmlkZUltcGwoaW5zdHJ1bWVu
dGluZ0FnZW50cywgdXNlckFnZW50KTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kUmVxdWVzdChGcmFtZSogZnJhbWUsIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpYyA9IGluc3Bl
Y3RvckFnZW50Rm9yRnJhbWUoZnJhbWUpKQotICAgICAgICB3aWxsU2VuZFJlcXVlc3RJbXBsKGlj
LCBpZGVudGlmaWVyLCBsb2FkZXIsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworICAgIGlm
IChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGlu
Z0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICAgICAgd2lsbFNlbmRSZXF1ZXN0SW1wbChpbnN0
cnVtZW50aW5nQWdlbnRzLCBpZGVudGlmaWVyLCBsb2FkZXIsIHJlcXVlc3QsIHJlZGlyZWN0UmVz
cG9uc2UpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6Y29udGludWVBZnRlclBpbmdMb2FkZXIoRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGljID0gaW5zcGVjdG9yQWdlbnRGb3JGcmFt
ZShmcmFtZSkpCi0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29udGludWVBZnRl
clBpbmdMb2FkZXJJbXBsKGljLCBpZGVudGlmaWVyLCBsb2FkZXIsIHJlcXVlc3QsIHJlc3BvbnNl
KTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGlu
c3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Y29udGludWVBZnRlclBpbmdMb2FkZXJJbXBsKGluc3RydW1lbnRpbmdBZ2Vu
dHMsIGlkZW50aWZpZXIsIGxvYWRlciwgcmVxdWVzdCwgcmVzcG9uc2UpOwogI2VuZGlmCiB9CiAK
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bWFya1Jlc291cmNlQXNDYWNo
ZWQoUGFnZSogcGFnZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgbWFya1Jlc291cmNlQXNDYWNoZWRJbXBsKGluc3BlY3RvckFnZW50Rm9y
UGFnZShwYWdlKSwgaWRlbnRpZmllcik7IAorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCisg
ICAgICAgIG1hcmtSZXNvdXJjZUFzQ2FjaGVkSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVu
dGlmaWVyKTsgCiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoUGFnZSogcGFnZSwgRG9jdW1lbnRM
b2FkZXIqIGxvYWRlciwgY29uc3QgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQogewogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCi0gICAgZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlSW1wbChp
bnNwZWN0b3JBZ2VudEZvclBhZ2UocGFnZSksIGxvYWRlciwgcmVzb3VyY2UpOworICAgIGlmIChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvclBhZ2UocGFnZSkpCisgICAgICAgIGRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNo
ZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgbG9hZGVyLCByZXNvdXJjZSk7CiAjZW5kaWYKIH0K
IAogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxSZWNlaXZlUmVzb3VyY2VEYXRhKEZyYW1lKiBmcmFtZSwgdW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3Bl
Y3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9y
RnJhbWUoZnJhbWUpKQotICAgICAgICByZXR1cm4gd2lsbFJlY2VpdmVSZXNvdXJjZURhdGFJbXBs
KGluc3BlY3RvckFnZW50LCBpZGVudGlmaWVyKTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9O
VEVORFMoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCkpOworICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
ckZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuIHdpbGxSZWNlaXZlUmVzb3VyY2VEYXRhSW1w
bChpbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVudGlmaWVyKTsKICNlbmRpZgogICAgIHJldHVybiBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKIH0KQEAgLTY3Myw4ICs2OTUsOCBAQCBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVSZXNvdXJjZURh
dGEoY29uc3QgSW5zcGVjdG9ySW5zdAogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNlaXZlUmVzb3VyY2VSZXNwb25z
ZShGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5z
cGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JGcmFtZShmcmFt
ZSkpCi0gICAgICAgIHJldHVybiB3aWxsUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBsKGluc3Bl
Y3RvckFnZW50LCBpZGVudGlmaWVyLCByZXNwb25zZSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUo
ZnJhbWUpKQorICAgICAgICByZXR1cm4gd2lsbFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlSW1wbChp
bnN0cnVtZW50aW5nQWdlbnRzLCBpZGVudGlmaWVyLCByZXNwb25zZSk7CiAjZW5kaWYKICAgICBy
ZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCk7CiB9CkBAIC02OTAsNyArNzEy
LDcgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlUmVz
b3VyY2VSZXNwb25zZShjb25zdCBJbnNwZWN0b3IKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Y29udGludWVBZnRlclhGcmFtZU9wdGlvbnNEZW5pZWQoRnJhbWUqIGZyYW1l
LCBEb2N1bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHIpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAo
aW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JGcmFtZShmcmFtZSkpCisgICAgaWYgKGhhc0Zy
b250ZW5kcygpKQogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0
ZXJYRnJhbWVPcHRpb25zRGVuaWVkSW1wbChmcmFtZSwgbG9hZGVyLCBpZGVudGlmaWVyLCByKTsK
ICNlbmRpZgogfQpAQCAtNjk4LDcgKzcyMCw3IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Y29udGludWVBZnRlclhGcmFtZU9wdGlvbnNEZW5pZWQoRnJhbWUqIGZyCiBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlV2l0aFBvbGljeURv
d25sb2FkKEZyYW1lKiBmcmFtZSwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgaWYgKGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRnJhbWUoZnJh
bWUpKQorICAgIGlmIChoYXNGcm9udGVuZHMoKSkKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpjb250aW51ZVdpdGhQb2xpY3lEb3dubG9hZEltcGwoZnJhbWUsIGxvYWRlciwgaWRl
bnRpZmllciwgcik7CiAjZW5kaWYKIH0KQEAgLTcwNiw3ICs3MjgsNyBAQCBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlV2l0aFBvbGljeURvd25sb2FkKEZyYW1l
KiBmcmFtZSwgRAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250aW51
ZVdpdGhQb2xpY3lJZ25vcmUoRnJhbWUqIGZyYW1lLCBEb2N1bWVudExvYWRlciogbG9hZGVyLCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHIpCiB7CiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRG
b3JGcmFtZShmcmFtZSkpCisgICAgaWYgKGhhc0Zyb250ZW5kcygpKQogICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlV2l0aFBvbGljeUlnbm9yZUltcGwoZnJhbWUsIGxv
YWRlciwgaWRlbnRpZmllciwgcik7CiAjZW5kaWYKIH0KQEAgLTcxNCw2NCArNzM2LDY0IEBAIGlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29udGludWVXaXRoUG9saWN5SWdu
b3JlKEZyYW1lKiBmcmFtZSwgRG9jCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZFJlY2VpdmVDb250ZW50TGVuZ3RoKEZyYW1lKiBmcmFtZSwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBpbnQgZGF0YUxlbmd0aCwgaW50IGVuY29kZWREYXRhTGVuZ3RoKQogewogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2Vu
dCA9IGluc3BlY3RvckFnZW50Rm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBkaWRSZWNlaXZlQ29u
dGVudExlbmd0aEltcGwoaW5zcGVjdG9yQWdlbnQsIGlkZW50aWZpZXIsIGRhdGFMZW5ndGgsIGVu
Y29kZWREYXRhTGVuZ3RoKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgICAg
IGRpZFJlY2VpdmVDb250ZW50TGVuZ3RoSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVudGlm
aWVyLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAjZW5kaWYKIH0KIAogaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaW5pc2hMb2FkaW5nKEZyYW1lKiBm
cmFtZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSkKIHsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdl
bnQgPSBpbnNwZWN0b3JBZ2VudEZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAgZGlkRmluaXNoTG9h
ZGluZ0ltcGwoaW5zcGVjdG9yQWdlbnQsIGlkZW50aWZpZXIsIGZpbmlzaFRpbWUpOworICAgIGlm
IChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGlu
Z0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICAgICAgZGlkRmluaXNoTG9hZGluZ0ltcGwoaW5z
dHJ1bWVudGluZ0FnZW50cywgaWRlbnRpZmllciwgZmluaXNoVGltZSk7CiAjZW5kaWYKIH0KIAog
aW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsTG9hZGluZyhGcmFt
ZSogZnJhbWUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYg
ZXJyb3IpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQq
IGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JGcmFtZShmcmFtZSkpCi0gICAgICAg
IGRpZEZhaWxMb2FkaW5nSW1wbChpbnNwZWN0b3JBZ2VudCwgaWRlbnRpZmllciwgZXJyb3IpOwor
ICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICAgICAgZGlkRmFpbExvYWRpbmdJbXBs
KGluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIsIGVycm9yKTsKICNlbmRpZgogfQogCiBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJlc291cmNlUmV0cmlldmVkQnlY
TUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBzZW5kVVJMLCB1bnNpZ25lZCBzZW5kTGluZU51bWJlcikKIHsK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9y
QWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZvckNvbnRleHQoY29udGV4dCkpCi0gICAgICAgIHJlc291
cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdEltcGwoaW5zcGVjdG9yQWdlbnQsIGlkZW50aWZp
ZXIsIHNvdXJjZVN0cmluZywgdXJsLCBzZW5kVVJMLCBzZW5kTGluZU51bWJlcik7CisgICAgaWYg
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICAgICAgcmVzb3VyY2VSZXRyaWV2ZWRCeVhN
TEh0dHBSZXF1ZXN0SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVudGlmaWVyLCBzb3VyY2VT
dHJpbmcsIHVybCwgc2VuZFVSTCwgc2VuZExpbmVOdW1iZXIpOwogI2VuZGlmCiB9CiAKIGlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0SW1wb3J0ZWQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVN0cmluZykKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJ
bnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZvckNvbnRleHQo
Y29udGV4dCkpCi0gICAgICAgIHNjcmlwdEltcG9ydGVkSW1wbChpbnNwZWN0b3JBZ2VudCwgaWRl
bnRpZmllciwgc291cmNlU3RyaW5nKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQp
KQorICAgICAgICBzY3JpcHRJbXBvcnRlZEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRp
Zmllciwgc291cmNlU3RyaW5nKTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRvbUNvbnRlbnRMb2FkZWRFdmVudEZpcmVkKEZyYW1lKiBmcmFtZSwg
Y29uc3QgS1VSTCYgdXJsKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3Bl
Y3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9yRnJhbWUoZnJhbWUp
KQotICAgICAgICBkb21Db250ZW50TG9hZGVkRXZlbnRGaXJlZEltcGwoaW5zcGVjdG9yQWdlbnQs
IGZyYW1lLCB1cmwpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICAgICAgZG9t
Q29udGVudExvYWRlZEV2ZW50RmlyZWRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIGZyYW1lLCB1
cmwpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
bG9hZEV2ZW50RmlyZWQoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0g
aW5zcGVjdG9yQWdlbnRGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGxvYWRFdmVudEZpcmVkSW1w
bChpbnNwZWN0b3JBZ2VudCwgZnJhbWUsIHVybCk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJh
bWUpKQorICAgICAgICBsb2FkRXZlbnRGaXJlZEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgZnJh
bWUsIHVybCk7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpmcmFtZURldGFjaGVkRnJvbVBhcmVudChGcmFtZSogZnJhbWUpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5z
cGVjdG9yQWdlbnRGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGZyYW1lRGV0YWNoZWRGcm9tUGFy
ZW50SW1wbChpbnNwZWN0b3JBZ2VudCwgZnJhbWUpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZy
YW1lKSkKKyAgICAgICAgZnJhbWVEZXRhY2hlZEZyb21QYXJlbnRJbXBsKGluc3RydW1lbnRpbmdB
Z2VudHMsIGZyYW1lKTsKICNlbmRpZgogfQogCkBAIC03ODMsMTYgKzgwNSwxNyBAQCBpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENvbW1pdExvYWQoRnJhbWUqIGZyYW1l
LCBEb2N1bWVudExvYWRlcgogICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwogICAgIGlm
ICghcGFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVj
dG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZvclBhZ2UocGFnZSkpCi0gICAgICAgIGRpZENvbW1p
dExvYWRJbXBsKHBhZ2UsIGluc3BlY3RvckFnZW50LCBsb2FkZXIpOworICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
clBhZ2UocGFnZSkpCisgICAgICAgIGRpZENvbW1pdExvYWRJbXBsKGluc3RydW1lbnRpbmdBZ2Vu
dHMsIHBhZ2UsIGxvYWRlcik7CiAjZW5kaWYKIH0KIAogaW5saW5lIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxXcml0ZUhUTUwoRG9j
dW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgc3RhcnRM
aW5lKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBp
bnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRG9jdW1lbnQoZG9j
dW1lbnQpKQotICAgICAgICByZXR1cm4gd2lsbFdyaXRlSFRNTEltcGwoaW5zcGVjdG9yQWdlbnQs
IGxlbmd0aCwgc3RhcnRMaW5lKTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCkpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50
KGRvY3VtZW50KSkKKyAgICAgICAgcmV0dXJuIHdpbGxXcml0ZUhUTUxJbXBsKGluc3RydW1lbnRp
bmdBZ2VudHMsIGxlbmd0aCwgc3RhcnRMaW5lKTsKICNlbmRpZgogICAgIHJldHVybiBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKIH0KQEAgLTgwOSw4ICs4MzIsOCBAQCBpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFdyaXRlSFRNTChjb25zdCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpbwogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRVc2VET01TdG9yYWdlKFBhZ2UqIHBhZ2UsIFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9v
bCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
Ci0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50
Rm9yUGFnZShwYWdlKSkKLSAgICAgICAgZGlkVXNlRE9NU3RvcmFnZUltcGwoaW5zcGVjdG9yQWdl
bnQsIHN0b3JhZ2VBcmVhLCBpc0xvY2FsU3RvcmFnZSwgZnJhbWUpOworICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
clBhZ2UocGFnZSkpCisgICAgICAgIGRpZFVzZURPTVN0b3JhZ2VJbXBsKGluc3RydW1lbnRpbmdB
Z2VudHMsIHN0b3JhZ2VBcmVhLCBpc0xvY2FsU3RvcmFnZSwgZnJhbWUpOwogI2VuZGlmCiB9CiAj
ZW5kaWYKQEAgLTgxOCwxMSArODQxLDcgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRVc2VET01TdG9yYWdlKFBhZ2UqIHBhZ2UsIFN0b3JhZ2VBcmVhKgogI2lmIEVO
QUJMRShXT1JLRVJTKQogaW5saW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
U3RhcnRXb3JrZXJDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdvcmtl
ckNvbnRleHRQcm94eSopCiB7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICByZXR1cm4gaW5z
cGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JDb250ZXh0KGNvbnRleHQpOwotI2Vsc2UKICAgICBy
ZXR1cm4gZmFsc2U7Ci0jZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRTdGFydFdvcmtlckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgV29ya2VyQ29udGV4dFByb3h5KiBwcm94eSwgYm9vbCBwYXVzZWQpCkBAIC04MzAsMjQg
Kzg0OSwyNyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFN0YXJ0
V29ya2VyQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZQogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CiAgICAgaWYgKCFwYXVzZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoSW5zcGVjdG9yQWdl
bnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JDb250ZXh0
KGNvbnRleHQpKQotICAgICAgICBkaWRTdGFydFdvcmtlckNvbnRleHRJbXBsKGluc3BlY3RvckFn
ZW50LCBwcm94eSk7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKCk7CisgICAgaWYg
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICAgICAgZGlkU3RhcnRXb3JrZXJDb250ZXh0
SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBwcm94eSk7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVXb3JrZXIoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgaW50cHRyX3QgaWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29s
IGlzU2hhcmVkV29ya2VyKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3Bl
Y3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9y
Q29udGV4dChjb250ZXh0KSkKLSAgICAgICAgZGlkQ3JlYXRlV29ya2VySW1wbChpbnNwZWN0b3JB
Z2VudCwgaWQsIHVybCwgaXNTaGFyZWRXb3JrZXIpOworICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZS
T05URU5EUygpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCisgICAgICAgIGRp
ZENyZWF0ZVdvcmtlckltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgaWQsIHVybCwgaXNTaGFyZWRX
b3JrZXIpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkRGVzdHJveVdvcmtlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnRw
dHJfdCBpZCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2Vu
dCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckNvbnRleHQo
Y29udGV4dCkpCi0gICAgICAgIGRpZERlc3Ryb3lXb3JrZXJJbXBsKGluc3BlY3RvckFnZW50LCBp
ZCk7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKCk7CisgICAgaWYgKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
Q29udGV4dChjb250ZXh0KSkKKyAgICAgICAgZGlkRGVzdHJveVdvcmtlckltcGwoaW5zdHJ1bWVu
dGluZ0FnZW50cywgaWQpOwogI2VuZGlmCiB9CiAjZW5kaWYKQEAgLTg1NywzMiArODc5LDMyIEBA
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGVzdHJveVdvcmtlcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZENyZWF0ZVdlYlNvY2tldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwsIGNvbnN0
IEtVUkwmIGRvY3VtZW50VVJMKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKElu
c3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9yQ29udGV4dChj
b250ZXh0KSkKLSAgICAgICAgZGlkQ3JlYXRlV2ViU29ja2V0SW1wbChpbnNwZWN0b3JBZ2VudCwg
aWRlbnRpZmllciwgcmVxdWVzdFVSTCwgZG9jdW1lbnRVUkwpOworICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNv
bnRleHQoY29udGV4dCkpCisgICAgICAgIGRpZENyZWF0ZVdlYlNvY2tldEltcGwoaW5zdHJ1bWVu
dGluZ0FnZW50cywgaWRlbnRpZmllciwgcmVxdWVzdFVSTCwgZG9jdW1lbnRVUkwpOwogI2VuZGlm
CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRXZWJT
b2NrZXRIYW5kc2hha2VSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCYg
cmVxdWVzdCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2Vu
dCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZvckNvbnRleHQoY29udGV4dCkpCi0g
ICAgICAgIHdpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdEltcGwoaW5zcGVjdG9yQWdl
bnQsIGlkZW50aWZpZXIsIHJlcXVlc3QpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4
dCkpCisgICAgICAgIHdpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdEltcGwoaW5zdHJ1
bWVudGluZ0FnZW50cywgaWRlbnRpZmllciwgcmVxdWVzdCk7CiAjZW5kaWYKIH0KIAogaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNo
YWtlUmVzcG9uc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSYgcmVzcG9uc2Up
CiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICBk
aWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2VJbXBsKGluc3BlY3RvckFnZW50LCBp
ZGVudGlmaWVyLCByZXNwb25zZSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkK
KyAgICAgICAgZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlSW1wbChpbnN0cnVt
ZW50aW5nQWdlbnRzLCBpZGVudGlmaWVyLCByZXNwb25zZSk7CiAjZW5kaWYKIH0KIAogaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDbG9zZVdlYlNvY2tldChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7CiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFn
ZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICBkaWRDbG9z
ZVdlYlNvY2tldEltcGwoaW5zcGVjdG9yQWdlbnQsIGlkZW50aWZpZXIpOworICAgIGlmIChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50
c0ZvckNvbnRleHQoY29udGV4dCkpCisgICAgICAgIGRpZENsb3NlV2ViU29ja2V0SW1wbChpbnN0
cnVtZW50aW5nQWdlbnRzLCBpZGVudGlmaWVyKTsKICNlbmRpZgogfQogI2VuZGlmCkBAIC04OTAs
OCArOTEyLDkgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDbG9z
ZVdlYlNvY2tldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KgogaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2VkKFBhZ2UqIHBhZ2UpCiB7CiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAg
ICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRo
RnJvbnRlbmRGb3JQYWdlKHBhZ2UpKQotICAgICAgICBuZXR3b3JrU3RhdGVDaGFuZ2VkSW1wbChp
bnNwZWN0b3JBZ2VudCk7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKCk7CisgICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgbmV0d29ya1N0YXRlQ2hhbmdlZEltcGwo
aW5zdHJ1bWVudGluZ0FnZW50cyk7CiAjZW5kaWYKIH0KIApAQCAtODk5LDc0ICs5MjIsNDkgQEAg
aW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2Vk
KFBhZ2UqIHBhZ2UpCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnVwZGF0
ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMoRnJhbWUqIGZyYW1lKQogewogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3Rv
ckFnZW50V2l0aEZyb250ZW5kRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICB1cGRhdGVBcHBsaWNh
dGlvbkNhY2hlU3RhdHVzSW1wbChpbnNwZWN0b3JBZ2VudCwgZnJhbWUpOworICAgIEZBU1RfUkVU
VVJOX0lGX05PX0ZST05URU5EUygpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAg
ICAgICAgdXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1c0ltcGwoaW5zdHJ1bWVudGluZ0FnZW50
cywgZnJhbWUpOwogI2VuZGlmCiB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi1p
bmxpbmUgYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5kKFBhZ2UqIHBh
Z2UpCitpbmxpbmUgYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbGxlY3RpbmdIVE1M
UGFyc2VFcnJvcnMoUGFnZSogcGFnZSkKIHsKLSAgICByZXR1cm4gaW5zcGVjdG9yQWdlbnRXaXRo
RnJvbnRlbmRGb3JQYWdlKHBhZ2UpOworICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyhm
YWxzZSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgcmV0dXJuIGNvbGxl
Y3RpbmdIVE1MUGFyc2VFcnJvcnMoaW5zdHJ1bWVudGluZ0FnZW50cyk7CisgICAgcmV0dXJuIGZh
bHNlOwogfQotI2VuZGlmCiAKLQotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi1pbmxpbmUgSW5zcGVj
dG9yQWdlbnQqIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zcGVjdG9yQWdlbnRGb3JDb250
ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCitpbmxpbmUgSW5zdHJ1bWVudGlu
Z0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9y
Q29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewogICAgIGlmIChjb250
ZXh0ICYmIGNvbnRleHQtPmlzRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGluc3BlY3RvckFn
ZW50Rm9yUGFnZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpLT5wYWdlKCkpOworICAg
ICAgICByZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2Uoc3RhdGljX2Nhc3Q8RG9jdW1l
bnQqPihjb250ZXh0KS0+cGFnZSgpKTsKICAgICByZXR1cm4gMDsKIH0KIAotaW5saW5lIEluc3Bl
Y3RvckFnZW50KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3BlY3RvckFnZW50Rm9yRnJh
bWUoRnJhbWUqIGZyYW1lKQotewotICAgIGlmIChmcmFtZSkKLSAgICAgICAgcmV0dXJuIGluc3Bl
Y3RvckFnZW50Rm9yUGFnZShmcmFtZS0+cGFnZSgpKTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW5s
aW5lIEluc3BlY3RvckFnZW50KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3BlY3RvckFn
ZW50Rm9yUGFnZShQYWdlKiBwYWdlKQoraW5saW5lIEluc3RydW1lbnRpbmdBZ2VudHMqIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UoUGFnZSogcGFn
ZSkKIHsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpbnNw
ZWN0b3JBZ2VudHMoKS5nZXQocGFnZSk7CisgICAgcmV0dXJuIGluc3RydW1lbnRpbmdBZ2VudHMo
KS5nZXQocGFnZSk7CiB9CiAKLWlubGluZSBJbnNwZWN0b3JBZ2VudCogSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjppbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckNvbnRleHQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCkKK2lubGluZSBJbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShGcmFtZSog
ZnJhbWUpCiB7Ci0gICAgaWYgKGhhc0Zyb250ZW5kcygpICYmIGNvbnRleHQgJiYgY29udGV4dC0+
aXNEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRG
b3JQYWdlKHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCktPnBhZ2UoKSk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLWlubGluZSBJbnNwZWN0b3JBZ2VudCogSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjppbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1
bWVudCkKLXsKLSAgICBpZiAoaGFzRnJvbnRlbmRzKCkgJiYgZG9jdW1lbnQpCi0gICAgICAgIHJl
dHVybiBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvclBhZ2UoZG9jdW1lbnQtPnBhZ2UoKSk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlubGluZSBJbnNwZWN0b3JBZ2VudCogSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjppbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckZyYW1lKEZyYW1lKiBm
cmFtZSkKLXsKLSAgICBpZiAoaGFzRnJvbnRlbmRzKCkgJiYgZnJhbWUpCi0gICAgICAgIHJldHVy
biBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvclBhZ2UoZnJhbWUtPnBhZ2UoKSk7CisgICAg
aWYgKGZyYW1lKQorICAgICAgICByZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UoZnJh
bWUtPnBhZ2UoKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWlubGluZSBJbnNwZWN0b3JBZ2VudCog
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvclBh
Z2UoUGFnZSogcGFnZSkKK2lubGluZSBJbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChEb2N1bWVudCogZG9j
dW1lbnQpCiB7Ci0gICAgaWYgKHBhZ2UpIHsKLSAgICAgICAgaWYgKEluc3BlY3RvckFnZW50KiBp
bnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9yUGFnZShwYWdlKSkgewotICAgICAgICAg
ICAgaWYgKGhhc0Zyb250ZW5kKGluc3BlY3RvckFnZW50KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gaW5zcGVjdG9yQWdlbnQ7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGRvY3VtZW50KQor
ICAgICAgICByZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UoZG9jdW1lbnQtPnBhZ2Uo
KSk7CiAgICAgcmV0dXJuIDA7CiB9Ci0KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Cg==
</data>
<flag name="review"
          id="86839"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="86840"
          type_id="3"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93637</attachid>
            <date>2011-05-16 06:25:51 -0700</date>
            <delta_ts>2011-05-16 06:25:51 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>instrumenting-agents.patch</filename>
            <type>text/plain</type>
            <size>134284</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyOTIzMzgwLi5jMjlhNTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTc2
IEBACisyMDExLTA1LTExICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IHVzZSBJbnN0cnVtZW50aW5nQWdlbnRzIHRvIGFjY2VzcyBhZ2VudHMgZnJvbSBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYwNjI0CisKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uIHJl
dHJpZXZlcyBpbnNwZWN0b3IgYWdlbnRzIGZyb20gY29ycmVzcG9uZGluZyBJbnN0cnVtZW50aW5n
QWdlbnRzCisgICAgICAgIGluc3RhbmNlLiBFYWNoIGFnZW50IG5vdGlmaWVzIEluc3RydW1lbnRp
bmdBZ2VudHMgd2hlbmV2ZXIgaXQgd2FudHMgdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zCisgICAg
ICAgIGFib3V0IGNoYW5nZXMgaW4gV2ViQ29yZS4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6SW5zcGVj
dG9yQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Omluc3BlY3RlZFBh
Z2VEZXN0cm95ZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNv
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xl
Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdGFy
dENvbnNvbGVUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpzdG9wQ29uc29sZVRpbWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmNvbnNvbGVNYXJrVGltZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRQcm9maWxl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cHJvZmlsZXJF
bmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Z2V0
Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JEYXRhYmFzZUluc3RydW1lbnRhdGlvbi5oOiBGQVNUX1JFVFVSTl9JRl9OT19GUk9O
VEVORFMgbWFjcm9zCisgICAgICAgIGlzIHVzZWQgZm9yIGVhcmx5IHJldHVybiBpbiBjb21tb24g
Y2FzZSB3aGVuIGluc3BlY3RvciBpcyBub3Qgb3BlbmVkLiBJbiB0aGlzCisgICAgICAgIGNhc2Ug
aW5zcGVjdG9yIGluc3RydW1lbnRhdGlvbiBjb3N0cyBvbmUgYWRkaXRpb25hbCBjaGVjayBvZiBh
IHN0YXRpYyBmaWVsZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6aW5zdHJ1bWVudGluZ0FnZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZEltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVk
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxJ
bnNlcnRET01Ob2RlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZEluc2VydERPTU5vZGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZURPTU5vZGVJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVtb3ZlRE9NTm9kZUltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTW9kaWZ5RE9NQXR0
ckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRN
b2RpZnlET01BdHRySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZEludmFsaWRhdGVTdHlsZUF0dHJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFuZGxlTW91c2VQcmVz
c0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjaGFy
YWN0ZXJEYXRhTW9kaWZpZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdEltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTY2hlZHVsZVJlc291cmNlUmVxdWVzdElt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnN0
YWxsVGltZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkUmVtb3ZlVGltZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbENhbGxGdW5jdGlvbkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsQ2hhbmdlWEhSUmVhZHlTdGF0ZUltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVu
dEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
RGlzcGF0Y2hFdmVudE9uV2luZG93SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVNjcmlwdEltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRmlyZVRpbWVySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMYXlvdXRJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFBhaW50
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxS
ZWNhbGN1bGF0ZVN0eWxlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmFwcGx5VXNlckFnZW50T3ZlcnJpZGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRSZXF1ZXN0SW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0ZXJQaW5nTG9h
ZGVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1h
cmtSZXNvdXJjZUFzQ2FjaGVkSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZUltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVjZWl2ZVJlc291cmNl
RGF0YUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZUNvbnRl
bnRMZW5ndGhJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkRmluaXNoTG9hZGluZ0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRGYWlsTG9hZGluZ0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3RJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0
SW1wb3J0ZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZG9tQ29udGVudExvYWRlZEV2ZW50RmlyZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bG9hZEV2ZW50RmlyZWRJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVEZXRhY2hlZEZyb21QYXJlbnRJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ29t
bWl0TG9hZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsV3JpdGVIVE1MSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50SW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0Q29uc29sZVRpbWluZ0ltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRp
bWluZ0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpj
b25zb2xlTWFya1RpbWVsaW5lSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZUltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRQcm9maWxlSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmdldEN1cnJlbnRV
c2VySW5pdGlhdGVkUHJvZmlsZU5hbWVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6cHJvZmlsZXJFbmFibGVkSW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZUltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRVc2VET01TdG9yYWdlSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFN0YXJ0
V29ya2VyQ29udGV4dEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRDcmVhdGVXb3JrZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkRGVzdHJveVdvcmtlckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVXZWJTb2NrZXRJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRXZWJTb2Nr
ZXRIYW5kc2hha2VSZXF1ZXN0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZUltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDbG9zZVdlYlNv
Y2tldEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpu
ZXR3b3JrU3RhdGVDaGFuZ2VkSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwYXVzZU9uTmF0aXZlRXZlbnRJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNh
bmNlbFBhdXNlT25OYXRpdmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnJldHJpZXZlVGltZWxpbmVBZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpiaW5kSW5zdHJ1bWVudGluZ0FnZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnVuYmluZEluc3RydW1lbnRpbmdBZ2VudHMp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDbGVhcldp
bmRvd09iamVjdEluV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnNlcnRET01Ob2RlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZURPTU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTW9kaWZ5RE9N
QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1v
ZGlmeURPTUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYW5kbGVNb3VzZVByZXNzKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRY
TUxIdHRwUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW5zdGFsbFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVtb3ZlVGltZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsQ2FsbEZ1bmN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbENoYW5nZVhIUlJlYWR5
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
RGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRmlyZVRpbWVyKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExheW91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMb2FkWEhSKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlY2FsY3VsYXRlU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVVzZXJB
Z2VudE92ZXJyaWRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6Y29udGludWVBZnRlclBpbmdMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptYXJrUmVzb3VyY2VBc0NhY2hlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZExvYWRSZXNvdXJjZUZyb21NZW1v
cnlDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxSZWNlaXZlUmVzb3VyY2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29udGludWVBZnRlclhGcmFtZU9wdGlvbnNE
ZW5pZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250
aW51ZVdpdGhQb2xpY3lEb3dubG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmNvbnRpbnVlV2l0aFBvbGljeUlnbm9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVDb250ZW50TGVuZ3RoKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmluaXNoTG9hZGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZhaWxM
b2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cmVz
b3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0SW1wb3J0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkb21Db250ZW50TG9hZGVkRXZlbnRGaXJlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmxvYWRFdmVudEZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVEZXRh
Y2hlZEZyb21QYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbFdyaXRlSFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFVzZURPTVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU3RhcnRXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU3RhcnRXb3JrZXJDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlV29y
a2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGVz
dHJveVdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZENyZWF0ZVdlYlNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5k
c2hha2VSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZENsb3NlV2ViU29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6bmV0d29ya1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdB
Z2VudHNGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdl
bnRzV2l0aEZyb250ZW5kRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzV2l0aEZyb250ZW5kRm9yUGFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdB
Z2VudHNXaXRoRnJvbnRlbmRGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c1dpdGhGcm9udGVuZEZvckRvY3Vt
ZW50KToKKwogMjAxMS0wNS0xNiAgVnNldm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRG9jdW1lbnQuY3BwCmluZGV4IGExYmU5M2QuLjVlYWU4MWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxEb2N1bWVudC5jcHAKQEAgLTI3Nyw3ICsyNzcsNyBAQCB2b2lkIEhUTUxEb2N1bWVudDo6
cmVsZWFzZUV2ZW50cygpCiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRQYXJzZXI+IEhUTUxEb2N1bWVu
dDo6Y3JlYXRlUGFyc2VyKCkKIHsKLSAgICBib29sIHJlcG9ydEVycm9ycyA9IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmQodGhpcy0+cGFnZSgpKTsKKyAgICBib29sIHJlcG9y
dEVycm9ycyA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29sbGVjdGluZ0hUTUxQYXJzZUVy
cm9ycyh0aGlzLT5wYWdlKCkpOwogICAgIHJldHVybiBIVE1MRG9jdW1lbnRQYXJzZXI6OmNyZWF0
ZSh0aGlzLCByZXBvcnRFcnJvcnMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckFnZW50LmNwcAppbmRleCBkMDUyODk2Li45ZWE5Yjc0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKQEAgLTY5LDcgKzY5LDYgQEAgSW5zcGVj
dG9yQWdlbnQ6Okluc3BlY3RvckFnZW50KFBhZ2UqIHBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdl
ciogaW5qZWN0ZWRTY3JpcHQKICAgICAsIG1fY2FuSXNzdWVFdmFsdWF0ZUZvclRlc3RJbkZyb250
ZW5kKGZhbHNlKQogewogICAgIEFTU0VSVF9BUkcocGFnZSwgcGFnZSk7Ci0gICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpiaW5kSW5zcGVjdG9yQWdlbnQobV9pbnNwZWN0ZWRQYWdlLCB0aGlz
KTsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckFnZW50KHRoaXMpOwog
fQogCkBAIC04Niw3ICs4NSw2IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6Omluc3BlY3RlZFBhZ2VE
ZXN0cm95ZWQoKQogICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICBtX2Zyb250ZW5kLT5pbnNw
ZWN0b3IoKS0+ZGlzY29ubmVjdEZyb21CYWNrZW5kKCk7CiAgICAgQVNTRVJUKG1faW5zcGVjdGVk
UGFnZSk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp1bmJpbmRJbnNwZWN0b3JBZ2Vu
dChtX2luc3BlY3RlZFBhZ2UpOwogICAgIG1faW5zcGVjdGVkUGFnZSA9IDA7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKaW5kZXggYmE4YTdiYi4uMGI2YzI5
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKQEAgLTYxLDcg
KzYxLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3Q7CiAKLSAgICBQYWdl
KiBpbnNwZWN0ZWRQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlOyB9CiAgICAg
S1VSTCBpbnNwZWN0ZWRVUkwoKSBjb25zdDsKICAgICBLVVJMIGluc3BlY3RlZFVSTFdpdGhvdXRG
cmFnbWVudCgpIGNvbnN0OwogICAgIHZvaWQgcmVsb2FkUGFnZShFcnJvclN0cmluZyosIGJvb2wg
aWdub3JlQ2FjaGUpOwpAQCAtNzIsOCArNzEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckZy
b250ZW5kKCk7CiAgICAgdm9pZCByZXN0b3JlKCk7CiAKLSAgICBJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVtZW50aW5nQWdl
bnRzOyB9Ci0KICAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSosIERP
TVdyYXBwZXJXb3JsZCopOwogCiAgICAgdm9pZCBkaWRDb21taXRMb2FkKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUluc3RydW1lbnRhdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVJbnN0cnVtZW50
YXRpb24uaAppbmRleCA4MzI2NzQxLi43N2M3NTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmgKQEAg
LTQxLDQ4ICs0MSw0OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBpbmxpbmUgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSogcGFnZSwgTWVzc2Fn
ZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRz
LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3Bl
Y3RvckFnZW50Rm9yUGFnZShwYWdlKSkKLSAgICAgICAgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwo
aW5zcGVjdG9yQWdlbnQsIHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGFyZ3VtZW50cywg
Y2FsbFN0YWNrKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQorICAgICAgICBhZGRNZXNz
YWdlVG9Db25zb2xlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBzb3VyY2UsIHR5cGUsIGxldmVs
LCBtZXNzYWdlLCBhcmd1bWVudHMsIGNhbGxTdGFjayk7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UqIHBh
Z2UsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwg
bGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNw
ZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZvclBhZ2UocGFnZSkp
Ci0gICAgICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKGluc3BlY3RvckFnZW50LCBzb3VyY2Us
IHR5cGUsIGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7CisgICAgaWYgKElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdl
bnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoaW5zdHJ1
bWVudGluZ0FnZW50cywgc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwg
c291cmNlSUQpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6Y29uc29sZUNvdW50KFBhZ2UqIHBhZ2UsIFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRz
PiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBzdGFjaykKIHsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQg
PSBpbnNwZWN0b3JBZ2VudEZvclBhZ2UocGFnZSkpCi0gICAgICAgIGNvbnNvbGVDb3VudEltcGwo
aW5zcGVjdG9yQWdlbnQsIGFyZ3VtZW50cywgc3RhY2spOworICAgIGlmIChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2Uo
cGFnZSkpCisgICAgICAgIGNvbnNvbGVDb3VudEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgYXJn
dW1lbnRzLCBzdGFjayk7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpzdGFydENvbnNvbGVUaW1pbmcoUGFnZSogcGFnZSwgY29uc3QgU3RyaW5nJiB0
aXRsZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCog
aW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZvclBhZ2UocGFnZSkpCi0gICAgICAgIHN0
YXJ0Q29uc29sZVRpbWluZ0ltcGwoaW5zcGVjdG9yQWdlbnQsIHRpdGxlKTsKKyAgICBpZiAoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JQYWdlKHBhZ2UpKQorICAgICAgICBzdGFydENvbnNvbGVUaW1pbmdJbXBsKGluc3RydW1l
bnRpbmdBZ2VudHMsIHRpdGxlKTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGltaW5nKFBhZ2UqIHBhZ2UsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBzdGFjaykKIHsKICNpZiBFTkFC
TEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBp
bnNwZWN0b3JBZ2VudEZvclBhZ2UocGFnZSkpCi0gICAgICAgIHN0b3BDb25zb2xlVGltaW5nSW1w
bChpbnNwZWN0b3JBZ2VudCwgdGl0bGUsIHN0YWNrKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBh
Z2UpKQorICAgICAgICBzdG9wQ29uc29sZVRpbWluZ0ltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywg
dGl0bGUsIHN0YWNrKTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmNvbnNvbGVNYXJrVGltZWxpbmUoUGFnZSogcGFnZSwgUGFzc1JlZlB0cjxTY3Jp
cHRBcmd1bWVudHM+IGFyZ3VtZW50cykKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlm
IChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9u
dGVuZEZvclBhZ2UocGFnZSkpCi0gICAgICAgIGNvbnNvbGVNYXJrVGltZWxpbmVJbXBsKGluc3Bl
Y3RvckFnZW50LCBhcmd1bWVudHMpOworICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUygp
OworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCisgICAgICAgIGNvbnNvbGVNYXJrVGltZWxp
bmVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIGFyZ3VtZW50cyk7CiAjZW5kaWYKIH0KIApAQCAt
OTAsMjQgKzkxLDI0IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29u
c29sZU1hcmtUaW1lbGluZShQYWdlKiBwYWdlLCBQYXNzUmVmUHRyCiBpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZShQ
YWdlKiBwYWdlLCBjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJ
bnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZvclBhZ2UocGFn
ZSkpCi0gICAgICAgIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZUltcGwoaW5zcGVj
dG9yQWdlbnQsIHRpdGxlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
clBhZ2UocGFnZSkpCisgICAgICAgIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZUlt
cGwoaW5zdHJ1bWVudGluZ0FnZW50cywgdGl0bGUsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CiAj
ZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRQcm9m
aWxlKFBhZ2UqIHBhZ2UsIFJlZlB0cjxTY3JpcHRQcm9maWxlPiBwcm9maWxlLCBQYXNzUmVmUHRy
PFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0g
ICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9y
UGFnZShwYWdlKSkKLSAgICAgICAgYWRkUHJvZmlsZUltcGwoaW5zcGVjdG9yQWdlbnQsIHByb2Zp
bGUsIGNhbGxTdGFjayk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgYWRk
UHJvZmlsZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgcHJvZmlsZSwgY2FsbFN0YWNrKTsKICNl
bmRpZgogfQogCiBpbmxpbmUgYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnByb2ZpbGVy
RW5hYmxlZChQYWdlKiBwYWdlKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKElu
c3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9yUGFnZShwYWdl
KSkKLSAgICAgICAgcmV0dXJuIHByb2ZpbGVyRW5hYmxlZEltcGwoaW5zcGVjdG9yQWdlbnQpOwor
ICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCisgICAgICAgIHJldHVybiBwcm9maWxlckVuYWJs
ZWRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwog
fQpAQCAtMTE1LDggKzExNiw4IEBAIGlubGluZSBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6cHJvZmlsZXJFbmFibGVkKFBhZ2UqIHBhZ2UpCiBpbmxpbmUgU3RyaW5nIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShQYWdlKiBw
YWdlLCBib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdl
bnRGb3JQYWdlKHBhZ2UpKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lSW1wbChpbnNwZWN0b3JBZ2VudCwg
aW5jcmVtZW50UHJvZmlsZU51bWJlcik7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Z2V0Q3VycmVudFVzZXJJbml0
aWF0ZWRQcm9maWxlTmFtZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5jcmVtZW50UHJvZmls
ZU51bWJlcik7CiAjZW5kaWYKICAgICByZXR1cm4gIiI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggZWU0MzU5ZC4uZWNmZWJk
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcApAQCAtMTEyLDYgKzExMiw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNv
bnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAjaWYgRU5B
QkxFKFdPUktFUlMpCiAgICAgLCBtX3dvcmtlckFnZW50KEluc3BlY3RvcldvcmtlckFnZW50Ojpj
cmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpKSkKICNlbmRpZgorICAgICwgbV9wYWdl
KHBhZ2UpCiAgICAgLCBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQpCiAgICAgLCBt
X29wZW5pbmdGcm9udGVuZChmYWxzZSkKICAgICAsIG1fc3RhcnRVc2VySW5pdGlhdGVkRGVidWdn
aW5nV2hlbkZyb250ZWRJc0Nvbm5lY3RlZChmYWxzZSkKQEAgLTEyNiw2ICsxMjcsNyBAQCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3Rv
ckNsaWVudCogaW5zcGVjdG9yQwogICAgICAgICAsIG1fZG9tU3RvcmFnZUFnZW50LmdldCgpCiAj
ZW5kaWYKICAgICApOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YmluZEluc3RydW1l
bnRpbmdBZ2VudHMobV9wYWdlLCBtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCkpOwogfQogCiBJ
bnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcigpCkBAIC0xMzUsNiArMTM3
LDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6fkluc3BlY3RvckNvbnRyb2xsZXIoKQogCiB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQogeworICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dW5iaW5kSW5zdHJ1bWVudGluZ0FnZW50cyhtX3BhZ2Up
OwogICAgIGRpc2Nvbm5lY3RGcm9udGVuZCgpOwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQogICAgIG1fZG9tRGVidWdnZXJBZ2VudC5jbGVhcigpOwpAQCAtMTQzLDYgKzE0Niw3IEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpCiAgICAg
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmRpc2Nvbm5lY3QoKTsKICAgICBtX2luc3BlY3RvckNs
aWVudC0+aW5zcGVjdG9yRGVzdHJveWVkKCk7CiAgICAgbV9pbnNwZWN0b3JDbGllbnQgPSAwOwor
ICAgIG1fcGFnZSA9IDA7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gaW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQpCkBAIC0xNjIsNyArMTY2LDcgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBET01X
cmFwcGVyV28KIAogICAgIC8vIElmIHRoZSBwYWdlIGlzIHN1cHBvc2VkIHRvIHNlcnZlIGFzIElu
c3BlY3RvckZyb250ZW5kIG5vdGlmeSBpbnNwZWN0b3IgZnJvbnRlbmQKICAgICAvLyBjbGllbnQg
dGhhdCBpdCdzIGNsZWFyZWQgc28gdGhhdCB0aGUgY2xpZW50IGNhbiBleHBvc2UgaW5zcGVjdG9y
IGJpbmRpbmdzLgotICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50ICYmIGZyYW1lID09
IG1faW5zcGVjdG9yQWdlbnQtPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCkpCisgICAgaWYg
KG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgJiYgZnJhbWUgPT0gbV9wYWdlLT5tYWluRnJhbWUo
KSkKICAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudC0+d2luZG93T2JqZWN0Q2xlYXJl
ZCgpOwogfQogCkBAIC0zNzYsNyArMzgwLDcgQEAgYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpl
bmFibGVkKCkgY29uc3QKIAogUGFnZSogSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkUGFn
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW5zcGVjdG9yQWdlbnQtPmluc3BlY3RlZFBhZ2Uo
KTsKKyAgICByZXR1cm4gbV9wYWdlOwogfQogCiBib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnRp
bWVsaW5lUHJvZmlsZXJFbmFibGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDY3MjI0MTguLjc5OGViYmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMTU1LDYgKzE1NSw3
IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOwogICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZENs
aWVudD4gbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudDsKICAgICBPd25QdHI8SW5zcGVjdG9yRnJv
bnRlbmQ+IG1faW5zcGVjdG9yRnJvbnRlbmQ7CisgICAgUGFnZSogbV9wYWdlOwogICAgIEluc3Bl
Y3RvckNsaWVudCogbV9pbnNwZWN0b3JDbGllbnQ7CiAgICAgYm9vbCBtX29wZW5pbmdGcm9udGVu
ZDsKICAgICBib29sIG1fc3RhcnRVc2VySW5pdGlhdGVkRGVidWdnaW5nV2hlbkZyb250ZWRJc0Nv
bm5lY3RlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
YXRhYmFzZUluc3RydW1lbnRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRhdGFiYXNlSW5zdHJ1bWVudGF0aW9uLmgKaW5kZXggMGFkMTQ2MC4uMWY2ZDdmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlSW5zdHJ1
bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlSW5zdHJ1bWVudGF0aW9uLmgKQEAgLTQxLDggKzQxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0YWJhc2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0
YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0
b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZvckNvbnRleHQoY29udGV4
dCkpCi0gICAgICAgIGRpZE9wZW5EYXRhYmFzZUltcGwoaW5zcGVjdG9yQWdlbnQsIGRhdGFiYXNl
LCBkb21haW4sIG5hbWUsIHZlcnNpb24pOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4
dCkpCisgICAgICAgIGRpZE9wZW5EYXRhYmFzZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgZGF0
YWJhc2UsIGRvbWFpbiwgbmFtZSwgdmVyc2lvbik7CiAjZW5kaWYKIH0KICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNw
cAppbmRleCA3OThlZjFiLi5kNWIwYmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtNTcsNiArNTcsNyBAQAog
I2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGUuaCIK
ICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTY4LDkgKzY5LDkgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNldFRpbWVyRXZlbnRO
YW1lID0gInNldFRpbWVyIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBjbGVhclRpbWVyRXZl
bnROYW1lID0gImNsZWFyVGltZXIiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHRpbWVyRmly
ZWRFdmVudE5hbWUgPSAidGltZXJGaXJlZCI7CiAKLUhhc2hNYXA8UGFnZSosIEluc3BlY3RvckFn
ZW50Kj4mIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zcGVjdG9yQWdlbnRzKCkKK0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6SW5zdHJ1bWVudGluZ0FnZW50c01hcCYgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzKCkKIHsKLSAgICBzdGF0aWMgSGFzaE1h
cDxQYWdlKiwgSW5zcGVjdG9yQWdlbnQqPiYgYWdlbnRzID0gKm5ldyBIYXNoTWFwPFBhZ2UqLCBJ
bnNwZWN0b3JBZ2VudCo+OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSW5zdHJ1bWVudGluZ0Fn
ZW50c01hcCwgYWdlbnRzLCAoKSk7CiAgICAgcmV0dXJuIGFnZW50czsKIH0KIApAQCAtOTMsMTMw
ICs5NCwxMzEgQEAgc3RhdGljIGJvb2wgZXZlbnRIYXNMaXN0ZW5lcnMoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIERPTVdpbmRvdyogd2luZG93LAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENsZWFyV2luZG93T2JqZWN0SW5X
b3JsZEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBGcmFtZSogZnJhbWUsIERP
TVdyYXBwZXJXb3JsZCogd29ybGQpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
Q2xlYXJXaW5kb3dPYmplY3RJbldvcmxkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7Ci0g
ICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmlu
c3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yUGFnZUFnZW50KCkpCisgICAgaWYgKEluc3Bl
Y3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9y
UGFnZUFnZW50KCkpCiAgICAgICAgIHBhZ2VBZ2VudC0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldv
cmxkKGZyYW1lLCB3b3JsZCk7Ci0gICAgaW5zcGVjdG9yQWdlbnQtPmRpZENsZWFyV2luZG93T2Jq
ZWN0SW5Xb3JsZChmcmFtZSwgd29ybGQpOworICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVj
dG9yQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JBZ2VudCgpKQorICAgICAg
ICBpbnNwZWN0b3JBZ2VudC0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKGZyYW1lLCB3b3Js
ZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0ZWRQYWdlRGVz
dHJveWVkSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQpCit2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZEltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykKIHsKLSAgICBpbnNwZWN0b3JBZ2VudC0+aW5z
cGVjdGVkUGFnZURlc3Ryb3llZCgpOworICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9y
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JBZ2VudCgpKQorICAgICAgICBp
bnNwZWN0b3JBZ2VudC0+aW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpOwogfQogCi12b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGVJbXBsKEluc3BlY3RvckFnZW50
KiBpbnNwZWN0b3JBZ2VudCwgTm9kZSogbm9kZSwgTm9kZSogcGFyZW50KQordm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxJbnNlcnRET01Ob2RlSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBOb2RlKiBub2RlLCBOb2RlKiBwYXJlbnQpCiB7CiAj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgaWYgKEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGlu
Z0FnZW50cygpLT5pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KCkpCisgICAgaWYgKEluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQqIGRvbURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
LT5pbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KCkpCiAgICAgICAgIGRvbURlYnVnZ2VyQWdlbnQt
PndpbGxJbnNlcnRET01Ob2RlKG5vZGUsIHBhcmVudCk7CiAjZW5kaWYKIH0KIAotdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEluc2VydERPTU5vZGVJbXBsKEluc3BlY3RvckFnZW50
KiBpbnNwZWN0b3JBZ2VudCwgTm9kZSogbm9kZSkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRJbnNlcnRET01Ob2RlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBOb2RlKiBub2RlKQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9t
QWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JE
T01BZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JET01BZ2VudCgpKQogICAgICAgICBkb21BZ2VudC0+ZGlk
SW5zZXJ0RE9NTm9kZShub2RlKTsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAg
ICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJBZ2VudCA9IGluc3Bl
Y3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQoKSkKICAg
ICAgICAgZG9tRGVidWdnZXJBZ2VudC0+ZGlkSW5zZXJ0RE9NTm9kZShub2RlKTsKICNlbmRpZgog
fQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZURPTU5vZGVJbXBs
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgTm9kZSogbm9kZSkKK3ZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9NTm9kZUltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgTm9kZSogbm9kZSkKIHsKICNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKLSAgICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCogZG9t
RGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmlu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudCogZG9tRGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQoKSkKICAgICAgICAgZG9tRGVidWdnZXJBZ2VudC0+d2lsbFJlbW92ZURP
TU5vZGUobm9kZSk7CiAjZW5kaWYKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZFJlbW92ZURPTU5vZGVJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgTm9k
ZSogbm9kZSkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZW1vdmVET01Ob2Rl
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBOb2RlKiBub2Rl
KQogewogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIGlmIChJbnNwZWN0b3JE
T01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3Ry
dW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpKQorICAgIGlmIChJ
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy0+aW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpKQogICAgICAgICBkb21EZWJ1Z2dl
ckFnZW50LT5kaWRSZW1vdmVET01Ob2RlKG5vZGUpOwogI2VuZGlmCi0gICAgaWYgKEluc3BlY3Rv
ckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRz
KCktPmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21B
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTUFnZW50KCkpCiAgICAgICAg
IGRvbUFnZW50LT5kaWRSZW1vdmVET01Ob2RlKG5vZGUpOwogfQogCi12b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbE1vZGlmeURPTUF0dHJJbXBsKEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCwgRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsTW9kaWZ5RE9NQXR0ckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cywgRWxlbWVudCogZWxlbWVudCkKIHsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKLSAgICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJB
Z2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCogZG9t
RGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQoKSkKICAgICAgICAgZG9tRGVidWdnZXJBZ2VudC0+d2lsbE1vZGlmeURPTUF0dHIoZWxl
bWVudCk7CiAjZW5kaWYKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1v
ZGlmeURPTUF0dHJJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgRWxlbWVudCog
ZWxlbWVudCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNb2RpZnlET01BdHRy
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBFbGVtZW50KiBl
bGVtZW50KQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0
b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JET01BZ2VudCgpKQorICAg
IGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5p
bnNwZWN0b3JET01BZ2VudCgpKQogICAgICAgICBkb21BZ2VudC0+ZGlkTW9kaWZ5RE9NQXR0cihl
bGVtZW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRh
dGVTdHlsZUF0dHJJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgTm9kZSogbm9k
ZSkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRy
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBOb2RlKiBub2Rl
KQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JBZ2Vu
dC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlmIChJ
bnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0
b3JET01BZ2VudCgpKQogICAgICAgICBkb21BZ2VudC0+ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihu
b2RlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgbW9kaWZpZXJGbGFncykKK3ZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudEltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCog
ZG9tQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0
b3JET01BZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JET01BZ2VudCgpKQogICAgICAgICBkb21BZ2VudC0+
bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQocmVzdWx0LCBtb2RpZmllckZsYWdzKTsKIH0KIAotYm9v
bCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmhhbmRsZU1vdXNlUHJlc3NJbXBsKEluc3BlY3Rv
ckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKK2Jvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpo
YW5kbGVNb3VzZVByZXNzSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzKQogewotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JB
Z2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlm
IChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNw
ZWN0b3JET01BZ2VudCgpKQogICAgICAgICByZXR1cm4gZG9tQWdlbnQtPmhhbmRsZU1vdXNlUHJl
c3MoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudCwgQ2hhcmFjdGVyRGF0YSogY2hhcmFjdGVyRGF0YSkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMsIENoYXJhY3RlckRhdGEqIGNoYXJhY3RlckRhdGEpCiB7Ci0g
ICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0
cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRPTUFnZW50KCkpCisgICAgaWYgKEluc3BlY3Rv
ckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTUFn
ZW50KCkpCiAgICAgICAgIGRvbUFnZW50LT5jaGFyYWN0ZXJEYXRhTW9kaWZpZWQoY2hhcmFjdGVy
RGF0YSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFhNTEh0
dHBSZXF1ZXN0SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IFN0cmlu
ZyYgdXJsKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kWE1MSHR0cFJl
cXVlc3RJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnN0
IFN0cmluZyYgdXJsKQogewogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIGlm
IChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zcGVjdG9y
QWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgp
KQorICAgIGlmIChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpKQogICAgICAg
ICBkb21EZWJ1Z2dlckFnZW50LT53aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KHVybCk7CiAjZW5kaWYK
IH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjaGVkdWxlUmVzb3VyY2VS
ZXF1ZXN0SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IFN0cmluZyYg
dXJsKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjaGVkdWxlUmVzb3VyY2VS
ZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25z
dCBTdHJpbmcmIHVybCkKIHsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxp
bmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2VudCkpCisgICAgaWYg
KEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRp
ZFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0KHVybCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRJbnN0YWxsVGltZXJJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudCwgaW50IHRpbWVySWQsIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpCit2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW5zdGFsbFRpbWVySW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnQgdGltZXJJZCwgaW50IHRpbWVvdXQsIGJv
b2wgc2luZ2xlU2hvdCkKIHsKLSAgICBwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChpbnNwZWN0
b3JBZ2VudCwgaW5zdHJ1bWVudGF0aW9uRXZlbnRDYXRlZ29yeVR5cGUsIHNldFRpbWVyRXZlbnRO
YW1lLCB0cnVlKTsKLSAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2Vu
dCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2VudCkpCisgICAgcGF1c2VPbk5h
dGl2ZUV2ZW50SWZOZWVkZWQoaW5zdHJ1bWVudGluZ0FnZW50cywgaW5zdHJ1bWVudGF0aW9uRXZl
bnRDYXRlZ29yeVR5cGUsIHNldFRpbWVyRXZlbnROYW1lLCB0cnVlKTsKKyAgICBpZiAoSW5zcGVj
dG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmlu
c3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkSW5zdGFs
bFRpbWVyKHRpbWVySWQsIHRpbWVvdXQsIHNpbmdsZVNob3QpOwogfQogCi12b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkUmVtb3ZlVGltZXJJbXBsKEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCwgaW50IHRpbWVySWQpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkUmVtb3ZlVGltZXJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIGludCB0aW1lcklkKQogewotICAgIHBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKGluc3Bl
Y3RvckFnZW50LCBpbnN0cnVtZW50YXRpb25FdmVudENhdGVnb3J5VHlwZSwgY2xlYXJUaW1lckV2
ZW50TmFtZSwgdHJ1ZSk7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5l
QWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIHBhdXNl
T25OYXRpdmVFdmVudElmTmVlZGVkKGluc3RydW1lbnRpbmdBZ2VudHMsIGluc3RydW1lbnRhdGlv
bkV2ZW50Q2F0ZWdvcnlUeXBlLCBjbGVhclRpbWVyRXZlbnROYW1lLCB0cnVlKTsKKyAgICBpZiAo
SW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMtPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlk
UmVtb3ZlVGltZXIodGltZXJJZCk7CiB9CiAKLUluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxDYWxsRnVuY3Rpb25JbXBsKEluc3BlY3Rv
ckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2Ny
aXB0TGluZSkKK0luc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxDYWxsRnVuY3Rpb25JbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUp
CiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2Vu
dCk7Ci0gICAgaWYgKHRpbWVsaW5lQWdlbnQpIHsKKyAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclRpbWVs
aW5lQWdlbnQoKSkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsQ2FsbEZ1bmN0aW9uKHNj
cmlwdE5hbWUsIHNjcmlwdExpbmUpOwogICAgICAgICB0aW1lbGluZUFnZW50SWQgPSB0aW1lbGlu
ZUFnZW50LT5pZCgpOwogICAgIH0KLSAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llKGluc3BlY3RvckFnZW50LCB0aW1lbGluZUFnZW50SWQpOworICAgIHJldHVybiBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zdHJ1bWVudGluZ0FnZW50cywgdGltZWxpbmVB
Z2VudElkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5j
dGlvbkltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUpCkBA
IC0yMjUsMTUgKzIyNywxNSBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2Fs
bEZ1bmN0aW9uSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpbwogICAgICAgICB0aW1l
bGluZUFnZW50LT5kaWRDYWxsRnVuY3Rpb24oKTsKIH0KIAotSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbENoYW5nZVhIUlJlYWR5U3Rh
dGVJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgWE1MSHR0cFJlcXVlc3QqIHJl
cXVlc3QpCitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsQ2hhbmdlWEhSUmVhZHlTdGF0ZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cywgWE1MSHR0cFJlcXVlc3QqIHJlcXVlc3QpCiB7CiAgICAgaW50
IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxp
bmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2VudCk7CisgICAgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMt
Pmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKTsKICAgICBpZiAodGltZWxpbmVBZ2VudCAmJiByZXF1
ZXN0LT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkucmVhZHlzdGF0ZWNoYW5nZUV2ZW50
KSkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsQ2hhbmdlWEhSUmVhZHlTdGF0ZShyZXF1
ZXN0LT51cmwoKS5zdHJpbmcoKSwgcmVxdWVzdC0+cmVhZHlTdGF0ZSgpKTsKICAgICAgICAgdGlt
ZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnNwZWN0b3JBZ2VudCwgdGltZWxpbmVBZ2Vu
dElkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3RydW1l
bnRpbmdBZ2VudHMsIHRpbWVsaW5lQWdlbnRJZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRDaGFuZ2VYSFJSZWFkeVN0YXRlSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSkKQEAgLTI0MiwxNyArMjQ0LDE3IEBAIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VYSFJSZWFkeVN0YXRlSW1wbChjb25zdCBJ
bnNwZWN0b3JJbnN0cnVtCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZENoYW5nZVhIUlJlYWR5
U3RhdGUoKTsKIH0KIAotSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCwgY29uc3QgRXZlbnQmIGV2ZW50LCBET01XaW5kb3cqIHdpbmRvdywgTm9kZSog
bm9kZSwgY29uc3QgVmVjdG9yPEV2ZW50Q29udGV4dD4mIGFuY2VzdG9ycykKK0luc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRj
aEV2ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25z
dCBFdmVudCYgZXZlbnQsIERPTVdpbmRvdyogd2luZG93LCBOb2RlKiBub2RlLCBjb25zdCBWZWN0
b3I8RXZlbnRDb250ZXh0PiYgYW5jZXN0b3JzKQogewotICAgIHBhdXNlT25OYXRpdmVFdmVudElm
TmVlZGVkKGluc3BlY3RvckFnZW50LCBsaXN0ZW5lckV2ZW50Q2F0ZWdvcnlUeXBlLCBldmVudC50
eXBlKCksIGZhbHNlKTsKKyAgICBwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChpbnN0cnVtZW50
aW5nQWdlbnRzLCBsaXN0ZW5lckV2ZW50Q2F0ZWdvcnlUeXBlLCBldmVudC50eXBlKCksIGZhbHNl
KTsKIAogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9yQWdl
bnQpOworICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCk7CiAgICAgaWYgKHRpbWVsaW5l
QWdlbnQgJiYgZXZlbnRIYXNMaXN0ZW5lcnMoZXZlbnQudHlwZSgpLCB3aW5kb3csIG5vZGUsIGFu
Y2VzdG9ycykpIHsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbERpc3BhdGNoRXZlbnQoZXZl
bnQpOwogICAgICAgICB0aW1lbGluZUFnZW50SWQgPSB0aW1lbGluZUFnZW50LT5pZCgpOwogICAg
IH0KLSAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3BlY3RvckFn
ZW50LCB0aW1lbGluZUFnZW50SWQpOworICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29raWUoaW5zdHJ1bWVudGluZ0FnZW50cywgdGltZWxpbmVBZ2VudElkKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnRJbXBsKGNvbnN0IElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYgY29va2llKQpAQCAtMjYzLDE3ICsyNjUsMTcg
QEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnRJbXBsKGNv
bnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkRGlz
cGF0Y2hFdmVudCgpOwogfQogCi1JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93SW1wbChJbnNwZWN0
b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IEV2ZW50JiBldmVudCwgRE9NV2luZG93KiB3
aW5kb3cpCitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93SW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBFdmVudCYgZXZlbnQsIERPTVdpbmRvdyogd2lu
ZG93KQogewotICAgIHBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKGluc3BlY3RvckFnZW50LCBs
aXN0ZW5lckV2ZW50Q2F0ZWdvcnlUeXBlLCBldmVudC50eXBlKCksIGZhbHNlKTsKKyAgICBwYXVz
ZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChpbnN0cnVtZW50aW5nQWdlbnRzLCBsaXN0ZW5lckV2ZW50
Q2F0ZWdvcnlUeXBlLCBldmVudC50eXBlKCksIGZhbHNlKTsKIAogICAgIGludCB0aW1lbGluZUFn
ZW50SWQgPSAwOwotICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBy
ZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9yQWdlbnQpOworICAgIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JU
aW1lbGluZUFnZW50KCk7CiAgICAgaWYgKHRpbWVsaW5lQWdlbnQgJiYgd2luZG93LT5oYXNFdmVu
dExpc3RlbmVycyhldmVudC50eXBlKCkpKSB7CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxE
aXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICAgICAgdGltZWxpbmVBZ2VudElkID0gdGltZWxpbmVB
Z2VudC0+aWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZShpbnNwZWN0b3JBZ2VudCwgdGltZWxpbmVBZ2VudElkKTsKKyAgICByZXR1cm4gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3RydW1lbnRpbmdBZ2VudHMsIHRpbWVsaW5lQWdl
bnRJZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2
ZW50T25XaW5kb3dJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYgY29v
a2llKQpAQCAtMjg0LDE1ICsyODYsMTQgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZERpc3BhdGNoRXZlbnRPbldpbmRvd0ltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHIKICAgICAg
ICAgdGltZWxpbmVBZ2VudC0+ZGlkRGlzcGF0Y2hFdmVudCgpOwogfQogCi1JbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVT
Y3JpcHRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgY29uc3QgU3RyaW5nJiB1
cmwsIGludCBsaW5lTnVtYmVyKQorSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEV2YWx1YXRlU2NyaXB0SW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmVO
dW1iZXIpCiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNwZWN0
b3JBZ2VudCk7Ci0gICAgaWYgKHRpbWVsaW5lQWdlbnQpIHsKKyAgICBpZiAoSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3Rv
clRpbWVsaW5lQWdlbnQoKSkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsRXZhbHVhdGVT
Y3JpcHQodXJsLCBsaW5lTnVtYmVyKTsKICAgICAgICAgdGltZWxpbmVBZ2VudElkID0gdGltZWxp
bmVBZ2VudC0+aWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZShpbnNwZWN0b3JBZ2VudCwgdGltZWxpbmVBZ2VudElkKTsKKyAgICByZXR1cm4gSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3RydW1lbnRpbmdBZ2VudHMsIHRpbWVsaW5l
QWdlbnRJZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRFdmFsdWF0
ZVNjcmlwdEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUp
CkBAIC0zMDEsMTcgKzMwMiwxNiBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
RXZhbHVhdGVTY3JpcHRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdAogICAgICAgICB0
aW1lbGluZUFnZW50LT5kaWRFdmFsdWF0ZVNjcmlwdCgpOwogfQogCi1JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRmlyZVRpbWVySW1w
bChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGludCB0aW1lcklkKQorSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEZpcmVU
aW1lckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgaW50IHRp
bWVySWQpCiB7Ci0gICAgcGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoaW5zcGVjdG9yQWdlbnQs
IGluc3RydW1lbnRhdGlvbkV2ZW50Q2F0ZWdvcnlUeXBlLCB0aW1lckZpcmVkRXZlbnROYW1lLCBm
YWxzZSk7CisgICAgcGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoaW5zdHJ1bWVudGluZ0FnZW50
cywgaW5zdHJ1bWVudGF0aW9uRXZlbnRDYXRlZ29yeVR5cGUsIHRpbWVyRmlyZWRFdmVudE5hbWUs
IGZhbHNlKTsKIAogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVj
dG9yQWdlbnQpOwotICAgIGlmICh0aW1lbGluZUFnZW50KSB7CisgICAgaWYgKEluc3BlY3RvclRp
bWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0
b3JUaW1lbGluZUFnZW50KCkpIHsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbEZpcmVUaW1l
cih0aW1lcklkKTsKICAgICAgICAgdGltZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQo
KTsKICAgICB9Ci0gICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnNw
ZWN0b3JBZ2VudCwgdGltZWxpbmVBZ2VudElkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llKGluc3RydW1lbnRpbmdBZ2VudHMsIHRpbWVsaW5lQWdlbnRJZCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaXJlVGltZXJJbXBsKGNvbnN0
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYgY29va2llKQpAQCAtMzIyLDE1ICszMjIs
MTQgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpcmVUaW1lckltcGwoY29u
c3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ28KICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlk
RmlyZVRpbWVyKCk7CiB9CiAKLUluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxMYXlvdXRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudCkKK0luc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxMYXlvdXRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMpCiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7Ci0gICAgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChpbnNw
ZWN0b3JBZ2VudCk7Ci0gICAgaWYgKHRpbWVsaW5lQWdlbnQpIHsKKyAgICBpZiAoSW5zcGVjdG9y
VGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQoKSkgewogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsTGF5b3V0
KCk7CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9IHRpbWVsaW5lQWdlbnQtPmlkKCk7CiAgICAg
fQotICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zcGVjdG9yQWdl
bnQsIHRpbWVsaW5lQWdlbnRJZCk7CisgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZShpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lbGluZUFnZW50SWQpOwogfQogCiB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTGF5b3V0SW1wbChjb25zdCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSkKQEAgLTMzOSwxNSArMzM4LDE1IEBAIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRMYXlvdXRJbXBsKGNvbnN0IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZExheW91dCgpOwog
fQogCi1JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsTG9hZFhIUkltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBYTUxI
dHRwUmVxdWVzdCogcmVxdWVzdCkKK0luc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMb2FkWEhSSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzLCBYTUxIdHRwUmVxdWVzdCogcmVxdWVzdCkKIHsKICAgICBp
bnQgdGltZWxpbmVBZ2VudElkID0gMDsKLSAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1l
bGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGluc3BlY3RvckFnZW50KTsKKyAgICBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy0+aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpOwogICAgIGlmICh0aW1lbGluZUFnZW50ICYmIHJl
cXVlc3QtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQpKSB7CiAgICAg
ICAgIHRpbWVsaW5lQWdlbnQtPndpbGxMb2FkWEhSKHJlcXVlc3QtPnVybCgpKTsKICAgICAgICAg
dGltZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9Ci0gICAgcmV0dXJu
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnNwZWN0b3JBZ2VudCwgdGltZWxpbmVB
Z2VudElkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3Ry
dW1lbnRpbmdBZ2VudHMsIHRpbWVsaW5lQWdlbnRJZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRMb2FkWEhSSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29raWUmIGNvb2tpZSkKQEAgLTM1NiwxNSArMzU1LDE0IEBAIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRMb2FkWEhSSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29rCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZExvYWRYSFIoKTsKIH0KIAotSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFBh
aW50SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsUGFpbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7
Ci0gICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGlt
ZWxpbmVBZ2VudChpbnNwZWN0b3JBZ2VudCk7Ci0gICAgaWYgKHRpbWVsaW5lQWdlbnQpIHsKKyAg
ICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMtPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkgewogICAgICAgICB0aW1lbGluZUFn
ZW50LT53aWxsUGFpbnQocmVjdCk7CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9IHRpbWVsaW5l
QWdlbnQtPmlkKCk7CiAgICAgfQotICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUoaW5zcGVjdG9yQWdlbnQsIHRpbWVsaW5lQWdlbnRJZCk7CisgICAgcmV0dXJuIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lbGluZUFn
ZW50SWQpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUGFpbnRJbXBs
KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYgY29va2llKQpAQCAtMzczLDE1
ICszNzEsMTQgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFBhaW50SW1wbChj
b25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUKICAgICAgICAgdGltZWxpbmVBZ2Vu
dC0+ZGlkUGFpbnQoKTsKIH0KIAotSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlY2FsY3VsYXRlU3R5bGVJbXBsKEluc3BlY3RvckFn
ZW50KiBpbnNwZWN0b3JBZ2VudCkKK0luc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNhbGN1bGF0ZVN0eWxlSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewogICAgIGludCB0aW1lbGluZUFnZW50
SWQgPSAwOwotICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRy
aWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9yQWdlbnQpOwotICAgIGlmICh0aW1lbGluZUFnZW50
KSB7CisgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpIHsKICAgICAgICAgdGlt
ZWxpbmVBZ2VudC0+d2lsbFJlY2FsY3VsYXRlU3R5bGUoKTsKICAgICAgICAgdGltZWxpbmVBZ2Vu
dElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZShpbnNwZWN0b3JBZ2VudCwgdGltZWxpbmVBZ2VudElkKTsKKyAg
ICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3RydW1lbnRpbmdBZ2Vu
dHMsIHRpbWVsaW5lQWdlbnRJZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRSZWNhbGN1bGF0ZVN0eWxlSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUmIGNvb2tpZSkKQEAgLTM5MCw0OCArMzg3LDQ4IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRSZWNhbGN1bGF0ZVN0eWxlSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVt
ZW50CiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZFJlY2FsY3VsYXRlU3R5bGUoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFwcGx5VXNlckFnZW50T3ZlcnJpZGVJbXBs
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgU3RyaW5nKiB1c2VyQWdlbnQpCit2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZUltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgU3RyaW5nKiB1c2VyQWdlbnQp
CiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSByZXRy
aWV2ZVJlc291cmNlQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlmIChJbnNwZWN0b3JSZXNv
dXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9y
UmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5hcHBseVVzZXJBZ2VudE92
ZXJyaWRlKHVzZXJBZ2VudCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsU2VuZFJlcXVlc3RJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciogbG9hZGVyLCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRSZXF1ZXN0SW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKLSAgICBpZiAoSW5zcGVj
dG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChp
bnNwZWN0b3JBZ2VudCkpCisgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5l
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCiAg
ICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxTZW5kUmVzb3VyY2VSZXF1ZXN0KGlkZW50aWZpZXIs
IHJlcXVlc3QpOwotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50
ID0gcmV0cmlldmVSZXNvdXJjZUFnZW50KGluc3BlY3RvckFnZW50KSkKKyAgICBpZiAoSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmlu
c3BlY3RvclJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+d2lsbFNlbmRS
ZXF1ZXN0KGlkZW50aWZpZXIsIGxvYWRlciwgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250aW51ZUFmdGVyUGluZ0xvYWRl
ckltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6Y29udGludWVBZnRlclBpbmdMb2FkZXJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRM
b2FkZXIqIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICB3aWxsU2VuZFJlcXVlc3RJbXBsKGluc3BlY3RvckFn
ZW50LCBpZGVudGlmaWVyLCBsb2FkZXIsIHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICB3aWxsU2Vu
ZFJlcXVlc3RJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIsIGxvYWRlciwgcmVx
dWVzdCwgcmVzcG9uc2UpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bWFy
a1Jlc291cmNlQXNDYWNoZWRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgdW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1h
cmtSZXNvdXJjZUFzQ2FjaGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJl
c291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSByZXRyaWV2ZVJlc291cmNlQWdlbnQoaW5zcGVj
dG9yQWdlbnQpKQorICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQogICAgICAg
ICByZXNvdXJjZUFnZW50LT5tYXJrUmVzb3VyY2VBc0NhY2hlZChpZGVudGlmaWVyKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlD
YWNoZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBEb2N1bWVudExvYWRlciog
bG9hZGVyLCBjb25zdCBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCit2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBEb2N1bWVudExvYWRlciog
bG9hZGVyLCBjb25zdCBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiB7Ci0gICAgaWYg
KCFpbnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgpKQorICAgIEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckFnZW50KCk7CisgICAgaWYg
KCFpbnNwZWN0b3JBZ2VudCB8fCAhaW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0g
cmV0cmlldmVSZXNvdXJjZUFnZW50KGluc3BlY3RvckFnZW50KSkKKyAgICBpZiAoSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3Bl
Y3RvclJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkTG9hZFJlc291
cmNlRnJvbU1lbW9yeUNhY2hlKGxvYWRlciwgY2FjaGVkUmVzb3VyY2UpOwogfQogCi1JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVj
ZWl2ZVJlc291cmNlRGF0YUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCB1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIpCitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVjZWl2ZVJlc291cmNlRGF0YUltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyKQogewogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9y
QWdlbnQpOwotICAgIGlmICh0aW1lbGluZUFnZW50KSB7CisgICAgaWYgKEluc3BlY3RvclRpbWVs
aW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JU
aW1lbGluZUFnZW50KCkpIHsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbFJlY2VpdmVSZXNv
dXJjZURhdGEoaWRlbnRpZmllcik7CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9IHRpbWVsaW5l
QWdlbnQtPmlkKCk7CiAgICAgfQotICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUoaW5zcGVjdG9yQWdlbnQsIHRpbWVsaW5lQWdlbnRJZCk7CisgICAgcmV0dXJuIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lbGluZUFn
ZW50SWQpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVJl
c291cmNlRGF0YUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29r
aWUpCkBAIC00NDAsMTUgKzQzNywxNSBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkUmVjZWl2ZVJlc291cmNlRGF0YUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bQogICAgICAg
ICB0aW1lbGluZUFnZW50LT5kaWRSZWNlaXZlUmVzb3VyY2VEYXRhKCk7CiB9CiAKLUluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNl
aXZlUmVzb3VyY2VSZXNwb25zZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQorSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwot
ICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVs
aW5lQWdlbnQoaW5zcGVjdG9yQWdlbnQpOworICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRp
bWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50
KCk7CiAgICAgaWYgKHRpbWVsaW5lQWdlbnQpIHsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2ls
bFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlKGlkZW50aWZpZXIsIHJlc3BvbnNlKTsKICAgICAgICAg
dGltZWxpbmVBZ2VudElkID0gdGltZWxpbmVBZ2VudC0+aWQoKTsKICAgICB9Ci0gICAgcmV0dXJu
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnNwZWN0b3JBZ2VudCwgdGltZWxpbmVB
Z2VudElkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3Ry
dW1lbnRpbmdBZ2VudHMsIHRpbWVsaW5lQWdlbnRJZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlUmVzb3VyY2VSZXNwb25zZUltcGwoY29uc3QgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCkBAIC00NTcsMTIgKzQ1NCwxMyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBsKGNvbnN0IEluc3BlY3RvcklucwogICAgICAg
ICB0aW1lbGluZUFnZW50LT5kaWRSZWNlaXZlUmVzb3VyY2VSZXNwb25zZSgpOwogICAgIGlmICgh
bG9hZGVyKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9yRnJhbWUobG9hZGVyLT5mcmFtZSgpKSkgewotICAg
ICAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IHJldHJpZXZl
UmVzb3VyY2VBZ2VudChpbnNwZWN0b3JBZ2VudCkpCi0gICAgICAgICAgICByZXNvdXJjZUFnZW50
LT5kaWRSZWNlaXZlUmVzcG9uc2UoaWRlbnRpZmllciwgbG9hZGVyLCByZXNwb25zZSk7Ci0gICAg
ICAgIGlmIChJbnNwZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3BlY3RvckFn
ZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckNvbnNvbGVBZ2VudCgpKQotICAg
ICAgICAgICAgY29uc29sZUFnZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaWRlbnRpZmllciwgcmVz
cG9uc2UpOyAvLyBUaGlzIHNob3VsZCBjb21lIEFGVEVSIHJlc291cmNlIG5vdGlmaWNhdGlvbiwg
ZnJvbnQtZW5kIHJlbGllcyBvbiB0aGlzLgotICAgIH0KKyAgICBJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gY29va2llLmZpcnN0OworICAgIGlmICghaW5zdHJ1bWVu
dGluZ0FnZW50cykKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudCgpKQorICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaWRl
bnRpZmllciwgbG9hZGVyLCByZXNwb25zZSk7CisgICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2Vu
dCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ29uc29sZUFn
ZW50KCkpCisgICAgICAgIGNvbnNvbGVBZ2VudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGlkZW50aWZp
ZXIsIHJlc3BvbnNlKTsgLy8gVGhpcyBzaG91bGQgY29tZSBBRlRFUiByZXNvdXJjZSBub3RpZmlj
YXRpb24sIGZyb250LWVuZCByZWxpZXMgb24gdGhpcy4KIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlQnV0Q2FuY2VsZWRJbXBsKEZy
YW1lKiBmcmFtZSwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByKQpAQCAtNDg2LDQ1ICs0ODQsNDUgQEAgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlV2l0aFBvbGljeUlnbm9yZUltcGwo
RnJhbWUqIGZyYW1lLCBEb2N1bWUKICAgICBkaWRSZWNlaXZlUmVzb3VyY2VSZXNwb25zZUJ1dENh
bmNlbGVkSW1wbChmcmFtZSwgbG9hZGVyLCBpZGVudGlmaWVyLCByKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVDb250ZW50TGVuZ3RoSW1wbChJbnNwZWN0
b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgaW50IGRh
dGFMZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRSZWNlaXZlQ29udGVudExlbmd0aEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgZGF0YUxl
bmd0aCwgaW50IGVuY29kZWREYXRhTGVuZ3RoKQogewotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50KiByZXNvdXJjZUFnZW50ID0gcmV0cmlldmVSZXNvdXJjZUFnZW50KGluc3BlY3RvckFn
ZW50KSkKKyAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVz
b3VyY2VBZ2VudC0+ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoaWRlbnRpZmllciwgZGF0YUxlbmd0
aCwgZW5jb2RlZERhdGFMZW5ndGgpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkRmluaXNoTG9hZGluZ0ltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pc2hUaW1lKQordm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZEZpbmlzaExvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91Ymxl
IGZpbmlzaFRpbWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5l
QWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlmIChJ
bnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy0+aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRG
aW5pc2hMb2FkaW5nUmVzb3VyY2UoaWRlbnRpZmllciwgZmFsc2UsIGZpbmlzaFRpbWUpOwotICAg
IGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gcmV0cmlldmVSZXNv
dXJjZUFnZW50KGluc3BlY3RvckFnZW50KSkKKyAgICBpZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJlc291cmNl
QWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+ZGlkRmluaXNoTG9hZGluZyhpZGVudGlm
aWVyLCBmaW5pc2hUaW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZEZhaWxMb2FkaW5nSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmFpbExvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
UmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQq
IHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQor
ICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy0+aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFn
ZW50LT5kaWRGaW5pc2hMb2FkaW5nUmVzb3VyY2UoaWRlbnRpZmllciwgdHJ1ZSwgMCk7Ci0gICAg
aWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSByZXRyaWV2ZVJlc291
cmNlQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50
KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVzb3VyY2VB
Z2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5kaWRGYWlsTG9hZGluZyhpZGVudGlmaWVy
LCBlcnJvcik7Ci0gICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0g
aW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yQ29uc29sZUFn
ZW50KCkpCisgICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNv
bGVBZ2VudC0+ZGlkRmFpbExvYWRpbmcoaWRlbnRpZmllciwgZXJyb3IpOyAvLyBUaGlzIHNob3Vs
ZCBjb21lIEFGVEVSIHJlc291cmNlIG5vdGlmaWNhdGlvbiwgZnJvbnQtZW5kIHJlbGllcyBvbiB0
aGlzLgogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cmVzb3VyY2VSZXRyaWV2
ZWRCeVhNTEh0dHBSZXF1ZXN0SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsIGNvbnN0
IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNlbmRVUkwsIHVuc2lnbmVkIHNlbmRMaW5lTnVt
YmVyKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJlc291cmNlUmV0cmlldmVkQnlY
TUxIdHRwUmVxdWVzdEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywg
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2VuZFVSTCwgdW5zaWduZWQgc2VuZExp
bmVOdW1iZXIpCiB7Ci0gICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50
ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yQ29uc29s
ZUFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNv
bnNvbGVBZ2VudC0+cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVybCwgc2VuZFVS
TCwgc2VuZExpbmVOdW1iZXIpOwotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNv
dXJjZUFnZW50ID0gcmV0cmlldmVSZXNvdXJjZUFnZW50KGluc3BlY3RvckFnZW50KSkKKyAgICBp
ZiAoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMtPmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+
c2V0SW5pdGlhbFhIUkNvbnRlbnQoaWRlbnRpZmllciwgc291cmNlU3RyaW5nKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNjcmlwdEltcG9ydGVkSW1wbChJbnNwZWN0b3JB
Z2VudCogaW5zcGVjdG9yQWdlbnQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VTdHJpbmcpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0
SW1wb3J0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpCiB7Ci0g
ICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSByZXRyaWV2ZVJl
c291cmNlQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5zZXRJbml0aWFsU2NyaXB0Q29udGVu
dChpZGVudGlmaWVyLCBzb3VyY2VTdHJpbmcpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZG9tQ29udGVudExvYWRlZEV2ZW50RmlyZWRJbXBsKEluc3BlY3RvckFnZW50KiBp
bnNwZWN0b3JBZ2VudCwgRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwpCit2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZG9tQ29udGVudExvYWRlZEV2ZW50RmlyZWRJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEZyYW1lKiBmcmFtZSwgY29uc3Qg
S1VSTCYgdXJsKQogewogICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1l
LT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKICAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXIp
OwpAQCAtNTMyLDQ5ICs1MzAsNDkgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRv
bUNvbnRlbnRMb2FkZWRFdmVudEZpcmVkSW1wbChJbnNwZWN0b3JBZ2VudCogaW4KICAgICBpZiAo
ZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkgIT0gZnJhbWUgfHwgdXJsICE9IGRvY3VtZW50TG9h
ZGVyLT5yZXF1ZXN0VVJMKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGluc3BlY3RvckFnZW50
LT5kb21Db250ZW50TG9hZGVkRXZlbnRGaXJlZCgpOworICAgIGlmIChJbnNwZWN0b3JBZ2VudCog
aW5zcGVjdG9yQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JBZ2VudCgpKQor
ICAgICAgICBpbnNwZWN0b3JBZ2VudC0+ZG9tQ29udGVudExvYWRlZEV2ZW50RmlyZWQoKTsKIAot
ICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5z
dHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JET01BZ2VudCgpKQorICAgIGlmIChJbnNwZWN0
b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JET01B
Z2VudCgpKQogICAgICAgICBkb21BZ2VudC0+bWFpbkZyYW1lRE9NQ29udGVudExvYWRlZCgpOwog
Ci0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnNwZWN0
b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkp
CisgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVsaW5l
QWdlbnQtPmRpZE1hcmtET01Db250ZW50RXZlbnQoKTsKIAotICAgIGlmIChJbnNwZWN0b3JQYWdl
QWdlbnQqIHBhZ2VBZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCkt
Pmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclBhZ2VBZ2VudCgpKQogICAgICAg
ICBwYWdlQWdlbnQtPmRvbUNvbnRlbnRFdmVudEZpcmVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpsb2FkRXZlbnRGaXJlZEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50LCBGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCkKK3ZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpsb2FkRXZlbnRGaXJlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAg
ICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1
bWVudExvYWRlcigpOwogICAgIEFTU0VSVChkb2N1bWVudExvYWRlcik7CiAKLSAgICBpZiAoSW5z
cGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdB
Z2VudHMoKS0+aW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQq
IGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NQWdlbnQoKSkKICAg
ICAgICAgZG9tQWdlbnQtPmxvYWRFdmVudEZpcmVkKGRvY3VtZW50TG9hZGVyLT5mcmFtZSgpLT5k
b2N1bWVudCgpKTsKIAogICAgIGlmIChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSAhPSBmcmFt
ZSB8fCB1cmwgIT0gZG9jdW1lbnRMb2FkZXItPnJlcXVlc3RVUkwoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnNw
ZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50
KCkpCisgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0
cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCiAgICAgICAgIHRpbWVs
aW5lQWdlbnQtPmRpZE1hcmtMb2FkRXZlbnQoKTsKIAotICAgIGlmIChJbnNwZWN0b3JQYWdlQWdl
bnQqIHBhZ2VBZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmlu
c3BlY3RvclBhZ2VBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclBhZ2VBZ2VudCgpKQogICAgICAgICBw
YWdlQWdlbnQtPmxvYWRFdmVudEZpcmVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpmcmFtZURldGFjaGVkRnJvbVBhcmVudEltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50LCBGcmFtZSogZnJhbWUpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZnJhbWVEZXRhY2hlZEZyb21QYXJlbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50
KiBwYWdlQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNw
ZWN0b3JQYWdlQWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKICAgICAgICAgcGFn
ZUFnZW50LT5mcmFtZURldGFjaGVkKGZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZENvbW1pdExvYWRJbXBsKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBp
bnNwZWN0b3JBZ2VudCwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK3ZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRDb21taXRMb2FkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQogewot
ICAgIGlmICghaW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKKyAgICBJbnNwZWN0b3JBZ2VudCog
aW5zcGVjdG9yQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JBZ2VudCgpOwor
ICAgIGlmICghaW5zcGVjdG9yQWdlbnQgfHwgIWluc3BlY3RvckFnZW50LT5lbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpOwotCiAgICAgaWYg
KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5z
cGVjdG9yUGFnZUFnZW50KCkpCiAgICAgICAgIHBhZ2VBZ2VudC0+ZnJhbWVOYXZpZ2F0ZWQobG9h
ZGVyKTsKIApAQCAtNjEyLDE1ICs2MTAsMTQgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZENvbW1pdExvYWRJbXBsKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFnZW50KiBpbnMKICAg
ICBpbnNwZWN0b3JBZ2VudC0+ZGlkQ29tbWl0TG9hZCgpOwogfQogCi1JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsV3JpdGVIVE1MSW1w
bChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIHVuc2lnbmVkIGludCBsZW5ndGgsIHVu
c2lnbmVkIGludCBzdGFydExpbmUpCitJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsV3JpdGVIVE1MSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBp
bnQgc3RhcnRMaW5lKQogewogICAgIGludCB0aW1lbGluZUFnZW50SWQgPSAwOwotICAgIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQo
aW5zcGVjdG9yQWdlbnQpOwotICAgIGlmICh0aW1lbGluZUFnZW50KSB7CisgICAgaWYgKEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5p
bnNwZWN0b3JUaW1lbGluZUFnZW50KCkpIHsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbFdy
aXRlSFRNTChsZW5ndGgsIHN0YXJ0TGluZSk7CiAgICAgICAgIHRpbWVsaW5lQWdlbnRJZCA9IHRp
bWVsaW5lQWdlbnQtPmlkKCk7CiAgICAgfQotICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUoaW5zcGVjdG9yQWdlbnQsIHRpbWVsaW5lQWdlbnRJZCk7CisgICAgcmV0dXJu
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1l
bGluZUFnZW50SWQpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkV3Jp
dGVIVE1MSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSwg
dW5zaWduZWQgaW50IGVuZExpbmUpCkBAIC02MjksMzkgKzYyNiwzOSBAQCB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkV3JpdGVIVE1MSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25DbwogICAgICAgICB0aW1lbGluZUFnZW50LT5kaWRXcml0ZUhUTUwoZW5kTGluZSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xl
SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIE1lc3NhZ2VTb3VyY2Ugc291cmNl
LCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgUGFzc1JlZlB0cjxT
Y3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjphZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2Fn
ZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8U2NyaXB0QXJn
dW1lbnRzPiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2sp
CiB7Ci0gICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zcGVj
dG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkp
CisgICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNvbGVBZ2Vu
dC0+YWRkTWVzc2FnZVRvQ29uc29sZShzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBhcmd1
bWVudHMsIGNhbGxTdGFjayk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjph
ZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIE1l
c3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWws
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5n
JiBzb3VyY2VJRCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9D
b25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBNZXNz
YWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYg
c291cmNlSUQpCiB7Ci0gICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50
ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yQ29uc29s
ZUFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNv
bnNvbGVBZ2VudC0+YWRkTWVzc2FnZVRvQ29uc29sZShzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNz
YWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpjb25zb2xlQ291bnRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwg
UGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTY3JpcHRD
YWxsU3RhY2s+IHN0YWNrKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVD
b3VudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFzc1Jl
ZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3Rh
Y2s+IHN0YWNrKQogewotICAgIGlmIChJbnNwZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2Vu
dCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckNvbnNv
bGVBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckNvbnNvbGVBZ2VudCgpKQogICAgICAgICBj
b25zb2xlQWdlbnQtPmNvdW50KGFyZ3VtZW50cywgc3RhY2spOwogfQogCi12b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6c3RhcnRDb25zb2xlVGltaW5nSW1wbChJbnNwZWN0b3JBZ2VudCog
aW5zcGVjdG9yQWdlbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUpCit2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6c3RhcnRDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewotICAgIGlmIChJbnNw
ZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVt
ZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckNvbnNvbGVBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0
b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3Bl
Y3RvckNvbnNvbGVBZ2VudCgpKQogICAgICAgICBjb25zb2xlQWdlbnQtPnN0YXJ0VGltaW5nKHRp
dGxlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGlt
aW5nSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IFN0cmluZyYgdGl0
bGUsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBzdGFjaykKK3ZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgU3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxTY3Jp
cHRDYWxsU3RhY2s+IHN0YWNrKQogewotICAgIGlmIChJbnNwZWN0b3JDb25zb2xlQWdlbnQqIGNv
bnNvbGVBZ2VudCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3Bl
Y3RvckNvbnNvbGVBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNv
bGVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckNvbnNvbGVBZ2VudCgpKQog
ICAgICAgICBjb25zb2xlQWdlbnQtPnN0b3BUaW1pbmcodGl0bGUsIHN0YWNrKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVNYXJrVGltZWxpbmVJbXBsKEluc3Bl
Y3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFy
Z3VtZW50cykKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlTWFya1RpbWVs
aW5lSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVm
UHRyPFNjcmlwdEFyZ3VtZW50cz4gYXJndW1lbnRzKQogewotICAgIGlmIChJbnNwZWN0b3JUaW1l
bGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGluc3BlY3Rv
ckFnZW50KSkgeworICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKSB7CiAgICAg
ICAgIFN0cmluZyBtZXNzYWdlOwogICAgICAgICBhcmd1bWVudHMtPmdldEZpcnN0QXJndW1lbnRB
c1N0cmluZyhtZXNzYWdlKTsKICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkTWFya1RpbWVsaW5l
KG1lc3NhZ2UpOwpAQCAtNjY5LDE2MSArNjY2LDE1MyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6Y29uc29sZU1hcmtUaW1lbGluZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
cgogfQogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi12b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6YWRkU3RhcnRQcm9maWxpbmdNZXNzYWdlVG9Db25zb2xlSW1wbChJbnNw
ZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQordm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgU3RyaW5nJiB0aXRsZSwg
dW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCiB7Ci0gICAgaWYg
KEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+
aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JQcm9maWxlckFnZW50KCkpCisgICAgaWYg
KEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLT5pbnNwZWN0b3JQcm9maWxlckFnZW50KCkpCiAgICAgICAgIHByb2ZpbGVyQWdlbnQtPmFk
ZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZSh0aXRsZSwgbGluZU51bWJlciwgc291cmNl
VVJMKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZFByb2ZpbGVJbXBs
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHBy
b2ZpbGUsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2spCit2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6YWRkUHJvZmlsZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cywgUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHByb2ZpbGUsIFBhc3NS
ZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2spCiB7Ci0gICAgaWYgKEluc3BlY3RvclBy
b2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQgPSBpbnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGlu
Z0FnZW50cygpLT5pbnNwZWN0b3JQcm9maWxlckFnZW50KCkpIHsKKyAgICBpZiAoSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQoKSkgewogICAgICAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxh
c3RDYWxsZXIgPSBjYWxsU3RhY2stPmF0KDApOwogICAgICAgICBwcm9maWxlckFnZW50LT5hZGRQ
cm9maWxlKHByb2ZpbGUsIGxhc3RDYWxsZXIubGluZU51bWJlcigpLCBsYXN0Q2FsbGVyLnNvdXJj
ZVVSTCgpKTsKICAgICB9CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omdl
dEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWVJbXBsKEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCwgYm9vbCBpbmNyZW1lbnRQcm9maWxlTnVtYmVyKQorU3RyaW5nIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZUltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgYm9vbCBpbmNyZW1lbnRQ
cm9maWxlTnVtYmVyKQogewotICAgIGlmIChJbnNwZWN0b3JQcm9maWxlckFnZW50KiBwcm9maWxl
ckFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9y
UHJvZmlsZXJBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JQcm9maWxlckFnZW50KiBwcm9maWxl
ckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUHJvZmlsZXJBZ2VudCgpKQog
ICAgICAgICByZXR1cm4gcHJvZmlsZXJBZ2VudC0+Z2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9m
aWxlTmFtZShpbmNyZW1lbnRQcm9maWxlTnVtYmVyKTsKICAgICByZXR1cm4gIiI7CiB9CiAKLWJv
b2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwcm9maWxlckVuYWJsZWRJbXBsKEluc3BlY3Rv
ckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKK2Jvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpw
cm9maWxlckVuYWJsZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMpCiB7Ci0gICAgaWYgKEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQgPSBp
bnNwZWN0b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JQcm9maWxlckFn
ZW50KCkpCisgICAgaWYgKEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQgPSBp
bnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JQcm9maWxlckFnZW50KCkpCiAgICAgICAgIHJl
dHVybiBwcm9maWxlckFnZW50LT5lbmFibGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkT3BlbkRhdGFiYXNlSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIFBh
c3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCit2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3Ry
aW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQog
ewotICAgIGlmICghaW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKKyAgICBJbnNwZWN0b3JBZ2Vu
dCogaW5zcGVjdG9yQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JBZ2VudCgp
OworICAgIGlmICghaW5zcGVjdG9yQWdlbnQgfHwgIWluc3BlY3RvckFnZW50LT5lbmFibGVkKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogZGJBZ2Vu
dCA9IGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvckRhdGFi
YXNlQWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogZGJBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvckRhdGFiYXNlQWdlbnQoKSkKICAgICAgICAgZGJB
Z2VudC0+ZGlkT3BlbkRhdGFiYXNlKGRhdGFiYXNlLCBkb21haW4sIG5hbWUsIHZlcnNpb24pOwog
fQogI2VuZGlmCiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi12b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkVXNlRE9NU3RvcmFnZUltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50LCBTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZy
YW1lKiBmcmFtZSkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRVc2VET01TdG9y
YWdlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBTdG9yYWdl
QXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSkKIHsK
LSAgICBpZiAoIWluc3BlY3RvckFnZW50LT5lbmFibGVkKCkpCisgICAgSW5zcGVjdG9yQWdlbnQq
IGluc3BlY3RvckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQWdlbnQoKTsK
KyAgICBpZiAoIWluc3BlY3RvckFnZW50IHx8ICFpbnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCogZG9tU3Rv
cmFnZUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50KCkpCisgICAgaWYgKEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCog
ZG9tU3RvcmFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50KCkpCiAgICAgICAgIGRvbVN0b3JhZ2VBZ2VudC0+ZGlkVXNlRE9NU3RvcmFnZShzdG9y
YWdlQXJlYSwgaXNMb2NhbFN0b3JhZ2UsIGZyYW1lKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxF
KFdPUktFUlMpCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU3RhcnRXb3JrZXJD
b250ZXh0SW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIFdvcmtlckNvbnRleHRQ
cm94eSogd29ya2VyQ29udGV4dFByb3h5KQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZFN0YXJ0V29ya2VyQ29udGV4dEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cywgV29ya2VyQ29udGV4dFByb3h5KiB3b3JrZXJDb250ZXh0UHJveHkpCiB7Ci0g
ICAgaWYgKEluc3BlY3RvcldvcmtlckFnZW50KiB3b3JrZXJBZ2VudCA9IGluc3BlY3RvckFnZW50
LT5pbnN0cnVtZW50aW5nQWdlbnRzKCktPmluc3BlY3RvcldvcmtlckFnZW50KCkpCisgICAgaWYg
KEluc3BlY3RvcldvcmtlckFnZW50KiB3b3JrZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMt
Pmluc3BlY3RvcldvcmtlckFnZW50KCkpCiAgICAgICAgIHdvcmtlckFnZW50LT5kaWRTdGFydFdv
cmtlckNvbnRleHQod29ya2VyQ29udGV4dFByb3h5KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZENyZWF0ZVdvcmtlckltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50LCBpbnRwdHJfdCBpZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWRXb3Jr
ZXIpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlV29ya2VySW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnRwdHJfdCBpZCwgY29u
c3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWRXb3JrZXIpCiB7Ci0gICAgaW5zcGVjdG9yQWdl
bnQtPmRpZENyZWF0ZVdvcmtlcihpZCwgdXJsLCBpc1NoYXJlZFdvcmtlcik7CisgICAgaWYgKElu
c3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3Bl
Y3RvckFnZW50KCkpCisgICAgICAgIGluc3BlY3RvckFnZW50LT5kaWRDcmVhdGVXb3JrZXIoaWQs
IHVybCwgaXNTaGFyZWRXb3JrZXIpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkRGVzdHJveVdvcmtlckltcGwoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBp
bnRwdHJfdCBpZCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREZXN0cm95V29y
a2VySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBpbnRwdHJf
dCBpZCkKIHsKLSAgICBpbnNwZWN0b3JBZ2VudC0+ZGlkRGVzdHJveVdvcmtlcihpZCk7CisgICAg
aWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMt
Pmluc3BlY3RvckFnZW50KCkpCisgICAgICAgIGluc3BlY3RvckFnZW50LT5kaWREZXN0cm95V29y
a2VyKGlkKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQotdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdlYlNvY2tldEltcGwoSW5zcGVjdG9yQWdl
bnQqIGluc3BlY3RvckFnZW50LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwm
IHJlcXVlc3RVUkwsIGNvbnN0IEtVUkwmKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZENyZWF0ZVdlYlNvY2tldEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBLVVJMJiByZXF1ZXN0VVJM
LCBjb25zdCBLVVJMJikKIHsKLSAgICBpZiAoIWluc3BlY3RvckFnZW50LT5lbmFibGVkKCkpCisg
ICAgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+
aW5zcGVjdG9yQWdlbnQoKTsKKyAgICBpZiAoIWluc3BlY3RvckFnZW50IHx8ICFpbnNwZWN0b3JB
Z2VudC0+ZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKEluc3BlY3RvclJlc291
cmNlQWdlbnQqIHJlc291cmNlQWdlbnQgPSByZXRyaWV2ZVJlc291cmNlQWdlbnQoaW5zcGVjdG9y
QWdlbnQpKQorICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQogICAgICAgICBy
ZXNvdXJjZUFnZW50LT5kaWRDcmVhdGVXZWJTb2NrZXQoaWRlbnRpZmllciwgcmVxdWVzdFVSTCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFdlYlNvY2tldEhh
bmRzaGFrZVJlcXVlc3RJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0JiByZXF1
ZXN0KQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kV2ViU29ja2V0SGFu
ZHNoYWtlUmVxdWVzdEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXF1
ZXN0JiByZXF1ZXN0KQogewotICAgIGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJj
ZUFnZW50ID0gcmV0cmlldmVSZXNvdXJjZUFnZW50KGluc3BlY3RvckFnZW50KSkKKyAgICBpZiAo
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3VyY2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMtPmluc3BlY3RvclJlc291cmNlQWdlbnQoKSkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+d2ls
bFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KGlkZW50aWZpZXIsIHJlcXVlc3QpOwogfQog
Ci12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRz
aGFrZVJlc3BvbnNlSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UmIHJlc3Bv
bnNlKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVXZWJTb2NrZXRI
YW5kc2hha2VSZXNwb25zZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VS
ZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJl
c291cmNlQWdlbnQgPSByZXRyaWV2ZVJlc291cmNlQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAg
IGlmIChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy0+aW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50
LT5kaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UoaWRlbnRpZmllciwgcmVzcG9u
c2UpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xvc2VXZWJTb2Nr
ZXRJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyKQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENsb3NlV2ViU29ja2V0
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIpCiB7Ci0gICAgaWYgKEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291
cmNlQWdlbnQgPSByZXRyaWV2ZVJlc291cmNlQWdlbnQoaW5zcGVjdG9yQWdlbnQpKQorICAgIGlm
IChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiByZXNvdXJjZUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy0+aW5zcGVjdG9yUmVzb3VyY2VBZ2VudCgpKQogICAgICAgICByZXNvdXJjZUFnZW50LT5k
aWRDbG9zZVdlYlNvY2tldChpZGVudGlmaWVyKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpu
ZXR3b3JrU3RhdGVDaGFuZ2VkSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQpCit2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bmV0d29ya1N0YXRlQ2hhbmdlZEltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykKIHsKLSAgICBpZiAoSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBsaWNhdGlvbkNhY2hlQWdlbnQgPSBpbnNwZWN0
b3JBZ2VudC0+aW5zdHJ1bWVudGluZ0FnZW50cygpLT5pbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQoKSkKKyAgICBpZiAoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBsaWNh
dGlvbkNhY2hlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQoKSkKICAgICAgICAgYXBwbGljYXRpb25DYWNoZUFnZW50LT5uZXR3b3JrU3Rh
dGVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp1cGRhdGVB
cHBsaWNhdGlvbkNhY2hlU3RhdHVzSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQs
IEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp1cGRhdGVBcHBs
aWNhdGlvbkNhY2hlU3RhdHVzSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKEluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudCogYXBwbGljYXRpb25DYWNoZUFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1l
bnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KCkpCisgICAgaWYg
KEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCogYXBwbGljYXRpb25DYWNoZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KCkpCiAg
ICAgICAgIGFwcGxpY2F0aW9uQ2FjaGVBZ2VudC0+dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1
cyhmcmFtZSk7CiB9CiAjZW5kaWYKIAotYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhh
c0Zyb250ZW5kKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKK2Jvb2wgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpjb2xsZWN0aW5nSFRNTFBhcnNlRXJyb3JzKEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMpCiB7Ci0gICAgcmV0dXJuIGluc3BlY3RvckFnZW50
LT5oYXNGcm9udGVuZCgpOworICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JBZ2VudCgpKQorICAgICAgICByZXR1cm4g
aW5zcGVjdG9yQWdlbnQtPmhhc0Zyb250ZW5kKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQo
SW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBjb25zdCBTdHJpbmcmIGNhdGVnb3J5VHlw
ZSwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUsIGJvb2wgc3luY2hyb25vdXMpCit2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6cGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgU3RyaW5nJiBjYXRlZ29yeVR5
cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBib29sIHN5bmNocm9ub3VzKQogewogI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIGlmIChJbnNwZWN0b3JET01EZWJ1Z2dlckFn
ZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2Vu
dHMoKS0+aW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5z
cGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpKQogICAgICAgICBkb21EZWJ1Z2dlckFnZW50LT5wYXVz
ZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChjYXRlZ29yeVR5cGUsIGV2ZW50TmFtZSwgc3luY2hyb25v
dXMpOwogI2VuZGlmCiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjYW5jZWxQ
YXVzZU9uTmF0aXZlRXZlbnQoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50KQordm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNhbmNlbFBhdXNlT25OYXRpdmVFdmVudChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzKQogewogI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQotICAgIGlmIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFn
ZW50ID0gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yRGVi
dWdnZXJBZ2VudCgpKQorICAgIGlmIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFn
ZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yRGVidWdnZXJBZ2VudCgpKQogICAg
ICAgICBkZWJ1Z2dlckFnZW50LT5jYW5jZWxQYXVzZU9uTmV4dFN0YXRlbWVudCgpOwogI2VuZGlm
CiB9CiAKLUluc3BlY3RvclRpbWVsaW5lQWdlbnQqIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
cmV0cmlldmVUaW1lbGluZUFnZW50KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKLXsK
LSAgICByZXR1cm4gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1lbnRpbmdBZ2VudHMoKS0+aW5zcGVj
dG9yVGltZWxpbmVBZ2VudCgpOwotfQotCiBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnJldHJpZXZlVGltZWxpbmVBZ2VudChjb25zdCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSkKIHsKICAgICBpZiAoIWNvb2tpZS5maXJzdCkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVB
Z2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChjb29raWUuZmlyc3QpOworICAgIEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBjb29raWUuZmlyc3QtPmluc3BlY3RvclRp
bWVsaW5lQWdlbnQoKTsKICAgICBpZiAodGltZWxpbmVBZ2VudCAmJiB0aW1lbGluZUFnZW50LT5p
ZCgpID09IGNvb2tpZS5zZWNvbmQpCiAgICAgICAgIHJldHVybiB0aW1lbGluZUFnZW50OwogICAg
IHJldHVybiAwOwogfQogCi1JbnNwZWN0b3JSZXNvdXJjZUFnZW50KiBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnJldHJpZXZlUmVzb3VyY2VBZ2VudChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9y
QWdlbnQpCi17Ci0gICAgcmV0dXJuIGluc3BlY3RvckFnZW50LT5pbnN0cnVtZW50aW5nQWdlbnRz
KCktPmluc3BlY3RvclJlc291cmNlQWdlbnQoKTsKLX0KLQotSW5zcGVjdG9yUGFnZUFnZW50KiBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJldHJpZXZlUGFnZUFnZW50KEluc3BlY3RvckFnZW50
KiBpbnNwZWN0b3JBZ2VudCkKLXsKLSAgICByZXR1cm4gaW5zcGVjdG9yQWdlbnQtPmluc3RydW1l
bnRpbmdBZ2VudHMoKS0+aW5zcGVjdG9yUGFnZUFnZW50KCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vICFFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCmluZGV4IDM4MTAy
NmQuLjQwYWEwODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTQ3LDEwICs0Nyw4IEBAIGNsYXNzIEVsZW1lbnQ7CiBj
bGFzcyBFdmVudENvbnRleHQ7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEhpdFRlc3RS
ZXN1bHQ7Ci1jbGFzcyBJbnNwZWN0b3JBZ2VudDsKLWNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsK
LWNsYXNzIEluc3BlY3RvclJlc291cmNlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OworY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIEtVUkw7CiBjbGFzcyBOb2Rl
OwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwpAQCAtNjgsNyArNjYsOSBAQCBjbGFzcyBXZWJTb2Nr
ZXRIYW5kc2hha2VSZXF1ZXN0OwogY2xhc3MgV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2U7CiAj
ZW5kaWYKIAotdHlwZWRlZiBwYWlyPEluc3BlY3RvckFnZW50KiwgaW50PiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWU7CisjZGVmaW5lIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2
YWx1ZSkgaWYgKCFoYXNGcm9udGVuZHMoKSkgcmV0dXJuIHZhbHVlOworCit0eXBlZGVmIHBhaXI8
SW5zdHJ1bWVudGluZ0FnZW50cyosIGludD4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2ll
OwogCiBjbGFzcyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24gewogcHVibGljOgpAQCAtMTgwLDE0
MyArMTgwLDEzOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0g
ICAgc3RhdGljIHZvaWQgYmluZEluc3BlY3RvckFnZW50KFBhZ2UqIHBhZ2UsIEluc3BlY3RvckFn
ZW50KiBpbnNwZWN0b3JBZ2VudCkgeyBpbnNwZWN0b3JBZ2VudHMoKS5zZXQocGFnZSwgaW5zcGVj
dG9yQWdlbnQpOyB9Ci0gICAgc3RhdGljIHZvaWQgdW5iaW5kSW5zcGVjdG9yQWdlbnQoUGFnZSog
cGFnZSkgeyBpbnNwZWN0b3JBZ2VudHMoKS5yZW1vdmUocGFnZSk7IH0KKyAgICBzdGF0aWMgdm9p
ZCBiaW5kSW5zdHJ1bWVudGluZ0FnZW50cyhQYWdlKiBwYWdlLCBJbnN0cnVtZW50aW5nQWdlbnRz
KiBhZ2VudHMpIHsgaW5zdHJ1bWVudGluZ0FnZW50cygpLnNldChwYWdlLCBhZ2VudHMpOyB9Cisg
ICAgc3RhdGljIHZvaWQgdW5iaW5kSW5zdHJ1bWVudGluZ0FnZW50cyhQYWdlKiBwYWdlKSB7IGlu
c3RydW1lbnRpbmdBZ2VudHMoKS5yZW1vdmUocGFnZSk7IH0KICAgICBzdGF0aWMgdm9pZCBmcm9u
dGVuZENyZWF0ZWQoKSB7IHNfZnJvbnRlbmRDb3VudGVyICs9IDE7IH0KICAgICBzdGF0aWMgdm9p
ZCBmcm9udGVuZERlbGV0ZWQoKSB7IHNfZnJvbnRlbmRDb3VudGVyIC09IDE7IH0KICAgICBzdGF0
aWMgYm9vbCBoYXNGcm9udGVuZHMoKSB7IHJldHVybiBzX2Zyb250ZW5kQ291bnRlcjsgfQotICAg
IHN0YXRpYyBib29sIGhhc0Zyb250ZW5kKFBhZ2UqKTsKKyAgICBzdGF0aWMgYm9vbCBjb2xsZWN0
aW5nSFRNTFBhcnNlRXJyb3JzKFBhZ2UqKTsKICNlbHNlCiAgICAgc3RhdGljIGJvb2wgaGFzRnJv
bnRlbmRzKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBzdGF0aWMgYm9vbCBoYXNGcm9udGVuZChQ
YWdlKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBzdGF0aWMgYm9vbCBjb2xsZWN0aW5nSFRNTFBh
cnNlRXJyb3JzKFBhZ2UqKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKIHByaXZhdGU6CiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBzdGF0aWMgdm9pZCBkaWRDbGVhcldpbmRvd09iamVj
dEluV29ybGRJbXBsKEluc3BlY3RvckFnZW50KiwgRnJhbWUqLCBET01XcmFwcGVyV29ybGQqKTsK
LSAgICBzdGF0aWMgdm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkSW1wbChJbnNwZWN0b3JBZ2Vu
dCopOworICAgIHN0YXRpYyB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZEltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyosIEZyYW1lKiwgRE9NV3JhcHBlcldvcmxkKik7CisgICAgc3RhdGlj
IHZvaWQgaW5zcGVjdGVkUGFnZURlc3Ryb3llZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyopOwog
Ci0gICAgc3RhdGljIHZvaWQgd2lsbEluc2VydERPTU5vZGVJbXBsKEluc3BlY3RvckFnZW50Kiwg
Tm9kZSogbm9kZSwgTm9kZSogcGFyZW50KTsKLSAgICBzdGF0aWMgdm9pZCBkaWRJbnNlcnRET01O
b2RlSW1wbChJbnNwZWN0b3JBZ2VudCosIE5vZGUqKTsKLSAgICBzdGF0aWMgdm9pZCB3aWxsUmVt
b3ZlRE9NTm9kZUltcGwoSW5zcGVjdG9yQWdlbnQqLCBOb2RlKik7Ci0gICAgc3RhdGljIHZvaWQg
ZGlkUmVtb3ZlRE9NTm9kZUltcGwoSW5zcGVjdG9yQWdlbnQqLCBOb2RlKik7Ci0gICAgc3RhdGlj
IHZvaWQgd2lsbE1vZGlmeURPTUF0dHJJbXBsKEluc3BlY3RvckFnZW50KiwgRWxlbWVudCopOwot
ICAgIHN0YXRpYyB2b2lkIGRpZE1vZGlmeURPTUF0dHJJbXBsKEluc3BlY3RvckFnZW50KiwgRWxl
bWVudCopOwotICAgIHN0YXRpYyB2b2lkIGNoYXJhY3RlckRhdGFNb2RpZmllZEltcGwoSW5zcGVj
dG9yQWdlbnQqLCBDaGFyYWN0ZXJEYXRhKik7Ci0gICAgc3RhdGljIHZvaWQgZGlkSW52YWxpZGF0
ZVN0eWxlQXR0ckltcGwoSW5zcGVjdG9yQWdlbnQqLCBOb2RlKik7CisgICAgc3RhdGljIHZvaWQg
d2lsbEluc2VydERPTU5vZGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBOb2RlKiwgTm9kZSog
cGFyZW50KTsKKyAgICBzdGF0aWMgdm9pZCBkaWRJbnNlcnRET01Ob2RlSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgTm9kZSopOworICAgIHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVET01Ob2RlSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzKiwgTm9kZSopOworICAgIHN0YXRpYyB2b2lkIGRpZFJlbW92
ZURPTU5vZGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBOb2RlKik7CisgICAgc3RhdGljIHZv
aWQgd2lsbE1vZGlmeURPTUF0dHJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBFbGVtZW50Kik7
CisgICAgc3RhdGljIHZvaWQgZGlkTW9kaWZ5RE9NQXR0ckltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyosIEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBjaGFyYWN0ZXJEYXRhTW9kaWZpZWRJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMqLCBDaGFyYWN0ZXJEYXRhKik7CisgICAgc3RhdGljIHZvaWQg
ZGlkSW52YWxpZGF0ZVN0eWxlQXR0ckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIE5vZGUqKTsK
IAotICAgIHN0YXRpYyB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50SW1wbChJbnNwZWN0b3JB
Z2VudCosIGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKLSAg
ICBzdGF0aWMgYm9vbCBoYW5kbGVNb3VzZVByZXNzSW1wbChJbnNwZWN0b3JBZ2VudCopOworICAg
IHN0YXRpYyB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50SW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKiwgY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOworICAg
IHN0YXRpYyBib29sIGhhbmRsZU1vdXNlUHJlc3NJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqKTsK
IAotICAgIHN0YXRpYyB2b2lkIHdpbGxTZW5kWE1MSHR0cFJlcXVlc3RJbXBsKEluc3BlY3RvckFn
ZW50KiwgY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHN0YXRpYyB2b2lkIGRpZFNjaGVkdWxlUmVz
b3VyY2VSZXF1ZXN0SW1wbChJbnNwZWN0b3JBZ2VudCosIGNvbnN0IFN0cmluZyYgdXJsKTsKLSAg
ICBzdGF0aWMgdm9pZCBkaWRJbnN0YWxsVGltZXJJbXBsKEluc3BlY3RvckFnZW50KiwgaW50IHRp
bWVySWQsIGludCB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpOwotICAgIHN0YXRpYyB2b2lkIGRp
ZFJlbW92ZVRpbWVySW1wbChJbnNwZWN0b3JBZ2VudCosIGludCB0aW1lcklkKTsKKyAgICBzdGF0
aWMgdm9pZCB3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwg
Y29uc3QgU3RyaW5nJiB1cmwpOworICAgIHN0YXRpYyB2b2lkIGRpZFNjaGVkdWxlUmVzb3VyY2VS
ZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgY29uc3QgU3RyaW5nJiB1cmwpOworICAg
IHN0YXRpYyB2b2lkIGRpZEluc3RhbGxUaW1lckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIGlu
dCB0aW1lcklkLCBpbnQgdGltZW91dCwgYm9vbCBzaW5nbGVTaG90KTsKKyAgICBzdGF0aWMgdm9p
ZCBkaWRSZW1vdmVUaW1lckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIGludCB0aW1lcklkKTsK
IAotICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbENhbGxGdW5j
dGlvbkltcGwoSW5zcGVjdG9yQWdlbnQqLCBjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUsIGludCBz
Y3JpcHRMaW5lKTsKKyAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdp
bGxDYWxsRnVuY3Rpb25JbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBjb25zdCBTdHJpbmcmIHNj
cmlwdE5hbWUsIGludCBzY3JpcHRMaW5lKTsKICAgICBzdGF0aWMgdm9pZCBkaWRDYWxsRnVuY3Rp
b25JbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwotICAgIHN0YXRp
YyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbENoYW5nZVhIUlJlYWR5U3RhdGVJ
bXBsKEluc3BlY3RvckFnZW50KiwgWE1MSHR0cFJlcXVlc3QqIHJlcXVlc3QpOworICAgIHN0YXRp
YyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbENoYW5nZVhIUlJlYWR5U3RhdGVJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBYTUxIdHRwUmVxdWVzdCopOwogICAgIHN0YXRpYyB2
b2lkIGRpZENoYW5nZVhIUlJlYWR5U3RhdGVJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSYpOwotICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUg
d2lsbERpc3BhdGNoRXZlbnRJbXBsKEluc3BlY3RvckFnZW50KiwgY29uc3QgRXZlbnQmIGV2ZW50
LCBET01XaW5kb3cqIHdpbmRvdywgTm9kZSogbm9kZSwgY29uc3QgVmVjdG9yPEV2ZW50Q29udGV4
dD4mIGFuY2VzdG9ycyk7CisgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSB3aWxsRGlzcGF0Y2hFdmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIGNvbnN0IEV2ZW50
JiwgRE9NV2luZG93KiwgTm9kZSosIGNvbnN0IFZlY3RvcjxFdmVudENvbnRleHQ+JiBhbmNlc3Rv
cnMpOwogICAgIHN0YXRpYyB2b2lkIGRpZERpc3BhdGNoRXZlbnRJbXBsKGNvbnN0IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwotICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZlbnRPbldpbmRvd0ltcGwoSW5zcGVjdG9yQWdlbnQq
LCBjb25zdCBFdmVudCYgZXZlbnQsIERPTVdpbmRvdyogd2luZG93KTsKKyAgICBzdGF0aWMgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3dJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMqLCBjb25zdCBFdmVudCYsIERPTVdpbmRvdyopOwogICAgIHN0
YXRpYyB2b2lkIGRpZERpc3BhdGNoRXZlbnRPbldpbmRvd0ltcGwoY29uc3QgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llJik7Ci0gICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSB3aWxsRXZhbHVhdGVTY3JpcHRJbXBsKEluc3BlY3RvckFnZW50KiwgY29uc3QgU3Ry
aW5nJiB1cmwsIGludCBsaW5lTnVtYmVyKTsKKyAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIHdpbGxFdmFsdWF0ZVNjcmlwdEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyos
IGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJlcik7CiAgICAgc3RhdGljIHZvaWQgZGlk
RXZhbHVhdGVTY3JpcHRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYp
OwotICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbEZpcmVUaW1l
ckltcGwoSW5zcGVjdG9yQWdlbnQqLCBpbnQgdGltZXJJZCk7CisgICAgc3RhdGljIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsRmlyZVRpbWVySW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKiwgaW50IHRpbWVySWQpOwogICAgIHN0YXRpYyB2b2lkIGRpZEZpcmVUaW1lckltcGwoY29u
c3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7Ci0gICAgc3RhdGljIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsTGF5b3V0SW1wbChJbnNwZWN0b3JBZ2VudCopOwor
ICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbExheW91dEltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyopOwogICAgIHN0YXRpYyB2b2lkIGRpZExheW91dEltcGwoY29u
c3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7Ci0gICAgc3RhdGljIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsTG9hZFhIUkltcGwoSW5zcGVjdG9yQWdlbnQqLCBY
TUxIdHRwUmVxdWVzdCogcmVxdWVzdCk7CisgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSB3aWxsTG9hZFhIUkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIFhNTEh0dHBS
ZXF1ZXN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGlkTG9hZFhIUkltcGwoY29uc3QgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llJik7Ci0gICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSB3aWxsUGFpbnRJbXBsKEluc3BlY3RvckFnZW50KiwgY29uc3QgSW50UmVjdCYg
cmVjdCk7CisgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsUGFp
bnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgc3RhdGlj
IHZvaWQgZGlkUGFpbnRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYp
OwotICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbFJlY2FsY3Vs
YXRlU3R5bGVJbXBsKEluc3BlY3RvckFnZW50Kik7CisgICAgc3RhdGljIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSB3aWxsUmVjYWxjdWxhdGVTdHlsZUltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyopOwogICAgIHN0YXRpYyB2b2lkIGRpZFJlY2FsY3VsYXRlU3R5bGVJbXBsKGNvbnN0IElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlV
c2VyQWdlbnRPdmVycmlkZUltcGwoSW5zcGVjdG9yQWdlbnQqLCBTdHJpbmcqKTsKLSAgICBzdGF0
aWMgdm9pZCB3aWxsU2VuZFJlcXVlc3RJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwotICAgIHN0YXRpYyB2b2lkIGNvbnRp
bnVlQWZ0ZXJQaW5nTG9hZGVySW1wbChJbnNwZWN0b3JBZ2VudCosIHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJik7Ci0gICAgc3RhdGljIHZvaWQgbWFya1Jlc291cmNlQXNDYWNoZWRJbXBsKElu
c3BlY3RvckFnZW50KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKLSAgICBzdGF0aWMgdm9p
ZCBkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGVJbXBsKEluc3BlY3RvckFnZW50KiwgRG9j
dW1lbnRMb2FkZXIqLCBjb25zdCBDYWNoZWRSZXNvdXJjZSopOwotICAgIHN0YXRpYyBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbFJlY2VpdmVSZXNvdXJjZURhdGFJbXBsKEluc3Bl
Y3RvckFnZW50KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVVzZXJBZ2VudE92ZXJyaWRlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgU3RyaW5nKik7
CisgICAgc3RhdGljIHZvaWQgd2lsbFNlbmRSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIFJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOworICAgIHN0
YXRpYyB2b2lkIGNvbnRpbnVlQWZ0ZXJQaW5nTG9hZGVySW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIFJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICBzdGF0aWMgdm9pZCBtYXJrUmVz
b3VyY2VBc0NhY2hlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllcik7CisgICAgc3RhdGljIHZvaWQgZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hl
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBDYWNoZWRS
ZXNvdXJjZSopOworICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2ls
bFJlY2VpdmVSZXNvdXJjZURhdGFJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIpOwogICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNvdXJjZURhdGFJ
bXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwotICAgIHN0YXRpYyBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNl
SW1wbChJbnNwZWN0b3JBZ2VudCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOworICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUgd2lsbFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAg
c3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBsKGNvbnN0IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSYsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1l
bnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgc3RhdGljIHZvaWQgZGlk
UmVjZWl2ZVJlc291cmNlUmVzcG9uc2VCdXRDYW5jZWxlZEltcGwoRnJhbWUqLCBEb2N1bWVudExv
YWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
OwogICAgIHN0YXRpYyB2b2lkIGNvbnRpbnVlQWZ0ZXJYRnJhbWVPcHRpb25zRGVuaWVkSW1wbChG
cmFtZSosIERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgc3RhdGljIHZvaWQgY29udGludWVXaXRoUG9saWN5RG93
bmxvYWRJbXBsKEZyYW1lKiwgRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICBzdGF0aWMgdm9pZCBjb250aW51ZVdp
dGhQb2xpY3lJZ25vcmVJbXBsKEZyYW1lKiwgRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAgICBzdGF0aWMgdm9pZCBk
aWRSZWNlaXZlQ29udGVudExlbmd0aEltcGwoSW5zcGVjdG9yQWdlbnQqLCB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIGludCBkYXRhTGVuZ3RoLCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpOwotICAg
IHN0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRpbmdJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSk7Ci0gICAgc3RhdGljIHZvaWQg
ZGlkRmFpbExvYWRpbmdJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJik7Ci0gICAgc3RhdGljIHZvaWQgcmVzb3VyY2VSZXRy
aWV2ZWRCeVhNTEh0dHBSZXF1ZXN0SW1wbChJbnNwZWN0b3JBZ2VudCosIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBTdHJpbmcmIHNlbmRVUkwsIHVuc2lnbmVkIHNlbmRMaW5lTnVtYmVyKTsKLSAgICBz
dGF0aWMgdm9pZCBzY3JpcHRJbXBvcnRlZEltcGwoSW5zcGVjdG9yQWdlbnQqLCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nKTsKLSAgICBzdGF0aWMg
dm9pZCBkb21Db250ZW50TG9hZGVkRXZlbnRGaXJlZEltcGwoSW5zcGVjdG9yQWdlbnQqLCBGcmFt
ZSosIGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkRXZlbnRGaXJlZEltcGwoSW5z
cGVjdG9yQWdlbnQqLCBGcmFtZSosIGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgdm9pZCBmcmFt
ZURldGFjaGVkRnJvbVBhcmVudEltcGwoSW5zcGVjdG9yQWdlbnQqLCBGcmFtZSopOwotICAgIHN0
YXRpYyB2b2lkIGRpZENvbW1pdExvYWRJbXBsKFBhZ2UqLCBJbnNwZWN0b3JBZ2VudCosIERvY3Vt
ZW50TG9hZGVyKik7Ci0KLSAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2ll
IHdpbGxXcml0ZUhUTUxJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQgaW50IGxlbmd0aCwg
dW5zaWduZWQgaW50IHN0YXJ0TGluZSk7CisgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZUNvbnRl
bnRMZW5ndGhJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGludCBkYXRhTGVuZ3RoLCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpOworICAgIHN0YXRpYyB2
b2lkIGRpZEZpbmlzaExvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pc2hUaW1lKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRG
YWlsTG9hZGluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgIHN0YXRpYyB2b2lkIHJlc291cmNlUmV0
cmlldmVkQnlYTUxIdHRwUmVxdWVzdEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNlbmRVUkwsIHVuc2lnbmVkIHNlbmRMaW5lTnVtYmVyKTsK
KyAgICBzdGF0aWMgdm9pZCBzY3JpcHRJbXBvcnRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyos
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpOwor
ICAgIHN0YXRpYyB2b2lkIGRvbUNvbnRlbnRMb2FkZWRFdmVudEZpcmVkSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgRnJhbWUqLCBjb25zdCBLVVJMJik7CisgICAgc3RhdGljIHZvaWQgbG9hZEV2
ZW50RmlyZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBGcmFtZSosIGNvbnN0IEtVUkwmKTsK
KyAgICBzdGF0aWMgdm9pZCBmcmFtZURldGFjaGVkRnJvbVBhcmVudEltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyosIEZyYW1lKik7CisgICAgc3RhdGljIHZvaWQgZGlkQ29tbWl0TG9hZEltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyosIFBhZ2UqLCBEb2N1bWVudExvYWRlciopOworCisgICAgc3RhdGlj
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsV3JpdGVIVE1MSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgaW50IGxlbmd0aCwgdW5zaWduZWQgaW50IHN0YXJ0TGlu
ZSk7CiAgICAgc3RhdGljIHZvaWQgZGlkV3JpdGVIVE1MSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUmLCB1bnNpZ25lZCBpbnQgZW5kTGluZSk7CiAKLSAgICBzdGF0aWMg
dm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnNwZWN0b3JBZ2VudCosIE1lc3NhZ2VTb3Vy
Y2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFz
c1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4pOwot
ICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKEluc3BlY3RvckFnZW50Kiwg
TWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsKLSAg
ICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnRJbXBsKEluc3BlY3RvckFnZW50KiwgUGFzc1JlZlB0
cjxTY3JpcHRBcmd1bWVudHM+LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4pOwotICAgIHN0
YXRpYyB2b2lkIHN0YXJ0Q29uc29sZVRpbWluZ0ltcGwoSW5zcGVjdG9yQWdlbnQqLCBjb25zdCBT
dHJpbmcmIHRpdGxlKTsKLSAgICBzdGF0aWMgdm9pZCBzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5z
cGVjdG9yQWdlbnQqLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxT
dGFjaz4pOwotICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVNYXJrVGltZWxpbmVJbXBsKEluc3BlY3Rv
ckFnZW50KiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+KTsKKyAgICBzdGF0aWMgdm9pZCBh
ZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgTWVzc2FnZVNvdXJj
ZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNz
UmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4sIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPik7Cisg
ICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyosIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7
CisgICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwg
UGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4p
OworICAgIHN0YXRpYyB2b2lkIHN0YXJ0Q29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyosIGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAgIHN0YXRpYyB2b2lkIHN0b3BDb25zb2xl
VGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgUGFz
c1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+KTsKKyAgICBzdGF0aWMgdm9pZCBjb25zb2xlTWFya1Rp
bWVsaW5lSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVu
dHM+KTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIHN0YXRpYyB2b2lk
IGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zcGVjdG9yQWdlbnQqLCBj
b25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVVSTCk7Ci0gICAgc3RhdGljIHZvaWQgYWRkUHJvZmlsZUltcGwoSW5zcGVjdG9yQWdlbnQq
LCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4sIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPik7Ci0g
ICAgc3RhdGljIFN0cmluZyBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lSW1wbChJ
bnNwZWN0b3JBZ2VudCosIGJvb2wgaW5jcmVtZW50UHJvZmlsZU51bWJlcik7Ci0gICAgc3RhdGlj
IGJvb2wgcHJvZmlsZXJFbmFibGVkSW1wbChJbnNwZWN0b3JBZ2VudCopOworICAgIHN0YXRpYyB2
b2lkIGFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZUltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyosIGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0
cmluZyYgc291cmNlVVJMKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRQcm9maWxlSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzKiwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+LCBQYXNzUmVmUHRyPFNjcmlwdENh
bGxTdGFjaz4pOworICAgIHN0YXRpYyBTdHJpbmcgZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9m
aWxlTmFtZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIGJvb2wgaW5jcmVtZW50UHJvZmlsZU51
bWJlcik7CisgICAgc3RhdGljIGJvb2wgcHJvZmlsZXJFbmFibGVkSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzKik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBzdGF0aWMgdm9p
ZCBkaWRPcGVuRGF0YWJhc2VJbXBsKEluc3BlY3RvckFnZW50KiwgUGFzc1JlZlB0cjxEYXRhYmFz
ZT4sIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbik7CisgICAgc3RhdGljIHZvaWQgZGlkT3BlbkRhdGFiYXNlSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzKiwgUGFzc1JlZlB0cjxEYXRhYmFzZT4sIGNvbnN0IFN0cmluZyYgZG9tYWlu
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSAgICBzdGF0aWMgdm9pZCBkaWRVc2VET01TdG9yYWdl
SW1wbChJbnNwZWN0b3JBZ2VudCosIFN0b3JhZ2VBcmVhKiwgYm9vbCBpc0xvY2FsU3RvcmFnZSwg
RnJhbWUqKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRVc2VET01TdG9yYWdlSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgU3RvcmFnZUFyZWEqLCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSopOwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBzdGF0aWMgdm9pZCBkaWRTdGFydFdv
cmtlckNvbnRleHRJbXBsKEluc3BlY3RvckFnZW50KiwgV29ya2VyQ29udGV4dFByb3h5Kik7Ci0g
ICAgc3RhdGljIHZvaWQgZGlkQ3JlYXRlV29ya2VySW1wbChJbnNwZWN0b3JBZ2VudCosIGludHB0
cl90IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtlcik7Ci0gICAgc3Rh
dGljIHZvaWQgZGlkRGVzdHJveVdvcmtlckltcGwoSW5zcGVjdG9yQWdlbnQqLCBpbnRwdHJfdCBp
ZCk7CisgICAgc3RhdGljIHZvaWQgZGlkU3RhcnRXb3JrZXJDb250ZXh0SW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgV29ya2VyQ29udGV4dFByb3h5Kik7CisgICAgc3RhdGljIHZvaWQgZGlkQ3Jl
YXRlV29ya2VySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgaW50cHRyX3QgaWQsIGNvbnN0IFN0
cmluZyYgdXJsLCBib29sIGlzU2hhcmVkV29ya2VyKTsKKyAgICBzdGF0aWMgdm9pZCBkaWREZXN0
cm95V29ya2VySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgaW50cHRyX3QgaWQpOwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCi0gICAgc3RhdGljIHZvaWQgZGlkQ3JlYXRlV2Vi
U29ja2V0SW1wbChJbnNwZWN0b3JBZ2VudCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29u
c3QgS1VSTCYgcmVxdWVzdFVSTCwgY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwpOwotICAgIHN0YXRp
YyB2b2lkIHdpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdEltcGwoSW5zcGVjdG9yQWdl
bnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEhhbmRzaGFrZVJl
cXVlc3QmKTsKLSAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVz
cG9uc2VJbXBsKEluc3BlY3RvckFnZW50KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSYpOwotICAgIHN0YXRpYyB2b2lkIGRpZENsb3Nl
V2ViU29ja2V0SW1wbChJbnNwZWN0b3JBZ2VudCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7
CisgICAgc3RhdGljIHZvaWQgZGlkQ3JlYXRlV2ViU29ja2V0SW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBj
b25zdCBLVVJMJiBkb2N1bWVudFVSTCk7CisgICAgc3RhdGljIHZvaWQgd2lsbFNlbmRXZWJTb2Nr
ZXRIYW5kc2hha2VSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0Jik7CisgICAgc3Rh
dGljIHZvaWQgZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRI
YW5kc2hha2VSZXNwb25zZSYpOworICAgIHN0YXRpYyB2b2lkIGRpZENsb3NlV2ViU29ja2V0SW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBzdGF0aWMgdm9p
ZCBuZXR3b3JrU3RhdGVDaGFuZ2VkSW1wbChJbnNwZWN0b3JBZ2VudCopOwotICAgIHN0YXRpYyB2
b2lkIHVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNJbXBsKEluc3BlY3RvckFnZW50KiwgRnJh
bWUqKTsKLSNlbmRpZgotCi0gICAgc3RhdGljIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2Vu
dEZvckZyYW1lKEZyYW1lKik7Ci0gICAgc3RhdGljIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudEZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotICAgIHN0YXRpYyBJbnNw
ZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnRGb3JQYWdlKFBhZ2UqKTsKLSAgICBzdGF0aWMgSW5z
cGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yQ29udGV4dChTY3JpcHRF
eGVjdXRpb25Db250ZXh0Kik7Ci0gICAgc3RhdGljIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudFdpdGhGcm9udGVuZEZvckRvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgc3RhdGljIEluc3Bl
Y3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckZyYW1lKEZyYW1lKik7Ci0g
ICAgc3RhdGljIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvclBh
Z2UoUGFnZSopOwotCi0gICAgc3RhdGljIGJvb2wgaGFzRnJvbnRlbmQoSW5zcGVjdG9yQWdlbnQq
KTsKLSAgICBzdGF0aWMgdm9pZCBwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChJbnNwZWN0b3JB
Z2VudCosIGNvbnN0IFN0cmluZyYgY2F0ZWdvcnlUeXBlLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFt
ZSwgYm9vbCBzeW5jaHJvbm91cyk7Ci0gICAgc3RhdGljIHZvaWQgY2FuY2VsUGF1c2VPbk5hdGl2
ZUV2ZW50KEluc3BlY3RvckFnZW50Kik7Ci0gICAgc3RhdGljIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQqIHJldHJpZXZlVGltZWxpbmVBZ2VudChJbnNwZWN0b3JBZ2VudCopOworICAgIHN0YXRpYyB2
b2lkIG5ldHdvcmtTdGF0ZUNoYW5nZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqKTsKKyAgICBz
dGF0aWMgdm9pZCB1cGRhdGVBcHBsaWNhdGlvbkNhY2hlU3RhdHVzSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzKiwgRnJhbWUqKTsKKyNlbmRpZgorCisgICAgc3RhdGljIEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKFBhZ2UqKTsKKyAgICBzdGF0aWMgSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKEZyYW1lKik7CisgICAg
c3RhdGljIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KERvY3VtZW50Kik7CisKKyAgICBzdGF0
aWMgYm9vbCBjb2xsZWN0aW5nSFRNTFBhcnNlRXJyb3JzKEluc3RydW1lbnRpbmdBZ2VudHMqKTsK
KyAgICBzdGF0aWMgdm9pZCBwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChJbnN0cnVtZW50aW5n
QWdlbnRzKiwgY29uc3QgU3RyaW5nJiBjYXRlZ29yeVR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnRO
YW1lLCBib29sIHN5bmNocm9ub3VzKTsKKyAgICBzdGF0aWMgdm9pZCBjYW5jZWxQYXVzZU9uTmF0
aXZlRXZlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyopOwogICAgIHN0YXRpYyBJbnNwZWN0b3JUaW1l
bGluZUFnZW50KiByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llJik7Ci0gICAgc3RhdGljIEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJldHJp
ZXZlUmVzb3VyY2VBZ2VudChJbnNwZWN0b3JBZ2VudCopOwotICAgIHN0YXRpYyBJbnNwZWN0b3JQ
YWdlQWdlbnQqIHJldHJpZXZlUGFnZUFnZW50KEluc3BlY3RvckFnZW50Kik7CiAKLSAgICBzdGF0
aWMgSGFzaE1hcDxQYWdlKiwgSW5zcGVjdG9yQWdlbnQqPiYgaW5zcGVjdG9yQWdlbnRzKCk7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPFBhZ2UqLCBJbnN0cnVtZW50aW5nQWdlbnRzKj4gSW5zdHJ1bWVu
dGluZ0FnZW50c01hcDsKKyAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50c01hcCYgaW5zdHJ1
bWVudGluZ0FnZW50cygpOwogICAgIHN0YXRpYyBpbnQgc19mcm9udGVuZENvdW50ZXI7CiAjZW5k
aWYKIH07CkBAIC0zMjQsNDEgKzMxOSw0NCBAQCBwcml2YXRlOgogaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZy
YW1lLCBET01XcmFwcGVyV29ybGQqIHdvcmxkKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0g
ICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9y
RnJhbWUoZnJhbWUpKQotICAgICAgICBkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGRJbXBsKGlu
c3BlY3RvckFnZW50LCBmcmFtZSwgd29ybGQpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1l
KSkKKyAgICAgICAgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkSW1wbChpbnN0cnVtZW50aW5n
QWdlbnRzLCBmcmFtZSwgd29ybGQpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZChQYWdlKiBwYWdlKQogewog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudCA9IGluc3BlY3RvckFnZW50Rm9yUGFnZShwYWdlKSkKLSAgICAgICAgaW5zcGVjdGVkUGFn
ZURlc3Ryb3llZEltcGwoaW5zcGVjdG9yQWdlbnQpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFn
ZSkpCisgICAgICAgIGluc3BlY3RlZFBhZ2VEZXN0cm95ZWRJbXBsKGluc3RydW1lbnRpbmdBZ2Vu
dHMpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d2lsbEluc2VydERPTU5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBOb2RlKiBub2RlLCBOb2RlKiBw
YXJlbnQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQq
IGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JEb2N1bWVudChk
b2N1bWVudCkpCi0gICAgICAgIHdpbGxJbnNlcnRET01Ob2RlSW1wbChpbnNwZWN0b3JBZ2VudCwg
bm9kZSwgcGFyZW50KTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsK
KyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgICAgIHdpbGxJbnNlcnRE
T01Ob2RlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBub2RlLCBwYXJlbnQpOwogI2VuZGlmCiB9
CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW5zZXJ0RE9NTm9k
ZShEb2N1bWVudCogZG9jdW1lbnQsIE5vZGUqIG5vZGUpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdl
bnRXaXRoRnJvbnRlbmRGb3JEb2N1bWVudChkb2N1bWVudCkpCi0gICAgICAgIGRpZEluc2VydERP
TU5vZGVJbXBsKGluc3BlY3RvckFnZW50LCBub2RlKTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19G
Uk9OVEVORFModm9pZCgpKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVudCkpCisg
ICAgICAgIGRpZEluc2VydERPTU5vZGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIG5vZGUpOwog
I2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJl
bW92ZURPTU5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBOb2RlKiBub2RlKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGlu
c3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRG9jdW1lbnQoZG9jdW1lbnQpKSB7Ci0gICAgICAg
IHdpbGxSZW1vdmVET01Ob2RlSW1wbChpbnNwZWN0b3JBZ2VudCwgbm9kZSk7Ci0gICAgICAgIGRp
ZFJlbW92ZURPTU5vZGVJbXBsKGluc3BlY3RvckFnZW50LCBub2RlKTsKKyAgICBGQVNUX1JFVFVS
Tl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1
bWVudCkpIHsKKyAgICAgICAgd2lsbFJlbW92ZURPTU5vZGVJbXBsKGluc3RydW1lbnRpbmdBZ2Vu
dHMsIG5vZGUpOworICAgICAgICBkaWRSZW1vdmVET01Ob2RlSW1wbChpbnN0cnVtZW50aW5nQWdl
bnRzLCBub2RlKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTM2Niw0MCArMzY0LDQ1IEBAIGlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZURPTU5vZGUoRG9jdW1l
bnQqIGRvY3VtZW50LCBOb2RlCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxNb2RpZnlET01BdHRyKERvY3VtZW50KiBkb2N1bWVudCwgRWxlbWVudCogZWxlbWVudCkK
IHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVj
dG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckRvY3VtZW50KGRvY3VtZW50
KSkKLSAgICAgICAgd2lsbE1vZGlmeURPTUF0dHJJbXBsKGluc3BlY3RvckFnZW50LCBlbGVtZW50
KTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKKyAgICBpZiAoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgICAgIHdpbGxNb2RpZnlET01BdHRySW1wbChp
bnN0cnVtZW50aW5nQWdlbnRzLCBlbGVtZW50KTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1vZGlmeURPTUF0dHIoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBFbGVtZW50KiBlbGVtZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYg
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250
ZW5kRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICBkaWRNb2RpZnlET01BdHRySW1wbChp
bnNwZWN0b3JBZ2VudCwgZWxlbWVudCk7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRT
KHZvaWQoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQorICAgICAgICBk
aWRNb2RpZnlET01BdHRySW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBlbGVtZW50KTsKICNlbmRp
ZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRh
dGVTdHlsZUF0dHIoRG9jdW1lbnQqIGRvY3VtZW50LCBOb2RlKiBub2RlKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGlu
c3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICBk
aWRJbnZhbGlkYXRlU3R5bGVBdHRySW1wbChpbnNwZWN0b3JBZ2VudCwgbm9kZSk7CisgICAgRkFT
VF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1l
bnQoZG9jdW1lbnQpKQorICAgICAgICBkaWRJbnZhbGlkYXRlU3R5bGVBdHRySW1wbChpbnN0cnVt
ZW50aW5nQWdlbnRzLCBub2RlKTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFBhZ2UqIHBhZ2UsIGNvbnN0
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgbW9kaWZpZXJGbGFncykKIHsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQg
PSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvclBhZ2UocGFnZSkpCi0gICAgICAgIG1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50SW1wbChpbnNwZWN0b3JBZ2VudCwgcmVzdWx0LCBtb2RpZmllckZs
YWdzKTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKKyAgICBpZiAo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHNGb3JQYWdlKHBhZ2UpKQorICAgICAgICBtb3VzZURpZE1vdmVPdmVyRWxlbWVudEltcGwo
aW5zdHJ1bWVudGluZ0FnZW50cywgcmVzdWx0LCBtb2RpZmllckZsYWdzKTsKICNlbmRpZgogfQog
CiBpbmxpbmUgYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmhhbmRsZU1vdXNlUHJlc3Mo
UGFnZSogcGFnZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JB
Z2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvclBhZ2Uo
cGFnZSkpCi0gICAgICAgIHJldHVybiBoYW5kbGVNb3VzZVByZXNzSW1wbChpbnNwZWN0b3JBZ2Vu
dCk7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKGZhbHNlKTsKKyAgICBpZiAoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JQYWdlKHBhZ2UpKQorICAgICAgICByZXR1cm4gaGFuZGxlTW91c2VQcmVzc0ltcGwoaW5z
dHJ1bWVudGluZ0FnZW50cyk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC00MDcs
NDAgKzQxMCw0NSBAQCBpbmxpbmUgYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmhhbmRs
ZU1vdXNlUHJlc3MoUGFnZSogcGFnZSkKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKERvY3VtZW50KiBkb2N1bWVudCwgQ2hhcmFjdGVy
RGF0YSogY2hhcmFjdGVyRGF0YSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJ
bnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVu
ZEZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgY2hhcmFjdGVyRGF0YU1vZGlmaWVkSW1w
bChpbnNwZWN0b3JBZ2VudCwgY2hhcmFjdGVyRGF0YSk7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9f
RlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQor
ICAgICAgICBjaGFyYWN0ZXJEYXRhTW9kaWZpZWRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIGNo
YXJhY3RlckRhdGEpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAg
IGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhG
cm9udGVuZEZvckNvbnRleHQoY29udGV4dCkpCi0gICAgICAgIHdpbGxTZW5kWE1MSHR0cFJlcXVl
c3RJbXBsKGluc3BlY3RvckFnZW50LCB1cmwpOworICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05U
RU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCisgICAgICAg
IHdpbGxTZW5kWE1MSHR0cFJlcXVlc3RJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHVybCk7CiAj
ZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTY2hl
ZHVsZVJlc291cmNlUmVxdWVzdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdXJs
KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRG9jdW1lbnQoZG9jdW1l
bnQpKQotICAgICAgICBkaWRTY2hlZHVsZVJlc291cmNlUmVxdWVzdEltcGwoaW5zcGVjdG9yQWdl
bnQsIHVybCk7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQorICAgICAgICBkaWRTY2hlZHVsZVJlc291
cmNlUmVxdWVzdEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgdXJsKTsKICNlbmRpZgogfQogCiBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEluc3RhbGxUaW1lcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnQgdGltZXJJZCwgaW50IHRpbWVvdXQsIGJv
b2wgc2luZ2xlU2hvdCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0
b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckNv
bnRleHQoY29udGV4dCkpCi0gICAgICAgIGRpZEluc3RhbGxUaW1lckltcGwoaW5zcGVjdG9yQWdl
bnQsIHRpbWVySWQsIHRpbWVvdXQsIHNpbmdsZVNob3QpOworICAgIEZBU1RfUkVUVVJOX0lGX05P
X0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCisg
ICAgICAgIGRpZEluc3RhbGxUaW1lckltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgdGltZXJJZCwg
dGltZW91dCwgc2luZ2xlU2hvdCk7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRSZW1vdmVUaW1lcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBpbnQgdGltZXJJZCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJ
bnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVu
ZEZvckNvbnRleHQoY29udGV4dCkpCi0gICAgICAgIGRpZFJlbW92ZVRpbWVySW1wbChpbnNwZWN0
b3JBZ2VudCwgdGltZXJJZCk7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQo
KSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBp
bnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICAgICAgZGlkUmVtb3Zl
VGltZXJJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHRpbWVySWQpOwogI2VuZGlmCiB9CiAKQEAg
LTQ0OCw4ICs0NTYsOSBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFJlbW92ZVRpbWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbgogaW5saW5lIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxDYWxs
RnVuY3Rpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUsIGludCBzY3Jp
cHRMaW5lKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50
KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRnJhbWUoZnJh
bWUpKQotICAgICAgICByZXR1cm4gd2lsbENhbGxGdW5jdGlvbkltcGwoaW5zcGVjdG9yQWdlbnQs
IHNjcmlwdE5hbWUsIHNjcmlwdExpbmUpOworICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5E
UyhJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKSk7CisgICAgaWYgKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJh
bWUoZnJhbWUpKQorICAgICAgICByZXR1cm4gd2lsbENhbGxGdW5jdGlvbkltcGwoaW5zdHJ1bWVu
dGluZ0FnZW50cywgc2NyaXB0TmFtZSwgc2NyaXB0TGluZSk7CiAjZW5kaWYKICAgICByZXR1cm4g
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCk7CiB9CkBAIC00NTcsNyArNDY2LDggQEAg
aW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxDYWxsRnVuY3Rpb24KIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkQ2FsbEZ1bmN0aW9uKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSYgY29va2llKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKGhhc0Zyb250ZW5k
cygpICYmIGNvb2tpZS5maXJzdCkKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9p
ZCgpKTsKKyAgICBpZiAoY29va2llLmZpcnN0KQogICAgICAgICBkaWRDYWxsRnVuY3Rpb25JbXBs
KGNvb2tpZSk7CiAjZW5kaWYKIH0KQEAgLTQ2NSw4ICs0NzUsOSBAQCBpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihjb25zdCBJbnNwZWN0b3JJbnN0
cnVtZW50YQogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxDaGFuZ2VYSFJSZWFkeVN0YXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFhNTEh0dHBSZXF1ZXN0KiByZXF1ZXN0KQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3Bl
Y3RvckFnZW50V2l0aEZyb250ZW5kRm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAgICAgcmV0dXJu
IHdpbGxDaGFuZ2VYSFJSZWFkeVN0YXRlSW1wbChpbnNwZWN0b3JBZ2VudCwgcmVxdWVzdCk7Cisg
ICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSgpKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQorICAgICAgICByZXR1
cm4gd2lsbENoYW5nZVhIUlJlYWR5U3RhdGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHJlcXVl
c3QpOwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgp
OwogfQpAQCAtNDc0LDcgKzQ4NSw4IEBAIGlubGluZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsQ2hhbmdlWEhSUmVhCiBpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5nZVhIUlJlYWR5U3RhdGUoY29u
c3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKLSAgICBpZiAoaGFzRnJvbnRlbmRzKCkgJiYgY29va2llLmZpcnN0KQorICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChjb29raWUuZmly
c3QpCiAgICAgICAgIGRpZENoYW5nZVhIUlJlYWR5U3RhdGVJbXBsKGNvb2tpZSk7CiAjZW5kaWYK
IH0KQEAgLTQ4Miw4ICs0OTQsOSBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZENoYW5nZVhIUlJlYWR5U3RhdGUoY29uc3QgSW5zcGVjdG9ySW5zdAogaW5saW5lIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxEaXNwYXRjaEV2ZW50KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRXZlbnQmIGV2ZW50LCBE
T01XaW5kb3cqIHdpbmRvdywgTm9kZSogbm9kZSwgY29uc3QgVmVjdG9yPEV2ZW50Q29udGV4dD4m
IGFuY2VzdG9ycykKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JB
Z2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckRvY3Vt
ZW50KGRvY3VtZW50KSkKLSAgICAgICAgcmV0dXJuIHdpbGxEaXNwYXRjaEV2ZW50SW1wbChpbnNw
ZWN0b3JBZ2VudCwgZXZlbnQsIHdpbmRvdywgbm9kZSwgYW5jZXN0b3JzKTsKKyAgICBGQVNUX1JF
VFVSTl9JRl9OT19GUk9OVEVORFMoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCkpOwor
ICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICAgICAgcmV0dXJuIHdpbGxE
aXNwYXRjaEV2ZW50SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBldmVudCwgd2luZG93LCBub2Rl
LCBhbmNlc3RvcnMpOwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSgpOwogfQpAQCAtNDkxLDcgKzUwNCw4IEBAIGlubGluZSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVu
CiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnQo
Y29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUpCiB7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKLSAgICBpZiAoaGFzRnJvbnRlbmRzKCkgJiYgY29va2llLmZpcnN0KQor
ICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChjb29raWUu
Zmlyc3QpCiAgICAgICAgIGRpZERpc3BhdGNoRXZlbnRJbXBsKGNvb2tpZSk7CiAjZW5kaWYKIH0K
QEAgLTQ5OSw4ICs1MTMsOSBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZERpc3BhdGNoRXZlbnQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudAogaW5saW5lIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxE
aXNwYXRjaEV2ZW50T25XaW5kb3coRnJhbWUqIGZyYW1lLCBjb25zdCBFdmVudCYgZXZlbnQsIERP
TVdpbmRvdyogd2luZG93KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3Bl
Y3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9y
RnJhbWUoZnJhbWUpKQotICAgICAgICByZXR1cm4gd2lsbERpc3BhdGNoRXZlbnRPbldpbmRvd0lt
cGwoaW5zcGVjdG9yQWdlbnQsIGV2ZW50LCB3aW5kb3cpOworICAgIEZBU1RfUkVUVVJOX0lGX05P
X0ZST05URU5EUyhJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKSk7CisgICAgaWYgKElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdl
bnRzRm9yRnJhbWUoZnJhbWUpKQorICAgICAgICByZXR1cm4gd2lsbERpc3BhdGNoRXZlbnRPbldp
bmRvd0ltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgZXZlbnQsIHdpbmRvdyk7CiAjZW5kaWYKICAg
ICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCk7CiB9CkBAIC01MDgsNyAr
NTIzLDggQEAgaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW4KIGlubGluZSB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudE9uV2luZG93KGNvbnN0IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZSYgY29va2llKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0g
ICAgaWYgKGhhc0Zyb250ZW5kcygpICYmIGNvb2tpZS5maXJzdCkKKyAgICBGQVNUX1JFVFVSTl9J
Rl9OT19GUk9OVEVORFModm9pZCgpKTsKKyAgICBpZiAoY29va2llLmZpcnN0KQogICAgICAgICBk
aWREaXNwYXRjaEV2ZW50T25XaW5kb3dJbXBsKGNvb2tpZSk7CiAjZW5kaWYKIH0KQEAgLTUxNiw4
ICs1MzIsOSBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3Bh
dGNoRXZlbnRPbldpbmRvdyhjb25zdCBJbnNwZWN0b3JJbgogaW5saW5lIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVNj
cmlwdChGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJlcikKIHsK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9y
QWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckZyYW1lKGZyYW1lKSkKLSAgICAg
ICAgcmV0dXJuIHdpbGxFdmFsdWF0ZVNjcmlwdEltcGwoaW5zcGVjdG9yQWdlbnQsIHVybCwgbGlu
ZU51bWJlcik7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSgpKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAg
ICAgIHJldHVybiB3aWxsRXZhbHVhdGVTY3JpcHRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHVy
bCwgbGluZU51bWJlcik7CiAjZW5kaWYKICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llKCk7CiB9CkBAIC01MjUsNyArNTQyLDggQEAgaW5saW5lIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVNj
cmkKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRXZhbHVhdGVTY3Jp
cHQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUpCiB7CiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoaGFzRnJvbnRlbmRzKCkgJiYgY29va2llLmZpcnN0
KQorICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChjb29r
aWUuZmlyc3QpCiAgICAgICAgIGRpZEV2YWx1YXRlU2NyaXB0SW1wbChjb29raWUpOwogI2VuZGlm
CiB9CkBAIC01MzMsOCArNTUxLDkgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRFdmFsdWF0ZVNjcmlwdChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW4KIGlubGluZSBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsRmlyZVRpbWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGludCB0aW1lcklk
KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yQ29udGV4dChjb250ZXh0
KSkKLSAgICAgICAgcmV0dXJuIHdpbGxGaXJlVGltZXJJbXBsKGluc3BlY3RvckFnZW50LCB0aW1l
cklkKTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llKCkpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCisgICAg
ICAgIHJldHVybiB3aWxsRmlyZVRpbWVySW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lcklk
KTsKICNlbmRpZgogICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsK
IH0KQEAgLTU0Miw3ICs1NjEsOCBAQCBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEZpcmVUaW1lcihTYwogaW5saW5lIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaXJlVGltZXIoY29uc3QgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
LSAgICBpZiAoaGFzRnJvbnRlbmRzKCkgJiYgY29va2llLmZpcnN0KQorICAgIEZBU1RfUkVUVVJO
X0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChjb29raWUuZmlyc3QpCiAgICAgICAg
IGRpZEZpcmVUaW1lckltcGwoY29va2llKTsKICNlbmRpZgogfQpAQCAtNTUwLDggKzU3MCw5IEBA
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmlyZVRpbWVyKGNvbnN0
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvCiBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExheW91dChGcmFtZSogZnJhbWUp
CiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JGcmFtZShmcmFtZSkpCi0g
ICAgICAgIHJldHVybiB3aWxsTGF5b3V0SW1wbChpbnNwZWN0b3JBZ2VudCk7CisgICAgRkFTVF9S
RVRVUk5fSUZfTk9fRlJPTlRFTkRTKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSgpKTsK
KyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVybiB3aWxsTGF5b3V0
SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzKTsKICNlbmRpZgogICAgIHJldHVybiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUoKTsKIH0KQEAgLTU1OSw3ICs1ODAsOCBAQCBpbmxpbmUgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bExheW91dChGcmFtZQogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRM
YXlvdXQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiBjb29raWUpCiB7CiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoaGFzRnJvbnRlbmRzKCkgJiYgY29va2llLmZp
cnN0KQorICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChj
b29raWUuZmlyc3QpCiAgICAgICAgIGRpZExheW91dEltcGwoY29va2llKTsKICNlbmRpZgogfQpA
QCAtNTY3LDggKzU4OSw5IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkTGF5b3V0KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvCiBpbmxpbmUgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExv
YWRYSFIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgWE1MSHR0cFJlcXVlc3QqIHJl
cXVlc3QpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQq
IGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JDb250ZXh0KGNv
bnRleHQpKQotICAgICAgICByZXR1cm4gd2lsbExvYWRYSFJJbXBsKGluc3BlY3RvckFnZW50LCBy
ZXF1ZXN0KTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llKCkpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCisg
ICAgICAgIHJldHVybiB3aWxsTG9hZFhIUkltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgcmVxdWVz
dCk7CiAjZW5kaWYKICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCk7
CiB9CkBAIC01NzYsNyArNTk5LDggQEAgaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMb2FkWEhSKFNjcmkKIGlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFhIUihjb25zdCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQot
ICAgIGlmIChoYXNGcm9udGVuZHMoKSAmJiBjb29raWUuZmlyc3QpCisgICAgRkFTVF9SRVRVUk5f
SUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKGNvb2tpZS5maXJzdCkKICAgICAgICAg
ZGlkTG9hZFhIUkltcGwoY29va2llKTsKICNlbmRpZgogfQpAQCAtNTg0LDggKzYwOCw5IEBAIGlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFhIUihjb25zdCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25DCiBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFBhaW50KEZyYW1lKiBmcmFtZSwgY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNw
ZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZv
ckZyYW1lKGZyYW1lKSkKLSAgICAgICAgcmV0dXJuIHdpbGxQYWludEltcGwoaW5zcGVjdG9yQWdl
bnQsIHJlY3QpOworICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyhJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQorICAg
ICAgICByZXR1cm4gd2lsbFBhaW50SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCByZWN0KTsKICNl
bmRpZgogICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKIH0KQEAg
LTU5Myw3ICs2MTgsOCBAQCBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFBhaW50KEZyYW1lKgogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQYWludChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUmIGNvb2tpZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmICho
YXNGcm9udGVuZHMoKSAmJiBjb29raWUuZmlyc3QpCisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJP
TlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKGNvb2tpZS5maXJzdCkKICAgICAgICAgZGlkUGFpbnRJ
bXBsKGNvb2tpZSk7CiAjZW5kaWYKIH0KQEAgLTYwMSw4ICs2MjcsOSBAQCBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFBhaW50KGNvbnN0IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvbwogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNhbGN1bGF0ZVN0eWxlKERvY3VtZW50KiBkb2N1bWVu
dCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5z
cGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckRvY3VtZW50KGRvY3Vt
ZW50KSkKLSAgICAgICAgcmV0dXJuIHdpbGxSZWNhbGN1bGF0ZVN0eWxlSW1wbChpbnNwZWN0b3JB
Z2VudCk7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSgpKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVudCkpCisg
ICAgICAgIHJldHVybiB3aWxsUmVjYWxjdWxhdGVTdHlsZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50
cyk7CiAjZW5kaWYKICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCk7
CiB9CkBAIC02MTAsNyArNjM3LDggQEAgaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNhbGN1bGF0ZVMKIGlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjYWxjdWxhdGVTdHlsZShjb25zdCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSkKIHsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQotICAgIGlmIChoYXNGcm9udGVuZHMoKSAmJiBjb29raWUuZmlyc3QpCisgICAgRkFT
VF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKGNvb2tpZS5maXJzdCkK
ICAgICAgICAgZGlkUmVjYWxjdWxhdGVTdHlsZUltcGwoY29va2llKTsKICNlbmRpZgogfQpAQCAt
NjE4LDQ2ICs2NDYsNTAgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRSZWNhbGN1bGF0ZVN0eWxlKGNvbnN0IEluc3BlY3Rvckluc3RydW0KIGlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZShGcmFtZSogZnJh
bWUsIFN0cmluZyogdXNlckFnZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYg
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250
ZW5kRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBhcHBseVVzZXJBZ2VudE92ZXJyaWRlSW1wbChp
bnNwZWN0b3JBZ2VudCwgdXNlckFnZW50KTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVO
RFModm9pZCgpKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIGFwcGx5
VXNlckFnZW50T3ZlcnJpZGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHVzZXJBZ2VudCk7CiAj
ZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2Vu
ZFJlcXVlc3QoRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50
TG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAg
IGlmIChJbnNwZWN0b3JBZ2VudCogaWMgPSBpbnNwZWN0b3JBZ2VudEZvckZyYW1lKGZyYW1lKSkK
LSAgICAgICAgd2lsbFNlbmRSZXF1ZXN0SW1wbChpYywgaWRlbnRpZmllciwgbG9hZGVyLCByZXF1
ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisg
ICAgICAgIHdpbGxTZW5kUmVxdWVzdEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRpZmll
ciwgbG9hZGVyLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKICNlbmRpZgogfQogCiBpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0ZXJQaW5nTG9hZGVy
KEZyYW1lKiBmcmFtZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciog
bG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFn
ZW50KiBpYyA9IGluc3BlY3RvckFnZW50Rm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0ZXJQaW5nTG9hZGVySW1wbChpYywgaWRlbnRp
ZmllciwgbG9hZGVyLCByZXF1ZXN0LCByZXNwb25zZSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUo
ZnJhbWUpKQorICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0ZXJQ
aW5nTG9hZGVySW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVudGlmaWVyLCBsb2FkZXIsIHJl
cXVlc3QsIHJlc3BvbnNlKTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246Om1hcmtSZXNvdXJjZUFzQ2FjaGVkKFBhZ2UqIHBhZ2UsIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllcikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIG1hcmtSZXNvdXJj
ZUFzQ2FjaGVkSW1wbChpbnNwZWN0b3JBZ2VudEZvclBhZ2UocGFnZSksIGlkZW50aWZpZXIpOyAK
KyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQorICAgICAgICBtYXJrUmVzb3VyY2VBc0NhY2hl
ZEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRpZmllcik7IAogI2VuZGlmCiB9CiAKIGlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFJlc291cmNlRnJvbU1l
bW9yeUNhY2hlKFBhZ2UqIHBhZ2UsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGRpZExv
YWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZUltcGwoaW5zcGVjdG9yQWdlbnRGb3JQYWdlKHBhZ2Up
LCBsb2FkZXIsIHJlc291cmNlKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQorICAgICAg
ICBkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMs
IGxvYWRlciwgcmVzb3VyY2UpOwogI2VuZGlmCiB9CiAKIGlubGluZSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVjZWl2ZVJlc291
cmNlRGF0YShGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQg
PSBpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAgcmV0
dXJuIHdpbGxSZWNlaXZlUmVzb3VyY2VEYXRhSW1wbChpbnNwZWN0b3JBZ2VudCwgaWRlbnRpZmll
cik7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSgpKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIHJl
dHVybiB3aWxsUmVjZWl2ZVJlc291cmNlRGF0YUltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgaWRl
bnRpZmllcik7CiAjZW5kaWYKICAgICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llKCk7CiB9CkBAIC02NjUsNyArNjk3LDggQEAgaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNlaXZlUmVzb3UKIGlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVJlc291cmNlRGF0
YShjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmIGNvb2tpZSkKIHsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChoYXNGcm9udGVuZHMoKSAmJiBjb29raWUuZmlyc3Qp
CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKGNvb2tp
ZS5maXJzdCkKICAgICAgICAgZGlkUmVjZWl2ZVJlc291cmNlRGF0YUltcGwoY29va2llKTsKICNl
bmRpZgogfQpAQCAtNjczLDggKzcwNiw4IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkUmVjZWl2ZVJlc291cmNlRGF0YShjb25zdCBJbnNwZWN0b3JJbnN0CiBpbmxp
bmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlKEZyYW1lKiBmcmFtZSwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQg
PSBpbnNwZWN0b3JBZ2VudEZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAgcmV0dXJuIHdpbGxSZWNl
aXZlUmVzb3VyY2VSZXNwb25zZUltcGwoaW5zcGVjdG9yQWdlbnQsIGlkZW50aWZpZXIsIHJlc3Bv
bnNlKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVybiB3aWxs
UmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZp
ZXIsIHJlc3BvbnNlKTsKICNlbmRpZgogICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29raWUoKTsKIH0KQEAgLTY5MCw4OCArNzIzLDg4IEBAIGlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2UoY29uc3QgSW5zcGVj
dG9yCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0ZXJY
RnJhbWVPcHRpb25zRGVuaWVkKEZyYW1lKiBmcmFtZSwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByKQogewog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5k
Rm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRp
bnVlQWZ0ZXJYRnJhbWVPcHRpb25zRGVuaWVkSW1wbChmcmFtZSwgbG9hZGVyLCBpZGVudGlmaWVy
LCByKTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKKyAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0ZXJYRnJhbWVPcHRpb25zRGVuaWVkSW1w
bChmcmFtZSwgbG9hZGVyLCBpZGVudGlmaWVyLCByKTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlV2l0aFBvbGljeURvd25sb2FkKEZy
YW1lKiBmcmFtZSwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
Ci0gICAgaWYgKGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRnJhbWUoZnJhbWUpKQotICAg
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlV2l0aFBvbGljeURvd25sb2Fk
SW1wbChmcmFtZSwgbG9hZGVyLCBpZGVudGlmaWVyLCByKTsKKyAgICBGQVNUX1JFVFVSTl9JRl9O
T19GUk9OVEVORFModm9pZCgpKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRp
bnVlV2l0aFBvbGljeURvd25sb2FkSW1wbChmcmFtZSwgbG9hZGVyLCBpZGVudGlmaWVyLCByKTsK
ICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRp
bnVlV2l0aFBvbGljeUlnbm9yZShGcmFtZSogZnJhbWUsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIs
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcikKIHsK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChpbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVu
ZEZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250
aW51ZVdpdGhQb2xpY3lJZ25vcmVJbXBsKGZyYW1lLCBsb2FkZXIsIGlkZW50aWZpZXIsIHIpOwor
ICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6Y29udGludWVXaXRoUG9saWN5SWdub3JlSW1wbChmcmFtZSwgbG9hZGVy
LCBpZGVudGlmaWVyLCByKTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFJlY2VpdmVDb250ZW50TGVuZ3RoKEZyYW1lKiBmcmFtZSwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgZGF0YUxlbmd0aCwgaW50IGVuY29kZWREYXRhTGVuZ3Ro
KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBkaWRS
ZWNlaXZlQ29udGVudExlbmd0aEltcGwoaW5zcGVjdG9yQWdlbnQsIGlkZW50aWZpZXIsIGRhdGFM
ZW5ndGgsIGVuY29kZWREYXRhTGVuZ3RoKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkp
CisgICAgICAgIGRpZFJlY2VpdmVDb250ZW50TGVuZ3RoSW1wbChpbnN0cnVtZW50aW5nQWdlbnRz
LCBpZGVudGlmaWVyLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAjZW5kaWYKIH0K
IAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaW5pc2hMb2FkaW5n
KEZyYW1lKiBmcmFtZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGlt
ZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5z
cGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAgZGlk
RmluaXNoTG9hZGluZ0ltcGwoaW5zcGVjdG9yQWdlbnQsIGlkZW50aWZpZXIsIGZpbmlzaFRpbWUp
OworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICAgICAgZGlkRmluaXNoTG9hZGlu
Z0ltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRpZmllciwgZmluaXNoVGltZSk7CiAjZW5k
aWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsTG9h
ZGluZyhGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVj
dG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JGcmFtZShmcmFtZSkp
Ci0gICAgICAgIGRpZEZhaWxMb2FkaW5nSW1wbChpbnNwZWN0b3JBZ2VudCwgaWRlbnRpZmllciwg
ZXJyb3IpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICAgICAgZGlkRmFpbExv
YWRpbmdJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIsIGVycm9yKTsKICNlbmRp
ZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJlc291cmNlUmV0
cmlldmVkQnlYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBzZW5kVVJMLCB1bnNpZ25lZCBzZW5kTGluZU51
bWJlcikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCog
aW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZvckNvbnRleHQoY29udGV4dCkpCi0gICAg
ICAgIHJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdEltcGwoaW5zcGVjdG9yQWdlbnQs
IGlkZW50aWZpZXIsIHNvdXJjZVN0cmluZywgdXJsLCBzZW5kVVJMLCBzZW5kTGluZU51bWJlcik7
CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICAgICAgcmVzb3VyY2VSZXRy
aWV2ZWRCeVhNTEh0dHBSZXF1ZXN0SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVudGlmaWVy
LCBzb3VyY2VTdHJpbmcsIHVybCwgc2VuZFVSTCwgc2VuZExpbmVOdW1iZXIpOwogI2VuZGlmCiB9
CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0SW1wb3J0ZWQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZykKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQot
ICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZv
ckNvbnRleHQoY29udGV4dCkpCi0gICAgICAgIHNjcmlwdEltcG9ydGVkSW1wbChpbnNwZWN0b3JB
Z2VudCwgaWRlbnRpZmllciwgc291cmNlU3RyaW5nKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0
KGNvbnRleHQpKQorICAgICAgICBzY3JpcHRJbXBvcnRlZEltcGwoaW5zdHJ1bWVudGluZ0FnZW50
cywgaWRlbnRpZmllciwgc291cmNlU3RyaW5nKTsKICNlbmRpZgogfQogCiBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRvbUNvbnRlbnRMb2FkZWRFdmVudEZpcmVkKEZyYW1l
KiBmcmFtZSwgY29uc3QgS1VSTCYgdXJsKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAg
aWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9yRnJh
bWUoZnJhbWUpKQotICAgICAgICBkb21Db250ZW50TG9hZGVkRXZlbnRGaXJlZEltcGwoaW5zcGVj
dG9yQWdlbnQsIGZyYW1lLCB1cmwpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAg
ICAgICAgZG9tQ29udGVudExvYWRlZEV2ZW50RmlyZWRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMs
IGZyYW1lLCB1cmwpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6bG9hZEV2ZW50RmlyZWQoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwpCiB7
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGxvYWRFdmVu
dEZpcmVkSW1wbChpbnNwZWN0b3JBZ2VudCwgZnJhbWUsIHVybCk7CisgICAgaWYgKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
RnJhbWUoZnJhbWUpKQorICAgICAgICBsb2FkRXZlbnRGaXJlZEltcGwoaW5zdHJ1bWVudGluZ0Fn
ZW50cywgZnJhbWUsIHVybCk7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpmcmFtZURldGFjaGVkRnJvbVBhcmVudChGcmFtZSogZnJhbWUpCiB7CiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFn
ZW50ID0gaW5zcGVjdG9yQWdlbnRGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGZyYW1lRGV0YWNo
ZWRGcm9tUGFyZW50SW1wbChpbnNwZWN0b3JBZ2VudCwgZnJhbWUpOworICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
ckZyYW1lKGZyYW1lKSkKKyAgICAgICAgZnJhbWVEZXRhY2hlZEZyb21QYXJlbnRJbXBsKGluc3Ry
dW1lbnRpbmdBZ2VudHMsIGZyYW1lKTsKICNlbmRpZgogfQogCkBAIC03ODMsMTYgKzgxNiwxNyBA
QCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENvbW1pdExvYWQoRnJh
bWUqIGZyYW1lLCBEb2N1bWVudExvYWRlcgogICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgp
OwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChJbnNwZWN0b3JBZ2Vu
dCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudEZvclBhZ2UocGFnZSkpCi0gICAgICAg
IGRpZENvbW1pdExvYWRJbXBsKHBhZ2UsIGluc3BlY3RvckFnZW50LCBsb2FkZXIpOworICAgIGlm
IChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGlu
Z0FnZW50c0ZvclBhZ2UocGFnZSkpCisgICAgICAgIGRpZENvbW1pdExvYWRJbXBsKGluc3RydW1l
bnRpbmdBZ2VudHMsIHBhZ2UsIGxvYWRlcik7CiAjZW5kaWYKIH0KIAogaW5saW5lIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxXcml0
ZUhUTUwoRG9jdW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBp
bnQgc3RhcnRMaW5lKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3Rv
ckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250ZW5kRm9yRG9j
dW1lbnQoZG9jdW1lbnQpKQotICAgICAgICByZXR1cm4gd2lsbFdyaXRlSFRNTEltcGwoaW5zcGVj
dG9yQWdlbnQsIGxlbmd0aCwgc3RhcnRMaW5lKTsKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9O
VEVORFMoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCkpOworICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
ckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICAgICAgcmV0dXJuIHdpbGxXcml0ZUhUTUxJbXBsKGlu
c3RydW1lbnRpbmdBZ2VudHMsIGxlbmd0aCwgc3RhcnRMaW5lKTsKICNlbmRpZgogICAgIHJldHVy
biBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKTsKIH0KQEAgLTgwMCw3ICs4MzQsOCBA
QCBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbFdyaXRlSFRNTChEbwogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRXcml0ZUhUTUwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2ll
JiBjb29raWUsIHVuc2lnbmVkIGludCBlbmRMaW5lKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
Ci0gICAgaWYgKGhhc0Zyb250ZW5kcygpICYmIGNvb2tpZS5maXJzdCkKKyAgICBGQVNUX1JFVFVS
Tl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKKyAgICBpZiAoY29va2llLmZpcnN0KQogICAgICAg
ICBkaWRXcml0ZUhUTUxJbXBsKGNvb2tpZSwgZW5kTGluZSk7CiAjZW5kaWYKIH0KQEAgLTgwOSw4
ICs4NDQsOCBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFdyaXRl
SFRNTChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpbwogaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRVc2VET01TdG9yYWdlKFBhZ2UqIHBhZ2UsIFN0b3JhZ2VBcmVh
KiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKQogewogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2Vu
dCA9IGluc3BlY3RvckFnZW50Rm9yUGFnZShwYWdlKSkKLSAgICAgICAgZGlkVXNlRE9NU3RvcmFn
ZUltcGwoaW5zcGVjdG9yQWdlbnQsIHN0b3JhZ2VBcmVhLCBpc0xvY2FsU3RvcmFnZSwgZnJhbWUp
OworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCisgICAgICAgIGRpZFVzZURPTVN0b3JhZ2VJ
bXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHN0b3JhZ2VBcmVhLCBpc0xvY2FsU3RvcmFnZSwgZnJh
bWUpOwogI2VuZGlmCiB9CiAjZW5kaWYKQEAgLTgxOCwxMSArODUzLDcgQEAgaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRVc2VET01TdG9yYWdlKFBhZ2UqIHBhZ2UsIFN0
b3JhZ2VBcmVhKgogI2lmIEVOQUJMRShXT1JLRVJTKQogaW5saW5lIGJvb2wgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3aWxsU3RhcnRXb3JrZXJDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFdvcmtlckNvbnRleHRQcm94eSopCiB7Ci0jaWYgRU5BQkxFKElOU1BFQ1RP
UikKLSAgICByZXR1cm4gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JDb250ZXh0KGNvbnRl
eHQpOwotI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKIH0KIAogaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTdGFydFdvcmtlckNvbnRleHQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgV29ya2VyQ29udGV4dFByb3h5KiBwcm94eSwgYm9vbCBw
YXVzZWQpCkBAIC04MzAsMjQgKzg2MSwyNyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZFN0YXJ0V29ya2VyQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZQogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKCFwYXVzZWQpCiAgICAgICAgIHJldHVybjsKLSAg
ICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRo
RnJvbnRlbmRGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICBkaWRTdGFydFdvcmtlckNvbnRl
eHRJbXBsKGluc3BlY3RvckFnZW50LCBwcm94eSk7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJP
TlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICAg
ICAgZGlkU3RhcnRXb3JrZXJDb250ZXh0SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBwcm94eSk7
CiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRD
cmVhdGVXb3JrZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgaW50cHRyX3QgaWQs
IGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkV29ya2VyKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3Bl
Y3RvckFnZW50V2l0aEZyb250ZW5kRm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAgICAgZGlkQ3Jl
YXRlV29ya2VySW1wbChpbnNwZWN0b3JBZ2VudCwgaWQsIHVybCwgaXNTaGFyZWRXb3JrZXIpOwor
ICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
ckNvbnRleHQoY29udGV4dCkpCisgICAgICAgIGRpZENyZWF0ZVdvcmtlckltcGwoaW5zdHJ1bWVu
dGluZ0FnZW50cywgaWQsIHVybCwgaXNTaGFyZWRXb3JrZXIpOwogI2VuZGlmCiB9CiAKIGlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGVzdHJveVdvcmtlcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnRwdHJfdCBpZCkKIHsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0
b3JBZ2VudFdpdGhGcm9udGVuZEZvckNvbnRleHQoY29udGV4dCkpCi0gICAgICAgIGRpZERlc3Ry
b3lXb3JrZXJJbXBsKGluc3BlY3RvckFnZW50LCBpZCk7CisgICAgRkFTVF9SRVRVUk5fSUZfTk9f
RlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAg
ICAgICAgZGlkRGVzdHJveVdvcmtlckltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgaWQpOwogI2Vu
ZGlmCiB9CiAjZW5kaWYKQEAgLTg1NywzMiArODkxLDMyIEBAIGlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkRGVzdHJveVdvcmtlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdlYlNv
Y2tldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKQog
ewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudCA9IGluc3BlY3RvckFnZW50Rm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAgICAgZGlk
Q3JlYXRlV2ViU29ja2V0SW1wbChpbnNwZWN0b3JBZ2VudCwgaWRlbnRpZmllciwgcmVxdWVzdFVS
TCwgZG9jdW1lbnRVUkwpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCisgICAg
ICAgIGRpZENyZWF0ZVdlYlNvY2tldEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRpZmll
ciwgcmVxdWVzdFVSTCwgZG9jdW1lbnRVUkwpOwogI2VuZGlmCiB9CiAKIGlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICNpZiBFTkFC
TEUoSU5TUEVDVE9SKQotICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQgPSBp
bnNwZWN0b3JBZ2VudEZvckNvbnRleHQoY29udGV4dCkpCi0gICAgICAgIHdpbGxTZW5kV2ViU29j
a2V0SGFuZHNoYWtlUmVxdWVzdEltcGwoaW5zcGVjdG9yQWdlbnQsIGlkZW50aWZpZXIsIHJlcXVl
c3QpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCisgICAgICAgIHdpbGxTZW5k
V2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRp
ZmllciwgcmVxdWVzdCk7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBX
ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9y
QWdlbnRGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICBkaWRSZWNlaXZlV2ViU29ja2V0SGFu
ZHNoYWtlUmVzcG9uc2VJbXBsKGluc3BlY3RvckFnZW50LCBpZGVudGlmaWVyLCByZXNwb25zZSk7
CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICAgICAgZGlkUmVjZWl2ZVdl
YlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVudGlm
aWVyLCByZXNwb25zZSk7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRDbG9zZVdlYlNvY2tldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
LSAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRG
b3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICBkaWRDbG9zZVdlYlNvY2tldEltcGwoaW5zcGVj
dG9yQWdlbnQsIGlkZW50aWZpZXIpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkp
CisgICAgICAgIGRpZENsb3NlV2ViU29ja2V0SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVu
dGlmaWVyKTsKICNlbmRpZgogfQogI2VuZGlmCkBAIC04OTAsOCArOTI0LDkgQEAgaW5saW5lIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDbG9zZVdlYlNvY2tldChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KgogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpuZXR3
b3JrU3RhdGVDaGFuZ2VkKFBhZ2UqIHBhZ2UpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikgJiYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBpZiAoSW5zcGVjdG9yQWdlbnQq
IGluc3BlY3RvckFnZW50ID0gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JQYWdlKHBhZ2Up
KQotICAgICAgICBuZXR3b3JrU3RhdGVDaGFuZ2VkSW1wbChpbnNwZWN0b3JBZ2VudCk7CisgICAg
RkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFn
ZShwYWdlKSkKKyAgICAgICAgbmV0d29ya1N0YXRlQ2hhbmdlZEltcGwoaW5zdHJ1bWVudGluZ0Fn
ZW50cyk7CiAjZW5kaWYKIH0KIApAQCAtODk5LDc0ICs5MzQsNDkgQEAgaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2VkKFBhZ2UqIHBhZ2UpCiBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnVwZGF0ZUFwcGxpY2F0aW9uQ2Fj
aGVTdGF0dXMoRnJhbWUqIGZyYW1lKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYg
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50V2l0aEZyb250
ZW5kRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICB1cGRhdGVBcHBsaWNhdGlvbkNhY2hlU3RhdHVz
SW1wbChpbnNwZWN0b3JBZ2VudCwgZnJhbWUpOworICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05U
RU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICAgICAgdXBk
YXRlQXBwbGljYXRpb25DYWNoZVN0YXR1c0ltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUp
OwogI2VuZGlmCiB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi1pbmxpbmUgYm9v
bCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5kKFBhZ2UqIHBhZ2UpCitpbmxp
bmUgYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbGxlY3RpbmdIVE1MUGFyc2VFcnJv
cnMoUGFnZSogcGFnZSkKIHsKLSAgICByZXR1cm4gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRG
b3JQYWdlKHBhZ2UpOworICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyhmYWxzZSk7Cisg
ICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgcmV0dXJuIGNvbGxlY3RpbmdIVE1M
UGFyc2VFcnJvcnMoaW5zdHJ1bWVudGluZ0FnZW50cyk7CisgICAgcmV0dXJuIGZhbHNlOwogfQot
I2VuZGlmCiAKLQotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi1pbmxpbmUgSW5zcGVjdG9yQWdlbnQq
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zcGVjdG9yQWdlbnRGb3JDb250ZXh0KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCitpbmxpbmUgSW5zdHJ1bWVudGluZ0FnZW50cyog
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewogICAgIGlmIChjb250ZXh0ICYmIGNv
bnRleHQtPmlzRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGluc3BlY3RvckFnZW50Rm9yUGFn
ZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpLT5wYWdlKCkpOworICAgICAgICByZXR1
cm4gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2Uoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250
ZXh0KS0+cGFnZSgpKTsKICAgICByZXR1cm4gMDsKIH0KIAotaW5saW5lIEluc3BlY3RvckFnZW50
KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3BlY3RvckFnZW50Rm9yRnJhbWUoRnJhbWUq
IGZyYW1lKQotewotICAgIGlmIChmcmFtZSkKLSAgICAgICAgcmV0dXJuIGluc3BlY3RvckFnZW50
Rm9yUGFnZShmcmFtZS0+cGFnZSgpKTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW5saW5lIEluc3Bl
Y3RvckFnZW50KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3BlY3RvckFnZW50Rm9yUGFn
ZShQYWdlKiBwYWdlKQoraW5saW5lIEluc3RydW1lbnRpbmdBZ2VudHMqIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UoUGFnZSogcGFnZSkKIHsKICAg
ICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpbnNwZWN0b3JBZ2Vu
dHMoKS5nZXQocGFnZSk7CisgICAgcmV0dXJuIGluc3RydW1lbnRpbmdBZ2VudHMoKS5nZXQocGFn
ZSk7CiB9CiAKLWlubGluZSBJbnNwZWN0b3JBZ2VudCogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjppbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKK2lubGluZSBJbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShGcmFtZSogZnJhbWUpCiB7
Ci0gICAgaWYgKGhhc0Zyb250ZW5kcygpICYmIGNvbnRleHQgJiYgY29udGV4dC0+aXNEb2N1bWVu
dCgpKQotICAgICAgICByZXR1cm4gaW5zcGVjdG9yQWdlbnRXaXRoRnJvbnRlbmRGb3JQYWdlKHN0
YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLWlubGluZSBJbnNwZWN0b3JBZ2VudCogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnNw
ZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsK
LSAgICBpZiAoaGFzRnJvbnRlbmRzKCkgJiYgZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBpbnNw
ZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvclBhZ2UoZG9jdW1lbnQtPnBhZ2UoKSk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLWlubGluZSBJbnNwZWN0b3JBZ2VudCogSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjppbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKLXsK
LSAgICBpZiAoaGFzRnJvbnRlbmRzKCkgJiYgZnJhbWUpCi0gICAgICAgIHJldHVybiBpbnNwZWN0
b3JBZ2VudFdpdGhGcm9udGVuZEZvclBhZ2UoZnJhbWUtPnBhZ2UoKSk7CisgICAgaWYgKGZyYW1l
KQorICAgICAgICByZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UoZnJhbWUtPnBhZ2Uo
KSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWlubGluZSBJbnNwZWN0b3JBZ2VudCogSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjppbnNwZWN0b3JBZ2VudFdpdGhGcm9udGVuZEZvclBhZ2UoUGFnZSog
cGFnZSkKK2lubGluZSBJbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCiB7
Ci0gICAgaWYgKHBhZ2UpIHsKLSAgICAgICAgaWYgKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudCA9IGluc3BlY3RvckFnZW50Rm9yUGFnZShwYWdlKSkgewotICAgICAgICAgICAgaWYgKGhh
c0Zyb250ZW5kKGluc3BlY3RvckFnZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5zcGVj
dG9yQWdlbnQ7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGRvY3VtZW50KQorICAgICAgICBy
ZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UoZG9jdW1lbnQtPnBhZ2UoKSk7CiAgICAg
cmV0dXJuIDA7CiB9Ci0KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>