<?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>218108</bug_id>
          
          <creation_ts>2020-10-22 16:38:31 -0700</creation_ts>
          <short_desc>Use WorkerOrWorkletGlobalScope in WebInspector code instead of WorkerGlobalScope</short_desc>
          <delta_ts>2020-10-22 18:01:18 -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</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>217724</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>bburg</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>mkwst</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1700883</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-22 16:38:31 -0700</bug_when>
    <thetext>Use WorkerOrWorkletGlobalScope in WebInspector code instead of WorkerGlobalScope, in preparation for Worklets support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700885</commentid>
    <comment_count>1</comment_count>
      <attachid>412144</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-22 16:41:12 -0700</bug_when>
    <thetext>Created attachment 412144
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700887</commentid>
    <comment_count>2</comment_count>
      <attachid>412144</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-22 16:58:52 -0700</bug_when>
    <thetext>Comment on attachment 412144
Patch

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

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:102
&gt; +class WorkerOrWorkletGlobalScope;

Sure makes me wish we had a shorter name for this: Workerlikes or whatever.

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:544
&gt; +    static InstrumentingAgents&amp; instrumentingAgentsFor(Page&amp;);
&gt; +    static InstrumentingAgents&amp; instrumentingAgentsFor(WorkerOrWorkletGlobalScope&amp;);
&gt; +
&gt; +    static InstrumentingAgents* instrumentingAgentsFor(const Frame&amp;);
&gt; +    static InstrumentingAgents* instrumentingAgentsFor(const Frame*);
&gt; +    static InstrumentingAgents* instrumentingAgentsFor(ScriptExecutionContext*);
&gt; +    static InstrumentingAgents* instrumentingAgentsFor(ScriptExecutionContext&amp;);
&gt; +    static InstrumentingAgents* instrumentingAgentsFor(Document&amp;);
&gt; +    static InstrumentingAgents* instrumentingAgentsFor(Document*);
&gt; +    static InstrumentingAgents* instrumentingAgentsFor(RenderObject&amp;);
&gt; +    static InstrumentingAgents* instrumentingAgentsFor(WorkerOrWorkletGlobalScope*);

Great to use overloading. Just wondering, why did you decide to keep the word &quot;For&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700888</commentid>
    <comment_count>3</comment_count>
      <attachid>412144</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-22 17:02:36 -0700</bug_when>
    <thetext>Comment on attachment 412144
Patch

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

&gt;&gt; Source/WebCore/inspector/InspectorInstrumentation.h:544
&gt;&gt; +    static InstrumentingAgents* instrumentingAgentsFor(WorkerOrWorkletGlobalScope*);
&gt; 
&gt; Great to use overloading. Just wondering, why did you decide to keep the word &quot;For&quot;?

2 reasons:
1. To avoid naming conflicts with local variables. Otherwise, I would have had to use this-&gt;instrumentingAgents() in several places. I guess I could drop the &quot;For&quot; suffix and rename the local variables to &quot;agents&quot; if you prefer.
2. There is precedence in WebInspector code: m_injectedScriptManager.injectedScriptFor()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700889</commentid>
    <comment_count>4</comment_count>
      <attachid>412144</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-10-22 17:03:22 -0700</bug_when>
    <thetext>Comment on attachment 412144
Patch

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

r=me

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:534
&gt; +    static InstrumentingAgents&amp; instrumentingAgentsFor(Page&amp;);

Can we drop the &quot;For&quot;?

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:-550
&gt; -    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))

NIT: if you wanted, while you&apos;re at it you could make all these `InstrumentingAgents*` into `auto*` :)

&gt; Source/WebCore/workers/WorkerOrWorkletGlobalScope.cpp:43
&gt; +    , m_inspectorController(makeUnique&lt;WorkerInspectorController&gt;(*this))

I think this will have observable effects, as this will create a `WorkerConsoleAgent` inside worklets, meaning that `console` functions will now be able to do things.  It may not have any actual effects though as the frontend connection isn&apos;t established yet (via `WorkerInspectorProxy::connectToWorkerInspectorController`).

&gt; Source/WebCore/workers/WorkerOrWorkletThread.h:51
&gt; +    virtual WorkerDebuggerProxy* workerDebuggerProxy() const = 0;

Will we be able to make this into `WorkerDebuggerProxy&amp;` in bug 217724, or do we have to leave it as a `WorkerDebuggerProxy*`?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700890</commentid>
    <comment_count>5</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-10-22 17:03:48 -0700</bug_when>
    <thetext>oh lol Darin beat me to it 😅</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700892</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-22 17:04:45 -0700</bug_when>
    <thetext>Better with both of us reviewing. Not too many cooks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700893</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-22 17:08:37 -0700</bug_when>
    <thetext>(In reply to Devin Rousso from comment #4)
&gt; Comment on attachment 412144 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=412144&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorInstrumentation.h:534
&gt; &gt; +    static InstrumentingAgents&amp; instrumentingAgentsFor(Page&amp;);
&gt; 
&gt; Can we drop the &quot;For&quot;?

Will do.

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorInstrumentation.h:-550
&gt; &gt; -    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
&gt; 
&gt; NIT: if you wanted, while you&apos;re at it you could make all these
&gt; `InstrumentingAgents*` into `auto*` :)

Will do.

&gt; 
&gt; &gt; Source/WebCore/workers/WorkerOrWorkletGlobalScope.cpp:43
&gt; &gt; +    , m_inspectorController(makeUnique&lt;WorkerInspectorController&gt;(*this))
&gt; 
&gt; I think this will have observable effects, as this will create a
&gt; `WorkerConsoleAgent` inside worklets, meaning that `console` functions will
&gt; now be able to do things.  It may not have any actual effects though as the
&gt; frontend connection isn&apos;t established yet (via
&gt; `WorkerInspectorProxy::connectToWorkerInspectorController`).

&gt; 
&gt; &gt; Source/WebCore/workers/WorkerOrWorkletThread.h:51
&gt; &gt; +    virtual WorkerDebuggerProxy* workerDebuggerProxy() const = 0;
&gt; 
&gt; Will we be able to make this into `WorkerDebuggerProxy&amp;` in bug 217724, or
&gt; do we have to leave it as a `WorkerDebuggerProxy*`?

Yes, I will turn it back into a reference in the follow-up patch. I was just trying to keep the patch size decently small.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700898</commentid>
    <comment_count>8</comment_count>
      <attachid>412147</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-22 17:17:17 -0700</bug_when>
    <thetext>Created attachment 412147
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700902</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-22 18:00:09 -0700</bug_when>
    <thetext>Committed r268900: &lt;https://trac.webkit.org/changeset/268900&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 412147.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700903</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-22 18:01:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/70597384&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412144</attachid>
            <date>2020-10-22 16:41:12 -0700</date>
            <delta_ts>2020-10-22 17:17:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218108-20201022164111.patch</filename>
            <type>text/plain</type>
            <size>130070</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4ODk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjU1ZTk3YzQ0NDNlYTc4
NjliYmE5NWM2NmU0NDdhMDA2Nzk1YTg4MS4uZjJkMGJhNDYwN2ZlZjFmOWZkZTA4ZTgwNWMwZGM0
ZjEwMDEzMTU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0MyBAQAorMjAyMC0xMC0yMiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBXb3JrZXJPcldvcmts
ZXRHbG9iYWxTY29wZSBpbiBXZWJJbnNwZWN0b3IgY29kZSBpbnN0ZWFkIG9mIFdvcmtlckdsb2Jh
bFNjb3BlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTgxMDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
c2UgV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUgaW4gV2ViSW5zcGVjdG9yIGNvZGUgaW5zdGVh
ZCBvZiBXb3JrZXJHbG9iYWxTY29wZSwKKyAgICAgICAgaW4gcHJlcGFyYXRpb24gZm9yIFdvcmts
ZXRzIHN1cHBvcnQuIFRoaXMgd2lsbCBhbGxvdyB1cyB0byByZXVzZSB0aGlzIGNvZGUgd2hlbgor
ICAgICAgICB3ZSBhZGQgV2ViIEluc3BlY3RvciBzdXBwb3J0IGZvciBXb3JrbGV0cy4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZSB5ZXQuCisKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvV29ya2xldFRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1dvcmtsZXRUaHJlYWQ6OndvcmtlckRlYnVnZ2VyUHJveHkgY29uc3QpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Xb3JrbGV0VGhyZWFkLmg6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JXZWJHUFVEZXZp
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xl
QWdlbnRFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6dGltZWxpbmVBZ2VudFRyYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0Zvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JSZW5kZXJl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
Omluc3RydW1lbnRpbmdBZ2VudHNGb3JXb3JrZXJHbG9iYWxTY29wZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQpOiBEZWxldGVkLgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aXNEZWJ1Z2dl
clBhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omlk
ZW50aWZpZXJGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6YWRkRXZlbnRMaXN0ZW5lcnNUb05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEluc2VydERPTU5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9NTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlbW92ZURPTU5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTW9k
aWZ5RE9NQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZE1vZGlmeURPTUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRSZW1vdmVET01BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbEludmFsaWRhdGVTdHlsZUF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZG9jdW1lbnREZXRhY2hl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lV2lu
ZG93RGlzY2FyZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6bWVkaWFRdWVyeVJlc3VsdENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjphY3RpdmVTdHlsZVNoZWV0c1VwZGF0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQdXNoU2hhZG93Um9vdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQb3BTaGFkb3dSb290
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdl
Q3VzdG9tRWxlbWVudFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6cHNldWRvRWxlbWVudENyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpwc2V1ZG9FbGVtZW50RGVzdHJveWVkKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlTmFtZWRGbG93KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZU5hbWVk
Rmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENo
YW5nZVJlZ2lvbk92ZXJzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRSZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkVW5yZWdpc3Rlck5hbWVkRmxvd0Nv
bnRlbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFuZGxlTW91c2VQcmVzcyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjaGFyYWN0ZXJEYXRhTW9kaWZp
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2Vu
ZFhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbEZldGNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkSW5zdGFsbFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkUmVtb3ZlVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRBZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppc0V2ZW50TGlzdGVuZXJE
aXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxQb3N0TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZFBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkRmFpbFBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoUG9zdE1lc3NhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaFBvc3RNZXNzYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbENhbGxGdW5j
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENh
bGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxEaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxIYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnRPbldpbmRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZl
bnRPbldpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmV2ZW50RGlkUmVzZXRBZnRlckRpc3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbEV2YWx1YXRlU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRmlyZVRpbWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmlyZVRpbWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW52YWxpZGF0ZUxh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxM
YXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRM
YXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRT
Y3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
Q29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsUmVjYWxjdWxhdGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFJlY2FsY3VsYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFwcGx5VXNlckFnZW50
T3ZlcnJpZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjph
cHBseUVtdWxhdGVkTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3aWxsU2VuZFJlcXVlc3RPZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZl
UmVzb3VyY2VSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZFJlY2VpdmVUaHJlYWRhYmxlTG9hZGVyUmVzcG9uc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpbmlzaExvYWRpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsTG9hZGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVl
QWZ0ZXJYRnJhbWVPcHRpb25zRGVuaWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6Y29udGludWVXaXRoUG9saWN5RG93bmxvYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250aW51ZVdpdGhQb2xpY3lJZ25vcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9hZFhI
UlN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRMb2FkWEhSU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnNjcmlwdEltcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0RXhlY3V0aW9uQmxvY2tlZEJ5Q1NQKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVNjcmlw
dFJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZG9tQ29udGVudExvYWRlZEV2ZW50RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpsb2FkRXZlbnRGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lRGV0YWNoZWRGcm9tUGFyZW50KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ29tbWl0TG9hZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lRG9jdW1lbnRVcGRh
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bG9hZGVy
RGV0YWNoZWRGcm9tRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpmcmFtZVN0YXJ0ZWRMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZnJhbWVTdG9wcGVkTG9hZGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lQ2xlYXJlZFNj
aGVkdWxlZE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxJbnRlcmNlcHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzaG91bGRJbnRlcmNlcHRSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2hvdWxkSW50ZXJjZXB0
UmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpp
bnRlcmNlcHRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6aW50ZXJjZXB0UmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNob3VsZFdhaXRGb3JEZWJ1Z2dl
ck9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
b3JrZXJTdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d29ya2VyVGVybWluYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZENyZWF0ZVdlYlNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVXZWJT
b2NrZXRIYW5kc2hha2VSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZENsb3NlV2ViU29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEZy
YW1lRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRTZW5kV2ViU29ja2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRIYW5kbGVNZW1vcnlQcmVzc3VyZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5nZUNTU0NhbnZhc0NsaWVudE5vZGVzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZENoYW5nZUNhbnZhc01lbW9yeSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnJlY29yZENhbnZhc0FjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0Zy
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRW5h
YmxlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkQ3JlYXRlV2ViR0xQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbERlc3Ryb3lXZWJHTFByb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppc1dlYkdMUHJvZ3JhbURpc2FibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aXNXZWJHTFByb2dyYW1I
aWdobGlnaHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxDb25maWd1cmVTd2FwQ2hhaW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3aWxsRGVzdHJveVdlYkdQVVBpcGVsaW5lKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VXZWJB
bmltYXRpb25OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkU2V0V2ViQW5pbWF0aW9uRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlV2ViQW5pbWF0aW9uRWZmZWN0VGltaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlV2ViQW5p
bWF0aW9uRWZmZWN0VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkQ3JlYXRlV2ViQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERlc3Ryb3lXZWJBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dXBkYXRlQXBwbGlj
YXRpb25DYWNoZVN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnRSZXNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnRha2VIZWFwU25hcHNob3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdGFydENvbnNvbGVUaW1pbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpsb2dDb25zb2xlVGlt
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcENv
bnNvbGVUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojpjb25zb2xlVGltZVN0YW1wKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6c3RhcnRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpzdG9wUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6Y29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZVN0b3BSZWNvcmRpbmdD
YW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRDYW5jZWxBbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxGaXJlQW5pbWF0aW9uRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaXJlQW5pbWF0aW9uRnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRmly
ZU9ic2VydmVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRGaXJlT2JzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmxheWVyVHJlZURpZENoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJlbmRlckxheWVyRGVzdHJveWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0Fn
ZW50c0Zvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omlu
c3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5z
dHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0
cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JXZWJBZ2VudEJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckFnZW50Q29udGV4dDo6V29ya2VyQWdlbnRDb250ZXh0KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvV29ya2VyRGVidWdnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRGVidWdnZXI6
OldvcmtlckRlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckRlYnVnZ2VyOjphdHRh
Y2hEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJEZWJ1Z2dlcjo6ZGV0YWNoRGVi
dWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRGVidWdnZXI6OnJ1bkV2ZW50TG9vcFdo
aWxlUGF1c2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvV29ya2VyRGVidWdnZXIuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJJbnNwZWN0b3JDb250cm9s
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5l
Y3RGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVy
Ojp3b3JrZXJBZ2VudENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VySW5zcGVjdG9y
Q29udHJvbGxlcjo6Y3JlYXRlTGF6eUFnZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJJ
bnNwZWN0b3JDb250cm9sbGVyOjp2bSk6CisgICAgICAgICogaW5zcGVjdG9yL1dvcmtlckluc3Bl
Y3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvV29ya2VyVG9QYWdlRnJvbnRl
bmRDaGFubmVsLmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2VydmljZVdv
cmtlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcnZpY2VXb3JrZXJBZ2VudDo6U2Vy
dmljZVdvcmtlckFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3Jr
ZXJBdWRpdEFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckF1ZGl0QWdlbnQ6Oldv
cmtlckF1ZGl0QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQXVkaXRBZ2VudDo6aW5q
ZWN0ZWRTY3JpcHRGb3JFdmFsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJBdWRpdEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnNvbGVBZ2Vu
dDo6V29ya2VyQ29uc29sZUFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtl
ci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckRlYnVn
Z2VyQWdlbnQ6OldvcmtlckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
RGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvbkxvZyk6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJEZWJ1Z2dlckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwpOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyTmV0d29ya0FnZW50OjpXb3JrZXJOZXR3b3JrQWdlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyTmV0d29ya0FnZW50OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxl
ZEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck5ldHdvcmtBZ2VudDo6c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyTmV0d29ya0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclJ1bnRpbWVBZ2Vu
dDo6V29ya2VyUnVudGltZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclJ1bnRpbWVB
Z2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckds
b2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckdsb2JhbFNjb3BlOjpXb3Jr
ZXJHbG9iYWxTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6cHJl
cGFyZUZvckRlc3RydWN0aW9uKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3Bl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6aW5zcGVjdG9yQ29udHJv
bGxlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJPcldvcmtsZXRH
bG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJPcldvcmtsZXRHbG9iYWxT
Y29wZTo6V29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyT3JXb3JrbGV0R2xvYmFsU2NvcGU6OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAg
ICogd29ya2Vycy9Xb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGU6Omluc3BlY3RvckNvbnRyb2xsZXIgY29uc3Qp
OgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyT3JXb3JrbGV0VGhyZWFkLmg6CisgICAgICAgICog
d29ya2Vycy9Xb3JrZXJUaHJlYWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6
d29ya2VyRGVidWdnZXJQcm94eSBjb25zdCk6IERlbGV0ZWQuCisKIDIwMjAtMTAtMjIgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBTaGFyZSBtb3JlIGNvZGUgYmV0
d2VlbiBXb3JrZXJUaHJlYWQgYW5kIEF1ZGlvV29ya2xldFRocmVhZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1dvcmtsZXRUaHJlYWQuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1dvcmtsZXRUaHJlYWQuY3BwCmluZGV4
IDIwZGM1ODkzMWEzZGJhMDAwZDlhYjE3NmZhYjlmNTliYWU4MDExMDAuLjAwNGI3MjNkNWZjOTQw
MmQwNmE0ZDZkNzg2NmNiMGNiOGMwMmM1MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Xb3JrbGV0VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvV29ya2xldFRocmVhZC5jcHAKQEAgLTU2LDYgKzU2LDEy
IEBAIFdvcmtlckxvYWRlclByb3h5JiBBdWRpb1dvcmtsZXRUaHJlYWQ6OndvcmtlckxvYWRlclBy
b3h5KCkKICAgICByZXR1cm4gbV9tZXNzYWdpbmdQcm94eTsKIH0KIAorV29ya2VyRGVidWdnZXJQ
cm94eSogQXVkaW9Xb3JrbGV0VGhyZWFkOjp3b3JrZXJEZWJ1Z2dlclByb3h5KCkgY29uc3QKK3sK
KyAgICAvLyBGSVhNRTogQWRkIGRlYnVnZ2luZyBzdXBwb3J0IGZvciBBdWRpb1dvcmtsZXRzLgor
ICAgIHJldHVybiBudWxscHRyOworfQorCiBSZWY8VGhyZWFkPiBBdWRpb1dvcmtsZXRUaHJlYWQ6
OmNyZWF0ZVRocmVhZCgpCiB7CiAgICAgcmV0dXJuIFRocmVhZDo6Y3JlYXRlKCJXZWJDb3JlOiBB
dWRpb1dvcmtsZXQiLCBbdGhpc10gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb1dvcmtsZXRUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Xb3JrbGV0VGhyZWFkLmgKaW5kZXggNDZmYWNiNjVlN2IxNDVmZWI2OWRl
MzFhNmQ5MjFjYTE2M2UxNDE2OC4uYzA3MmI2ZmE0NTYwZWRhNjQ4MTU1MTI3ZTk4Y2ZhYjY3Zjkx
ZWFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1dv
cmtsZXRUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
V29ya2xldFRocmVhZC5oCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFdvcmtl
ck9yV29ya2xldFRocmVhZC4KICAgICBXb3JrZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVyUHJv
eHkoKSBmaW5hbDsKKyAgICBXb3JrZXJEZWJ1Z2dlclByb3h5KiB3b3JrZXJEZWJ1Z2dlclByb3h5
KCkgY29uc3QgZmluYWw7CiAKICAgICBBdWRpb1dvcmtsZXRNZXNzYWdpbmdQcm94eSYgbWVzc2Fn
aW5nUHJveHkoKSB7IHJldHVybiBtX21lc3NhZ2luZ1Byb3h5OyB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXgg
MDJhYmUxNjY0MTQyZGJlYTlhYmZmYzAwZWMzNzUzYmQxNGUzNjIzZi4uZGQ4YTUwNTM2MjFlNDQ2
NDkwMzgzY2FmMTQ3N2FiZTBjYTk2Mjg1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKQEAgLTcxLDggKzcxLDggQEAK
ICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAjaW5jbHVkZSAiV2ViR1BV
RGV2aWNlLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0RnJhbWUuaCIKLSNpbmNsdWRlICJXb3JrZXJH
bG9iYWxTY29wZS5oIgogI2luY2x1ZGUgIldvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZS5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0NvbnNvbGVNZXNzYWdlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ29uc29s
ZVR5cGVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5oPgpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxEZXN0cm95V2ViR1BVUGlwZWxpbmVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMKIAogSW5z
dHJ1bWVudGluZ0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5n
QWdlbnRzRm9yV2ViR1BVRGV2aWNlKFdlYkdQVURldmljZSYgZGV2aWNlKQogewotICAgIHJldHVy
biBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChkZXZpY2Uuc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKTsKKyAgICByZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50c0ZvcihkZXZpY2Uuc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKIH0KICNlbmRpZgogCkBAIC0xMjIwLDcgKzEyMjAsNyBAQCB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1
c0ltcGwoSW5zdHJ1bWVudGluZ0FnZQogYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNv
bnNvbGVBZ2VudEVuYWJsZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoZmFsc2UpOwotICAg
IGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNv
bnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpIHsKKyAgICBpZiAoYXV0byogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHdlYkNvbnNvbGVBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMtPndlYkNvbnNvbGVBZ2VudCgpKQogICAgICAgICAgICAgcmV0dXJuIHdlYkNvbnNvbGVB
Z2VudC0+ZW5hYmxlZCgpOwogICAgIH0KQEAgLTEyMzAsNyArMTIzMCw3IEBAIGJvb2wgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQWdlbnRFbmFibGVkKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwCiBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dGltZWxpbmVBZ2Vu
dFRyYWNraW5nKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
CiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKGZhbHNlKTsKLSAgICBpZiAoYXV0
byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpKQorICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvcihzY3JpcHRFeGVjdXRpb25Db250ZXh0KSkKICAgICAg
ICAgcmV0dXJuIGluc3RydW1lbnRpbmdBZ2VudHMtPnRyYWNraW5nVGltZWxpbmVBZ2VudCgpOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTEzMDMsOSArMTMwMyw5IEBAIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp1bnJlZ2lzdGVySW5zdHJ1bWVudGluZ0FnZW50cyhJbnN0cnVtZW50
aW5nQWdlbnRzCiAgICAgfQogfQogCi1JbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JSZW5kZXJlcihSZW5kZXJPYmplY3Qm
IHJlbmRlcmVyKQorSW5zdHJ1bWVudGluZ0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjppbnN0cnVtZW50aW5nQWdlbnRzRm9yKFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCiB7Ci0gICAg
cmV0dXJuIGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShyZW5kZXJlci5mcmFtZSgpKTsKKyAg
ICByZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50c0ZvcihyZW5kZXJlci5mcmFtZSgpKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmxheWVyVHJlZURpZENoYW5nZUltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cykKQEAgLTEzMjAsMjMgKzEzMjAs
MjMgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJlbmRlckxheWVyRGVzdHJveWVk
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnMKICAgICAgICAgbGF5ZXJUcmVlQWdlbnQtPnJl
bmRlckxheWVyRGVzdHJveWVkKHJlbmRlckxheWVyKTsKIH0KIAotSW5zdHJ1bWVudGluZ0FnZW50
cyYgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2Vy
R2xvYmFsU2NvcGUoV29ya2VyR2xvYmFsU2NvcGUmIHdvcmtlckdsb2JhbFNjb3BlKQorSW5zdHJ1
bWVudGluZ0FnZW50cyYgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdl
bnRzRm9yKFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJiBnbG9iYWxTY29wZSkKIHsKLSAgICBy
ZXR1cm4gd29ya2VyR2xvYmFsU2NvcGUuaW5zcGVjdG9yQ29udHJvbGxlcigpLm1faW5zdHJ1bWVu
dGluZ0FnZW50czsKKyAgICByZXR1cm4gZ2xvYmFsU2NvcGUuaW5zcGVjdG9yQ29udHJvbGxlcigp
Lm1faW5zdHJ1bWVudGluZ0FnZW50czsKIH0KIAotSW5zdHJ1bWVudGluZ0FnZW50cyYgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShQYWdlJiBwYWdl
KQorSW5zdHJ1bWVudGluZ0FnZW50cyYgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVt
ZW50aW5nQWdlbnRzRm9yKFBhZ2UmIHBhZ2UpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICByZXR1cm4gcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkubV9pbnN0cnVtZW50aW5n
QWdlbnRzLmdldCgpOwogfQogCi1JbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQpCitJbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkKIHsKICAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKQotICAgICAgICByZXR1cm4g
aW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UoZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLnBh
Z2UoKSk7Ci0gICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0KSkKLSAgICAgICAg
cmV0dXJuICZpbnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2NvcGUoZG93bmNhc3Q8
V29ya2VyR2xvYmFsU2NvcGU+KGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIGluc3RydW1lbnRp
bmdBZ2VudHNGb3IoZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLnBhZ2UoKSk7CisgICAgaWYg
KGlzPFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlPihjb250ZXh0KSkKKyAgICAgICAgcmV0dXJu
ICZpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGRvd25jYXN0PFdvcmtlck9yV29ya2xldEdsb2JhbFNj
b3BlPihjb250ZXh0KSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCA1YWQ3
OWUwZDE2YTk1MzJiODFjOGI1YWY4MGFhY2FjZTU5ODY5ZDFlLi40YWM0ZTE5YmYxMWVlMWVkYjE1
ZmJmZTkxZDY1NDA3MGY1M2Q0MzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC05OSw3ICs5OSw3IEBAIGNsYXNzIFNo
YWRvd1Jvb3Q7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBUaW1lckJhc2U7CiBjbGFzcyBX
ZWJLaXROYW1lZEZsb3c7Ci1jbGFzcyBXb3JrZXJHbG9iYWxTY29wZTsKK2NsYXNzIFdvcmtlck9y
V29ya2xldEdsb2JhbFNjb3BlOwogCiAjaWYgRU5BQkxFKFdFQkdMKQogY2xhc3MgV2ViR0xQcm9n
cmFtOwpAQCAtMjAxLDExICsyMDEsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRpZEZp
bmlzaExvYWRpbmcoRnJhbWUqLCBEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiwgUmVzb3VyY2VMb2FkZXIqKTsKICAgICBz
dGF0aWMgdm9pZCBkaWRGYWlsTG9hZGluZyhGcmFtZSosIERvY3VtZW50TG9hZGVyKiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAKLSAgICBzdGF0aWMg
dm9pZCB3aWxsU2VuZFJlcXVlc3QoV29ya2VyR2xvYmFsU2NvcGUmLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIFJlc291cmNlUmVxdWVzdCYpOwotICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVS
ZXNvdXJjZVJlc3BvbnNlKFdvcmtlckdsb2JhbFNjb3BlJiwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2
ZURhdGEoV29ya2VyR2xvYmFsU2NvcGUmLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKTsKLSAgICBzdGF0aWMgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKFdvcmtlckdsb2JhbFNjb3BlJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBOZXR3b3JrTG9hZE1ldHJpY3MmKTsKLSAgICBzdGF0aWMgdm9pZCBkaWRGYWlsTG9hZGluZyhX
b3JrZXJHbG9iYWxTY29wZSYsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYpOworICAgIHN0YXRpYyB2b2lkIHdpbGxTZW5kUmVxdWVzdChXb3JrZXJPcldvcmts
ZXRHbG9iYWxTY29wZSYsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUmVzb3VyY2VSZXF1ZXN0
Jik7CisgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2UoV29ya2VyT3JX
b3JrbGV0R2xvYmFsU2NvcGUmLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShXb3JrZXJPcldv
cmtsZXRHbG9iYWxTY29wZSYsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgY2hhciog
ZGF0YSwgaW50IGRhdGFMZW5ndGgpOworICAgIHN0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRpbmco
V29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUmLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IE5ldHdvcmtMb2FkTWV0cmljcyYpOworICAgIHN0YXRpYyB2b2lkIGRpZEZhaWxMb2FkaW5n
KFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBSZXNvdXJjZUVycm9yJik7CiAKICAgICAvLyBTb21lIG5ldHdvcmsgcmVxdWVzdHMgZG8g
bm90IGdvIHRocm91Z2ggdGhlIG5vcm1hbCBuZXR3b3JrIGxvYWRpbmcgcGF0aC4KICAgICAvLyBU
aGVzZSBuZXR3b3JrIHJlcXVlc3RzIGhhdmUgdG8gaXNzdWUgdGhlaXIgb3duIHdpbGxTZW5kUmVx
dWVzdCAvIGRpZFJlY2VpdmVSZXNwb25zZSAvIGRpZEZpbmlzaExvYWRpbmcgLyBkaWRGYWlsTG9h
ZGluZwpAQCAtMjQzLDIwICsyNDMsMjAgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGludGVy
Y2VwdFJlc3BvbnNlKGNvbnN0IEZyYW1lJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pPiYmKTsKIAogICAgIHN0YXRpYyB2b2lk
IGFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYsIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkNv
bnNvbGVNZXNzYWdlPik7Ci0gICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShXb3Jr
ZXJHbG9iYWxTY29wZSYsIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdl
Pik7CisgICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShXb3JrZXJPcldvcmtsZXRH
bG9iYWxTY29wZSYsIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdlPik7
CiAKICAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnQoUGFnZSYsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBjb25zdCBTdHJpbmcmIGxhYmVsKTsKLSAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnQo
V29ya2VyR2xvYmFsU2NvcGUmLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBs
YWJlbCk7CisgICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50KFdvcmtlck9yV29ya2xldEdsb2Jh
bFNjb3BlJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwpOwogICAg
IHN0YXRpYyB2b2lkIGNvbnNvbGVDb3VudFJlc2V0KFBhZ2UmLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7Ci0gICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50UmVz
ZXQoV29ya2VyR2xvYmFsU2NvcGUmLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5n
JiBsYWJlbCk7CisgICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50UmVzZXQoV29ya2VyT3JXb3Jr
bGV0R2xvYmFsU2NvcGUmLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBsYWJl
bCk7CiAKICAgICBzdGF0aWMgdm9pZCB0YWtlSGVhcFNuYXBzaG90KEZyYW1lJiwgY29uc3QgU3Ry
aW5nJiB0aXRsZSk7CiAgICAgc3RhdGljIHZvaWQgc3RhcnRDb25zb2xlVGltaW5nKEZyYW1lJiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwpOwotICAgIHN0YXRpYyB2
b2lkIHN0YXJ0Q29uc29sZVRpbWluZyhXb3JrZXJHbG9iYWxTY29wZSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBjb25zdCBTdHJpbmcmIGxhYmVsKTsKKyAgICBzdGF0aWMgdm9pZCBzdGFydENvbnNv
bGVUaW1pbmcoV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUmLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CiAgICAgc3RhdGljIHZvaWQgbG9nQ29uc29sZVRpbWlu
ZyhGcmFtZSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBSZWY8
SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOwotICAgIHN0YXRpYyB2b2lkIGxvZ0NvbnNv
bGVUaW1pbmcoV29ya2VyR2xvYmFsU2NvcGUmLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3Qg
U3RyaW5nJiBsYWJlbCwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKKyAgICBz
dGF0aWMgdm9pZCBsb2dDb25zb2xlVGltaW5nKFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwsIFJlZjxJbnNwZWN0b3I6
OlNjcmlwdEFyZ3VtZW50cz4mJik7CiAgICAgc3RhdGljIHZvaWQgc3RvcENvbnNvbGVUaW1pbmco
RnJhbWUmLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7Ci0gICAg
c3RhdGljIHZvaWQgc3RvcENvbnNvbGVUaW1pbmcoV29ya2VyR2xvYmFsU2NvcGUmLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CisgICAgc3RhdGljIHZvaWQgc3Rv
cENvbnNvbGVUaW1pbmcoV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUmLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CiAgICAgc3RhdGljIHZvaWQgY29uc29sZVRp
bWVTdGFtcChGcmFtZSYsIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7CiAgICAg
c3RhdGljIHZvaWQgc3RhcnRQcm9maWxpbmcoUGFnZSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBj
b25zdCBTdHJpbmcmIHRpdGxlKTsKICAgICBzdGF0aWMgdm9pZCBzdG9wUHJvZmlsaW5nKFBhZ2Um
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CkBAIC0zMzUsNyAr
MzM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNvbnNvbGVBZ2VudEVuYWJsZWQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAgIHN0YXRpYyBib29sIHRpbWVsaW5lQWdlbnRUcmFj
a2luZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKLSAgICBzdGF0aWMgSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UoUGFnZSopOworICAgIHN0YXRpYyBJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKFBhZ2UqKTsKIAogICAg
IHN0YXRpYyB2b2lkIHJlZ2lzdGVySW5zdHJ1bWVudGluZ0FnZW50cyhJbnN0cnVtZW50aW5nQWdl
bnRzJik7CiAgICAgc3RhdGljIHZvaWQgdW5yZWdpc3Rlckluc3RydW1lbnRpbmdBZ2VudHMoSW5z
dHJ1bWVudGluZ0FnZW50cyYpOwpAQCAtNTMxLDMwICs1MzEsMzAgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgdm9pZCBsYXllclRyZWVEaWRDaGFuZ2VJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmKTsK
ICAgICBzdGF0aWMgdm9pZCByZW5kZXJMYXllckRlc3Ryb3llZEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYsIGNvbnN0IFJlbmRlckxheWVyJik7CiAKLSAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0Fn
ZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UoUGFnZSYpOwotICAgIHN0YXRpYyBJbnN0
cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2NvcGUo
V29ya2VyR2xvYmFsU2NvcGUmKTsKLQotICAgIHN0YXRpYyBJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoY29uc3QgRnJhbWUmKTsKLSAgICBzdGF0aWMgSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGNvbnN0IEZyYW1l
Kik7Ci0gICAgc3RhdGljIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHNG
b3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLSAgICBzdGF0aWMgSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYpOwotICAgIHN0YXRpYyBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yRG9jdW1lbnQoRG9jdW1lbnQmKTsKLSAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgc3Rh
dGljIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHNGb3JSZW5kZXJlcihS
ZW5kZXJPYmplY3QmKTsKLSAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50c0Zvcldvcmtlckdsb2JhbFNjb3BlKFdvcmtlckdsb2JhbFNjb3BlKik7CisgICAg
c3RhdGljIEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHNGb3IoUGFnZSYp
OworICAgIHN0YXRpYyBJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
KFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJik7CisKKyAgICBzdGF0aWMgSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihjb25zdCBGcmFtZSYpOworICAgIHN0YXRp
YyBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGNvbnN0IEZyYW1l
Kik7CisgICAgc3RhdGljIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHNG
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHN0YXRpYyBJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKKyAg
ICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50c0ZvcihEb2N1
bWVudCYpOworICAgIHN0YXRpYyBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzRm9yKERvY3VtZW50Kik7CisgICAgc3RhdGljIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHNGb3IoUmVuZGVyT2JqZWN0Jik7CisgICAgc3RhdGljIEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHNGb3IoV29ya2VyT3JXb3JrbGV0R2xvYmFsU2Nv
cGUqKTsKIH07CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xl
YXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lJiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkJiB3b3Js
ZCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGZyYW1lKSkKICAgICAgICAg
ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJh
bWUsIHdvcmxkKTsKIH0KIAogaW5saW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpp
c0RlYnVnZ2VyUGF1c2VkKEZyYW1lKiBmcmFtZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19G
Uk9OVEVORFMoZmFsc2UpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICBpZiAo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHNGb3IoZnJhbWUpKQogICAgICAgICByZXR1cm4gaXNEZWJ1Z2dlclBhdXNlZEltcGwoKmlu
c3RydW1lbnRpbmdBZ2VudHMpOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTU2Miw3ICs1NjIs
NyBAQCBpbmxpbmUgYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmlzRGVidWdnZXJQYXVz
ZWQoRnJhbWUqIGZyYW1lKQogaW5saW5lIGludCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omlk
ZW50aWZpZXJGb3JOb2RlKE5vZGUmIG5vZGUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJP
TlRFTkRTKDApOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KG5vZGUuZG9jdW1lbnQoKSkpCisg
ICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yKG5vZGUuZG9jdW1lbnQoKSkpCiAgICAgICAgIHJldHVybiBpZGVudGlm
aWVyRm9yTm9kZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIG5vZGUpOwogICAgIHJldHVybiAw
OwogfQpAQCAtNTcwLDE4MCArNTcwLDE4MCBAQCBpbmxpbmUgaW50IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6aWRlbnRpZmllckZvck5vZGUoTm9kZSYgbm9kZSkKIGlubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6YWRkRXZlbnRMaXN0ZW5lcnNUb05vZGUoTm9kZSYgbm9kZSkK
IHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoYXV0
byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChu
b2RlLmRvY3VtZW50KCkpKQorICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50c0Zvcihub2RlLmRvY3VtZW50KCkpKQogICAgICAgICBhZGRFdmVudExp
c3RlbmVyc1RvTm9kZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIG5vZGUpOwogfQogCiBpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxJbnNlcnRET01Ob2RlKERvY3Vt
ZW50JiBkb2N1bWVudCwgTm9kZSYgcGFyZW50KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZS
T05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAg
ICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNGb3IoZG9jdW1lbnQpKQogICAgICAgICB3aWxsSW5zZXJ0RE9NTm9kZUltcGwo
Kmluc3RydW1lbnRpbmdBZ2VudHMsIHBhcmVudCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkSW5zZXJ0RE9NTm9kZShEb2N1bWVudCYgZG9jdW1lbnQsIE5v
ZGUmIG5vZGUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0g
ICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQorICAgIGlmIChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihkb2N1
bWVudCkpCiAgICAgICAgIGRpZEluc2VydERPTU5vZGVJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRz
LCBub2RlKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
UmVtb3ZlRE9NTm9kZShEb2N1bWVudCYgZG9jdW1lbnQsIE5vZGUmIG5vZGUpCiB7CiAgICAgRkFT
VF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1l
bnQoZG9jdW1lbnQpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihkb2N1bWVudCkpCiAgICAgICAgIHdpbGxS
ZW1vdmVET01Ob2RlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgbm9kZSk7CiB9CiAKIGlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVtb3ZlRE9NTm9kZShEb2N1bWVu
dCYgZG9jdW1lbnQsIE5vZGUmIG5vZGUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRF
TkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQorICAgIGlm
IChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGlu
Z0FnZW50c0Zvcihkb2N1bWVudCkpCiAgICAgICAgIGRpZFJlbW92ZURPTU5vZGVJbXBsKCppbnN0
cnVtZW50aW5nQWdlbnRzLCBub2RlKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsTW9kaWZ5RE9NQXR0cihEb2N1bWVudCYgZG9jdW1lbnQsIEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9tU3RyaW5nJiBu
ZXdWYWx1ZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAg
ICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgaWYgKEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGRvY3Vt
ZW50KSkKICAgICAgICAgd2lsbE1vZGlmeURPTUF0dHJJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRz
LCBlbGVtZW50LCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZE1vZGlmeURPTUF0dHIoRG9jdW1lbnQmIGRvY3VtZW50LCBF
bGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAg
ICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgaWYgKEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGRvY3Vt
ZW50KSkKICAgICAgICAgZGlkTW9kaWZ5RE9NQXR0ckltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMs
IGVsZW1lbnQsIG5hbWUsIHZhbHVlKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRSZW1vdmVET01BdHRyKERvY3VtZW50JiBkb2N1bWVudCwgRWxlbWVudCYg
ZWxlbWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9O
T19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVudCkp
CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzRm9yKGRvY3VtZW50KSkKICAgICAgICAgZGlkUmVtb3ZlRE9NQXR0cklt
cGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGVsZW1lbnQsIG5hbWUpOwogfQogCiBpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxJbnZhbGlkYXRlU3R5bGVBdHRyKEVsZW1l
bnQmIGVsZW1lbnQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7
Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Rm9yRG9jdW1lbnQoZWxlbWVudC5kb2N1bWVudCgpKSkKKyAgICBpZiAoYXV0byogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZWxlbWVudC5kb2N1bWVudCgpKSkK
ICAgICAgICAgd2lsbEludmFsaWRhdGVTdHlsZUF0dHJJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRz
LCBlbGVtZW50KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRJbnZhbGlkYXRlU3R5bGVBdHRyKEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgRkFTVF9SRVRV
Uk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdB
Z2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZWxlbWVudC5kb2N1bWVudCgp
KSkKKyAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3IoZWxlbWVudC5kb2N1bWVudCgpKSkKICAgICAgICAgZGlkSW52YWxpZGF0ZVN0eWxlQXR0
ckltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGVsZW1lbnQpOwogfQogCiBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRvY3VtZW50RGV0YWNoZWQoRG9jdW1lbnQmIGRvY3Vt
ZW50KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlm
IChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGlu
Z0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZG9jdW1lbnQp
KQogICAgICAgICBkb2N1bWVudERldGFjaGVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZG9j
dW1lbnQpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1l
V2luZG93RGlzY2FyZGVkKEZyYW1lJiBmcmFtZSwgRE9NV2luZG93KiBkb21XaW5kb3cpCiB7Ci0g
ICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvcihmcmFtZSkpCiAg
ICAgICAgIGZyYW1lV2luZG93RGlzY2FyZGVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZG9t
V2luZG93KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptZWRp
YVF1ZXJ5UmVzdWx0Q2hhbmdlZChEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgRkFTVF9SRVRV
Uk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9j
dW1lbnQpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihkb2N1bWVudCkpCiAgICAgICAgIG1lZGlhUXVlcnlS
ZXN1bHRDaGFuZ2VkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cyk7CiB9CiAKIGlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWN0aXZlU3R5bGVTaGVldHNVcGRhdGVkKERvY3Vt
ZW50JiBkb2N1bWVudCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgp
KTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGlu
c3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgaWYgKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
KGRvY3VtZW50KSkKICAgICAgICAgYWN0aXZlU3R5bGVTaGVldHNVcGRhdGVkSW1wbCgqaW5zdHJ1
bWVudGluZ0FnZW50cywgZG9jdW1lbnQpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFB1c2hTaGFkb3dSb290KEVsZW1lbnQmIGhvc3QsIFNoYWRvd1Jvb3Qm
IHJvb3QpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yRG9jdW1lbnQoaG9zdC5kb2N1bWVudCgpKSkKKyAgICBpZiAoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3Io
aG9zdC5kb2N1bWVudCgpKSkKICAgICAgICAgZGlkUHVzaFNoYWRvd1Jvb3RJbXBsKCppbnN0cnVt
ZW50aW5nQWdlbnRzLCBob3N0LCByb290KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3aWxsUG9wU2hhZG93Um9vdChFbGVtZW50JiBob3N0LCBTaGFkb3dSb290
JiByb290KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAg
IGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVu
dGluZ0FnZW50c0ZvckRvY3VtZW50KGhvc3QuZG9jdW1lbnQoKSkpCisgICAgaWYgKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
KGhvc3QuZG9jdW1lbnQoKSkpCiAgICAgICAgIHdpbGxQb3BTaGFkb3dSb290SW1wbCgqaW5zdHJ1
bWVudGluZ0FnZW50cywgaG9zdCwgcm9vdCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlQ3VzdG9tRWxlbWVudFN0YXRlKEVsZW1lbnQmIGVsZW1l
bnQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYg
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yRG9jdW1lbnQoZWxlbWVudC5kb2N1bWVudCgpKSkKKyAgICBpZiAoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3Io
ZWxlbWVudC5kb2N1bWVudCgpKSkKICAgICAgICAgZGlkQ2hhbmdlQ3VzdG9tRWxlbWVudFN0YXRl
SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZWxlbWVudCk7CiB9CiAKIGlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cHNldWRvRWxlbWVudENyZWF0ZWQoUGFnZSogcGFnZSwg
UHNldWRvRWxlbWVudCYgcHNldWRvRWxlbWVudCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19G
Uk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQorICAgIGlmIChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvcihwYWdlKSkKICAgICAgICAgcHNldWRvRWxlbWVudENyZWF0ZWRJbXBsKCppbnN0cnVt
ZW50aW5nQWdlbnRzLCBwc2V1ZG9FbGVtZW50KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpwc2V1ZG9FbGVtZW50RGVzdHJveWVkKFBhZ2UqIHBhZ2UsIFBzZXVk
b0VsZW1lbnQmIHBzZXVkb0VsZW1lbnQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRF
TkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICBpZiAoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3IocGFnZSkpCiAgICAgICAgIHBzZXVkb0VsZW1lbnREZXN0cm95ZWRJbXBsKCppbnN0cnVtZW50
aW5nQWdlbnRzLCBwc2V1ZG9FbGVtZW50KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVOYW1lZEZsb3coRG9jdW1lbnQqIGRvY3VtZW50LCBXZWJL
aXROYW1lZEZsb3cmIG5hbWVkRmxvdykKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVO
RFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAgaWYg
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yKGRvY3VtZW50KSkKICAgICAgICAgZGlkQ3JlYXRlTmFtZWRGbG93SW1wbCgqaW5z
dHJ1bWVudGluZ0FnZW50cywgZG9jdW1lbnQsIG5hbWVkRmxvdyk7CiB9CiAKIGlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZU5hbWVkRmxvdyhEb2N1bWVudCog
ZG9jdW1lbnQsIFdlYktpdE5hbWVkRmxvdyYgbmFtZWRGbG93KQogewogICAgIEZBU1RfUkVUVVJO
X0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3Vt
ZW50KSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZG9jdW1lbnQpKQogICAgICAgICB3aWxsUmVtb3ZlTmFt
ZWRGbG93SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZG9jdW1lbnQsIG5hbWVkRmxvdyk7CiB9
CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlUmVnaW9u
T3ZlcnNldChEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVkRmxvdyYgbmFtZWRGbG93KQog
ewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50
c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZG9jdW1lbnQpKQogICAg
ICAgICBkaWRDaGFuZ2VSZWdpb25PdmVyc2V0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZG9j
dW1lbnQsIG5hbWVkRmxvdyk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkUmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50RWxlbWVudChEb2N1bWVudCYgZG9jdW1l
bnQsIFdlYktpdE5hbWVkRmxvdyYgbmFtZWRGbG93LCBOb2RlJiBjb250ZW50RWxlbWVudCwgTm9k
ZSogbmV4dENvbnRlbnRFbGVtZW50KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5E
Uyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICBpZiAo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHNGb3IoZG9jdW1lbnQpKQogICAgICAgICBkaWRSZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRF
bGVtZW50SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZG9jdW1lbnQsIG5hbWVkRmxvdywgY29u
dGVudEVsZW1lbnQsIG5leHRDb250ZW50RWxlbWVudCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkVW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRFbGVtZW50
KERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0TmFtZWRGbG93JiBuYW1lZEZsb3csIE5vZGUmIGNv
bnRlbnRFbGVtZW50KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkp
OwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICBpZiAoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3Io
ZG9jdW1lbnQpKQogICAgICAgICBkaWRVbnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudEVsZW1lbnRJ
bXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBkb2N1bWVudCwgbmFtZWRGbG93LCBjb250ZW50RWxl
bWVudCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQoUGFnZSYgcGFnZSwgY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05U
RU5EUyh2b2lkKCkpOwotICAgIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50SW1wbChpbnN0cnVtZW50
aW5nQWdlbnRzRm9yUGFnZShwYWdlKSwgcmVzdWx0LCBtb2RpZmllckZsYWdzKTsKKyAgICBtb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudEltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0ZvcihwYWdlKSwgcmVz
dWx0LCBtb2RpZmllckZsYWdzKTsKIH0KIAogaW5saW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpoYW5kbGVUb3VjaEV2ZW50KEZyYW1lJiBmcmFtZSwgTm9kZSYgbm9kZSkKIHsKICAg
ICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoZmFsc2UpOwotICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZy
YW1lKGZyYW1lKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAgICByZXR1cm4gaGFu
ZGxlVG91Y2hFdmVudEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIG5vZGUpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KQEAgLTc1MSw3ICs3NTEsNyBAQCBpbmxpbmUgYm9vbCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmhhbmRsZVRvdWNoRXZlbnQoRnJhbWUmIGZyYW1lLCBOb2RlJiBub2RlKQog
aW5saW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYW5kbGVNb3VzZVByZXNzKEZy
YW1lJiBmcmFtZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoZmFsc2UpOwot
ICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQog
ICAgICAgICByZXR1cm4gaGFuZGxlTW91c2VQcmVzc0ltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTc1OSw3ICs3NTksNyBAQCBpbmxpbmUgYm9vbCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmhhbmRsZU1vdXNlUHJlc3MoRnJhbWUmIGZyYW1lKQog
aW5saW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5cGUgcHNldWRv
U3RhdGUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKGZhbHNlKTsKLSAgICBp
ZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRp
bmdBZ2VudHNGb3JEb2N1bWVudChlbGVtZW50LmRvY3VtZW50KCkpKQorICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
cihlbGVtZW50LmRvY3VtZW50KCkpKQogICAgICAgICByZXR1cm4gZm9yY2VQc2V1ZG9TdGF0ZUlt
cGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGVsZW1lbnQsIHBzZXVkb1N0YXRlKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CkBAIC03NjcsNTYgKzc2Nyw1NiBAQCBpbmxpbmUgYm9vbCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwg
QwogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjaGFyYWN0ZXJEYXRhTW9k
aWZpZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBDaGFyYWN0ZXJEYXRhJiBjaGFyYWN0ZXJEYXRhKQog
ewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50
c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZG9jdW1lbnQpKQogICAg
ICAgICBjaGFyYWN0ZXJEYXRhTW9kaWZpZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBjaGFy
YWN0ZXJEYXRhKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFN0cmluZyYgdXJsKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lk
KCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCisgICAgaWYgKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
KGNvbnRleHQpKQogICAgICAgICB3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0SW1wbCgqaW5zdHJ1bWVu
dGluZ0FnZW50cywgdXJsKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsRmV0Y2goU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3Ry
aW5nJiB1cmwpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0g
ICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoY29udGV4
dCkpCiAgICAgICAgIHdpbGxGZXRjaEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHVybCk7CiB9
CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW5zdGFsbFRpbWVy
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGludCB0aW1lcklkLCBTZWNvbmRzIHRp
bWVvdXQsIGJvb2wgc2luZ2xlU2hvdCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVO
RFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQorICAgIGlmIChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0Fn
ZW50c0Zvcihjb250ZXh0KSkKICAgICAgICAgZGlkSW5zdGFsbFRpbWVySW1wbCgqaW5zdHJ1bWVu
dGluZ0FnZW50cywgdGltZXJJZCwgdGltZW91dCwgc2luZ2xlU2hvdCwgY29udGV4dCk7CiB9CiAK
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVtb3ZlVGltZXIoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgaW50IHRpbWVySWQpCiB7CiAgICAgRkFTVF9S
RVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChj
b250ZXh0KSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoY29udGV4dCkpCiAgICAgICAgIGRpZFJlbW92ZVRp
bWVySW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgdGltZXJJZCwgY29udGV4dCk7CiB9CiAKIGlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQWRkRXZlbnRMaXN0ZW5lcihF
dmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlz
dGVuZXImIGxpc3RlbmVyLCBib29sIGNhcHR1cmUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9f
RlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dCh0YXJnZXQuc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IodGFyZ2V0LnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSkpCiAgICAgICAgIGRpZEFkZEV2ZW50TGlzdGVuZXJJbXBsKCppbnN0cnVt
ZW50aW5nQWdlbnRzLCB0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpOwogfQog
CiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZW1vdmVFdmVudExp
c3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwg
RXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKIHsKICAgICBGQVNUX1JFVFVS
Tl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KHRhcmdl
dC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcih0YXJnZXQuc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKICAgICAgICAgd2lsbFJlbW92ZUV2ZW50TGlzdGVuZXJJ
bXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCB0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIGNh
cHR1cmUpOwogfQogCiBpbmxpbmUgYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmlzRXZl
bnRMaXN0ZW5lckRpc2FibGVkKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcm
IGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKIHsKICAg
ICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoZmFsc2UpOwotICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNv
bnRleHQodGFyZ2V0LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCisgICAgaWYgKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
KHRhcmdldC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQogICAgICAgICByZXR1cm4gaXNFdmVu
dExpc3RlbmVyRGlzYWJsZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCB0YXJnZXQsIGV2ZW50
VHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTgyNCw3
ICs4MjQsNyBAQCBpbmxpbmUgYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmlzRXZlbnRM
aXN0ZW5lckRpc2FibGVkKEV2ZW50VGFyZ2V0JiB0YXJnZQogaW5saW5lIGludCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxQb3N0TWVzc2FnZShGcmFtZSYgZnJhbWUpCiB7CiAgICAgRkFT
VF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKDApOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1l
KSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGlu
c3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAgICByZXR1cm4gd2lsbFBvc3RNZXNz
YWdlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cyk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC04MzIs
ODQgKzgzMiw4NCBAQCBpbmxpbmUgaW50IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFBv
c3RNZXNzYWdlKEZyYW1lJiBmcmFtZSkKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkUG9zdE1lc3NhZ2UoRnJhbWUmIGZyYW1lLCBpbnQgcG9zdE1lc3NhZ2VJZGVudGlm
aWVyLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9O
T19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yKGZyYW1lKSkKICAgICAgICAgZGlkUG9zdE1lc3NhZ2VJbXBsKCppbnN0cnVt
ZW50aW5nQWdlbnRzLCBwb3N0TWVzc2FnZUlkZW50aWZpZXIsIHN0YXRlKTsKIH0KIAogaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsUG9zdE1lc3NhZ2UoRnJhbWUm
IGZyYW1lLCBpbnQgcG9zdE1lc3NhZ2VJZGVudGlmaWVyKQogewogICAgIEZBU1RfUkVUVVJOX0lG
X05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAg
ICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAgICBkaWRGYWlsUG9zdE1lc3NhZ2VJbXBsKCpp
bnN0cnVtZW50aW5nQWdlbnRzLCBwb3N0TWVzc2FnZUlkZW50aWZpZXIpOwogfQogCiBpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaFBvc3RNZXNzYWdlKEZy
YW1lJiBmcmFtZSwgaW50IHBvc3RNZXNzYWdlSWRlbnRpZmllcikKIHsKICAgICBGQVNUX1JFVFVS
Tl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkp
CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzRm9yKGZyYW1lKSkKICAgICAgICAgd2lsbERpc3BhdGNoUG9zdE1lc3Nh
Z2VJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBwb3N0TWVzc2FnZUlkZW50aWZpZXIpOwogfQog
CiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoUG9zdE1l
c3NhZ2UoRnJhbWUmIGZyYW1lLCBpbnQgcG9zdE1lc3NhZ2VJZGVudGlmaWVyKQogewogICAgIEZB
U1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1l
KGZyYW1lKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAgICBkaWREaXNwYXRjaFBv
c3RNZXNzYWdlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgcG9zdE1lc3NhZ2VJZGVudGlmaWVy
KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsQ2FsbEZ1
bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc2Ny
aXB0TmFtZSwgaW50IHNjcmlwdExpbmUsIGludCBzY3JpcHRDb2x1bW4pCiB7CiAgICAgRkFTVF9S
RVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICBp
ZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoY29u
dGV4dCkpCiAgICAgICAgIHdpbGxDYWxsRnVuY3Rpb25JbXBsKCppbnN0cnVtZW50aW5nQWdlbnRz
LCBzY3JpcHROYW1lLCBzY3JpcHRMaW5lLCBzY3JpcHRDb2x1bW4sIGNvbnRleHQpOwogfQogCiBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZS
T05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCisgICAgaWYgKGF1dG8qIGluc3Ry
dW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGNvbnRleHQpKQogICAgICAg
ICBkaWRDYWxsRnVuY3Rpb25JbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBjb250ZXh0KTsKIH0K
IAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVu
dChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEV2ZW50JiBldmVudCkKIHsKICAgICBGQVNUX1JF
VFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoYXV0byogaW5zdHJ1bWVudGlu
Z0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVudCkpCisgICAg
aWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGRv
Y3VtZW50KSkKICAgICAgICAgd2lsbERpc3BhdGNoRXZlbnRJbXBsKCppbnN0cnVtZW50aW5nQWdl
bnRzLCBkb2N1bWVudCwgZXZlbnQpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBFdmVu
dCYgZXZlbnQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0g
ICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
RG9jdW1lbnQoZG9jdW1lbnQpKQorICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c0Zvcihkb2N1bWVudCkpCiAgICAgICAgIGRpZERpc3BhdGNoRXZl
bnRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBldmVudCk7CiB9CiAKIGlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIEV2ZW50JiBldmVudCwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXImIGxpc3RlbmVyKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkp
OwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCisgICAgaWYgKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGNv
bnRleHQpKQogICAgICAgICByZXR1cm4gd2lsbEhhbmRsZUV2ZW50SW1wbCgqaW5zdHJ1bWVudGlu
Z0FnZW50cywgZXZlbnQsIGxpc3RlbmVyKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRIYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBFdmVudCYgZXZlbnQsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5l
cikKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihjb250ZXh0KSkKICAg
ICAgICAgcmV0dXJuIGRpZEhhbmRsZUV2ZW50SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZXZl
bnQsIGxpc3RlbmVyKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93KEZyYW1lKiBmcmFtZSwgY29uc3QgRXZlbnQmIGV2
ZW50LCBET01XaW5kb3cmIHdpbmRvdykKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVO
RFModm9pZCgpKTsKLSAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdB
Z2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGZyYW1lKSkKICAgICAgICAgd2lsbERpc3Bh
dGNoRXZlbnRPbldpbmRvd0ltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGV2ZW50LCB3aW5kb3cp
OwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNo
RXZlbnRPbldpbmRvdyhGcmFtZSogZnJhbWUsIGNvbnN0IEV2ZW50JiBldmVudCkKIHsKICAgICBG
QVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoYXV0byogaW5zdHJ1
bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAg
aWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGZy
YW1lKSkKICAgICAgICAgZGlkRGlzcGF0Y2hFdmVudE9uV2luZG93SW1wbCgqaW5zdHJ1bWVudGlu
Z0FnZW50cywgZXZlbnQpOwogfQogCkBAIC05MjEsMzMxICs5MjEsMzMxIEBAIGlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZXZlbnREaWRSZXNldEFmdGVyRGlzcGF0Y2goY29u
c3QgRXZlbnQmIGV2CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8qIG5vZGUgPSBkb3duY2Fz
dDxOb2RlPihldmVudC50YXJnZXQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2Vu
dHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChub2RlLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpKQorICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVu
dGluZ0FnZW50c0Zvcihub2RlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQogICAgICAgICBy
ZXR1cm4gZXZlbnREaWRSZXNldEFmdGVyRGlzcGF0Y2hJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRz
LCBldmVudCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bEV2YWx1YXRlU2NyaXB0KEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBsaW5l
TnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05U
RU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICBpZiAoYXV0byogaW5zdHJ1bWVudGlu
Z0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAgICB3aWxsRXZh
bHVhdGVTY3JpcHRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSwgdXJsLCBsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXIpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZEV2YWx1YXRlU2NyaXB0KEZyYW1lJiBmcmFtZSkKIHsKICAgICBGQVNUX1JFVFVS
Tl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgaWYgKGF1dG8q
IGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGZyYW1lKSkKICAg
ICAgICAgZGlkRXZhbHVhdGVTY3JpcHRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSk7
CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEZpcmVUaW1l
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBpbnQgdGltZXJJZCwgYm9vbCBvbmVT
aG90KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlm
IChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRl
eHQoY29udGV4dCkpCisgICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yKGNvbnRleHQpKQogICAgICAgICB3aWxsRmlyZVRpbWVySW1wbCgqaW5z
dHJ1bWVudGluZ0FnZW50cywgdGltZXJJZCwgb25lU2hvdCwgY29udGV4dCk7CiB9CiAKIGlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmlyZVRpbWVyKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIGludCB0aW1lcklkLCBib29sIG9uZVNob3QpCiB7CiAgICAg
RkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3Ry
dW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkK
KyAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3IoY29udGV4dCkpCiAgICAgICAgIGRpZEZpcmVUaW1lckltcGwoKmluc3RydW1lbnRpbmdBZ2Vu
dHMsIHRpbWVySWQsIG9uZVNob3QpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZEludmFsaWRhdGVMYXlvdXQoRnJhbWUmIGZyYW1lKQogewogICAgIEZBU1Rf
UkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZy
YW1lKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAgICBkaWRJbnZhbGlkYXRlTGF5
b3V0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUpOwogfQogCiBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMYXlvdXQoRnJhbWUmIGZyYW1lKQogewogICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRvKiBpbnN0
cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAg
ICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3Io
ZnJhbWUpKQogICAgICAgICB3aWxsTGF5b3V0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJh
bWUpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZExheW91
dChGcmFtZSYgZnJhbWUsIFJlbmRlck9iamVjdCYgcm9vdCkKIHsKICAgICBGQVNUX1JFVFVSTl9J
Rl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgaWYgKGF1dG8qIGlu
c3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGZyYW1lKSkKICAgICAg
ICAgZGlkTGF5b3V0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgcm9vdCk7CiB9CiAKIGlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2Nyb2xsKFBhZ2UmIHBhZ2UpCiB7
CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgZGlkU2Nyb2xs
SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSk7CisgICAgZGlkU2Nyb2xsSW1w
bChpbnN0cnVtZW50aW5nQWdlbnRzRm9yKHBhZ2UpKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsQ29tcG9zaXRlKEZyYW1lJiBmcmFtZSkKIHsKICAgICBG
QVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFt
ZShmcmFtZSkpCisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGZyYW1lKSkKICAgICAgICAgd2lsbENvbXBvc2l0
ZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGZyYW1lKTsKIH0KIAogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDb21wb3NpdGUoRnJhbWUmIGZyYW1lKQogewogICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZy
YW1lKGZyYW1lKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAgICBkaWRDb21wb3Np
dGVJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsUGFpbnQoUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKIHsKICAg
ICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JS
ZW5kZXJlcihyZW5kZXJlcikpCisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKHJlbmRlcmVyKSkKICAgICAgICAg
cmV0dXJuIHdpbGxQYWludEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHJlbmRlcmVyKTsKIH0K
IAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQYWludChSZW5kZXJP
YmplY3QmIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQogewogICAgIEZBU1RfUkVU
VVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclJlbmRlcmVyKHJl
bmRlcmVyKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IocmVuZGVyZXIpKQogICAgICAgICBkaWRQYWludElt
cGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHJlbmRlcmVyLCByZWN0KTsKIH0KIAogaW5saW5lIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVjYWxjdWxhdGVTdHlsZShEb2N1bWVu
dCYgZG9jdW1lbnQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7
Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Rm9yRG9jdW1lbnQoZG9jdW1lbnQpKQorICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihkb2N1bWVudCkpCiAgICAgICAgIHdpbGxSZWNhbGN1
bGF0ZVN0eWxlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZG9jdW1lbnQpOwogfQogCiBpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2FsY3VsYXRlU3R5bGUoRG9j
dW1lbnQmIGRvY3VtZW50KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lk
KCkpOwotICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZG9jdW1lbnQpKQogICAgICAgICBkaWRSZWNh
bGN1bGF0ZVN0eWxlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cyk7CiB9CiAKIGlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24o
RG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2
b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICBpZiAoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3IoZG9jdW1lbnQpKQogICAgICAgICBkaWRTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbklt
cGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGRvY3VtZW50KTsKIH0KIAogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVVzZXJBZ2VudE92ZXJyaWRlKEZyYW1lJiBmcmFt
ZSwgU3RyaW5nJiB1c2VyQWdlbnQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRT
KHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQorICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
cihmcmFtZSkpCiAgICAgICAgIGFwcGx5VXNlckFnZW50T3ZlcnJpZGVJbXBsKCppbnN0cnVtZW50
aW5nQWdlbnRzLCB1c2VyQWdlbnQpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmFwcGx5RW11bGF0ZWRNZWRpYShGcmFtZSYgZnJhbWUsIFN0cmluZyYgbWVkaWEp
CiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdl
bnRzRm9yRnJhbWUoZnJhbWUpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvcihmcmFtZSkpCiAgICAgICAgIGFw
cGx5RW11bGF0ZWRNZWRpYUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIG1lZGlhKTsKIH0KIAog
aW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFJlcXVlc3QoRnJh
bWUqIGZyYW1lLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVk
aXJlY3RSZXNwb25zZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgp
KTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGlu
c3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgaWYgKEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGZyYW1l
KSkKICAgICAgICAgd2lsbFNlbmRSZXF1ZXN0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgaWRl
bnRpZmllciwgbG9hZGVyLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKIH0KIAotaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFJlcXVlc3QoV29ya2VyR2xv
YmFsU2NvcGUmIHdvcmtlckdsb2JhbFNjb3BlLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbFNlbmRSZXF1ZXN0KFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJiBnbG9iYWxT
Y29wZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
CiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgd2lsbFNl
bmRSZXF1ZXN0SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2NvcGUod29y
a2VyR2xvYmFsU2NvcGUpLCBpZGVudGlmaWVyLCBudWxscHRyLCByZXF1ZXN0LCBSZXNvdXJjZVJl
c3BvbnNlIHsgfSk7CisgICAgd2lsbFNlbmRSZXF1ZXN0SW1wbChpbnN0cnVtZW50aW5nQWdlbnRz
Rm9yKGdsb2JhbFNjb3BlKSwgaWRlbnRpZmllciwgbnVsbHB0ciwgcmVxdWVzdCwgUmVzb3VyY2VS
ZXNwb25zZSB7IH0pOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxTZW5kUmVxdWVzdE9mVHlwZShGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBM
b2FkVHlwZSBsb2FkVHlwZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9p
ZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgaWYgKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGZy
YW1lKSkKICAgICAgICAgd2lsbFNlbmRSZXF1ZXN0T2ZUeXBlSW1wbCgqaW5zdHJ1bWVudGluZ0Fn
ZW50cywgaWRlbnRpZmllciwgbG9hZGVyLCByZXF1ZXN0LCBsb2FkVHlwZSk7CiB9CiAKIGlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9y
eUNhY2hlKFBhZ2UmIHBhZ2UsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsK
LSAgICBkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGVJbXBsKGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JQYWdlKHBhZ2UpLCBsb2FkZXIsIHJlc291cmNlKTsKKyAgICBkaWRMb2FkUmVzb3VyY2VG
cm9tTWVtb3J5Q2FjaGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3IocGFnZSksIGxvYWRlciwg
cmVzb3VyY2UpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlKEZyYW1lJiBmcmFtZSwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSwgUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQogewotICAgIGlmIChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50
c0ZvckZyYW1lKGZyYW1lKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAgICBkaWRS
ZWNlaXZlUmVzb3VyY2VSZXNwb25zZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZp
ZXIsIGxvYWRlciwgcmVzcG9uc2UsIHJlc291cmNlTG9hZGVyKTsKIH0KIAotaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlUmVzb3VyY2VSZXNwb25zZShXb3Jr
ZXJHbG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCitpbmxpbmUgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlKFdvcmtlck9yV29y
a2xldEdsb2JhbFNjb3BlJiBnbG9iYWxTY29wZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBkaWRSZWNlaXZlUmVzb3Vy
Y2VSZXNwb25zZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0Zvcldvcmtlckdsb2JhbFNjb3BlKHdv
cmtlckdsb2JhbFNjb3BlKSwgaWRlbnRpZmllciwgbnVsbHB0ciwgcmVzcG9uc2UsIG51bGxwdHIp
OworICAgIGRpZFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRz
Rm9yKGdsb2JhbFNjb3BlKSwgaWRlbnRpZmllciwgbnVsbHB0ciwgcmVzcG9uc2UsIG51bGxwdHIp
OwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVU
aHJlYWRhYmxlTG9hZGVyUmVzcG9uc2UoRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyJiBkb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKICAgICBGQVNU
X1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVu
dChkb2N1bWVudFRocmVhZGFibGVMb2FkZXIuZG9jdW1lbnQoKSkpCisgICAgaWYgKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
KGRvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5kb2N1bWVudCgpKSkKICAgICAgICAgZGlkUmVjZWl2
ZVRocmVhZGFibGVMb2FkZXJSZXNwb25zZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGRvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlciwgaWRlbnRpZmllcik7CiB9CiAgICAgCiBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVEYXRhKEZyYW1lKiBmcmFtZSwgdW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCwg
aW50IGVuY29kZWREYXRhTGVuZ3RoKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5E
Uyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICBpZiAoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3IoZnJhbWUpKQogICAgICAgICBkaWRSZWNlaXZlRGF0YUltcGwoKmluc3RydW1lbnRpbmdBZ2Vu
dHMsIGlkZW50aWZpZXIsIGRhdGEsIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhTGVuZ3RoKTsKIH0K
IAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlRGF0YShX
b3JrZXJHbG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUsIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpCitpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVEYXRhKFdvcmtlck9yV29ya2xldEdsb2Jh
bFNjb3BlJiBnbG9iYWxTY29wZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBjaGFy
KiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVO
RFModm9pZCgpKTsKLSAgICBkaWRSZWNlaXZlRGF0YUltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0Zv
cldvcmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKSwgaWRlbnRpZmllciwgZGF0YSwg
ZGF0YUxlbmd0aCwgZGF0YUxlbmd0aCk7CisgICAgZGlkUmVjZWl2ZURhdGFJbXBsKGluc3RydW1l
bnRpbmdBZ2VudHNGb3IoZ2xvYmFsU2NvcGUpLCBpZGVudGlmaWVyLCBkYXRhLCBkYXRhTGVuZ3Ro
LCBkYXRhTGVuZ3RoKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRGaW5pc2hMb2FkaW5nKEZyYW1lKiBmcmFtZSwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmIG5ldHdv
cmtMb2FkTWV0cmljcywgUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQogewogICAgIEZB
U1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1l
KGZyYW1lKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAgICBkaWRGaW5pc2hMb2Fk
aW5nSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRpZmllciwgbG9hZGVyLCBuZXR3b3Jr
TG9hZE1ldHJpY3MsIHJlc291cmNlTG9hZGVyKTsKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRGaW5pc2hMb2FkaW5nKFdvcmtlckdsb2JhbFNjb3BlJiB3b3Jr
ZXJHbG9iYWxTY29wZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBOZXR3b3JrTG9h
ZE1ldHJpY3MmIG5ldHdvcmtMb2FkTWV0cmljcykKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkRmluaXNoTG9hZGluZyhXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZSYg
Z2xvYmFsU2NvcGUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgTmV0d29ya0xvYWRN
ZXRyaWNzJiBuZXR3b3JrTG9hZE1ldHJpY3MpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJP
TlRFTkRTKHZvaWQoKSk7Ci0gICAgZGlkRmluaXNoTG9hZGluZ0ltcGwoaW5zdHJ1bWVudGluZ0Fn
ZW50c0Zvcldvcmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKSwgaWRlbnRpZmllciwg
bnVsbHB0ciwgbmV0d29ya0xvYWRNZXRyaWNzLCBudWxscHRyKTsKKyAgICBkaWRGaW5pc2hMb2Fk
aW5nSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGdsb2JhbFNjb3BlKSwgaWRlbnRpZmllciwg
bnVsbHB0ciwgbmV0d29ya0xvYWRNZXRyaWNzLCBudWxscHRyKTsKIH0KIAogaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsTG9hZGluZyhGcmFtZSogZnJhbWUsIERv
Y3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVz
b3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQorICAg
IGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVu
dGluZ0FnZW50c0ZvcihmcmFtZSkpCiAgICAgICAgIGRpZEZhaWxMb2FkaW5nSW1wbCgqaW5zdHJ1
bWVudGluZ0FnZW50cywgaWRlbnRpZmllciwgbG9hZGVyLCBlcnJvcik7CiB9CiAKLWlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmFpbExvYWRpbmcoV29ya2VyR2xvYmFs
U2NvcGUmIHdvcmtlckdsb2JhbFNjb3BlLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFJlc291cmNlRXJyb3ImIGVycm9yKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRGYWlsTG9hZGluZyhXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZSYgZ2xvYmFsU2Nv
cGUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Ip
CiB7Ci0gICAgZGlkRmFpbExvYWRpbmdJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3JXb3JrZXJH
bG9iYWxTY29wZSh3b3JrZXJHbG9iYWxTY29wZSksIGlkZW50aWZpZXIsIG51bGxwdHIsIGVycm9y
KTsKKyAgICBkaWRGYWlsTG9hZGluZ0ltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0ZvcihnbG9iYWxT
Y29wZSksIGlkZW50aWZpZXIsIG51bGxwdHIsIGVycm9yKTsKIH0KIAogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250aW51ZUFmdGVyWEZyYW1lT3B0aW9uc0RlbmllZChG
cmFtZSYgZnJhbWUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXImIGxv
YWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgLy8gVHJlYXQg
dGhlIHNhbWUgYXMgZGlkUmVjZWl2ZVJlc3BvbnNlLgotICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZy
YW1lKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAgICBkaWRSZWNlaXZlUmVzb3Vy
Y2VSZXNwb25zZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIsICZsb2FkZXIs
IHJlc3BvbnNlLCBudWxscHRyKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpjb250aW51ZVdpdGhQb2xpY3lEb3dubG9hZChGcmFtZSYgZnJhbWUsIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgLy8gVHJlYXQgdGhlIHNhbWUgYXMgZGlkUmVjZWl2
ZVJlc3BvbnNlLgotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICBpZiAoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3IoZnJhbWUpKQogICAgICAgICBkaWRSZWNlaXZlUmVzb3VyY2VSZXNwb25zZUltcGwoKmluc3Ry
dW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIsICZsb2FkZXIsIHJlc3BvbnNlLCBudWxscHRyKTsK
IH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250aW51ZVdpdGhQ
b2xpY3lJZ25vcmUoRnJhbWUmIGZyYW1lLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3Vt
ZW50TG9hZGVyJiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewog
ICAgIC8vIFRyZWF0IHRoZSBzYW1lIGFzIGRpZFJlY2VpdmVSZXNwb25zZS4KLSAgICBpZiAoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JGcmFtZShmcmFtZSkpCisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGZyYW1lKSkKICAgICAgICAgZGlk
UmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVudGlm
aWVyLCAmbG9hZGVyLCByZXNwb25zZSwgbnVsbHB0cik7CiB9CiAKIGlubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJTeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRT
KHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICBpZiAoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3IoY29udGV4dCkpCiAgICAgICAgIHdpbGxMb2FkWEhSU3luY2hyb25vdXNseUltcGwoKmlu
c3RydW1lbnRpbmdBZ2VudHMpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZExvYWRYSFJTeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoY29udGV4dCkp
CiAgICAgICAgIGRpZExvYWRYSFJTeW5jaHJvbm91c2x5SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50
cyk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0SW1w
b3J0ZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZykKIHsKICAgICBGQVNUX1JFVFVSTl9J
Rl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQp
KQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50c0Zvcihjb250ZXh0KSkKICAgICAgICAgc2NyaXB0SW1wb3J0ZWRJbXBs
KCppbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVudGlmaWVyLCBzb3VyY2VTdHJpbmcpOwogfQogCiBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNjcmlwdEV4ZWN1dGlvbkJsb2Nr
ZWRCeUNTUChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGRp
cmVjdGl2ZVRleHQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7
Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKKyAgICBpZiAoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoY29u
dGV4dCkpCiAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkJsb2NrZWRCeUNTUEltcGwoKmluc3RydW1l
bnRpbmdBZ2VudHMsIGRpcmVjdGl2ZVRleHQpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVTY3JpcHRSZXNwb25zZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7CiAgICAgRkFTVF9S
RVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChj
b250ZXh0KSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoY29udGV4dCkpCiAgICAgICAgIGRpZFJlY2VpdmVT
Y3JpcHRSZXNwb25zZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIpOwogfQog
CiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRvbUNvbnRlbnRMb2FkZWRF
dmVudEZpcmVkKEZyYW1lJiBmcmFtZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVO
RFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgaWYgKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Rm9yKGZyYW1lKSkKICAgICAgICAgZG9tQ29udGVudExvYWRlZEV2ZW50RmlyZWRJbXBsKCppbnN0
cnVtZW50aW5nQWdlbnRzLCBmcmFtZSk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6bG9hZEV2ZW50RmlyZWQoRnJhbWUqIGZyYW1lKQogewogICAgIEZBU1RfUkVU
VVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1l
KSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGlu
c3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAgICBsb2FkRXZlbnRGaXJlZEltcGwo
Kmluc3RydW1lbnRpbmdBZ2VudHMsIGZyYW1lKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpmcmFtZURldGFjaGVkRnJvbVBhcmVudChGcmFtZSYgZnJhbWUpCiB7
CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Rm9yRnJhbWUoZnJhbWUpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvcihmcmFtZSkpCiAgICAgICAgIGZyYW1l
RGV0YWNoZWRGcm9tUGFyZW50SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUpOwogfQog
CiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENvbW1pdExvYWQoRnJh
bWUmIGZyYW1lLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQogewotICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZy
YW1lKGZyYW1lKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAgICBkaWRDb21taXRM
b2FkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUsIGxvYWRlcik7CiB9CiAKIGlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVEb2N1bWVudFVwZGF0ZWQoRnJh
bWUmIGZyYW1lKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwot
ICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQog
ICAgICAgICBmcmFtZURvY3VtZW50VXBkYXRlZEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGZy
YW1lKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpsb2FkZXJE
ZXRhY2hlZEZyb21GcmFtZShGcmFtZSYgZnJhbWUsIERvY3VtZW50TG9hZGVyJiBsb2FkZXIpCiB7
CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Rm9yRnJhbWUoZnJhbWUpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvcihmcmFtZSkpCiAgICAgICAgIGxvYWRl
ckRldGFjaGVkRnJvbUZyYW1lSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgbG9hZGVyKTsKIH0K
IAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZVN0YXJ0ZWRMb2Fk
aW5nKEZyYW1lJiBmcmFtZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9p
ZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAgaWYgKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGZy
YW1lKSkKICAgICAgICAgZnJhbWVTdGFydGVkTG9hZGluZ0ltcGwoKmluc3RydW1lbnRpbmdBZ2Vu
dHMsIGZyYW1lKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpm
cmFtZVN0b3BwZWRMb2FkaW5nKEZyYW1lJiBmcmFtZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9O
T19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCisgICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yKGZyYW1lKSkKICAgICAgICAgZnJhbWVTdG9wcGVkTG9hZGluZ0ltcGwoKmlu
c3RydW1lbnRpbmdBZ2VudHMsIGZyYW1lKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpmcmFtZVNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmIGZyYW1lLCBTZWNv
bmRzIGRlbGF5KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwot
ICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQog
ICAgICAgICBmcmFtZVNjaGVkdWxlZE5hdmlnYXRpb25JbXBsKCppbnN0cnVtZW50aW5nQWdlbnRz
LCBmcmFtZSwgZGVsYXkpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmIGZyYW1lKQogewogICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZy
YW1lKGZyYW1lKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAgICBmcmFtZUNsZWFy
ZWRTY2hlZHVsZWROYXZpZ2F0aW9uSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUpOwog
fQogCkBAIC0xMjUzLDcgKzEyNTMsNyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmIGZyYQogaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5n
ZShQYWdlJiBwYWdlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKQogewogICAgIEZBU1RfUkVUVVJO
X0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdl
SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSwgdXNlRGFya0FwcGVhcmFuY2Up
OworICAgIGRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRz
Rm9yKHBhZ2UpLCB1c2VEYXJrQXBwZWFyYW5jZSk7CiB9CiAjZW5kaWYKIApAQCAtMTI2Niw3ICsx
MjY2LDcgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGVzdHJv
eUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlJgogaW5saW5lIGJvb2wgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3aWxsSW50ZXJjZXB0KGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5E
UyhmYWxzZSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQorICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvcihmcmFtZSkpCiAgICAgICAgIHJldHVybiB3aWxs
SW50ZXJjZXB0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgcmVxdWVzdCk7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQpAQCAtMTI3NCw3ICsxMjc0LDcgQEAgaW5saW5lIGJvb2wgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3aWxsSW50ZXJjZXB0KGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgUmUK
IGlubGluZSBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2hvdWxkSW50ZXJjZXB0UmVx
dWVzdChjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
IHsKICAgICBBU1NFUlQoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uUHVibGljOjpoYXNGcm9udGVu
ZHMoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yRnJhbWUoZnJhbWUpKQorICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvcihmcmFtZSkpCiAgICAgICAgIHJldHVybiBzaG91bGRJ
bnRlcmNlcHRSZXF1ZXN0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgcmVxdWVzdCk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQpAQCAtMTI4Miw3ICsxMjgyLDcgQEAgaW5saW5lIGJvb2wgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpzaG91bGRJbnRlcmNlcHRSZXF1ZXN0KGNvbnN0IEZyYW1lJiBm
cmFtZSwKIGlubGluZSBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2hvdWxkSW50ZXJj
ZXB0UmVzcG9uc2UoY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSkKIHsKICAgICBBU1NFUlQoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uUHVibGljOjpo
YXNGcm9udGVuZHMoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQorICAgIGlmIChhdXRvKiBpbnN0cnVtZW50
aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvcihmcmFtZSkpCiAgICAgICAgIHJldHVy
biBzaG91bGRJbnRlcmNlcHRSZXNwb25zZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHJlc3Bv
bnNlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xMjkwLDM0ICsxMjkwLDM0IEBAIGlubGlu
ZSBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2hvdWxkSW50ZXJjZXB0UmVzcG9uc2Uo
Y29uc3QgRnJhbWUmIGZyYW1lCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmludGVyY2VwdFJlcXVlc3QoUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgRnVuY3Rpb248dm9pZChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKT4mJiBoYW5kbGVyKQogewogICAgIEFTU0VSVChJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnNob3VsZEludGVyY2VwdFJlcXVlc3QoKmxvYWRlci5mcmFtZSgp
LCBsb2FkZXIucmVxdWVzdCgpKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUobG9hZGVyLmZyYW1lKCkpKQorICAgIGlmIChh
dXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihsb2FkZXIu
ZnJhbWUoKSkpCiAgICAgICAgIGludGVyY2VwdFJlcXVlc3RJbXBsKCppbnN0cnVtZW50aW5nQWdl
bnRzLCBsb2FkZXIsIFdURk1vdmUoaGFuZGxlcikpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmludGVyY2VwdFJlc3BvbnNlKGNvbnN0IEZyYW1lJiBmcmFtZSwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4pPiYmIGhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6c2hvdWxkSW50ZXJjZXB0UmVzcG9uc2UoZnJhbWUsIHJlc3BvbnNlKSk7Ci0g
ICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
RnJhbWUoZnJhbWUpKQorICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0ZvcihmcmFtZSkpCiAgICAgICAgIGludGVyY2VwdFJlc3BvbnNlSW1wbCgq
aW5zdHJ1bWVudGluZ0FnZW50cywgcmVzcG9uc2UsIGlkZW50aWZpZXIsIFdURk1vdmUoaGFuZGxl
cikpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5E
YXRhYmFzZShEYXRhYmFzZSYgZGF0YWJhc2UpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJP
TlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChkYXRhYmFzZS5kb2N1bWVudCgpKSkKKyAgICBpZiAo
YXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZGF0YWJh
c2UuZG9jdW1lbnQoKSkpCiAgICAgICAgIGRpZE9wZW5EYXRhYmFzZUltcGwoKmluc3RydW1lbnRp
bmdBZ2VudHMsIGRhdGFiYXNlKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChQYWdlJiBwYWdlLCBjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwg
U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikK
IHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBkaWREaXNw
YXRjaERPTVN0b3JhZ2VFdmVudEltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSks
IGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBzdG9yYWdlVHlwZSwgc2VjdXJpdHlPcmlnaW4pOwor
ICAgIGRpZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9y
KHBhZ2UpLCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgc3RvcmFnZVR5cGUsIHNlY3VyaXR5T3Jp
Z2luKTsKIH0KIAogaW5saW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzaG91bGRX
YWl0Rm9yRGVidWdnZXJPblN0YXJ0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7
CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKGZhbHNlKTsKLSAgICBpZiAoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3JDb250ZXh0KGNvbnRleHQpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihjb250ZXh0KSkKICAgICAgICAg
cmV0dXJuIHNob3VsZFdhaXRGb3JEZWJ1Z2dlck9uU3RhcnRJbXBsKCppbnN0cnVtZW50aW5nQWdl
bnRzKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xMzI1LDYzICsxMzI1LDYzIEBAIGlubGlu
ZSBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2hvdWxkV2FpdEZvckRlYnVnZ2VyT25T
dGFydChTY3JpcHRFeGVjdXRpCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndvcmtlclN0YXJ0ZWQoV29ya2VySW5zcGVjdG9yUHJveHkmIHByb3h5KQogewogICAgIEZBU1Rf
UkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQo
cHJveHkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IocHJveHku
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKICAgICAgICAgd29ya2VyU3RhcnRlZEltcGwoKmlu
c3RydW1lbnRpbmdBZ2VudHMsIHByb3h5KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3b3JrZXJUZXJtaW5hdGVkKFdvcmtlckluc3BlY3RvclByb3h5JiBwcm94
eSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHNGb3JDb250ZXh0KHByb3h5LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCisgICAgaWYg
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yKHByb3h5LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCiAgICAgICAgIHdvcmtl
clRlcm1pbmF0ZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBwcm94eSk7CiB9CiAKIGlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlV2ViU29ja2V0KERvY3Vt
ZW50KiBkb2N1bWVudCwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBVUkwmIHJlcXVl
c3RVUkwpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihkb2N1bWVu
dCkpCiAgICAgICAgIGRpZENyZWF0ZVdlYlNvY2tldEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMs
IGlkZW50aWZpZXIsIHJlcXVlc3RVUkwpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdChEb2N1bWVudCog
ZG9jdW1lbnQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwot
ICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKKyAgICBpZiAoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZG9j
dW1lbnQpKQogICAgICAgICB3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3RJbXBsKCpp
bnN0cnVtZW50aW5nQWdlbnRzLCBpZGVudGlmaWVyLCByZXF1ZXN0KTsKIH0KIAogaW5saW5lIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtl
UmVzcG9uc2UoRG9jdW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05P
X0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkK
KyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHNGb3IoZG9jdW1lbnQpKQogICAgICAgICBkaWRSZWNlaXZlV2ViU29ja2V0
SGFuZHNoYWtlUmVzcG9uc2VJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVudGlmaWVyLCBy
ZXNwb25zZSk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
Q2xvc2VXZWJTb2NrZXQoRG9jdW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYg
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihkb2N1bWVudCkp
CiAgICAgICAgIGRpZENsb3NlV2ViU29ja2V0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgaWRl
bnRpZmllcik7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
UmVjZWl2ZVdlYlNvY2tldEZyYW1lKERvY3VtZW50KiBkb2N1bWVudCwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRGcmFtZSYgZnJhbWUpCiB7CiAgICAgRkFTVF9SRVRV
Uk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9j
dW1lbnQpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihkb2N1bWVudCkpCiAgICAgICAgIGRpZFJlY2VpdmVX
ZWJTb2NrZXRGcmFtZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIsIGZyYW1l
KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZl
V2ViU29ja2V0RnJhbWVFcnJvcihEb2N1bWVudCogZG9jdW1lbnQsIHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgRkFTVF9SRVRVUk5f
SUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1l
bnQpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c0Zvcihkb2N1bWVudCkpCiAgICAgICAgIGRpZFJlY2VpdmVXZWJT
b2NrZXRGcmFtZUVycm9ySW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRpZmllciwgZXJy
b3JNZXNzYWdlKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRTZW5kV2ViU29ja2V0RnJhbWUoRG9jdW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFtZSkKIHsKICAgICBGQVNUX1JFVFVS
Tl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1
bWVudCkpCisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGRvY3VtZW50KSkKICAgICAgICAgZGlkU2VuZFdlYlNv
Y2tldEZyYW1lSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRpZmllciwgZnJhbWUpOwog
fQogCkBAIC0xMzg5LDQyICsxMzg5LDQyIEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkU2VuZFdlYlNvY2tldEZyYW1lKERvY3VtZW50KiBkb2N1bWVudCwKIGlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSGFuZGxlTWVtb3J5UHJlc3N1cmUo
UGFnZSYgcGFnZSwgQ3JpdGljYWwgY3JpdGljYWwpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9f
RlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgZGlkSGFuZGxlTWVtb3J5UHJlc3N1cmVJbXBsKGluc3Ry
dW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpLCBjcml0aWNhbCk7CisgICAgZGlkSGFuZGxlTWVt
b3J5UHJlc3N1cmVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3IocGFnZSksIGNyaXRpY2FsKTsK
IH0KICNlbmRpZgogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENo
YW5nZUNTU0NhbnZhc0NsaWVudE5vZGVzKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UpCiB7CiAgICAg
RkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29u
dGV4dChjYW52YXNCYXNlLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCisgICAgaWYgKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Rm9yKGNhbnZhc0Jhc2Uuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKICAgICAgICAgZGlkQ2hh
bmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXNJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBjYW52YXNC
YXNlKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVh
dGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQp
CiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdl
bnRzRm9yQ29udGV4dChjb250ZXh0LmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c0Zvcihjb250ZXh0LmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpKQogICAgICAgICBkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250ZXh0SW1w
bCgqaW5zdHJ1bWVudGluZ0FnZW50cywgY29udGV4dCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZv
aWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0LmNhbnZhc0Jhc2UoKS5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihjb250ZXh0LmNhbnZhc0Jh
c2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQogICAgICAgICBkaWRDaGFuZ2VDYW52YXNN
ZW1vcnlJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBjb250ZXh0KTsKIH0KIAogaW5saW5lIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpyZWNvcmRDYW52YXNBY3Rpb24oQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8UmVjb3JkQ2FudmFzQWN0aW9uVmFyaWFudD4mJiBwYXJhbWV0ZXJzKQogewogICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNv
bnRleHQoY29udGV4dC5jYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKKyAg
ICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNGb3IoY29udGV4dC5jYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKSkKICAgICAgICAgcmVjb3JkQ2FudmFzQWN0aW9uSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50
cywgY29udGV4dCwgbmFtZSwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiB9CiAKIGlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUo
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBmb3JjZURpc3BhdGNoKQogewog
ICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
ckNvbnRleHQoY29udGV4dC5jYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkK
KyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHNGb3IoY29udGV4dC5jYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKSkKICAgICAgICAgZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWVJbXBsKCppbnN0
cnVtZW50aW5nQWdlbnRzLCBjb250ZXh0LCBmb3JjZURpc3BhdGNoKTsKIH0KIApAQCAtMTQzMiwy
OCArMTQzMiwyOCBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZp
bmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKENhbnZhc1JlbmRlcgogaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRFbmFibGVFeHRlbnNpb24oV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSYgY29udGV4dFdlYkdMQmFzZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24pCiB7CiAg
ICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
Q29udGV4dChjb250ZXh0V2ViR0xCYXNlLmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihjb250ZXh0V2ViR0xCYXNlLmNhbnZhc0Jhc2UoKS5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQogICAgICAgICBkaWRFbmFibGVFeHRlbnNpb25JbXBs
KCppbnN0cnVtZW50aW5nQWdlbnRzLCBjb250ZXh0V2ViR0xCYXNlLCBleHRlbnNpb24pOwogfQog
CiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdlYkdMUHJv
Z3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0V2ViR0xCYXNlLCBXZWJHTFBy
b2dyYW0mIHByb2dyYW0pCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQo
KSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBp
bnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0V2ViR0xCYXNlLmNhbnZhc0Jhc2Uo
KS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihjb250ZXh0V2Vi
R0xCYXNlLmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQogICAgICAgICBk
aWRDcmVhdGVXZWJHTFByb2dyYW1JbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBjb250ZXh0V2Vi
R0xCYXNlLCBwcm9ncmFtKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsRGVzdHJveVdlYkdMUHJvZ3JhbShXZWJHTFByb2dyYW0mIHByb2dyYW0pCiB7CiAg
ICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
Q29udGV4dChwcm9ncmFtLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCisgICAgaWYgKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Rm9yKHByb2dyYW0uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKICAgICAgICAgd2lsbERlc3Ry
b3lXZWJHTFByb2dyYW1JbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBwcm9ncmFtKTsKIH0KIAog
aW5saW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppc1dlYkdMUHJvZ3JhbURpc2Fi
bGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHRXZWJHTEJhc2UsIFdlYkdMUHJv
Z3JhbSYgcHJvZ3JhbSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoZmFsc2Up
OwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dFdlYkdMQmFzZS5jYW52YXNCYXNlKCku
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoY29udGV4dFdlYkdM
QmFzZS5jYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKICAgICAgICAgcmV0
dXJuIGlzV2ViR0xQcm9ncmFtRGlzYWJsZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBwcm9n
cmFtKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xNDYxLDcgKzE0NjEsNyBAQCBpbmxpbmUg
Ym9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmlzV2ViR0xQcm9ncmFtRGlzYWJsZWQoV2Vi
R0xSZW5kZXJpbmdDb250ZQogaW5saW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpp
c1dlYkdMUHJvZ3JhbUhpZ2hsaWdodGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRl
eHRXZWJHTEJhc2UsIFdlYkdMUHJvZ3JhbSYgcHJvZ3JhbSkKIHsKICAgICBGQVNUX1JFVFVSTl9J
Rl9OT19GUk9OVEVORFMoZmFsc2UpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dFdl
YkdMQmFzZS5jYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKKyAgICBpZiAo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHNGb3IoY29udGV4dFdlYkdMQmFzZS5jYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKSkKICAgICAgICAgcmV0dXJuIGlzV2ViR0xQcm9ncmFtSGlnaGxpZ2h0ZWRJbXBsKCpp
bnN0cnVtZW50aW5nQWdlbnRzLCBwcm9ncmFtKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0x
NDg1LDcgKzE0ODUsNyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxEZXN0cm95V2ViR1BVRGV2aWNlKFdlYkdQVURldmljZSYgZGV2aQogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsQ29uZmlndXJlU3dhcENoYWluKEdQVUNhbnZhc0Nv
bnRleHQmIGNvbnRleHRHUFUsIFdlYkdQVVN3YXBDaGFpbiYgbmV3U3dhcENoYWluKQogewogICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRvKiBpbnN0
cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dEdQ
VS5jYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKKyAgICBpZiAoYXV0byog
aW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoY29udGV4dEdQVS5j
YW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKICAgICAgICAgd2lsbENvbmZp
Z3VyZVN3YXBDaGFpbkltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnRleHRHUFUsIG5ld1N3
YXBDaGFpbik7CiB9CiAKQEAgLTE0OTksNyArMTQ5OSw3IEBAIGlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlV2ViR1BVUGlwZWxpbmUoV2ViR1BVRGV2aWNlJiBk
ZXZpCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEZXN0cm95V2Vi
R1BVUGlwZWxpbmUoV2ViR1BVUGlwZWxpbmUmIHBpcGVsaW5lKQogewogICAgIEZBU1RfUkVUVVJO
X0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQocGlwZWxpbmUuc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKSkKKyAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHNGb3IocGlwZWxpbmUuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKICAg
ICAgICAgd2lsbERlc3Ryb3lXZWJHUFVQaXBlbGluZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMs
IHBpcGVsaW5lKTsKIH0KICNlbmRpZgpAQCAtMTUwNywyNTggKzE1MDcsMjU4IEBAIGlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERlc3Ryb3lXZWJHUFVQaXBlbGluZShX
ZWJHUFVQaXBlbGluZSYKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bEFwcGx5S2V5ZnJhbWVFZmZlY3QoRWxlbWVudCYgdGFyZ2V0LCBLZXlmcmFtZUVmZmVjdCYgZWZm
ZWN0LCBDb21wdXRlZEVmZmVjdFRpbWluZyBjb21wdXRlZFRpbWluZykKIHsKICAgICBGQVNUX1JF
VFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoYXV0byogaW5zdHJ1bWVudGlu
Z0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudCh0YXJnZXQuZG9jdW1lbnQo
KSkpCisgICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdl
bnRzRm9yKHRhcmdldC5kb2N1bWVudCgpKSkKICAgICAgICAgd2lsbEFwcGx5S2V5ZnJhbWVFZmZl
Y3RJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCB0YXJnZXQsIGVmZmVjdCwgY29tcHV0ZWRUaW1p
bmcpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5n
ZVdlYkFuaW1hdGlvbk5hbWUoV2ViQW5pbWF0aW9uJiBhbmltYXRpb24pCiB7CiAgICAgRkFTVF9S
RVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChhbmltYXRpb24uc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKSkKKyAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoYW5pbWF0aW9uLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkpCiAgICAgICAgIGRpZENoYW5nZVdlYkFuaW1hdGlvbk5hbWVJbXBsKCppbnN0cnVtZW50aW5n
QWdlbnRzLCBhbmltYXRpb24pOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZFNldFdlYkFuaW1hdGlvbkVmZmVjdChXZWJBbmltYXRpb24mIGFuaW1hdGlvbikK
IHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoYXV0
byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGFu
aW1hdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQorICAgIGlmIChhdXRvKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvcihhbmltYXRpb24uc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKSkKICAgICAgICAgZGlkU2V0V2ViQW5pbWF0aW9uRWZmZWN0SW1wbCgq
aW5zdHJ1bWVudGluZ0FnZW50cywgYW5pbWF0aW9uKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VXZWJBbmltYXRpb25FZmZlY3RUaW1pbmcoV2Vi
QW5pbWF0aW9uJiBhbmltYXRpb24pCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRT
KHZvaWQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yQ29udGV4dChhbmltYXRpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkK
KyAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3IoYW5pbWF0aW9uLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCiAgICAgICAgIGRpZENoYW5n
ZVdlYkFuaW1hdGlvbkVmZmVjdFRpbWluZ0ltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGFuaW1h
dGlvbik7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hh
bmdlV2ViQW5pbWF0aW9uRWZmZWN0VGFyZ2V0KFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uKQogewog
ICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRvKiBp
bnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoYW5pbWF0
aW9uLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCisgICAgaWYgKGF1dG8qIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGFuaW1hdGlvbi5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpKQogICAgICAgICBkaWRDaGFuZ2VXZWJBbmltYXRpb25FZmZlY3RUYXJnZXRJ
bXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBhbmltYXRpb24pOwogfQogCiBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdlYkFuaW1hdGlvbihXZWJBbmltYXRp
b24mIGFuaW1hdGlvbikKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgp
KTsKLSAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JDb250ZXh0KGFuaW1hdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQorICAgIGlm
IChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihhbmlt
YXRpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKICAgICAgICAgZGlkQ3JlYXRlV2ViQW5p
bWF0aW9uSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgYW5pbWF0aW9uKTsKIH0KIAogaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGVzdHJveVdlYkFuaW1hdGlvbihX
ZWJBbmltYXRpb24mIGFuaW1hdGlvbikKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVO
RFModm9pZCgpKTsKLSAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNGb3JDb250ZXh0KGFuaW1hdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
KQorICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50
c0ZvcihhbmltYXRpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKICAgICAgICAgd2lsbERl
c3Ryb3lXZWJBbmltYXRpb25JbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBhbmltYXRpb24pOwog
fQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om5ldHdvcmtTdGF0ZUNo
YW5nZWQoUGFnZSYgcGFnZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9p
ZCgpKTsKLSAgICBuZXR3b3JrU3RhdGVDaGFuZ2VkSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9y
UGFnZShwYWdlKSk7CisgICAgbmV0d29ya1N0YXRlQ2hhbmdlZEltcGwoaW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvcihwYWdlKSk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhGcmFtZSogZnJhbWUpCiB7CiAgICAgRkFT
VF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1l
bnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQorICAgIGlm
IChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvcihmcmFt
ZSkpCiAgICAgICAgIHVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNJbXBsKCppbnN0cnVtZW50
aW5nQWdlbnRzLCAqZnJhbWUpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYgcGFnZSwgc3RkOjp1bmlxdWVfcHRyPElu
c3BlY3Rvcjo6Q29uc29sZU1lc3NhZ2U+IG1lc3NhZ2UpCiB7Ci0gICAgYWRkTWVzc2FnZVRvQ29u
c29sZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSksIFdURk1vdmUobWVzc2Fn
ZSkpOworICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3Io
cGFnZSksIFdURk1vdmUobWVzc2FnZSkpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyR2xvYmFsU2NvcGUmIHdvcmtl
ckdsb2JhbFNjb3BlLCBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpDb25zb2xlTWVzc2FnZT4g
bWVzc2FnZSkKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2Fn
ZVRvQ29uc29sZShXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZSYgZ2xvYmFsU2NvcGUsIHN0ZDo6
dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdlPiBtZXNzYWdlKQogewotICAgIGFk
ZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3JXb3JrZXJHbG9iYWxT
Y29wZSh3b3JrZXJHbG9iYWxTY29wZSksIFdURk1vdmUobWVzc2FnZSkpOworICAgIGFkZE1lc3Nh
Z2VUb0NvbnNvbGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZ2xvYmFsU2NvcGUpLCBXVEZN
b3ZlKG1lc3NhZ2UpKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojpjb25zb2xlQ291bnQoUGFnZSYgcGFnZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogc3RhdGUsIGNv
bnN0IFN0cmluZyYgbGFiZWwpCiB7Ci0gICAgY29uc29sZUNvdW50SW1wbChpbnN0cnVtZW50aW5n
QWdlbnRzRm9yUGFnZShwYWdlKSwgc3RhdGUsIGxhYmVsKTsKKyAgICBjb25zb2xlQ291bnRJbXBs
KGluc3RydW1lbnRpbmdBZ2VudHNGb3IocGFnZSksIHN0YXRlLCBsYWJlbCk7CiB9CiAKLWlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50KFdvcmtlckdsb2Jh
bFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogc3RhdGUsIGNv
bnN0IFN0cmluZyYgbGFiZWwpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmNvbnNvbGVDb3VudChXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZSYgZ2xvYmFsU2NvcGUsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIHN0YXRlLCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewotICAgIGNv
bnNvbGVDb3VudEltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0Zvcldvcmtlckdsb2JhbFNjb3BlKHdv
cmtlckdsb2JhbFNjb3BlKSwgc3RhdGUsIGxhYmVsKTsKKyAgICBjb25zb2xlQ291bnRJbXBsKGlu
c3RydW1lbnRpbmdBZ2VudHNGb3IoZ2xvYmFsU2NvcGUpLCBzdGF0ZSwgbGFiZWwpOwogfQogCiBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudFJlc2V0KFBh
Z2UmIHBhZ2UsIEpTQzo6SlNHbG9iYWxPYmplY3QqIHN0YXRlLCBjb25zdCBTdHJpbmcmIGxhYmVs
KQogewotICAgIGNvbnNvbGVDb3VudFJlc2V0SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFn
ZShwYWdlKSwgc3RhdGUsIGxhYmVsKTsKKyAgICBjb25zb2xlQ291bnRSZXNldEltcGwoaW5zdHJ1
bWVudGluZ0FnZW50c0ZvcihwYWdlKSwgc3RhdGUsIGxhYmVsKTsKIH0KIAotaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnRSZXNldChXb3JrZXJHbG9iYWxT
Y29wZSYgd29ya2VyR2xvYmFsU2NvcGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIHN0YXRlLCBjb25z
dCBTdHJpbmcmIGxhYmVsKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpj
b25zb2xlQ291bnRSZXNldChXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZSYgZ2xvYmFsU2NvcGUs
IEpTQzo6SlNHbG9iYWxPYmplY3QqIHN0YXRlLCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewotICAg
IGNvbnNvbGVDb3VudFJlc2V0SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFs
U2NvcGUod29ya2VyR2xvYmFsU2NvcGUpLCBzdGF0ZSwgbGFiZWwpOworICAgIGNvbnNvbGVDb3Vu
dFJlc2V0SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGdsb2JhbFNjb3BlKSwgc3RhdGUsIGxh
YmVsKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp0YWtlSGVh
cFNuYXBzaG90KEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKICAgICBGQVNU
X1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShm
cmFtZSkpCisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGZyYW1lKSkKICAgICAgICAgdGFrZUhlYXBTbmFwc2hv
dEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHRpdGxlKTsKIH0KIAogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdGFydENvbnNvbGVUaW1pbmcoRnJhbWUmIGZyYW1lLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBleGVjLCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewotICAgIGlm
IChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1l
KGZyYW1lKSkKKyAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRp
bmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAgICBzdGFydENvbnNvbGVUaW1pbmdJbXBsKCppbnN0
cnVtZW50aW5nQWdlbnRzLCBmcmFtZSwgZXhlYywgbGFiZWwpOwogfQogCi1pbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0Q29uc29sZVRpbWluZyhXb3JrZXJHbG9iYWxT
Y29wZSYgd29ya2VyR2xvYmFsU2NvcGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0
IFN0cmluZyYgbGFiZWwpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0
YXJ0Q29uc29sZVRpbWluZyhXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZSYgZ2xvYmFsU2NvcGUs
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWwpCiB7Ci0gICAg
c3RhcnRDb25zb2xlVGltaW5nSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFs
U2NvcGUod29ya2VyR2xvYmFsU2NvcGUpLCBleGVjLCBsYWJlbCk7CisgICAgc3RhcnRDb25zb2xl
VGltaW5nSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGdsb2JhbFNjb3BlKSwgZXhlYywgbGFi
ZWwpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmxvZ0NvbnNv
bGVUaW1pbmcoRnJhbWUmIGZyYW1lLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBleGVjLCBjb25zdCBT
dHJpbmcmIGxhYmVsLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRz
KQogewotICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAgICBsb2dDb25zb2xlVGltaW5n
SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZXhlYywgbGFiZWwsIFdURk1vdmUoYXJndW1lbnRz
KSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bG9nQ29uc29s
ZVRpbWluZyhXb3JrZXJHbG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUsIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWwsIFJlZjxJbnNwZWN0b3I6OlNjcmlw
dEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmxvZ0NvbnNvbGVUaW1pbmcoV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUmIGdsb2Jh
bFNjb3BlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBleGVjLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBS
ZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewotICAgIGxvZ0Nv
bnNvbGVUaW1pbmdJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3JXb3JrZXJHbG9iYWxTY29wZSh3
b3JrZXJHbG9iYWxTY29wZSksIGV4ZWMsIGxhYmVsLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAg
IGxvZ0NvbnNvbGVUaW1pbmdJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZ2xvYmFsU2NvcGUp
LCBleGVjLCBsYWJlbCwgV1RGTW92ZShhcmd1bWVudHMpKTsKIH0KIAogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZyhGcmFtZSYgZnJhbWUsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWwpCiB7Ci0gICAgaWYg
KGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUo
ZnJhbWUpKQorICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGlu
Z0FnZW50c0ZvcihmcmFtZSkpCiAgICAgICAgIHN0b3BDb25zb2xlVGltaW5nSW1wbCgqaW5zdHJ1
bWVudGluZ0FnZW50cywgZnJhbWUsIGV4ZWMsIGxhYmVsKTsKIH0KIAotaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZyhXb3JrZXJHbG9iYWxTY29w
ZSYgd29ya2VyR2xvYmFsU2NvcGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0IFN0
cmluZyYgbGFiZWwpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BD
b25zb2xlVGltaW5nKFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJiBnbG9iYWxTY29wZSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZXhlYywgY29uc3QgU3RyaW5nJiBsYWJlbCkKIHsKLSAgICBzdG9w
Q29uc29sZVRpbWluZ0ltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0Zvcldvcmtlckdsb2JhbFNjb3Bl
KHdvcmtlckdsb2JhbFNjb3BlKSwgZXhlYywgbGFiZWwpOworICAgIHN0b3BDb25zb2xlVGltaW5n
SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGdsb2JhbFNjb3BlKSwgZXhlYywgbGFiZWwpOwog
fQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVUaW1lU3Rh
bXAoRnJhbWUmIGZyYW1lLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1l
bnRzKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlm
IChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGlu
Z0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUpKQogICAgICAg
ICBjb25zb2xlVGltZVN0YW1wSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUsIFdURk1v
dmUoYXJndW1lbnRzKSk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6c3RhcnRQcm9maWxpbmcoUGFnZSYgcGFnZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZXhlYywg
Y29uc3QgU3RyaW5nICZ0aXRsZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMo
dm9pZCgpKTsKLSAgICBzdGFydFByb2ZpbGluZ0ltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBh
Z2UocGFnZSksIGV4ZWMsIHRpdGxlKTsKKyAgICBzdGFydFByb2ZpbGluZ0ltcGwoaW5zdHJ1bWVu
dGluZ0FnZW50c0ZvcihwYWdlKSwgZXhlYywgdGl0bGUpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BQcm9maWxpbmcoUGFnZSYgcGFnZSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZXhlYywgY29uc3QgU3RyaW5nICZ0aXRsZSkKIHsKICAgICBGQVNUX1JFVFVS
Tl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBzdG9wUHJvZmlsaW5nSW1wbChpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSwgZXhlYywgdGl0bGUpOworICAgIHN0b3BQcm9maWxp
bmdJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3IocGFnZSksIGV4ZWMsIHRpdGxlKTsKIH0KIAog
aW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlU3RhcnRSZWNvcmRp
bmdDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgSlNDOjpKU0dsb2JhbE9i
amVjdCYgZXhlYywgSlNDOjpKU09iamVjdCogb3B0aW9ucykKIHsKLSAgICBpZiAoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JD
b250ZXh0KGNvbnRleHQuY2FudmFzQmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCisg
ICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yKGNvbnRleHQuY2FudmFzQmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkpCiAgICAgICAgIGNvbnNvbGVTdGFydFJlY29yZGluZ0NhbnZhc0ltcGwoKmluc3RydW1l
bnRpbmdBZ2VudHMsIGNvbnRleHQsIGV4ZWMsIG9wdGlvbnMpOwogfQogCiBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFzKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0LmNhbnZhc0Jh
c2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQorICAgIGlmIChhdXRvKiBpbnN0cnVtZW50
aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihjb250ZXh0LmNhbnZhc0Jhc2UoKS5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQogICAgICAgICBjb25zb2xlU3RvcFJlY29yZGluZ0Nh
bnZhc0ltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnRleHQpOwogfQogCiBpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlcXVlc3RBbmltYXRpb25GcmFtZShEb2N1
bWVudCYgZG9jdW1lbnQsIGludCBjYWxsYmFja0lkKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05P
X0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkK
KyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHNGb3IoZG9jdW1lbnQpKQogICAgICAgICBkaWRSZXF1ZXN0QW5pbWF0aW9u
RnJhbWVJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBjYWxsYmFja0lkLCBkb2N1bWVudCk7CiB9
CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FuY2VsQW5pbWF0
aW9uRnJhbWUoRG9jdW1lbnQmIGRvY3VtZW50LCBpbnQgY2FsbGJhY2tJZCkKIHsKICAgICBGQVNU
X1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVu
dChkb2N1bWVudCkpCisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGRvY3VtZW50KSkKICAgICAgICAgZGlkQ2Fu
Y2VsQW5pbWF0aW9uRnJhbWVJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBjYWxsYmFja0lkLCBk
b2N1bWVudCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bEZpcmVBbmltYXRpb25GcmFtZShEb2N1bWVudCYgZG9jdW1lbnQsIGludCBjYWxsYmFja0lkKQog
ewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRv
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRv
Y3VtZW50KSkKKyAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRp
bmdBZ2VudHNGb3IoZG9jdW1lbnQpKQogICAgICAgICB3aWxsRmlyZUFuaW1hdGlvbkZyYW1lSW1w
bCgqaW5zdHJ1bWVudGluZ0FnZW50cywgY2FsbGJhY2tJZCwgZG9jdW1lbnQpOwogfQogCiBpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpcmVBbmltYXRpb25GcmFtZShE
b2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZv
aWQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQorICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5n
QWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zvcihkb2N1bWVudCkpCiAgICAgICAgIGRpZEZp
cmVBbmltYXRpb25GcmFtZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMpOwogfQogCiBpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxGaXJlT2JzZXJ2ZXJDYWxsYmFjayhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGNhbGxiYWNrVHlw
ZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAo
YXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0
KGNvbnRleHQpKQorICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVu
dGluZ0FnZW50c0Zvcihjb250ZXh0KSkKICAgICAgICAgd2lsbEZpcmVPYnNlcnZlckNhbGxiYWNr
SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgY2FsbGJhY2tUeXBlLCBjb250ZXh0KTsKIH0KIAog
aW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaXJlT2JzZXJ2ZXJDYWxs
YmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQogewogICAgIEZBU1RfUkVUVVJO
X0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCisgICAgaWYgKGF1
dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKGNvbnRleHQp
KQogICAgICAgICBkaWRGaXJlT2JzZXJ2ZXJDYWxsYmFja0ltcGwoKmluc3RydW1lbnRpbmdBZ2Vu
dHMpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmxheWVyVHJl
ZURpZENoYW5nZShQYWdlKiBwYWdlKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5E
Uyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCisgICAgaWYgKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
KHBhZ2UpKQogICAgICAgICBsYXllclRyZWVEaWRDaGFuZ2VJbXBsKCppbnN0cnVtZW50aW5nQWdl
bnRzKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpyZW5kZXJM
YXllckRlc3Ryb3llZChQYWdlKiBwYWdlLCBjb25zdCBSZW5kZXJMYXllciYgcmVuZGVyTGF5ZXIp
CiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdl
bnRzRm9yUGFnZShwYWdlKSkKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3IocGFnZSkpCiAgICAgICAgIHJlbmRl
ckxheWVyRGVzdHJveWVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgcmVuZGVyTGF5ZXIpOwog
fQogCi1pbmxpbmUgSW5zdHJ1bWVudGluZ0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjppbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQoraW5saW5lIEluc3RydW1lbnRpbmdBZ2VudHMqIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0ZvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQogewotICAgIHJldHVybiBjb250ZXh0ID8gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRl
eHQoKmNvbnRleHQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gY29udGV4dCA/IGluc3RydW1lbnRp
bmdBZ2VudHNGb3IoKmNvbnRleHQpIDogbnVsbHB0cjsKIH0KIAotaW5saW5lIEluc3RydW1lbnRp
bmdBZ2VudHMqIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0Zv
ckZyYW1lKGNvbnN0IEZyYW1lKiBmcmFtZSkKK2lubGluZSBJbnN0cnVtZW50aW5nQWdlbnRzKiBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3IoY29uc3QgRnJh
bWUqIGZyYW1lKQogewotICAgIHJldHVybiBmcmFtZSA/IGluc3RydW1lbnRpbmdBZ2VudHNGb3JG
cmFtZSgqZnJhbWUpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gZnJhbWUgPyBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yKCpmcmFtZSkgOiBudWxscHRyOwogfQogCi1pbmxpbmUgSW5zdHJ1bWVudGluZ0Fn
ZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJh
bWUoY29uc3QgRnJhbWUmIGZyYW1lKQoraW5saW5lIEluc3RydW1lbnRpbmdBZ2VudHMqIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0Zvcihjb25zdCBGcmFtZSYg
ZnJhbWUpCiB7Ci0gICAgcmV0dXJuIGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKGZyYW1lLnBh
Z2UoKSk7CisgICAgcmV0dXJuIGluc3RydW1lbnRpbmdBZ2VudHNGb3IoZnJhbWUucGFnZSgpKTsK
IH0KIAotaW5saW5lIEluc3RydW1lbnRpbmdBZ2VudHMqIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6aW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKK2lu
bGluZSBJbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3Ry
dW1lbnRpbmdBZ2VudHNGb3IoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBkb2N1
bWVudCA/IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudCgqZG9jdW1lbnQpIDogbnVsbHB0
cjsKKyAgICByZXR1cm4gZG9jdW1lbnQgPyBpbnN0cnVtZW50aW5nQWdlbnRzRm9yKCpkb2N1bWVu
dCkgOiBudWxscHRyOwogfQogCi1pbmxpbmUgSW5zdHJ1bWVudGluZ0FnZW50cyogSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoRG9jdW1lbnQm
IGRvY3VtZW50KQoraW5saW5lIEluc3RydW1lbnRpbmdBZ2VudHMqIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0ZvcihEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAg
ICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UgJiYgZG9jdW1l
bnQudGVtcGxhdGVEb2N1bWVudEhvc3QoKSkKICAgICAgICAgcGFnZSA9IGRvY3VtZW50LnRlbXBs
YXRlRG9jdW1lbnRIb3N0KCktPnBhZ2UoKTsKLSAgICByZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50
c0ZvclBhZ2UocGFnZSk7CisgICAgcmV0dXJuIGluc3RydW1lbnRpbmdBZ2VudHNGb3IocGFnZSk7
CiB9CiAKLWlubGluZSBJbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKFBhZ2UqIHBhZ2UpCitpbmxpbmUgSW5zdHJ1
bWVudGluZ0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdl
bnRzRm9yKFBhZ2UqIHBhZ2UpCiB7Ci0gICAgcmV0dXJuIHBhZ2UgPyAmaW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvclBhZ2UoKnBhZ2UpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gcGFnZSA/ICZpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yKCpwYWdlKSA6IG51bGxwdHI7CiB9CiAKLWlubGluZSBJbnN0cnVtZW50
aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNG
b3JXb3JrZXJHbG9iYWxTY29wZShXb3JrZXJHbG9iYWxTY29wZSogd29ya2VyR2xvYmFsU2NvcGUp
CitpbmxpbmUgSW5zdHJ1bWVudGluZ0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpp
bnN0cnVtZW50aW5nQWdlbnRzRm9yKFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlKiBnbG9iYWxT
Y29wZSkKIHsKLSAgICByZXR1cm4gd29ya2VyR2xvYmFsU2NvcGUgPyAmaW5zdHJ1bWVudGluZ0Fn
ZW50c0Zvcldvcmtlckdsb2JhbFNjb3BlKCp3b3JrZXJHbG9iYWxTY29wZSkgOiBudWxscHRyOwor
ICAgIHJldHVybiBnbG9iYWxTY29wZSA/ICZpbnN0cnVtZW50aW5nQWdlbnRzRm9yKCpnbG9iYWxT
Y29wZSkgOiBudWxscHRyOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmZyb250ZW5kQ3JlYXRlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yV2ViQWdlbnRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yV2ViQWdlbnRCYXNlLmgKaW5kZXggNzA0NDY0NGJmZjk1MjBlYWFlODZlZmQ0YjJhZTM5
MTkyM2ZjN2VmNC4uYWI2ZmYzNTE2NWNmYjVkMGUzYTM1MTMzY2Q0OTI4MDIxNTA2MGIxYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldlYkFnZW50QmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXZWJBZ2VudEJhc2UuaApA
QCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluc3RydW1lbnRp
bmdBZ2VudHM7CiBjbGFzcyBQYWdlOwotY2xhc3MgV29ya2VyR2xvYmFsU2NvcGU7CitjbGFzcyBX
b3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZTsKIAogLy8gRklYTUU6IG1vdmUgdGhpcyB0byBJbnNw
ZWN0b3IgbmFtZXNwYWNlIHdoZW4gcmVtYWluaW5nIGFnZW50cyBtb3ZlLgogc3RydWN0IFdlYkFn
ZW50Q29udGV4dCA6IHB1YmxpYyBJbnNwZWN0b3I6OkFnZW50Q29udGV4dCB7CkBAIC01NywxMyAr
NTcsMTMgQEAgc3RydWN0IFBhZ2VBZ2VudENvbnRleHQgOiBwdWJsaWMgV2ViQWdlbnRDb250ZXh0
IHsKIH07CiAKIHN0cnVjdCBXb3JrZXJBZ2VudENvbnRleHQgOiBwdWJsaWMgV2ViQWdlbnRDb250
ZXh0IHsKLSAgICBXb3JrZXJBZ2VudENvbnRleHQoV2ViQWdlbnRDb250ZXh0JiBjb250ZXh0LCBX
b3JrZXJHbG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUpCisgICAgV29ya2VyQWdlbnRDb250
ZXh0KFdlYkFnZW50Q29udGV4dCYgY29udGV4dCwgV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUm
IGdsb2JhbFNjb3BlKQogICAgICAgICA6IFdlYkFnZW50Q29udGV4dChjb250ZXh0KQotICAgICAg
ICAsIHdvcmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKQorICAgICAgICAsIGdsb2Jh
bFNjb3BlKGdsb2JhbFNjb3BlKQogICAgIHsKICAgICB9CiAKLSAgICBXb3JrZXJHbG9iYWxTY29w
ZSYgd29ya2VyR2xvYmFsU2NvcGU7CisgICAgV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUmIGds
b2JhbFNjb3BlOwogfTsKIAogY2xhc3MgSW5zcGVjdG9yQWdlbnRCYXNlIDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQWdlbnRCYXNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29y
a2VyRGVidWdnZXIuY3BwCmluZGV4IDgwYzlhMTA1YzU0YTNlNTM3MGFjY2Q2YzEyZmYwNmYyYjM0
MzVkYTIuLjhhN2FiOGMyMGUwOTQ5MGJlMzdlNWMwNjc1NjJiMmMzZDI1MWJjNTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyLmNwcApAQCAtMzQsNyArMzQsOCBA
QAogCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCi0jaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlICJXb3JrZXJPcldv
cmtsZXRHbG9iYWxTY29wZS5oIgorI2luY2x1ZGUgIldvcmtlck9yV29ya2xldFNjcmlwdENvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJXb3JrZXJSdW5Mb29wLmgiCiAjaW5jbHVkZSAiV29ya2VyVGhy
ZWFkLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVk0uaD4KQEAgLTQzLDkgKzQ0LDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCi1Xb3Jr
ZXJEZWJ1Z2dlcjo6V29ya2VyRGVidWdnZXIoV29ya2VyR2xvYmFsU2NvcGUmIGNvbnRleHQpCitX
b3JrZXJEZWJ1Z2dlcjo6V29ya2VyRGVidWdnZXIoV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUm
IGNvbnRleHQpCiAgICAgOiBEZWJ1Z2dlcihjb250ZXh0LnNjcmlwdCgpLT52bSgpKQotICAgICwg
bV93b3JrZXJHbG9iYWxTY29wZShjb250ZXh0KQorICAgICwgbV9nbG9iYWxTY29wZShjb250ZXh0
KQogewogfQogCkBAIC01MywxNSArNTQsMTUgQEAgdm9pZCBXb3JrZXJEZWJ1Z2dlcjo6YXR0YWNo
RGVidWdnZXIoKQogewogICAgIEpTQzo6RGVidWdnZXI6OmF0dGFjaERlYnVnZ2VyKCk7CiAKLSAg
ICBtX3dvcmtlckdsb2JhbFNjb3BlLnNjcmlwdCgpLT5hdHRhY2hEZWJ1Z2dlcih0aGlzKTsKKyAg
ICBtX2dsb2JhbFNjb3BlLnNjcmlwdCgpLT5hdHRhY2hEZWJ1Z2dlcih0aGlzKTsKIH0KIAogdm9p
ZCBXb3JrZXJEZWJ1Z2dlcjo6ZGV0YWNoRGVidWdnZXIoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQog
ewogICAgIEpTQzo6RGVidWdnZXI6OmRldGFjaERlYnVnZ2VyKGlzQmVpbmdEZXN0cm95ZWQpOwog
Ci0gICAgaWYgKG1fd29ya2VyR2xvYmFsU2NvcGUuc2NyaXB0KCkpCi0gICAgICAgIG1fd29ya2Vy
R2xvYmFsU2NvcGUuc2NyaXB0KCktPmRldGFjaERlYnVnZ2VyKHRoaXMpOworICAgIGlmIChtX2ds
b2JhbFNjb3BlLnNjcmlwdCgpKQorICAgICAgICBtX2dsb2JhbFNjb3BlLnNjcmlwdCgpLT5kZXRh
Y2hEZWJ1Z2dlcih0aGlzKTsKICAgICBpZiAoIWlzQmVpbmdEZXN0cm95ZWQpCiAgICAgICAgIHJl
Y29tcGlsZUFsbEpTRnVuY3Rpb25zKCk7CiB9CkBAIC04MCw3ICs4MSw3IEBAIHZvaWQgV29ya2Vy
RGVidWdnZXI6OnJ1bkV2ZW50TG9vcFdoaWxlUGF1c2VkKCkKIAogICAgIE1lc3NhZ2VRdWV1ZVdh
aXRSZXN1bHQgcmVzdWx0OwogICAgIGRvIHsKLSAgICAgICAgcmVzdWx0ID0gbV93b3JrZXJHbG9i
YWxTY29wZS50aHJlYWQoKS5ydW5Mb29wKCkucnVuSW5EZWJ1Z2dlck1vZGUobV93b3JrZXJHbG9i
YWxTY29wZSk7CisgICAgICAgIHJlc3VsdCA9IG1fZ2xvYmFsU2NvcGUud29ya2VyT3JXb3JrbGV0
VGhyZWFkKCktPnJ1bkxvb3AoKS5ydW5JbkRlYnVnZ2VyTW9kZShtX2dsb2JhbFNjb3BlKTsKICAg
ICB9IHdoaWxlIChyZXN1bHQgIT0gTWVzc2FnZVF1ZXVlVGVybWluYXRlZCAmJiAhZG9uZVByb2Nl
c3NpbmdEZWJ1Z2dlckV2ZW50cygpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29y
a2VyRGVidWdnZXIuaAppbmRleCAxYzQ1Njk5OWFlZjYyYjU0NDZhZjk3ZDY1NDY0ZjhjNTZjOWUx
YWQzLi44OGE1NWU5ZTM4NjQ3YjhmZDMwYWRhN2I0YjFhMDljNTI5YzQ4OGE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXIuaApAQCAtMzUsMTMgKzM1LDEzIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV29ya2VyR2xvYmFsU2NvcGU7CitjbGFzcyBX
b3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZTsKIAogY2xhc3MgV29ya2VyRGVidWdnZXIgZmluYWwg
OiBwdWJsaWMgSlNDOjpEZWJ1Z2dlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV29ya2Vy
RGVidWdnZXIpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFdv
cmtlckRlYnVnZ2VyKFdvcmtlckdsb2JhbFNjb3BlJik7CisgICAgV29ya2VyRGVidWdnZXIoV29y
a2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUmKTsKICAgICB+V29ya2VyRGVidWdnZXIoKSBvdmVycmlk
ZSA9IGRlZmF1bHQ7CiAKIApAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcnVu
RXZlbnRMb29wV2hpbGVQYXVzZWQoKSBmaW5hbDsKICAgICB2b2lkIHJlcG9ydEV4Y2VwdGlvbihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGNlcHRpb24qKSBjb25zdCBmaW5hbDsKIAotICAg
IFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOworICAgIFdvcmtlck9yV29y
a2xldEdsb2JhbFNjb3BlJiBtX2dsb2JhbFNjb3BlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCmluZGV4IDkwZTk4NTQ0YjUzYTUwMmViOThhNWQ4YzIyNWI3MDMzYjM5
YTA2N2YuLjdmNDg0NjAzMzI4YmZmYjQwZDc0MjhlMjQ0YzQ3YTBiOTI5ZDRiMmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKQEAgLTM2LDggKzM2LDggQEAKICNpbmNsdWRlICJXb3JrZXJDb25zb2xlQWdlbnQuaCIK
ICNpbmNsdWRlICJXb3JrZXJET01EZWJ1Z2dlckFnZW50LmgiCiAjaW5jbHVkZSAiV29ya2VyRGVi
dWdnZXJBZ2VudC5oIgotI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAi
V29ya2VyTmV0d29ya0FnZW50LmgiCisjaW5jbHVkZSAiV29ya2VyT3JXb3JrbGV0R2xvYmFsU2Nv
cGUuaCIKICNpbmNsdWRlICJXb3JrZXJSdW50aW1lQWdlbnQuaCIKICNpbmNsdWRlICJXb3JrZXJU
aHJlYWQuaCIKICNpbmNsdWRlICJXb3JrZXJUb1BhZ2VGcm9udGVuZENoYW5uZWwuaCIKQEAgLTU3
LDE2ICs1NywxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwog
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAotV29ya2VySW5zcGVjdG9yQ29udHJvbGxlcjo6
V29ya2VySW5zcGVjdG9yQ29udHJvbGxlcihXb3JrZXJHbG9iYWxTY29wZSYgd29ya2VyR2xvYmFs
U2NvcGUpCitXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJJbnNwZWN0b3JDb250cm9s
bGVyKFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJiBnbG9iYWxTY29wZSkKICAgICA6IG1faW5z
dHJ1bWVudGluZ0FnZW50cyhJbnN0cnVtZW50aW5nQWdlbnRzOjpjcmVhdGUoKnRoaXMpKQogICAg
ICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIobWFrZVVuaXF1ZTxXZWJJbmplY3RlZFNjcmlwdE1h
bmFnZXI+KCp0aGlzLCBXZWJJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZSgpKSkKICAgICAsIG1f
ZnJvbnRlbmRSb3V0ZXIoRnJvbnRlbmRSb3V0ZXI6OmNyZWF0ZSgpKQogICAgICwgbV9iYWNrZW5k
RGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKG1fZnJvbnRlbmRSb3V0ZXIuY29w
eVJlZigpKSkKICAgICAsIG1fZXhlY3V0aW9uU3RvcHdhdGNoKFN0b3B3YXRjaDo6Y3JlYXRlKCkp
Ci0gICAgLCBtX2RlYnVnZ2VyKHdvcmtlckdsb2JhbFNjb3BlKQotICAgICwgbV93b3JrZXJHbG9i
YWxTY29wZSh3b3JrZXJHbG9iYWxTY29wZSkKKyAgICAsIG1fZGVidWdnZXIoZ2xvYmFsU2NvcGUp
CisgICAgLCBtX2dsb2JhbFNjb3BlKGdsb2JhbFNjb3BlKQogewotICAgIEFTU0VSVCh3b3JrZXJH
bG9iYWxTY29wZS5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgQVNTRVJUKGdsb2JhbFNjb3BlLmlz
Q29udGV4dFRocmVhZCgpKTsKIAogICAgIGF1dG8gd29ya2VyQ29udGV4dCA9IHdvcmtlckFnZW50
Q29udGV4dCgpOwogCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBXb3JrZXJJbnNwZWN0b3JDb250
cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoKQogICAgIG1fZXhlY3V0aW9uU3RvcHdhdGNoLT5yZXNl
dCgpOwogICAgIG1fZXhlY3V0aW9uU3RvcHdhdGNoLT5zdGFydCgpOwogCi0gICAgbV9mb3J3YXJk
aW5nQ2hhbm5lbCA9IG1ha2VVbmlxdWU8V29ya2VyVG9QYWdlRnJvbnRlbmRDaGFubmVsPihtX3dv
cmtlckdsb2JhbFNjb3BlKTsKKyAgICBtX2ZvcndhcmRpbmdDaGFubmVsID0gbWFrZVVuaXF1ZTxX
b3JrZXJUb1BhZ2VGcm9udGVuZENoYW5uZWw+KG1fZ2xvYmFsU2NvcGUpOwogICAgIG1fZnJvbnRl
bmRSb3V0ZXItPmNvbm5lY3RGcm9udGVuZCgqbV9mb3J3YXJkaW5nQ2hhbm5lbC5nZXQoKSk7CiAg
ICAgbV9hZ2VudHMuZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKCZtX2Zyb250ZW5kUm91dGVy
LmdldCgpLCAmbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKSk7CiB9CkBAIC0xNDgsNyArMTQ4LDcg
QEAgV29ya2VyQWdlbnRDb250ZXh0IFdvcmtlckluc3BlY3RvckNvbnRyb2xsZXI6OndvcmtlckFn
ZW50Q29udGV4dCgpCiAKICAgICBXb3JrZXJBZ2VudENvbnRleHQgd29ya2VyQ29udGV4dCA9IHsK
ICAgICAgICAgd2ViQ29udGV4dCwKLSAgICAgICAgbV93b3JrZXJHbG9iYWxTY29wZSwKKyAgICAg
ICAgbV9nbG9iYWxTY29wZSwKICAgICB9OwogCiAgICAgcmV0dXJuIHdvcmtlckNvbnRleHQ7CkBA
IC0xNjgsNyArMTY4LDcgQEAgdm9pZCBXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyOjpjcmVhdGVM
YXp5QWdlbnRzKCkKICAgICBtX2FnZW50cy5hcHBlbmQobWFrZVVuaXF1ZTxXb3JrZXJSdW50aW1l
QWdlbnQ+KHdvcmtlckNvbnRleHQpKTsKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAg
ICBpZiAoaXM8U2VydmljZVdvcmtlckdsb2JhbFNjb3BlPihtX3dvcmtlckdsb2JhbFNjb3BlKSkg
eworICAgIGlmIChpczxTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU+KG1fZ2xvYmFsU2NvcGUpKSB7
CiAgICAgICAgIG1fYWdlbnRzLmFwcGVuZChtYWtlVW5pcXVlPFNlcnZpY2VXb3JrZXJBZ2VudD4o
d29ya2VyQ29udGV4dCkpOwogICAgICAgICBtX2FnZW50cy5hcHBlbmQobWFrZVVuaXF1ZTxXb3Jr
ZXJOZXR3b3JrQWdlbnQ+KHdvcmtlckNvbnRleHQpKTsKICAgICB9CkBAIC0xOTksNyArMTk5LDcg
QEAgSW5zcGVjdG9yRXZhbHVhdGVIYW5kbGVyIFdvcmtlckluc3BlY3RvckNvbnRyb2xsZXI6OmV2
YWx1YXRlSGFuZGxlcigpIGNvbnN0CiAKIFZNJiBXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyOjp2
bSgpCiB7Ci0gICAgcmV0dXJuIG1fd29ya2VyR2xvYmFsU2NvcGUudm0oKTsKKyAgICByZXR1cm4g
bV9nbG9iYWxTY29wZS52bSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuaApp
bmRleCA3YTUzZDgwNGJmYmNlMGY2MmUxMTUzYzUxM2IxNzhkNzQyMzgzZWRlLi41MmZmYTI2Nzk2
YWYwMjU2MDAwNGZjZTk1ZTZmZmQyZjU1ZmVmN2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTQxLDE0ICs0MSwx
NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBj
bGFzcyBXZWJJbmplY3RlZFNjcmlwdE1hbmFnZXI7Ci1jbGFzcyBXb3JrZXJHbG9iYWxTY29wZTsK
K2NsYXNzIFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlOwogc3RydWN0IFdvcmtlckFnZW50Q29u
dGV4dDsKIAogY2xhc3MgV29ya2VySW5zcGVjdG9yQ29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBJ
bnNwZWN0b3I6Okluc3BlY3RvckVudmlyb25tZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyKFdvcmtl
ckdsb2JhbFNjb3BlJik7CisgICAgZXhwbGljaXQgV29ya2VySW5zcGVjdG9yQ29udHJvbGxlcihX
b3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZSYpOwogICAgIH5Xb3JrZXJJbnNwZWN0b3JDb250cm9s
bGVyKCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHdvcmtlclRlcm1pbmF0aW5nKCk7CkBAIC04MSw3
ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgUmVmPFdURjo6U3RvcHdhdGNoPiBtX2V4ZWN1dGlvblN0
b3B3YXRjaDsKICAgICBXb3JrZXJEZWJ1Z2dlciBtX2RlYnVnZ2VyOwogICAgIEluc3BlY3Rvcjo6
QWdlbnRSZWdpc3RyeSBtX2FnZW50czsKLSAgICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3JrZXJH
bG9iYWxTY29wZTsKKyAgICBXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZSYgbV9nbG9iYWxTY29w
ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw+IG1fZm9y
d2FyZGluZ0NoYW5uZWw7CiAgICAgYm9vbCBtX2RpZENyZWF0ZUxhenlBZ2VudHMgeyBmYWxzZSB9
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJUb1BhZ2VG
cm9udGVuZENoYW5uZWwuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJUb1BhZ2VG
cm9udGVuZENoYW5uZWwuaAppbmRleCBjMDI2MjExMzVjNTVlYmQ3MDZlMDQzNTFiNWMxM2Y2MTNi
ZWE2NTM0Li4zMjcwMmJlZWE0ZDdmYTQ4ODFjYTAyNjVjN2VkYzkzMWJjNmZjMDExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyVG9QYWdlRnJvbnRlbmRDaGFubmVs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlclRvUGFnZUZyb250ZW5kQ2hh
bm5lbC5oCkBAIC0yNiw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIldvcmtl
ckRlYnVnZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5oIgorI2luY2x1
ZGUgIldvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFk
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+
CiAKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgV29ya2VyVG9Q
YWdlRnJvbnRlbmRDaGFubmVsIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFu
bmVsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNp
dCBXb3JrZXJUb1BhZ2VGcm9udGVuZENoYW5uZWwoV29ya2VyR2xvYmFsU2NvcGUmIHdvcmtlckds
b2JhbFNjb3BlKQotICAgICAgICA6IG1fd29ya2VyR2xvYmFsU2NvcGUod29ya2VyR2xvYmFsU2Nv
cGUpCisgICAgZXhwbGljaXQgV29ya2VyVG9QYWdlRnJvbnRlbmRDaGFubmVsKFdvcmtlck9yV29y
a2xldEdsb2JhbFNjb3BlJiBnbG9iYWxTY29wZSkKKyAgICAgICAgOiBtX2dsb2JhbFNjb3BlKGds
b2JhbFNjb3BlKQogICAgIHsKICAgICB9CiAgICAgfldvcmtlclRvUGFnZUZyb250ZW5kQ2hhbm5l
bCgpIG92ZXJyaWRlID0gZGVmYXVsdDsKQEAgLTQ2LDEwICs0NiwxMSBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVy
cmlkZQogICAgIHsKLSAgICAgICAgbV93b3JrZXJHbG9iYWxTY29wZS50aHJlYWQoKS53b3JrZXJE
ZWJ1Z2dlclByb3h5KCkucG9zdE1lc3NhZ2VUb0RlYnVnZ2VyKG1lc3NhZ2UpOworICAgICAgICBp
ZiAoYXV0byogd29ya2VyRGVidWdnZXJQcm94eSA9IG1fZ2xvYmFsU2NvcGUud29ya2VyT3JXb3Jr
bGV0VGhyZWFkKCktPndvcmtlckRlYnVnZ2VyUHJveHkoKSkKKyAgICAgICAgICAgIHdvcmtlckRl
YnVnZ2VyUHJveHktPnBvc3RNZXNzYWdlVG9EZWJ1Z2dlcihtZXNzYWdlKTsKICAgICB9CiAKLSAg
ICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3JrZXJHbG9iYWxTY29wZTsKKyAgICBXb3JrZXJPcldv
cmtsZXRHbG9iYWxTY29wZSYgbV9nbG9iYWxTY29wZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2Vy
L1NlcnZpY2VXb3JrZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuY3BwCmluZGV4IGJiZTJjYzAzZDY0NWZjMTI5MDg0
ZGJlZTlkZDgwNDIyYmJkNjNmZDguLjIxYjMwZWUyOTQ3MjZiMjNjMjdhYjIwNDU2ZTU5ODI1MzY5
MTNkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2Vy
L1NlcnZpY2VXb3JrZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmNwcApAQCAtMzgsMTAgKzM4LDEwIEBAIHVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIFNlcnZpY2VXb3JrZXJBZ2VudDo6U2VydmljZVdv
cmtlckFnZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKICAgICA6IEluc3BlY3RvckFn
ZW50QmFzZSgiU2VydmljZVdvcmtlciJfcywgY29udGV4dCkKLSAgICAsIG1fc2VydmljZVdvcmtl
ckdsb2JhbFNjb3BlKGRvd25jYXN0PFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZT4oY29udGV4dC53
b3JrZXJHbG9iYWxTY29wZSkpCisgICAgLCBtX3NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZShkb3du
Y2FzdDxTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU+KGNvbnRleHQuZ2xvYmFsU2NvcGUpKQogICAg
ICwgbV9iYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6OlNlcnZpY2VXb3JrZXJCYWNrZW5kRGlz
cGF0Y2hlcjo6Y3JlYXRlKGNvbnRleHQuYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpKQogewotICAg
IEFTU0VSVChjb250ZXh0Lndvcmtlckdsb2JhbFNjb3BlLmlzQ29udGV4dFRocmVhZCgpKTsKKyAg
ICBBU1NFUlQoY29udGV4dC5nbG9iYWxTY29wZS5pc0NvbnRleHRUaHJlYWQoKSk7CiB9CiAKIFNl
cnZpY2VXb3JrZXJBZ2VudDo6flNlcnZpY2VXb3JrZXJBZ2VudCgpID0gZGVmYXVsdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
QXVkaXRBZ2VudC5jcHAKaW5kZXggZjY0ZDU3NTMwYjdiNjE3MGVhYWRlOTIzZTQwOWI1YmRkZWE3
MmU0MC4uNTE1OTA0NGJhZWIwMDRkMDdlYjZkNDZmMTcwM2I3YzIwODc5ODE0OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
QXVkaXRBZ2VudC5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJXb3JrZXJBdWRpdEFn
ZW50LmgiCiAKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgotI2luY2x1ZGUgIldvcmtlckdsb2Jh
bFNjb3BlLmgiCisjaW5jbHVkZSAiV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUuaCIKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbmplY3RlZFNjcmlwdC5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luamVjdGVkU2NyaXB0TWFuYWdlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQ0lubGluZXMuaD4KQEAgLTQxLDkgKzQxLDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKIAogV29ya2VyQXVkaXRBZ2VudDo6V29ya2VyQXVkaXRBZ2VudChXb3JrZXJBZ2VudENvbnRl
eHQmIGNvbnRleHQpCiAgICAgOiBJbnNwZWN0b3JBdWRpdEFnZW50KGNvbnRleHQpCi0gICAgLCBt
X3dvcmtlckdsb2JhbFNjb3BlKGNvbnRleHQud29ya2VyR2xvYmFsU2NvcGUpCisgICAgLCBtX2ds
b2JhbFNjb3BlKGNvbnRleHQuZ2xvYmFsU2NvcGUpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQud29y
a2VyR2xvYmFsU2NvcGUuaXNDb250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChjb250ZXh0Lmds
b2JhbFNjb3BlLmlzQ29udGV4dFRocmVhZCgpKTsKIH0KIAogV29ya2VyQXVkaXRBZ2VudDo6fldv
cmtlckF1ZGl0QWdlbnQoKSA9IGRlZmF1bHQ7CkBAIC01NSw3ICs1NSw3IEBAIEluamVjdGVkU2Ny
aXB0IFdvcmtlckF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJy
b3JTdHJpbmcmIGVyCiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogICAgIH0KIAot
ICAgIHJldHVybiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdEZvcihnbG9i
YWxPYmplY3QobV93b3JrZXJHbG9iYWxTY29wZSkpOworICAgIHJldHVybiBpbmplY3RlZFNjcmlw
dE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QobV9nbG9iYWxTY29wZSkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmgKaW5kZXggZDI1
OWM2YTc2YzJlY2IwZWViOGVkZDczMzllYzA0NTliZDM3MmIzZC4uODU1MjA3OTg1MGU1MGRlZTg1
Y2UyMjc0YjlmNDU1YjQ0OTQzMzU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuaApAQCAtMzAsNyArMzAs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdvcmtlckdsb2JhbFNjb3BlOwor
Y2xhc3MgV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGU7CiAKIGNsYXNzIFdvcmtlckF1ZGl0QWdl
bnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JBdWRpdEFnZW50IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXb3JrZXJBdWRpdEFnZW50KTsKQEAgLTQyLDcgKzQyLDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVk
U2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CiAK
LSAgICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3JrZXJHbG9iYWxTY29wZTsKKyAgICBXb3JrZXJP
cldvcmtsZXRHbG9iYWxTY29wZSYgbV9nbG9iYWxTY29wZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlckNvbnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL3dvcmtlci9Xb3JrZXJDb25zb2xlQWdlbnQuY3BwCmluZGV4IGVhZDQyZGMzM2Q2ODdmMDQz
ZWQ1NjdlM2I4ZjRiMTU4MDc2OTY2NzYuLjhmYjg4ZmNlOWE2MjNlZjhjYTE0Mzk2MzBkYTBkNjNi
NzYwZGM5MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlckNvbnNvbGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmNwcApAQCAtMjYsNyArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldvcmtlckNvbnNvbGVBZ2VudC5oIgogCi0j
aW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlICJXb3JrZXJPcldvcmtsZXRH
bG9iYWxTY29wZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDcgKzM1LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIFdvcmtlckNvbnNvbGVBZ2VudDo6V29ya2VyQ29u
c29sZUFnZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKICAgICA6IFdlYkNvbnNvbGVB
Z2VudChjb250ZXh0KQogewotICAgIEFTU0VSVChjb250ZXh0Lndvcmtlckdsb2JhbFNjb3BlLmlz
Q29udGV4dFRocmVhZCgpKTsKKyAgICBBU1NFUlQoY29udGV4dC5nbG9iYWxTY29wZS5pc0NvbnRl
eHRUaHJlYWQoKSk7CiB9CiAKIFdvcmtlckNvbnNvbGVBZ2VudDo6fldvcmtlckNvbnNvbGVBZ2Vu
dCgpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggM2FlMzVjNjdh
MzAzNDFkN2VlMTJmNmNjNTY4OGRlMWVjNzhjNjNlMC4uNTA0NzJjZDgxMDUxNDBhNzNlZGJmNzY4
MjcyM2Q3YmMyZjJlNWFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKQEAgLTI3LDcg
KzI3LDcgQEAKICNpbmNsdWRlICJXb3JrZXJEZWJ1Z2dlckFnZW50LmgiCiAKICNpbmNsdWRlICJT
Y3JpcHRTdGF0ZS5oIgotI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCisjaW5jbHVkZSAi
V29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9D
b25zb2xlTWVzc2FnZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luamVjdGVkU2NyaXB0
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmg+CkBA
IC00MSwxNiArNDEsMTYgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogV29ya2VyRGVi
dWdnZXJBZ2VudDo6V29ya2VyRGVidWdnZXJBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmIGNvbnRl
eHQpCiAgICAgOiBXZWJEZWJ1Z2dlckFnZW50KGNvbnRleHQpCi0gICAgLCBtX3dvcmtlckdsb2Jh
bFNjb3BlKGNvbnRleHQud29ya2VyR2xvYmFsU2NvcGUpCisgICAgLCBtX2dsb2JhbFNjb3BlKGNv
bnRleHQuZ2xvYmFsU2NvcGUpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQud29ya2VyR2xvYmFsU2Nv
cGUuaXNDb250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChjb250ZXh0Lmdsb2JhbFNjb3BlLmlz
Q29udGV4dFRocmVhZCgpKTsKIH0KIAogV29ya2VyRGVidWdnZXJBZ2VudDo6fldvcmtlckRlYnVn
Z2VyQWdlbnQoKSA9IGRlZmF1bHQ7CiAKIHZvaWQgV29ya2VyRGVidWdnZXJBZ2VudDo6YnJlYWtw
b2ludEFjdGlvbkxvZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQogewotICAgIG1fd29ya2VyR2xvYmFsU2NvcGUuYWRkQ29uc29sZU1l
c3NhZ2UobWFrZVVuaXF1ZTxDb25zb2xlTWVzc2FnZT4oTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3Nh
Z2VUeXBlOjpMb2csIE1lc3NhZ2VMZXZlbDo6TG9nLCBtZXNzYWdlLCBjcmVhdGVTY3JpcHRDYWxs
U3RhY2sobGV4aWNhbEdsb2JhbE9iamVjdCkpKTsKKyAgICBtX2dsb2JhbFNjb3BlLmFkZENvbnNv
bGVNZXNzYWdlKG1ha2VVbmlxdWU8Q29uc29sZU1lc3NhZ2U+KE1lc3NhZ2VTb3VyY2U6OkpTLCBN
ZXNzYWdlVHlwZTo6TG9nLCBNZXNzYWdlTGV2ZWw6OkxvZywgbWVzc2FnZSwgY3JlYXRlU2NyaXB0
Q2FsbFN0YWNrKGxleGljYWxHbG9iYWxPYmplY3QpKSk7CiB9CiAKIEluamVjdGVkU2NyaXB0IFdv
cmtlckRlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9u
Q29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKQEAgLTYwLDcgKzYwLDcgQEAgSW5qZWN0
ZWRTY3JpcHQgV29ya2VyRGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3Rv
Y29sOjpFcnJvclN0cmluZyYKICAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CiAgICAg
fQogCi0gICAgcmV0dXJuIGluamVjdGVkU2NyaXB0TWFuYWdlcigpLmluamVjdGVkU2NyaXB0Rm9y
KGdsb2JhbE9iamVjdChtX3dvcmtlckdsb2JhbFNjb3BlKSk7CisgICAgcmV0dXJuIGluamVjdGVk
U2NyaXB0TWFuYWdlcigpLmluamVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9iamVjdChtX2dsb2JhbFNj
b3BlKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQu
aAppbmRleCA3Y2E2NGU0MDEzYTU0YjQxOGQ1M2U0NzQ4MDJlNzMyYmYxOTA4Yzk3Li44NDMzZTNi
Y2FmZjgzN2VjMWVhMzE4ZTQ4ZWFkMGY2NjU5YTFkNTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2Vu
dC5oCkBAIC0yOSw3ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV29y
a2VyR2xvYmFsU2NvcGU7CitjbGFzcyBXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZTsKIAogY2xh
c3MgV29ya2VyRGVidWdnZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBXZWJEZWJ1Z2dlckFnZW50IHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXb3JrZXJEZWJ1Z2dlckFnZW50KTsKQEAgLTQ4LDcg
KzQ4LDcgQEAgcHJpdmF0ZToKIAogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsK
IAotICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOworICAgIFdvcmtl
ck9yV29ya2xldEdsb2JhbFNjb3BlJiBtX2dsb2JhbFNjb3BlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93
b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5jcHAKaW5kZXggNWRjZTgyNmY0YjEwZTBj
ZDQ4NWM4NTlhYTM3MjkzMmJlZTY0YjVhOS4uOTA4ZTg4MzdhZDE4NmMxNzNlNzNlMWUyOGE4OTJj
N2MyMThlYzYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93
b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuY3BwCkBAIC0yNyw3ICsyNyw3IEBA
CiAjaW5jbHVkZSAiV29ya2VyTmV0d29ya0FnZW50LmgiCiAKICNpbmNsdWRlICJXb3JrZXJEZWJ1
Z2dlclByb3h5LmgiCi0jaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlICJX
b3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZS5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw5ICszNiw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CiAKIFdvcmtlck5ldHdvcmtBZ2VudDo6V29ya2VyTmV0d29ya0FnZW50KFdvcmtl
ckFnZW50Q29udGV4dCYgY29udGV4dCkKICAgICA6IEluc3BlY3Rvck5ldHdvcmtBZ2VudChjb250
ZXh0KQotICAgICwgbV93b3JrZXJHbG9iYWxTY29wZShjb250ZXh0Lndvcmtlckdsb2JhbFNjb3Bl
KQorICAgICwgbV9nbG9iYWxTY29wZShjb250ZXh0Lmdsb2JhbFNjb3BlKQogewotICAgIEFTU0VS
VChjb250ZXh0Lndvcmtlckdsb2JhbFNjb3BlLmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBBU1NF
UlQoY29udGV4dC5nbG9iYWxTY29wZS5pc0NvbnRleHRUaHJlYWQoKSk7CiB9CiAKIFdvcmtlck5l
dHdvcmtBZ2VudDo6fldvcmtlck5ldHdvcmtBZ2VudCgpID0gZGVmYXVsdDsKQEAgLTYxLDEyICs2
MSwxMyBAQCBWZWN0b3I8V2ViU29ja2V0Kj4gV29ya2VyTmV0d29ya0FnZW50OjphY3RpdmVXZWJT
b2NrZXRzKGNvbnN0IExvY2tIb2xkZXImKQogCiB2b2lkIFdvcmtlck5ldHdvcmtBZ2VudDo6c2V0
UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRJbnRlcm5hbChib29sIGRpc2FibGVkKQogewotICAgIG1f
d29ya2VyR2xvYmFsU2NvcGUudGhyZWFkKCkud29ya2VyRGVidWdnZXJQcm94eSgpLnNldFJlc291
cmNlQ2FjaGluZ0Rpc2FibGVkQnlXZWJJbnNwZWN0b3IoZGlzYWJsZWQpOworICAgIGlmIChhdXRv
KiB3b3JrZXJEZWJ1Z2dlclByb3h5ID0gbV9nbG9iYWxTY29wZS53b3JrZXJPcldvcmtsZXRUaHJl
YWQoKS0+d29ya2VyRGVidWdnZXJQcm94eSgpKQorICAgICAgICB3b3JrZXJEZWJ1Z2dlclByb3h5
LT5zZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZEJ5V2ViSW5zcGVjdG9yKGRpc2FibGVkKTsKIH0K
IAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogV29ya2VyTmV0d29ya0FnZW50OjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFByb3RvY29sOjpOZXR3
b3JrOjpGcmFtZUlkJikKIHsKLSAgICByZXR1cm4gJm1fd29ya2VyR2xvYmFsU2NvcGU7CisgICAg
cmV0dXJuICZtX2dsb2JhbFNjb3BlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3
b3JrQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtl
ck5ldHdvcmtBZ2VudC5oCmluZGV4IGRkODdkODEwMjAyZTViMTdkZTljZjA3Yjc2MmI1MjVlZWUy
ZTNiZTguLmU1ZGZmOWQxYTM0ZDliYzQzY2IyNzMwYTgzMDQ2MGI3NzllNDVhMmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtB
Z2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtl
ck5ldHdvcmtBZ2VudC5oCkBAIC00NCw3ICs0NCw3IEBAIHByaXZhdGU6CiAgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dChJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1l
SWQmKTsKICAgICBib29sIHNob3VsZEZvcmNlQnVmZmVyaW5nTmV0d29ya1Jlc291cmNlRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtl
ckdsb2JhbFNjb3BlOworICAgIFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJiBtX2dsb2JhbFNj
b3BlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5j
cHAKaW5kZXggYWE1OGExZjBkN2E4MWIwMDY4MWY2NjhhOWZjNGE3MjU4NmIxM2RjZC4uMTJiODAw
ZmM3OGRhNzQ4MTk4NDQyN2UzMmQyMGE5MTUwZGI4NmMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1lQWdl
bnQuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiV29ya2VyUnVudGltZUFnZW50Lmgi
CiAKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgotI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3Bl
LmgiCisjaW5jbHVkZSAiV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbmplY3RlZFNjcmlwdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luamVjdGVkU2NyaXB0TWFuYWdlci5oPgogCkBAIC00NCw5ICs0NCw5IEBAIHVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CiBXb3JrZXJSdW50aW1lQWdlbnQ6OldvcmtlclJ1bnRpbWVBZ2VudChX
b3JrZXJBZ2VudENvbnRleHQmIGNvbnRleHQpCiAgICAgOiBJbnNwZWN0b3JSdW50aW1lQWdlbnQo
Y29udGV4dCkKICAgICAsIG1fYmFja2VuZERpc3BhdGNoZXIoUnVudGltZUJhY2tlbmREaXNwYXRj
aGVyOjpjcmVhdGUoY29udGV4dC5iYWNrZW5kRGlzcGF0Y2hlciwgdGhpcykpCi0gICAgLCBtX3dv
cmtlckdsb2JhbFNjb3BlKGNvbnRleHQud29ya2VyR2xvYmFsU2NvcGUpCisgICAgLCBtX2dsb2Jh
bFNjb3BlKGNvbnRleHQuZ2xvYmFsU2NvcGUpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQud29ya2Vy
R2xvYmFsU2NvcGUuaXNDb250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChjb250ZXh0Lmdsb2Jh
bFNjb3BlLmlzQ29udGV4dFRocmVhZCgpKTsKIH0KIAogV29ya2VyUnVudGltZUFnZW50Ojp+V29y
a2VyUnVudGltZUFnZW50KCkgPSBkZWZhdWx0OwpAQCAtNTgsNyArNTgsNyBAQCBJbmplY3RlZFNj
cmlwdCBXb3JrZXJSdW50aW1lQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6
RXJyb3JTdHJpbmcmCiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogICAgIH0KIAot
ICAgIHJldHVybiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdEZvcihnbG9i
YWxPYmplY3QobV93b3JrZXJHbG9iYWxTY29wZSkpOworICAgIHJldHVybiBpbmplY3RlZFNjcmlw
dE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QobV9nbG9iYWxTY29wZSkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5oCmluZGV4
IDZiOTk4ZjRkMTczMTg1MWY5OWI2N2VlMTVhNWQyMDAxNTg3ZjRkMDYuLmI5MmRiMzczZTYxNWMx
ODg3NjNkN2I4NzEzYmRiMDA2ZjMyYjg0NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5oCkBAIC0z
Niw3ICszNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV29ya2VyR2xvYmFs
U2NvcGU7CitjbGFzcyBXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZTsKIAogY2xhc3MgV29ya2Vy
UnVudGltZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFn
ZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXb3JrZXJSdW50aW1lQWdlbnQpOwpAQCAt
NTMsNyArNTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIHsgfQogCiAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOwotICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOwor
ICAgIFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJiBtX2dsb2JhbFNjb3BlOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJHbG9iYWxTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2Jh
bFNjb3BlLmNwcAppbmRleCA1N2I5ZjcyMzdmZjdmMTY2YTViYmM0YTYyM2FiMjFlYzE1YTE2NDY3
Li41MDJlYzdkNzc2MzU1Zjk2ZTBkZThkYzhjNDM5MTU4MWY5MDZmNjA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcApAQCAtNDMsNyArNDMsNiBAQAog
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luUG9saWN5LmgiCiAjaW5jbHVkZSAiU2VydmljZVdvcmtl
ckdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAiU29ja2V0UHJvdmlkZXIuaCIKLSNpbmNsdWRlICJX
b3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHku
aCIKICNpbmNsdWRlICJXb3JrZXJMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldvcmtlck1lc3NhZ2lu
Z1Byb3h5LmgiCkBAIC02NSw3ICs2NCw2IEBAIFdvcmtlckdsb2JhbFNjb3BlOjpXb3JrZXJHbG9i
YWxTY29wZShjb25zdCBXb3JrZXJQYXJhbWV0ZXJzJiBwYXJhbXMsIFJlZjxTZWN1cml0CiAgICAg
LCBtX3VybChwYXJhbXMuc2NyaXB0VVJMKQogICAgICwgbV9pZGVudGlmaWVyKHBhcmFtcy5pZGVu
dGlmaWVyKQogICAgICwgbV91c2VyQWdlbnQocGFyYW1zLnVzZXJBZ2VudCkKLSAgICAsIG1faW5z
cGVjdG9yQ29udHJvbGxlcihtYWtlVW5pcXVlPFdvcmtlckluc3BlY3RvckNvbnRyb2xsZXI+KCp0
aGlzKSkKICAgICAsIG1faXNPbmxpbmUocGFyYW1zLmlzT25saW5lKQogICAgICwgbV9zaG91bGRC
eXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kocGFyYW1zLnNob3VsZEJ5cGFzc01h
aW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSkKICAgICAsIG1fdG9wT3JpZ2luKFdURk1vdmUo
dG9wT3JpZ2luKSkKQEAgLTEyMSw4ICsxMTksNiBAQCB2b2lkIFdvcmtlckdsb2JhbFNjb3BlOjpw
cmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQogCiAgICAgaWYgKG1fY2FjaGVTdG9yYWdlQ29ubmVjdGlv
bikKICAgICAgICAgbV9jYWNoZVN0b3JhZ2VDb25uZWN0aW9uLT5jbGVhclBlbmRpbmdSZXF1ZXN0
cygpOwotCi0gICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT53b3JrZXJUZXJtaW5hdGluZygpOwog
fQogCiB2b2lkIFdvcmtlckdsb2JhbFNjb3BlOjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmggYi9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKaW5kZXggMmRlODBlMTRj
MmI2MzhjNDUxYzkzM2Y2Mjg2MTk2NzZhZmI5M2ZkZS4uZDkyMjFkYjlmNTg2N2EyYzBiMjg5YzMz
OGQzZDQ0MjBmODM2NDZjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJHbG9iYWxTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFs
U2NvcGUuaApAQCAtNDcsNyArNDcsNiBAQCBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNw
b25zZUhlYWRlcnM7CiBjbGFzcyBDcnlwdG87CiBjbGFzcyBQZXJmb3JtYW5jZTsKIGNsYXNzIFNj
aGVkdWxlZEFjdGlvbjsKLWNsYXNzIFdvcmtlckluc3BlY3RvckNvbnRyb2xsZXI7CiBjbGFzcyBX
b3JrZXJMb2NhdGlvbjsKIGNsYXNzIFdvcmtlck5hdmlnYXRvcjsKIGNsYXNzIFdvcmtlclNXQ2xp
ZW50Q29ubmVjdGlvbjsKQEAgLTgxLDggKzgwLDYgQEAgcHVibGljOgogICAgIFdvcmtlclNXQ2xp
ZW50Q29ubmVjdGlvbiYgc3dDbGllbnRDb25uZWN0aW9uKCk7CiAjZW5kaWYKIAotICAgIFdvcmtl
ckluc3BlY3RvckNvbnRyb2xsZXImIGluc3BlY3RvckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVy
biAqbV9pbnNwZWN0b3JDb250cm9sbGVyOyB9Ci0KICAgICBXb3JrZXJUaHJlYWQmIHRocmVhZCgp
IGNvbnN0OwogCiAgICAgdXNpbmcgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6aGFzUGVuZGluZ0Fj
dGl2aXR5OwpAQCAtMTY4LDcgKzE2NSw2IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWZQdHI8
V29ya2VyTmF2aWdhdG9yPiBtX25hdmlnYXRvcjsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXb3Jr
ZXJPcldvcmtsZXRTY3JpcHRDb250cm9sbGVyPiBtX3NjcmlwdDsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8V29ya2VySW5zcGVjdG9yQ29udHJvbGxlcj4gbV9pbnNwZWN0b3JDb250cm9sbGVyOwogCiAg
ICAgYm9vbCBtX2lzT25saW5lOwogICAgIGJvb2wgbV9zaG91bGRCeXBhc3NNYWluV29ybGRDb250
ZW50U2VjdXJpdHlQb2xpY3k7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlck9yV29ya2xldEdsb2JhbFNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCmluZGV4IDVmNjYzNWViYjM3Y2NlZDMyNjA1NmI4
MjNjNzAwOTc5OGNkZTIyMTEuLjZhZDM0ZWM4ZmEyMWM1YzFhNjdkYjdmMjI0YjFkNjQ3M2RlMGFl
NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyT3JXb3JrbGV0R2xv
YmFsU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyT3JXb3JrbGV0
R2xvYmFsU2NvcGUuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiV29ya2VyT3JXb3Jr
bGV0R2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIldvcmtlckV2ZW50TG9vcC5oIgorI2luY2x1
ZGUgIldvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXb3JrZXJPcldvcmts
ZXRTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV29ya2VyT3JXb3JrbGV0VGhyZWFkLmgi
CiAjaW5jbHVkZSAiV29ya2VyUnVuTG9vcC5oIgpAQCAtMzksNiArNDAsNyBAQCBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUpOwogV29ya2VyT3JX
b3JrbGV0R2xvYmFsU2NvcGU6Oldvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlKFJlZjxKU0M6OlZN
PiYmIHZtLCBXb3JrZXJPcldvcmtsZXRUaHJlYWQqIHRocmVhZCkKICAgICA6IG1fc2NyaXB0KG1h
a2VVbmlxdWU8V29ya2VyT3JXb3JrbGV0U2NyaXB0Q29udHJvbGxlcj4oV1RGTW92ZSh2bSksIHRo
aXMpKQogICAgICwgbV90aHJlYWQodGhyZWFkKQorICAgICwgbV9pbnNwZWN0b3JDb250cm9sbGVy
KG1ha2VVbmlxdWU8V29ya2VySW5zcGVjdG9yQ29udHJvbGxlcj4oKnRoaXMpKQogewogfQogCkBA
IC01OSw2ICs2MSw4IEBAIHZvaWQgV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGU6OnByZXBhcmVG
b3JEZXN0cnVjdGlvbigpCiAgICAgaWYgKG1fZXZlbnRMb29wKQogICAgICAgICBtX2V2ZW50TG9v
cC0+Y2xlYXJNaWNyb3Rhc2tRdWV1ZSgpOwogICAgIHJlbW92ZVJlamVjdGVkUHJvbWlzZVRyYWNr
ZXIoKTsKKworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+d29ya2VyVGVybWluYXRpbmcoKTsK
IH0KIAogdm9pZCBXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZTo6Y2xlYXJTY3JpcHQoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJPcldvcmtsZXRHbG9iYWxTY29w
ZS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZS5o
CmluZGV4IDhhMTc4MGY2ODUwZDkxZDM1MDQxM2E3NTc5MDVlZWYyYTg5YTkxMTMuLmYwYzkwYzIy
MTliZmU0OTI2YzgyODcxMzY2YzM4OTA5YzYxZjc0ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlLmgKQEAgLTMyLDYgKzMyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFdmVudExvb3BUYXNrR3JvdXA7CiBjbGFz
cyBXb3JrZXJFdmVudExvb3A7CitjbGFzcyBXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyOwogY2xh
c3MgV29ya2VyT3JXb3JrbGV0U2NyaXB0Q29udHJvbGxlcjsKIGNsYXNzIFdvcmtlck9yV29ya2xl
dFRocmVhZDsKIApAQCAtNDgsNiArNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhclNjcmlw
dCgpOwogCiAgICAgSlNDOjpWTSYgdm0oKSBmaW5hbDsKKyAgICBXb3JrZXJJbnNwZWN0b3JDb250
cm9sbGVyJiBpbnNwZWN0b3JDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gKm1faW5zcGVjdG9y
Q29udHJvbGxlcjsgfQogCiAgICAgdW5zaWduZWQgbG9uZyBjcmVhdGVVbmlxdWVJZGVudGlmaWVy
KCkgeyByZXR1cm4gbV91bmlxdWVJZGVudGlmaWVyKys7IH0KIApAQCAtODgsNiArOTAsNyBAQCBw
cml2YXRlOgogICAgIFdvcmtlck9yV29ya2xldFRocmVhZCogbV90aHJlYWQ7CiAgICAgUmVmUHRy
PFdvcmtlckV2ZW50TG9vcD4gbV9ldmVudExvb3A7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV2ZW50
TG9vcFRhc2tHcm91cD4gbV9kZWZhdWx0VGFza0dyb3VwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxX
b3JrZXJJbnNwZWN0b3JDb250cm9sbGVyPiBtX2luc3BlY3RvckNvbnRyb2xsZXI7CiAgICAgdW5z
aWduZWQgbG9uZyBtX3VuaXF1ZUlkZW50aWZpZXIgeyAxIH07CiAgICAgYm9vbCBtX2lzQ2xvc2lu
ZyB7IGZhbHNlIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJPcldvcmtsZXRUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyT3JXb3Jr
bGV0VGhyZWFkLmgKaW5kZXggYjNlNzkyNDA5ZGM5MGExMmM1ZmY4OWU3NmIwN2QzODE0M2U3YjBh
MC4uYTA5NDNkODM4ZDU4MTk1MTIzNGY3MGVhMzdkNGUwMDYzOThmODc5MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJPcldvcmtsZXRUaHJlYWQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlck9yV29ya2xldFRocmVhZC5oCkBAIC0zOCw2ICszOCw3
IEBAIGNsYXNzIFRocmVhZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBXb3JrZXJE
ZWJ1Z2dlclByb3h5OwogY2xhc3MgV29ya2VyTG9hZGVyUHJveHk7CiBjbGFzcyBXb3JrZXJSdW5M
b29wOwogCkBAIC00Niw2ICs0Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Xb3JrZXJPcldv
cmtsZXRUaHJlYWQoKTsKIAogICAgIFdURjo6VGhyZWFkKiB0aHJlYWQoKSBjb25zdCB7IHJldHVy
biBtX3RocmVhZC5nZXQoKTsgfQorCisgICAgdmlydHVhbCBXb3JrZXJEZWJ1Z2dlclByb3h5KiB3
b3JrZXJEZWJ1Z2dlclByb3h5KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgV29ya2VyTG9hZGVy
UHJveHkmIHdvcmtlckxvYWRlclByb3h5KCkgPSAwOwogCiAgICAgV29ya2VyT3JXb3JrbGV0R2xv
YmFsU2NvcGUqIGdsb2JhbFNjb3BlKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxTY29wZS5nZXQo
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaCBi
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgKaW5kZXggMzU5NWM1ZDg3ZmU0
YWJhNmViYjkwZDYxMTAzMjcwMGM5OTVhYzFlNi4uZTNkZjA5ZTQ4MzAxNDViYmM3NGFkMDFiYmRh
NDg2MTJiMDljMDYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJU
aHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5oCkBAIC03
NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Xb3JrZXJUaHJlYWQoKTsKIAogICAg
IFdvcmtlckxvYWRlclByb3h5JiB3b3JrZXJMb2FkZXJQcm94eSgpIGZpbmFsIHsgcmV0dXJuIG1f
d29ya2VyTG9hZGVyUHJveHk7IH0KLSAgICBXb3JrZXJEZWJ1Z2dlclByb3h5JiB3b3JrZXJEZWJ1
Z2dlclByb3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJEZWJ1Z2dlclByb3h5OyB9CisgICAg
V29ya2VyRGVidWdnZXJQcm94eSogd29ya2VyRGVidWdnZXJQcm94eSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICZtX3dvcmtlckRlYnVnZ2VyUHJveHk7IH0KICAgICBXb3JrZXJSZXBvcnRpbmdQcm94
eSYgd29ya2VyUmVwb3J0aW5nUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3dvcmtlclJlcG9ydGlu
Z1Byb3h5OyB9CiAKICAgICAvLyBOdW1iZXIgb2YgYWN0aXZlIHdvcmtlciB0aHJlYWRzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412147</attachid>
            <date>2020-10-22 17:17:17 -0700</date>
            <delta_ts>2020-10-22 18:00:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218108-20201022171716.patch</filename>
            <type>text/plain</type>
            <size>135619</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4ODk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjU1ZTk3YzQ0NDNlYTc4
NjliYmE5NWM2NmU0NDdhMDA2Nzk1YTg4MS4uNjM3MmE4M2FlMTNjZjVjYmRmM2RlYjhkN2EzMzQx
YTYyMGJlM2Q0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0MyBAQAorMjAyMC0xMC0yMiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBXb3JrZXJPcldvcmts
ZXRHbG9iYWxTY29wZSBpbiBXZWJJbnNwZWN0b3IgY29kZSBpbnN0ZWFkIG9mIFdvcmtlckdsb2Jh
bFNjb3BlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTgxMDgKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlciBhbmQgRGV2aW4gUm91c3Nv
LgorCisgICAgICAgIFVzZSBXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZSBpbiBXZWJJbnNwZWN0
b3IgY29kZSBpbnN0ZWFkIG9mIFdvcmtlckdsb2JhbFNjb3BlLAorICAgICAgICBpbiBwcmVwYXJh
dGlvbiBmb3IgV29ya2xldHMgc3VwcG9ydC4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIHJldXNlIHRo
aXMgY29kZSB3aGVuCisgICAgICAgIHdlIGFkZCBXZWIgSW5zcGVjdG9yIHN1cHBvcnQgZm9yIFdv
cmtsZXRzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlIHlldC4K
KworICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Xb3JrbGV0VGhyZWFkLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvV29ya2xldFRocmVhZDo6d29ya2VyRGVidWdnZXJQcm94eSBj
b25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb1dvcmtsZXRUaHJlYWQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50
c0ZvcldlYkdQVURldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmNvbnNvbGVBZ2VudEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp0aW1lbGluZUFnZW50VHJhY2tpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9yKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvclJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0Zvcldvcmtlckdsb2JhbFNjb3BlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5z
dHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dCk6IERl
bGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDbGVhcldpbmRv
d09iamVjdEluV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjppc0RlYnVnZ2VyUGF1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6aWRlbnRpZmllckZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjphZGRFdmVudExpc3RlbmVyc1RvTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxJbnNlcnRET01Ob2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW5zZXJ0RE9NTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZW1v
dmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkUmVtb3ZlRE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxNb2RpZnlET01BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkTW9kaWZ5RE9NQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlbW92ZURPTUF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSW52YWxpZGF0ZVN0eWxlQXR0cik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRhdGVT
dHlsZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
b2N1bWVudERldGFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZnJhbWVXaW5kb3dEaXNjYXJkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjptZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFjdGl2ZVN0eWxlU2hlZXRzVXBkYXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFB1c2hTaGFk
b3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bFBvcFNoYWRvd1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRDaGFuZ2VDdXN0b21FbGVtZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwc2V1ZG9FbGVtZW50Q3JlYXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnBzZXVkb0VsZW1lbnREZXN0cm95ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVO
YW1lZEZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsUmVtb3ZlTmFtZWRGbG93KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkQ2hhbmdlUmVnaW9uT3ZlcnNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlZ2lzdGVyTmFtZWRGbG93Q29udGVudEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRVbnJlZ2lz
dGVyTmFtZWRGbG93Q29udGVudEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmhhbmRsZVRvdWNoRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYW5kbGVNb3VzZVByZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9T
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNoYXJh
Y3RlckRhdGFNb2RpZmllZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRmV0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnN0YWxsVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZW1vdmVUaW1lcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEFkZEV2ZW50TGlzdGVuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRXZlbnRM
aXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omlz
RXZlbnRMaXN0ZW5lckRpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbFBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkUG9zdE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsUG9zdE1lc3NhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hQb3N0TWVzc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNo
UG9zdE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsQ2FsbEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkQ2FsbEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEhhbmRsZUV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSGFuZGxlRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVu
dE9uV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkRGlzcGF0Y2hFdmVudE9uV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZXZlbnREaWRSZXNldEFmdGVyRGlzcGF0Y2gpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVTY3JpcHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRFdmFsdWF0ZVNjcmlw
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxGaXJl
VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRG
aXJlVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRJbnZhbGlkYXRlTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxDb21wb3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRDb21wb3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxSZWNhbGN1bGF0ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjYWxjdWxhdGVTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjaGVkdWxlU3R5bGVSZWNh
bGN1bGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
YXBwbHlVc2VyQWdlbnRPdmVycmlkZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmFwcGx5RW11bGF0ZWRNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kUmVxdWVzdE9mVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZExvYWRSZXNvdXJjZUZy
b21NZW1vcnlDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVRocmVhZGFibGVMb2FkZXJSZXNwb25zZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmlu
aXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZEZhaWxMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6Y29udGludWVBZnRlclhGcmFtZU9wdGlvbnNEZW5pZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250aW51ZVdpdGhQb2xpY3lEb3dubG9hZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlV2l0
aFBvbGljeUlnbm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxMb2FkWEhSU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZExvYWRYSFJTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0SW1wb3J0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzY3JpcHRFeGVjdXRpb25CbG9j
a2VkQnlDU1ApOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRSZWNlaXZlU2NyaXB0UmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkb21Db250ZW50TG9hZGVkRXZlbnRGaXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmxvYWRFdmVudEZpcmVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVEZXRhY2hlZEZyb21QYXJl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDb21t
aXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJh
bWVEb2N1bWVudFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpsb2FkZXJEZXRhY2hlZEZyb21GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lU3RhcnRlZExvYWRpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZVN0b3BwZWRMb2FkaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVTY2hlZHVsZWRO
YXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEludGVyY2VwdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNob3VsZEludGVyY2Vw
dFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
aG91bGRJbnRlcmNlcHRSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmludGVyY2VwdFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjppbnRlcmNlcHRSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5EYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRE9NU3RvcmFnZUV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2hvdWxk
V2FpdEZvckRlYnVnZ2VyT25TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndvcmtlclN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3b3JrZXJUZXJtaW5hdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlV2ViU29ja2V0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hh
a2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2xvc2VXZWJTb2NrZXQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlV2ViU29ja2V0RnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNl
aXZlV2ViU29ja2V0RnJhbWVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFNlbmRXZWJTb2NrZXRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEhhbmRsZU1lbW9yeVByZXNzdXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlQ1NTQ2FudmFz
Q2xpZW50Tm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cmVjb3JkQ2FudmFzQWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmluaXNoUmVj
b3JkaW5nQ2FudmFzRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRFbmFibGVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVXZWJHTFByb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGVzdHJveVdlYkdMUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmlzV2ViR0xQcm9ncmFt
RGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpp
c1dlYkdMUHJvZ3JhbUhpZ2hsaWdodGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbENvbmZpZ3VyZVN3YXBDaGFpbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEZXN0cm95V2ViR1BVUGlwZWxpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsQXBwbHlLZXlm
cmFtZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZENoYW5nZVdlYkFuaW1hdGlvbk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRTZXRXZWJBbmltYXRpb25FZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VXZWJBbmltYXRpb25FZmZl
Y3RUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRDaGFuZ2VXZWJBbmltYXRpb25FZmZlY3RUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVXZWJBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGVzdHJveVdlYkFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om5ldHdvcmtT
dGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp1cGRhdGVBcHBsaWNhdGlvbkNhY2hlU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudFJlc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dGFrZUhlYXBTbmFwc2hv
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0Q29u
c29sZVRpbWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmxvZ0NvbnNvbGVUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmNvbnNvbGVUaW1lU3RhbXApOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdGFydFByb2ZpbGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BQcm9maWxpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52
YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xl
U3RvcFJlY29yZGluZ0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZFJlcXVlc3RBbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbmNlbEFuaW1hdGlvbkZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEZpcmVBbmltYXRpb25G
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZp
cmVBbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxGaXJlT2JzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpcmVPYnNlcnZlckNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bGF5ZXJUcmVlRGlkQ2hhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cmVuZGVyTGF5ZXJE
ZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpp
bnN0cnVtZW50aW5nQWdlbnRzRm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdl
bnRzRm9yRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdl
bnRzRm9yUGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JXb3JrZXJHbG9iYWxTY29wZSk6IERlbGV0
ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvcldlYkFnZW50QmFzZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyQWdlbnRDb250ZXh0OjpXb3JrZXJBZ2VudENvbnRleHQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJEZWJ1Z2dlcjo6V29ya2VyRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
RGVidWdnZXI6OmF0dGFjaERlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckRlYnVn
Z2VyOjpkZXRhY2hEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJEZWJ1Z2dlcjo6
cnVuRXZlbnRMb29wV2hpbGVQYXVzZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9Xb3JrZXJEZWJ1
Z2dlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckluc3BlY3RvckNvbnRyb2xsZXI6Oldvcmtlcklu
c3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VySW5zcGVjdG9yQ29u
dHJvbGxlcjo6Y29ubmVjdEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckluc3Bl
Y3RvckNvbnRyb2xsZXI6OndvcmtlckFnZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJJbnNwZWN0b3JDb250cm9sbGVyOjpjcmVhdGVMYXp5QWdlbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6Oldvcmtlckluc3BlY3RvckNvbnRyb2xsZXI6OnZtKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9Xb3Jr
ZXJUb1BhZ2VGcm9udGVuZENoYW5uZWwuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dv
cmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZVdv
cmtlckFnZW50OjpTZXJ2aWNlV29ya2VyQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
QXVkaXRBZ2VudDo6V29ya2VyQXVkaXRBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJB
dWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwpOgorICAgICAgICAqIGluc3BlY3Rvci9h
Z2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL3dvcmtlci9Xb3JrZXJDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyQ29uc29sZUFnZW50OjpXb3JrZXJDb25zb2xlQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyRGVidWdnZXJBZ2VudDo6V29ya2VyRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uTG9nKToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlckRlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbCk6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJOZXR3b3JrQWdlbnQ6Oldvcmtlck5ldHdvcmtB
Z2VudCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNl
Q2FjaGluZ0Rpc2FibGVkSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTmV0d29y
a0FnZW50OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyUnVudGltZUFnZW50OjpXb3JrZXJSdW50aW1lQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyUnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwpOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5oOgorICAgICAgICAqIHdv
cmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyR2xv
YmFsU2NvcGU6Oldvcmtlckdsb2JhbFNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckds
b2JhbFNjb3BlOjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24pOgorICAgICAgICAqIHdvcmtlcnMvV29y
a2VyR2xvYmFsU2NvcGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckdsb2JhbFNjb3BlOjpp
bnNwZWN0b3JDb250cm9sbGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3b3JrZXJzL1dv
cmtlck9yV29ya2xldEdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck9y
V29ya2xldEdsb2JhbFNjb3BlOjpXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZTo6cHJlcGFyZUZvckRlc3RydWN0
aW9uKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZTo6aW5zcGVjdG9yQ29u
dHJvbGxlciBjb25zdCk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJPcldvcmtsZXRUaHJlYWQu
aDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyVGhyZWFkOjp3b3JrZXJEZWJ1Z2dlclByb3h5IGNvbnN0KTogRGVsZXRlZC4KKwogMjAy
MC0xMC0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFNoYXJl
IG1vcmUgY29kZSBiZXR3ZWVuIFdvcmtlclRocmVhZCBhbmQgQXVkaW9Xb3JrbGV0VGhyZWFkCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvV29ya2xldFRo
cmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvV29ya2xldFRo
cmVhZC5jcHAKaW5kZXggMjBkYzU4OTMxYTNkYmEwMDBkOWFiMTc2ZmFiOWY1OWJhZTgwMTEwMC4u
MDA0YjcyM2Q1ZmM5NDAyZDA2YTRkNmQ3ODY2Y2IwY2I4YzAyYzUxMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1dvcmtsZXRUaHJlYWQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Xb3JrbGV0VGhyZWFkLmNwcApA
QCAtNTYsNiArNTYsMTIgQEAgV29ya2VyTG9hZGVyUHJveHkmIEF1ZGlvV29ya2xldFRocmVhZDo6
d29ya2VyTG9hZGVyUHJveHkoKQogICAgIHJldHVybiBtX21lc3NhZ2luZ1Byb3h5OwogfQogCitX
b3JrZXJEZWJ1Z2dlclByb3h5KiBBdWRpb1dvcmtsZXRUaHJlYWQ6OndvcmtlckRlYnVnZ2VyUHJv
eHkoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBBZGQgZGVidWdnaW5nIHN1cHBvcnQgZm9yIEF1
ZGlvV29ya2xldHMuCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIFJlZjxUaHJlYWQ+IEF1ZGlv
V29ya2xldFRocmVhZDo6Y3JlYXRlVGhyZWFkKCkKIHsKICAgICByZXR1cm4gVGhyZWFkOjpjcmVh
dGUoIldlYkNvcmU6IEF1ZGlvV29ya2xldCIsIFt0aGlzXSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvV29ya2xldFRocmVhZC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1dvcmtsZXRUaHJlYWQuaAppbmRleCA0NmZhY2I2
NWU3YjE0NWZlYjY5ZGUzMWE2ZDkyMWNhMTYzZTE0MTY4Li5jMDcyYjZmYTQ1NjBlZGE2NDgxNTUx
MjdlOThjZmFiNjdmOTFlYWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvV29ya2xldFRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Xb3JrbGV0VGhyZWFkLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGljOgog
CiAgICAgLy8gV29ya2VyT3JXb3JrbGV0VGhyZWFkLgogICAgIFdvcmtlckxvYWRlclByb3h5JiB3
b3JrZXJMb2FkZXJQcm94eSgpIGZpbmFsOworICAgIFdvcmtlckRlYnVnZ2VyUHJveHkqIHdvcmtl
ckRlYnVnZ2VyUHJveHkoKSBjb25zdCBmaW5hbDsKIAogICAgIEF1ZGlvV29ya2xldE1lc3NhZ2lu
Z1Byb3h5JiBtZXNzYWdpbmdQcm94eSgpIHsgcmV0dXJuIG1fbWVzc2FnaW5nUHJveHk7IH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmNwcAppbmRleCAwMmFiZTE2NjQxNDJkYmVhOWFiZmZjMDBlYzM3NTNiZDE0ZTM2MjNmLi40
MzdiM2YzMzZjNTE3YmVjNjYxNzI4ZTcxMzA5ZWVmYWZhMjBjODkyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAt
NzEsOCArNzEsOCBAQAogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKICNp
bmNsdWRlICJXZWJHUFVEZXZpY2UuaCIKICNpbmNsdWRlICJXZWJTb2NrZXRGcmFtZS5oIgotI2lu
Y2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAiV29ya2VySW5zcGVjdG9yQ29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIldvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvQ29uc29sZU1lc3NhZ2UuaD4KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9Db25zb2xlVHlwZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JEZWJ1Z2dlckFnZW50Lmg+CkBAIC0xMTQ1LDkgKzExNDUsOSBAQCB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbERlc3Ryb3lXZWJHUFVQaXBlbGluZUltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cwogICAgICAgICBjYW52YXNBZ2VudC0+d2lsbERlc3Ryb3lXZWJHUFVQaXBlbGluZShw
aXBlbGluZSk7CiB9CiAKLUluc3RydW1lbnRpbmdBZ2VudHMqIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0ZvcldlYkdQVURldmljZShXZWJHUFVEZXZpY2UmIGRl
dmljZSkKK0luc3RydW1lbnRpbmdBZ2VudHMqIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5z
dHJ1bWVudGluZ0FnZW50cyhXZWJHUFVEZXZpY2UmIGRldmljZSkKIHsKLSAgICByZXR1cm4gaW5z
dHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoZGV2aWNlLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7CisgICAgcmV0dXJuIGluc3RydW1lbnRpbmdBZ2VudHMoZGV2aWNlLnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSk7CiB9CiAjZW5kaWYKIApAQCAtMTIyMCw4ICsxMjIwLDggQEAgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNJbXBsKElu
c3RydW1lbnRpbmdBZ2UKIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQWdl
bnRFbmFibGVkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
CiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKGZhbHNlKTsKLSAgICBpZiAoYXV0
byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB3ZWJDb25zb2xlQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT53ZWJDb25zb2xlQWdlbnQoKSkKKyAgICBpZiAoYXV0
byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhzY3JpcHRFeGVjdXRpb25Db250ZXh0KSkg
eworICAgICAgICBpZiAoYXV0byogd2ViQ29uc29sZUFnZW50ID0gYWdlbnRzLT53ZWJDb25zb2xl
QWdlbnQoKSkKICAgICAgICAgICAgIHJldHVybiB3ZWJDb25zb2xlQWdlbnQtPmVuYWJsZWQoKTsK
ICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIzMCw4ICsxMjMwLDggQEAgYm9vbCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVBZ2VudEVuYWJsZWQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXAKIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp0aW1lbGluZUFn
ZW50VHJhY2tpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoZmFsc2UpOwotICAgIGlmIChh
dXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCi0gICAgICAgIHJldHVybiBpbnN0cnVtZW50aW5nQWdl
bnRzLT50cmFja2luZ1RpbWVsaW5lQWdlbnQoKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50cyhzY3JpcHRFeGVjdXRpb25Db250ZXh0KSkKKyAgICAgICAgcmV0dXJu
IGFnZW50cy0+dHJhY2tpbmdUaW1lbGluZUFnZW50KCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkBAIC0xMzAzLDkgKzEzMDMsOSBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dW5y
ZWdpc3Rlckluc3RydW1lbnRpbmdBZ2VudHMoSW5zdHJ1bWVudGluZ0FnZW50cwogICAgIH0KIH0K
IAotSW5zdHJ1bWVudGluZ0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVt
ZW50aW5nQWdlbnRzRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKK0luc3RydW1l
bnRpbmdBZ2VudHMqIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50
cyhSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogewotICAgIHJldHVybiBpbnN0cnVtZW50aW5nQWdl
bnRzRm9yRnJhbWUocmVuZGVyZXIuZnJhbWUoKSk7CisgICAgcmV0dXJuIGluc3RydW1lbnRpbmdB
Z2VudHMocmVuZGVyZXIuZnJhbWUoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpsYXllclRyZWVEaWRDaGFuZ2VJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1l
bnRpbmdBZ2VudHMpCkBAIC0xMzIwLDIzICsxMzIwLDIzIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpyZW5kZXJMYXllckRlc3Ryb3llZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zCiAgICAgICAgIGxheWVyVHJlZUFnZW50LT5yZW5kZXJMYXllckRlc3Ryb3llZChyZW5kZXJM
YXllcik7CiB9CiAKLUluc3RydW1lbnRpbmdBZ2VudHMmIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6aW5zdHJ1bWVudGluZ0FnZW50c0Zvcldvcmtlckdsb2JhbFNjb3BlKFdvcmtlckdsb2JhbFNj
b3BlJiB3b3JrZXJHbG9iYWxTY29wZSkKK0luc3RydW1lbnRpbmdBZ2VudHMmIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50cyhXb3JrZXJPcldvcmtsZXRHbG9iYWxT
Y29wZSYgZ2xvYmFsU2NvcGUpCiB7Ci0gICAgcmV0dXJuIHdvcmtlckdsb2JhbFNjb3BlLmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5tX2luc3RydW1lbnRpbmdBZ2VudHM7CisgICAgcmV0dXJuIGdsb2Jh
bFNjb3BlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5tX2luc3RydW1lbnRpbmdBZ2VudHM7CiB9CiAK
LUluc3RydW1lbnRpbmdBZ2VudHMmIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVu
dGluZ0FnZW50c0ZvclBhZ2UoUGFnZSYgcGFnZSkKK0luc3RydW1lbnRpbmdBZ2VudHMmIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50cyhQYWdlJiBwYWdlKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgcmV0dXJuIHBhZ2UuaW5zcGVjdG9yQ29u
dHJvbGxlcigpLm1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKTsKIH0KIAotSW5zdHJ1bWVudGlu
Z0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9y
Q29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQorSW5zdHJ1bWVudGluZ0Fn
ZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKGlzPERvY3VtZW50Pihjb250
ZXh0KSkKLSAgICAgICAgcmV0dXJuIGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKGRvd25jYXN0
PERvY3VtZW50Pihjb250ZXh0KS5wYWdlKCkpOwotICAgIGlmIChpczxXb3JrZXJHbG9iYWxTY29w
ZT4oY29udGV4dCkpCi0gICAgICAgIHJldHVybiAmaW5zdHJ1bWVudGluZ0FnZW50c0Zvcldvcmtl
ckdsb2JhbFNjb3BlKGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0KSk7CisgICAg
ICAgIHJldHVybiBpbnN0cnVtZW50aW5nQWdlbnRzKGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0
KS5wYWdlKCkpOworICAgIGlmIChpczxXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZT4oY29udGV4
dCkpCisgICAgICAgIHJldHVybiAmaW5zdHJ1bWVudGluZ0FnZW50cyhkb3duY2FzdDxXb3JrZXJP
cldvcmtsZXRHbG9iYWxTY29wZT4oY29udGV4dCkpOwogICAgIHJldHVybiBudWxscHRyOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmgKaW5kZXggNWFkNzllMGQxNmE5NTMyYjgxYzhiNWFmODBhYWNhY2U1OTg2OWQxZS4uM2Iw
MGYzMTI1MDg1YTcyY2EyODg0ZDJjMDM4OTM4MGE0Yjg4MmJjZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAtOTksNyAr
OTksNyBAQCBjbGFzcyBTaGFkb3dSb290OwogY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgVGlt
ZXJCYXNlOwogY2xhc3MgV2ViS2l0TmFtZWRGbG93OwotY2xhc3MgV29ya2VyR2xvYmFsU2NvcGU7
CitjbGFzcyBXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZTsKIAogI2lmIEVOQUJMRShXRUJHTCkK
IGNsYXNzIFdlYkdMUHJvZ3JhbTsKQEAgLTIwMSwxMSArMjAxLDExIEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKEZyYW1lKiwgRG9jdW1lbnRMb2FkZXIqLCB1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyYsIFJlc291cmNl
TG9hZGVyKik7CiAgICAgc3RhdGljIHZvaWQgZGlkRmFpbExvYWRpbmcoRnJhbWUqLCBEb2N1bWVu
dExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYp
OwogCi0gICAgc3RhdGljIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFdvcmtlckdsb2JhbFNjb3BlJiwg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICBzdGF0aWMg
dm9pZCBkaWRSZWNlaXZlUmVzb3VyY2VSZXNwb25zZShXb3JrZXJHbG9iYWxTY29wZSYsIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHN0YXRp
YyB2b2lkIGRpZFJlY2VpdmVEYXRhKFdvcmtlckdsb2JhbFNjb3BlJiwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCk7Ci0gICAgc3RhdGlj
IHZvaWQgZGlkRmluaXNoTG9hZGluZyhXb3JrZXJHbG9iYWxTY29wZSYsIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJik7Ci0gICAgc3RhdGljIHZvaWQg
ZGlkRmFpbExvYWRpbmcoV29ya2VyR2xvYmFsU2NvcGUmLCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsU2VuZFJlcXVl
c3QoV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUmLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IFJlc291cmNlUmVxdWVzdCYpOworICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNvdXJjZVJl
c3BvbnNlKFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJiwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2
ZURhdGEoV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUmLCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKTsKKyAgICBzdGF0aWMgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nKFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJiwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKTsKKyAgICBzdGF0aWMgdm9p
ZCBkaWRGYWlsTG9hZGluZyhXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZSYsIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogCiAgICAgLy8gU29tZSBuZXR3
b3JrIHJlcXVlc3RzIGRvIG5vdCBnbyB0aHJvdWdoIHRoZSBub3JtYWwgbmV0d29yayBsb2FkaW5n
IHBhdGguCiAgICAgLy8gVGhlc2UgbmV0d29yayByZXF1ZXN0cyBoYXZlIHRvIGlzc3VlIHRoZWly
IG93biB3aWxsU2VuZFJlcXVlc3QgLyBkaWRSZWNlaXZlUmVzcG9uc2UgLyBkaWRGaW5pc2hMb2Fk
aW5nIC8gZGlkRmFpbExvYWRpbmcKQEAgLTI0MywyMCArMjQzLDIwIEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBpbnRlcmNlcHRSZXNwb25zZShjb25zdCBGcmFtZSYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIFJlZlB0cjxTaGFyZWRCdWZmZXI+KT4mJik7CiAK
ICAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKFBhZ2UmLCBzdGQ6OnVuaXF1ZV9w
dHI8SW5zcGVjdG9yOjpDb25zb2xlTWVzc2FnZT4pOwotICAgIHN0YXRpYyB2b2lkIGFkZE1lc3Nh
Z2VUb0NvbnNvbGUoV29ya2VyR2xvYmFsU2NvcGUmLCBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9y
OjpDb25zb2xlTWVzc2FnZT4pOworICAgIHN0YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUo
V29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUmLCBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpD
b25zb2xlTWVzc2FnZT4pOwogCiAgICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50KFBhZ2UmLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7Ci0gICAgc3RhdGljIHZv
aWQgY29uc29sZUNvdW50KFdvcmtlckdsb2JhbFNjb3BlJiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IGNvbnN0IFN0cmluZyYgbGFiZWwpOworICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVDb3VudChXb3Jr
ZXJPcldvcmtsZXRHbG9iYWxTY29wZSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJp
bmcmIGxhYmVsKTsKICAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnRSZXNldChQYWdlJiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwpOwotICAgIHN0YXRpYyB2b2lk
IGNvbnNvbGVDb3VudFJlc2V0KFdvcmtlckdsb2JhbFNjb3BlJiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIGNvbnN0IFN0cmluZyYgbGFiZWwpOworICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVDb3VudFJl
c2V0KFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNv
bnN0IFN0cmluZyYgbGFiZWwpOwogCiAgICAgc3RhdGljIHZvaWQgdGFrZUhlYXBTbmFwc2hvdChG
cmFtZSYsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogICAgIHN0YXRpYyB2b2lkIHN0YXJ0Q29uc29s
ZVRpbWluZyhGcmFtZSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGxhYmVs
KTsKLSAgICBzdGF0aWMgdm9pZCBzdGFydENvbnNvbGVUaW1pbmcoV29ya2VyR2xvYmFsU2NvcGUm
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CisgICAgc3RhdGlj
IHZvaWQgc3RhcnRDb25zb2xlVGltaW5nKFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwpOwogICAgIHN0YXRpYyB2b2lk
IGxvZ0NvbnNvbGVUaW1pbmcoRnJhbWUmLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBsYWJlbCwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKLSAgICBzdGF0
aWMgdm9pZCBsb2dDb25zb2xlVGltaW5nKFdvcmtlckdsb2JhbFNjb3BlJiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwsIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3Vt
ZW50cz4mJik7CisgICAgc3RhdGljIHZvaWQgbG9nQ29uc29sZVRpbWluZyhXb3JrZXJPcldvcmts
ZXRHbG9iYWxTY29wZSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGxhYmVs
LCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOwogICAgIHN0YXRpYyB2b2lkIHN0
b3BDb25zb2xlVGltaW5nKEZyYW1lJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmlu
ZyYgbGFiZWwpOwotICAgIHN0YXRpYyB2b2lkIHN0b3BDb25zb2xlVGltaW5nKFdvcmtlckdsb2Jh
bFNjb3BlJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwpOworICAg
IHN0YXRpYyB2b2lkIHN0b3BDb25zb2xlVGltaW5nKFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3Bl
JiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwpOwogICAgIHN0YXRp
YyB2b2lkIGNvbnNvbGVUaW1lU3RhbXAoRnJhbWUmLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1
bWVudHM+JiYpOwogICAgIHN0YXRpYyB2b2lkIHN0YXJ0UHJvZmlsaW5nKFBhZ2UmLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAgICAgc3RhdGljIHZvaWQgc3Rv
cFByb2ZpbGluZyhQYWdlJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0
bGUpOwpAQCAtMzM1LDcgKzMzNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjb25zb2xl
QWdlbnRFbmFibGVkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKICAgICBzdGF0aWMgYm9vbCB0
aW1lbGluZUFnZW50VHJhY2tpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCi0gICAgc3Rh
dGljIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKFBhZ2Uq
KTsKKyAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyhQ
YWdlKik7CiAKICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlckluc3RydW1lbnRpbmdBZ2VudHMoSW5z
dHJ1bWVudGluZ0FnZW50cyYpOwogICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJJbnN0cnVtZW50
aW5nQWdlbnRzKEluc3RydW1lbnRpbmdBZ2VudHMmKTsKQEAgLTUxNyw3ICs1MTcsNyBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyB2b2lkIHdpbGxDb25maWd1cmVTd2FwQ2hhaW5JbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmLCBHUFVDYW52YXNDb250ZXh0JiwgV2ViR1BVU3dhcENoYWluJik7CiAgICAg
c3RhdGljIHZvaWQgZGlkQ3JlYXRlV2ViR1BVUGlwZWxpbmVJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMmLCBXZWJHUFVEZXZpY2UmLCBXZWJHUFVQaXBlbGluZSYpOwogICAgIHN0YXRpYyB2b2lkIHdp
bGxEZXN0cm95V2ViR1BVUGlwZWxpbmVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBXZWJHUFVQ
aXBlbGluZSYpOwotICAgIHN0YXRpYyBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yV2ViR1BVRGV2aWNlKFdlYkdQVURldmljZSYpOworICAgIHN0YXRpYyBJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzKFdlYkdQVURldmljZSYpOwogI2VuZGlm
CiAKICAgICBzdGF0aWMgdm9pZCB3aWxsQXBwbHlLZXlmcmFtZUVmZmVjdEltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyYsIEVsZW1lbnQmLCBLZXlmcmFtZUVmZmVjdCYsIENvbXB1dGVkRWZmZWN0VGlt
aW5nKTsKQEAgLTUzMSwzODYgKzUzMSwzODYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBs
YXllclRyZWVEaWRDaGFuZ2VJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmKTsKICAgICBzdGF0aWMg
dm9pZCByZW5kZXJMYXllckRlc3Ryb3llZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIGNvbnN0
IFJlbmRlckxheWVyJik7CiAKLSAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1
bWVudGluZ0FnZW50c0ZvclBhZ2UoUGFnZSYpOwotICAgIHN0YXRpYyBJbnN0cnVtZW50aW5nQWdl
bnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2NvcGUoV29ya2VyR2xvYmFs
U2NvcGUmKTsKLQotICAgIHN0YXRpYyBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yRnJhbWUoY29uc3QgRnJhbWUmKTsKLSAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGNvbnN0IEZyYW1lKik7Ci0gICAgc3Rh
dGljIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLSAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOwot
ICAgIHN0YXRpYyBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9j
dW1lbnQoRG9jdW1lbnQmKTsKLSAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgc3RhdGljIEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHNGb3JSZW5kZXJlcihSZW5kZXJPYmplY3Qm
KTsKLSAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50c0Zv
cldvcmtlckdsb2JhbFNjb3BlKFdvcmtlckdsb2JhbFNjb3BlKik7CisgICAgc3RhdGljIEluc3Ry
dW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMoUGFnZSYpOworICAgIHN0YXRpYyBJ
bnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKFdvcmtlck9yV29ya2xldEds
b2JhbFNjb3BlJik7CisKKyAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyhjb25zdCBGcmFtZSYpOworICAgIHN0YXRpYyBJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzKGNvbnN0IEZyYW1lKik7CisgICAgc3RhdGljIEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
OworICAgIHN0YXRpYyBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKKyAgICBzdGF0aWMgSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cyhEb2N1bWVudCYpOworICAgIHN0YXRpYyBJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzKERvY3VtZW50Kik7CisgICAgc3RhdGljIEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMoUmVuZGVyT2JqZWN0Jik7CisgICAg
c3RhdGljIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMoV29ya2VyT3JX
b3JrbGV0R2xvYmFsU2NvcGUqKTsKIH07CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lJiBmcmFtZSwgRE9NV3Jh
cHBlcldvcmxkJiB3b3JsZCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9p
ZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGRpZENsZWFyV2lu
ZG93T2JqZWN0SW5Xb3JsZEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGZyYW1lLCB3b3JsZCk7
CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoZnJhbWUpKQorICAg
ICAgICBkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGRJbXBsKCphZ2VudHMsIGZyYW1lLCB3b3Js
ZCk7CiB9CiAKIGlubGluZSBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aXNEZWJ1Z2dl
clBhdXNlZChGcmFtZSogZnJhbWUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRT
KGZhbHNlKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIHJldHVybiBp
c0RlYnVnZ2VyUGF1c2VkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cyk7CisgICAgaWYgKGF1dG8q
IGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoZnJhbWUpKQorICAgICAgICByZXR1cm4gaXNE
ZWJ1Z2dlclBhdXNlZEltcGwoKmFnZW50cyk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBpbmxp
bmUgaW50IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aWRlbnRpZmllckZvck5vZGUoTm9kZSYg
bm9kZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoMCk7Ci0gICAgaWYgKElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdl
bnRzRm9yRG9jdW1lbnQobm9kZS5kb2N1bWVudCgpKSkKLSAgICAgICAgcmV0dXJuIGlkZW50aWZp
ZXJGb3JOb2RlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgbm9kZSk7CisgICAgaWYgKGF1dG8q
IGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMobm9kZS5kb2N1bWVudCgpKSkKKyAgICAgICAg
cmV0dXJuIGlkZW50aWZpZXJGb3JOb2RlSW1wbCgqYWdlbnRzLCBub2RlKTsKICAgICByZXR1cm4g
MDsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRFdmVudExp
c3RlbmVyc1RvTm9kZShOb2RlJiBub2RlKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05U
RU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KG5vZGUuZG9jdW1lbnQoKSkpCi0gICAgICAgIGFkZEV2
ZW50TGlzdGVuZXJzVG9Ob2RlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgbm9kZSk7CisgICAg
aWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMobm9kZS5kb2N1bWVudCgpKSkK
KyAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcnNUb05vZGVJbXBsKCphZ2VudHMsIG5vZGUpOwogfQog
CiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxJbnNlcnRET01Ob2Rl
KERvY3VtZW50JiBkb2N1bWVudCwgTm9kZSYgcGFyZW50KQogewogICAgIEZBU1RfUkVUVVJOX0lG
X05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50
KSkKLSAgICAgICAgd2lsbEluc2VydERPTU5vZGVJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBw
YXJlbnQpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGRvY3Vt
ZW50KSkKKyAgICAgICAgd2lsbEluc2VydERPTU5vZGVJbXBsKCphZ2VudHMsIHBhcmVudCk7CiB9
CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW5zZXJ0RE9NTm9k
ZShEb2N1bWVudCYgZG9jdW1lbnQsIE5vZGUmIG5vZGUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZf
Tk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQp
KQotICAgICAgICBkaWRJbnNlcnRET01Ob2RlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgbm9k
ZSk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoZG9jdW1lbnQp
KQorICAgICAgICBkaWRJbnNlcnRET01Ob2RlSW1wbCgqYWdlbnRzLCBub2RlKTsKIH0KIAogaW5s
aW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9NTm9kZShEb2N1
bWVudCYgZG9jdW1lbnQsIE5vZGUmIG5vZGUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJP
TlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAg
ICAgICB3aWxsUmVtb3ZlRE9NTm9kZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIG5vZGUpOwor
ICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGRvY3VtZW50KSkKKyAg
ICAgICAgd2lsbFJlbW92ZURPTU5vZGVJbXBsKCphZ2VudHMsIG5vZGUpOwogfQogCiBpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlbW92ZURPTU5vZGUoRG9jdW1lbnQm
IGRvY3VtZW50LCBOb2RlJiBub2RlKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5E
Uyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAg
ZGlkUmVtb3ZlRE9NTm9kZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIG5vZGUpOworICAgIGlm
IChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGRvY3VtZW50KSkKKyAgICAgICAg
ZGlkUmVtb3ZlRE9NTm9kZUltcGwoKmFnZW50cywgbm9kZSk7CiB9CiAKIGlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1vZGlmeURPTUF0dHIoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3Qg
QXRvbVN0cmluZyYgbmV3VmFsdWUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRT
KHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICB3
aWxsTW9kaWZ5RE9NQXR0ckltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGVsZW1lbnQsIG9sZFZh
bHVlLCBuZXdWYWx1ZSk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMoZG9jdW1lbnQpKQorICAgICAgICB3aWxsTW9kaWZ5RE9NQXR0ckltcGwoKmFnZW50cywgZWxl
bWVudCwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRNb2RpZnlET01BdHRyKERvY3VtZW50JiBkb2N1bWVudCwgRWxlbWVu
dCYgZWxlbWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFs
dWUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYg
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICBkaWRNb2RpZnlET01BdHRySW1w
bCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZWxlbWVudCwgbmFtZSwgdmFsdWUpOworICAgIGlmIChh
dXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGRvY3VtZW50KSkKKyAgICAgICAgZGlk
TW9kaWZ5RE9NQXR0ckltcGwoKmFnZW50cywgZWxlbWVudCwgbmFtZSwgdmFsdWUpOwogfQogCiBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlbW92ZURPTUF0dHIoRG9j
dW1lbnQmIGRvY3VtZW50LCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1l
KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgZGlkUmVtb3ZlRE9NQXR0ckltcGwo
Kmluc3RydW1lbnRpbmdBZ2VudHMsIGVsZW1lbnQsIG5hbWUpOworICAgIGlmIChhdXRvKiBhZ2Vu
dHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGRvY3VtZW50KSkKKyAgICAgICAgZGlkUmVtb3ZlRE9N
QXR0ckltcGwoKmFnZW50cywgZWxlbWVudCwgbmFtZSk7CiB9CiAKIGlubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEludmFsaWRhdGVTdHlsZUF0dHIoRWxlbWVudCYgZWxl
bWVudCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBp
ZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1
bWVudChlbGVtZW50LmRvY3VtZW50KCkpKQotICAgICAgICB3aWxsSW52YWxpZGF0ZVN0eWxlQXR0
ckltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGVsZW1lbnQpOworICAgIGlmIChhdXRvKiBhZ2Vu
dHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGVsZW1lbnQuZG9jdW1lbnQoKSkpCisgICAgICAgIHdp
bGxJbnZhbGlkYXRlU3R5bGVBdHRySW1wbCgqYWdlbnRzLCBlbGVtZW50KTsKIH0KIAogaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKEVs
ZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQo
KSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdl
bnRzRm9yRG9jdW1lbnQoZWxlbWVudC5kb2N1bWVudCgpKSkKLSAgICAgICAgZGlkSW52YWxpZGF0
ZVN0eWxlQXR0ckltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGVsZW1lbnQpOworICAgIGlmIChh
dXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGVsZW1lbnQuZG9jdW1lbnQoKSkpCisg
ICAgICAgIGRpZEludmFsaWRhdGVTdHlsZUF0dHJJbXBsKCphZ2VudHMsIGVsZW1lbnQpOwogfQog
CiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRvY3VtZW50RGV0YWNoZWQo
RG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2
b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgZG9j
dW1lbnREZXRhY2hlZEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGRvY3VtZW50KTsKKyAgICBp
ZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhkb2N1bWVudCkpCisgICAgICAg
IGRvY3VtZW50RGV0YWNoZWRJbXBsKCphZ2VudHMsIGRvY3VtZW50KTsKIH0KIAogaW5saW5lIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZVdpbmRvd0Rpc2NhcmRlZChGcmFtZSYg
ZnJhbWUsIERPTVdpbmRvdyogZG9tV2luZG93KQogewotICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZy
YW1lKSkKLSAgICAgICAgZnJhbWVXaW5kb3dEaXNjYXJkZWRJbXBsKCppbnN0cnVtZW50aW5nQWdl
bnRzLCBkb21XaW5kb3cpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdl
bnRzKGZyYW1lKSkKKyAgICAgICAgZnJhbWVXaW5kb3dEaXNjYXJkZWRJbXBsKCphZ2VudHMsIGRv
bVdpbmRvdyk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bWVk
aWFRdWVyeVJlc3VsdENoYW5nZWQoRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIEZBU1RfUkVU
VVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRv
Y3VtZW50KSkKLSAgICAgICAgbWVkaWFRdWVyeVJlc3VsdENoYW5nZWRJbXBsKCppbnN0cnVtZW50
aW5nQWdlbnRzKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhk
b2N1bWVudCkpCisgICAgICAgIG1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkSW1wbCgqYWdlbnRzKTsK
IH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphY3RpdmVTdHlsZVNo
ZWV0c1VwZGF0ZWQoRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05P
X0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkK
LSAgICAgICAgYWN0aXZlU3R5bGVTaGVldHNVcGRhdGVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50
cywgZG9jdW1lbnQpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRz
KGRvY3VtZW50KSkKKyAgICAgICAgYWN0aXZlU3R5bGVTaGVldHNVcGRhdGVkSW1wbCgqYWdlbnRz
LCBkb2N1bWVudCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkUHVzaFNoYWRvd1Jvb3QoRWxlbWVudCYgaG9zdCwgU2hhZG93Um9vdCYgcm9vdCkKIHsKICAg
ICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JE
b2N1bWVudChob3N0LmRvY3VtZW50KCkpKQotICAgICAgICBkaWRQdXNoU2hhZG93Um9vdEltcGwo
Kmluc3RydW1lbnRpbmdBZ2VudHMsIGhvc3QsIHJvb3QpOworICAgIGlmIChhdXRvKiBhZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzKGhvc3QuZG9jdW1lbnQoKSkpCisgICAgICAgIGRpZFB1c2hT
aGFkb3dSb290SW1wbCgqYWdlbnRzLCBob3N0LCByb290KTsKIH0KIAogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUG9wU2hhZG93Um9vdChFbGVtZW50JiBob3N0LCBT
aGFkb3dSb290JiByb290KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lk
KCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGhvc3QuZG9jdW1lbnQoKSkpCi0gICAgICAg
IHdpbGxQb3BTaGFkb3dSb290SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgaG9zdCwgcm9vdCk7
CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoaG9zdC5kb2N1bWVu
dCgpKSkKKyAgICAgICAgd2lsbFBvcFNoYWRvd1Jvb3RJbXBsKCphZ2VudHMsIGhvc3QsIHJvb3Qp
OwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5nZUN1
c3RvbUVsZW1lbnRTdGF0ZShFbGVtZW50JiBlbGVtZW50KQogewogICAgIEZBU1RfUkVUVVJOX0lG
X05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGVsZW1lbnQu
ZG9jdW1lbnQoKSkpCi0gICAgICAgIGRpZENoYW5nZUN1c3RvbUVsZW1lbnRTdGF0ZUltcGwoKmlu
c3RydW1lbnRpbmdBZ2VudHMsIGVsZW1lbnQpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzKGVsZW1lbnQuZG9jdW1lbnQoKSkpCisgICAgICAgIGRpZENoYW5nZUN1
c3RvbUVsZW1lbnRTdGF0ZUltcGwoKmFnZW50cywgZWxlbWVudCk7CiB9CiAKIGlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cHNldWRvRWxlbWVudENyZWF0ZWQoUGFnZSogcGFn
ZSwgUHNldWRvRWxlbWVudCYgcHNldWRvRWxlbWVudCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9O
T19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQotICAgICAg
ICBwc2V1ZG9FbGVtZW50Q3JlYXRlZEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHBzZXVkb0Vs
ZW1lbnQpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKHBhZ2Up
KQorICAgICAgICBwc2V1ZG9FbGVtZW50Q3JlYXRlZEltcGwoKmFnZW50cywgcHNldWRvRWxlbWVu
dCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cHNldWRvRWxl
bWVudERlc3Ryb3llZChQYWdlKiBwYWdlLCBQc2V1ZG9FbGVtZW50JiBwc2V1ZG9FbGVtZW50KQog
ewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50
c0ZvclBhZ2UocGFnZSkpCi0gICAgICAgIHBzZXVkb0VsZW1lbnREZXN0cm95ZWRJbXBsKCppbnN0
cnVtZW50aW5nQWdlbnRzLCBwc2V1ZG9FbGVtZW50KTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50cyhwYWdlKSkKKyAgICAgICAgcHNldWRvRWxlbWVudERlc3Ryb3ll
ZEltcGwoKmFnZW50cywgcHNldWRvRWxlbWVudCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlTmFtZWRGbG93KERvY3VtZW50KiBkb2N1bWVudCwg
V2ViS2l0TmFtZWRGbG93JiBuYW1lZEZsb3cpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJP
TlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAg
ICAgICBkaWRDcmVhdGVOYW1lZEZsb3dJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBkb2N1bWVu
dCwgbmFtZWRGbG93KTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50
cyhkb2N1bWVudCkpCisgICAgICAgIGRpZENyZWF0ZU5hbWVkRmxvd0ltcGwoKmFnZW50cywgZG9j
dW1lbnQsIG5hbWVkRmxvdyk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbFJlbW92ZU5hbWVkRmxvdyhEb2N1bWVudCogZG9jdW1lbnQsIFdlYktpdE5hbWVk
RmxvdyYgbmFtZWRGbG93KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lk
KCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgd2lsbFJl
bW92ZU5hbWVkRmxvd0ltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGRvY3VtZW50LCBuYW1lZEZs
b3cpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGRvY3VtZW50
KSkKKyAgICAgICAgd2lsbFJlbW92ZU5hbWVkRmxvd0ltcGwoKmFnZW50cywgZG9jdW1lbnQsIG5h
bWVkRmxvdyk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
Q2hhbmdlUmVnaW9uT3ZlcnNldChEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktpdE5hbWVkRmxvdyYg
bmFtZWRGbG93KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwot
ICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgZGlkQ2hhbmdlUmVn
aW9uT3ZlcnNldEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGRvY3VtZW50LCBuYW1lZEZsb3cp
OworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGRvY3VtZW50KSkK
KyAgICAgICAgZGlkQ2hhbmdlUmVnaW9uT3ZlcnNldEltcGwoKmFnZW50cywgZG9jdW1lbnQsIG5h
bWVkRmxvdyk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
UmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIFdlYktp
dE5hbWVkRmxvdyYgbmFtZWRGbG93LCBOb2RlJiBjb250ZW50RWxlbWVudCwgTm9kZSogbmV4dENv
bnRlbnRFbGVtZW50KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkp
OwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgZGlkUmVnaXN0
ZXJOYW1lZEZsb3dDb250ZW50RWxlbWVudEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGRvY3Vt
ZW50LCBuYW1lZEZsb3csIGNvbnRlbnRFbGVtZW50LCBuZXh0Q29udGVudEVsZW1lbnQpOworICAg
IGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGRvY3VtZW50KSkKKyAgICAg
ICAgZGlkUmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50RWxlbWVudEltcGwoKmFnZW50cywgZG9jdW1l
bnQsIG5hbWVkRmxvdywgY29udGVudEVsZW1lbnQsIG5leHRDb250ZW50RWxlbWVudCk7CiB9CiAK
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkVW5yZWdpc3Rlck5hbWVk
Rmxvd0NvbnRlbnRFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCwgV2ViS2l0TmFtZWRGbG93JiBu
YW1lZEZsb3csIE5vZGUmIGNvbnRlbnRFbGVtZW50KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05P
X0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkK
LSAgICAgICAgZGlkVW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRFbGVtZW50SW1wbCgqaW5zdHJ1
bWVudGluZ0FnZW50cywgZG9jdW1lbnQsIG5hbWVkRmxvdywgY29udGVudEVsZW1lbnQpOworICAg
IGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGRvY3VtZW50KSkKKyAgICAg
ICAgZGlkVW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRFbGVtZW50SW1wbCgqYWdlbnRzLCBkb2N1
bWVudCwgbmFtZWRGbG93LCBjb250ZW50RWxlbWVudCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoUGFnZSYgcGFnZSwg
Y29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKQogewog
ICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIG1vdXNlRGlkTW92
ZU92ZXJFbGVtZW50SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSwgcmVzdWx0
LCBtb2RpZmllckZsYWdzKTsKKyAgICBtb3VzZURpZE1vdmVPdmVyRWxlbWVudEltcGwoaW5zdHJ1
bWVudGluZ0FnZW50cyhwYWdlKSwgcmVzdWx0LCBtb2RpZmllckZsYWdzKTsKIH0KIAogaW5saW5l
IGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYW5kbGVUb3VjaEV2ZW50KEZyYW1lJiBm
cmFtZSwgTm9kZSYgbm9kZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoZmFs
c2UpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAgcmV0dXJuIGhhbmRs
ZVRvdWNoRXZlbnRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBub2RlKTsKKyAgICBpZiAoYXV0
byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhmcmFtZSkpCisgICAgICAgIHJldHVybiBo
YW5kbGVUb3VjaEV2ZW50SW1wbCgqYWdlbnRzLCBub2RlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIGlubGluZSBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFuZGxlTW91c2VQcmVz
cyhGcmFtZSYgZnJhbWUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKGZhbHNl
KTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGlu
c3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIHJldHVybiBoYW5kbGVN
b3VzZVByZXNzSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cyk7CisgICAgaWYgKGF1dG8qIGFnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoZnJhbWUpKQorICAgICAgICByZXR1cm4gaGFuZGxlTW91
c2VQcmVzc0ltcGwoKmFnZW50cyk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBpbmxpbmUgYm9v
bCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoY29uc3QgRWxlbWVu
dCYgZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSBwc2V1ZG9TdGF0ZSkKIHsK
ICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoZmFsc2UpOwotICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
ckRvY3VtZW50KGVsZW1lbnQuZG9jdW1lbnQoKSkpCi0gICAgICAgIHJldHVybiBmb3JjZVBzZXVk
b1N0YXRlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZWxlbWVudCwgcHNldWRvU3RhdGUpOwor
ICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGVsZW1lbnQuZG9jdW1l
bnQoKSkpCisgICAgICAgIHJldHVybiBmb3JjZVBzZXVkb1N0YXRlSW1wbCgqYWdlbnRzLCBlbGVt
ZW50LCBwc2V1ZG9TdGF0ZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNoYXJhY3RlckRhdGFNb2RpZmllZChEb2N1bWVudCYg
ZG9jdW1lbnQsIENoYXJhY3RlckRhdGEmIGNoYXJhY3RlckRhdGEpCiB7CiAgICAgRkFTVF9SRVRV
Uk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9j
dW1lbnQpKQotICAgICAgICBjaGFyYWN0ZXJEYXRhTW9kaWZpZWRJbXBsKCppbnN0cnVtZW50aW5n
QWdlbnRzLCBjaGFyYWN0ZXJEYXRhKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVu
dGluZ0FnZW50cyhkb2N1bWVudCkpCisgICAgICAgIGNoYXJhY3RlckRhdGFNb2RpZmllZEltcGwo
KmFnZW50cywgY2hhcmFjdGVyRGF0YSk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19G
Uk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQotICAg
ICAgICB3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgdXJs
KTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhjb250ZXh0KSkK
KyAgICAgICAgd2lsbFNlbmRYTUxIdHRwUmVxdWVzdEltcGwoKmFnZW50cywgdXJsKTsKIH0KIAog
aW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRmV0Y2goU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgRkFTVF9S
RVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChj
b250ZXh0KSkKLSAgICAgICAgd2lsbEZldGNoSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgdXJs
KTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhjb250ZXh0KSkK
KyAgICAgICAgd2lsbEZldGNoSW1wbCgqYWdlbnRzLCB1cmwpOwogfQogCiBpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEluc3RhbGxUaW1lcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBpbnQgdGltZXJJZCwgU2Vjb25kcyB0aW1lb3V0LCBib29sIHNpbmds
ZVNob3QpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAgICAgZGlkSW5zdGFsbFRpbWVySW1w
bCgqaW5zdHJ1bWVudGluZ0FnZW50cywgdGltZXJJZCwgdGltZW91dCwgc2luZ2xlU2hvdCwgY29u
dGV4dCk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoY29udGV4
dCkpCisgICAgICAgIGRpZEluc3RhbGxUaW1lckltcGwoKmFnZW50cywgdGltZXJJZCwgdGltZW91
dCwgc2luZ2xlU2hvdCwgY29udGV4dCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkUmVtb3ZlVGltZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgaW50IHRpbWVySWQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQo
KSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBp
bnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAgICAgZGlkUmVtb3Zl
VGltZXJJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lcklkLCBjb250ZXh0KTsKKyAgICBp
ZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhjb250ZXh0KSkKKyAgICAgICAg
ZGlkUmVtb3ZlVGltZXJJbXBsKCphZ2VudHMsIHRpbWVySWQsIGNvbnRleHQpOwogfQogCiBpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEFkZEV2ZW50TGlzdGVuZXIoRXZl
bnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3Rl
bmVyJiBsaXN0ZW5lciwgYm9vbCBjYXB0dXJlKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZS
T05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQodGFyZ2V0LnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkpCi0gICAgICAgIGRpZEFkZEV2ZW50TGlzdGVuZXJJbXBsKCppbnN0
cnVtZW50aW5nQWdlbnRzLCB0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpOwor
ICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKHRhcmdldC5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpKQorICAgICAgICBkaWRBZGRFdmVudExpc3RlbmVySW1wbCgqYWdl
bnRzLCB0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpOwogfQogCiBpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZW1vdmVFdmVudExpc3RlbmVyKEV2
ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0
ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19G
Uk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KHRhcmdldC5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpKQotICAgICAgICB3aWxsUmVtb3ZlRXZlbnRMaXN0ZW5lckltcGwo
Kmluc3RydW1lbnRpbmdBZ2VudHMsIHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgY2FwdHVy
ZSk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHModGFyZ2V0LnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCisgICAgICAgIHdpbGxSZW1vdmVFdmVudExpc3RlbmVy
SW1wbCgqYWdlbnRzLCB0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpOwogfQog
CiBpbmxpbmUgYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmlzRXZlbnRMaXN0ZW5lckRp
c2FibGVkKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwg
RXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKIHsKICAgICBGQVNUX1JFVFVS
Tl9JRl9OT19GUk9OVEVORFMoZmFsc2UpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQodGFyZ2V0
LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCi0gICAgICAgIHJldHVybiBpc0V2ZW50TGlzdGVu
ZXJEaXNhYmxlZEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHRhcmdldCwgZXZlbnRUeXBlLCBs
aXN0ZW5lciwgY2FwdHVyZSk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHModGFyZ2V0LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCisgICAgICAgIHJldHVybiBp
c0V2ZW50TGlzdGVuZXJEaXNhYmxlZEltcGwoKmFnZW50cywgdGFyZ2V0LCBldmVudFR5cGUsIGxp
c3RlbmVyLCBjYXB0dXJlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGlubGluZSBpbnQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUG9zdE1lc3NhZ2UoRnJhbWUmIGZyYW1lKQogewog
ICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUygwKTsKLSAgICBpZiAoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFt
ZShmcmFtZSkpCi0gICAgICAgIHJldHVybiB3aWxsUG9zdE1lc3NhZ2VJbXBsKCppbnN0cnVtZW50
aW5nQWdlbnRzKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhm
cmFtZSkpCisgICAgICAgIHJldHVybiB3aWxsUG9zdE1lc3NhZ2VJbXBsKCphZ2VudHMpOwogICAg
IHJldHVybiAwOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFBvc3RNZXNzYWdlKEZyYW1lJiBmcmFtZSwgaW50IHBvc3RNZXNzYWdlSWRlbnRpZmllciwgSlND
OjpKU0dsb2JhbE9iamVjdCYgc3RhdGUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRF
TkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBkaWRQ
b3N0TWVzc2FnZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHBvc3RNZXNzYWdlSWRlbnRpZmll
ciwgc3RhdGUpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGZy
YW1lKSkKKyAgICAgICAgZGlkUG9zdE1lc3NhZ2VJbXBsKCphZ2VudHMsIHBvc3RNZXNzYWdlSWRl
bnRpZmllciwgc3RhdGUpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZEZhaWxQb3N0TWVzc2FnZShGcmFtZSYgZnJhbWUsIGludCBwb3N0TWVzc2FnZUlkZW50
aWZpZXIpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBkaWRGYWlsUG9zdE1lc3NhZ2VJbXBs
KCppbnN0cnVtZW50aW5nQWdlbnRzLCBwb3N0TWVzc2FnZUlkZW50aWZpZXIpOworICAgIGlmIChh
dXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGZyYW1lKSkKKyAgICAgICAgZGlkRmFp
bFBvc3RNZXNzYWdlSW1wbCgqYWdlbnRzLCBwb3N0TWVzc2FnZUlkZW50aWZpZXIpOwogfQogCiBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaFBvc3RNZXNz
YWdlKEZyYW1lJiBmcmFtZSwgaW50IHBvc3RNZXNzYWdlSWRlbnRpZmllcikKIHsKICAgICBGQVNU
X1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShm
cmFtZSkpCi0gICAgICAgIHdpbGxEaXNwYXRjaFBvc3RNZXNzYWdlSW1wbCgqaW5zdHJ1bWVudGlu
Z0FnZW50cywgcG9zdE1lc3NhZ2VJZGVudGlmaWVyKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50cyhmcmFtZSkpCisgICAgICAgIHdpbGxEaXNwYXRjaFBvc3RNZXNz
YWdlSW1wbCgqYWdlbnRzLCBwb3N0TWVzc2FnZUlkZW50aWZpZXIpOwogfQogCiBpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoUG9zdE1lc3NhZ2UoRnJhbWUm
IGZyYW1lLCBpbnQgcG9zdE1lc3NhZ2VJZGVudGlmaWVyKQogewogICAgIEZBU1RfUkVUVVJOX0lG
X05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKLSAg
ICAgICAgZGlkRGlzcGF0Y2hQb3N0TWVzc2FnZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHBv
c3RNZXNzYWdlSWRlbnRpZmllcik7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRp
bmdBZ2VudHMoZnJhbWUpKQorICAgICAgICBkaWREaXNwYXRjaFBvc3RNZXNzYWdlSW1wbCgqYWdl
bnRzLCBwb3N0TWVzc2FnZUlkZW50aWZpZXIpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxDYWxsRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSwgaW50IHNj
cmlwdENvbHVtbikKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsK
LSAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICB3aWxsQ2FsbEZ1bmN0aW9uSW1wbCgqaW5zdHJ1
bWVudGluZ0FnZW50cywgc2NyaXB0TmFtZSwgc2NyaXB0TGluZSwgc2NyaXB0Q29sdW1uLCBjb250
ZXh0KTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhjb250ZXh0
KSkKKyAgICAgICAgd2lsbENhbGxGdW5jdGlvbkltcGwoKmFnZW50cywgc2NyaXB0TmFtZSwgc2Ny
aXB0TGluZSwgc2NyaXB0Q29sdW1uLCBjb250ZXh0KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsK
LSAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICBkaWRDYWxsRnVuY3Rpb25JbXBsKCppbnN0cnVt
ZW50aW5nQWdlbnRzLCBjb250ZXh0KTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVu
dGluZ0FnZW50cyhjb250ZXh0KSkKKyAgICAgICAgZGlkQ2FsbEZ1bmN0aW9uSW1wbCgqYWdlbnRz
LCBjb250ZXh0KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsRGlzcGF0Y2hFdmVudChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEV2ZW50JiBldmVudCkK
IHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoYXV0
byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChk
b2N1bWVudCkpCi0gICAgICAgIHdpbGxEaXNwYXRjaEV2ZW50SW1wbCgqaW5zdHJ1bWVudGluZ0Fn
ZW50cywgZG9jdW1lbnQsIGV2ZW50KTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVu
dGluZ0FnZW50cyhkb2N1bWVudCkpCisgICAgICAgIHdpbGxEaXNwYXRjaEV2ZW50SW1wbCgqYWdl
bnRzLCBkb2N1bWVudCwgZXZlbnQpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBFdmVu
dCYgZXZlbnQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0g
ICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
RG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICBkaWREaXNwYXRjaEV2ZW50SW1wbCgqaW5zdHJ1
bWVudGluZ0FnZW50cywgZXZlbnQpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzKGRvY3VtZW50KSkKKyAgICAgICAgZGlkRGlzcGF0Y2hFdmVudEltcGwoKmFnZW50
cywgZXZlbnQpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxIYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBFdmVudCYgZXZl
bnQsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikKIHsKICAgICBGQVNU
X1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0
KGNvbnRleHQpKQotICAgICAgICByZXR1cm4gd2lsbEhhbmRsZUV2ZW50SW1wbCgqaW5zdHJ1bWVu
dGluZ0FnZW50cywgZXZlbnQsIGxpc3RlbmVyKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50cyhjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIHdpbGxIYW5kbGVFdmVu
dEltcGwoKmFnZW50cywgZXZlbnQsIGxpc3RlbmVyKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRIYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBFdmVudCYgZXZlbnQsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBs
aXN0ZW5lcikKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAg
ICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICByZXR1cm4gZGlkSGFuZGxl
RXZlbnRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBldmVudCwgbGlzdGVuZXIpOworICAgIGlm
IChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGNvbnRleHQpKQorICAgICAgICBy
ZXR1cm4gZGlkSGFuZGxlRXZlbnRJbXBsKCphZ2VudHMsIGV2ZW50LCBsaXN0ZW5lcik7CiB9CiAK
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnRP
bldpbmRvdyhGcmFtZSogZnJhbWUsIGNvbnN0IEV2ZW50JiBldmVudCwgRE9NV2luZG93JiB3aW5k
b3cpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYg
KGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUo
ZnJhbWUpKQotICAgICAgICB3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93SW1wbCgqaW5zdHJ1bWVu
dGluZ0FnZW50cywgZXZlbnQsIHdpbmRvdyk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMoZnJhbWUpKQorICAgICAgICB3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93
SW1wbCgqYWdlbnRzLCBldmVudCwgd2luZG93KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2ZW50T25XaW5kb3coRnJhbWUqIGZyYW1lLCBj
b25zdCBFdmVudCYgZXZlbnQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZv
aWQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBkaWREaXNwYXRjaEV2ZW50T25XaW5kb3dJ
bXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBldmVudCk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHMoZnJhbWUpKQorICAgICAgICBkaWREaXNwYXRjaEV2ZW50T25X
aW5kb3dJbXBsKCphZ2VudHMsIGV2ZW50KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpldmVudERpZFJlc2V0QWZ0ZXJEaXNwYXRjaChjb25zdCBFdmVudCYgZXZl
bnQpCkBAIC05MjEsMzM5ICs5MjEsMzM5IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZXZlbnREaWRSZXNldEFmdGVyRGlzcGF0Y2goY29uc3QgRXZlbnQmIGV2CiAgICAg
ICAgIHJldHVybjsKIAogICAgIGF1dG8qIG5vZGUgPSBkb3duY2FzdDxOb2RlPihldmVudC50YXJn
ZXQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yQ29udGV4dChub2RlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQotICAgICAg
ICByZXR1cm4gZXZlbnREaWRSZXNldEFmdGVyRGlzcGF0Y2hJbXBsKCppbnN0cnVtZW50aW5nQWdl
bnRzLCBldmVudCk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMo
bm9kZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKKyAgICAgICAgcmV0dXJuIGV2ZW50RGlk
UmVzZXRBZnRlckRpc3BhdGNoSW1wbCgqYWdlbnRzLCBldmVudCk7CiB9CiAKIGlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEV2YWx1YXRlU2NyaXB0KEZyYW1lJiBmcmFt
ZSwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKQog
ewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRv
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1l
KSkKLSAgICAgICAgd2lsbEV2YWx1YXRlU2NyaXB0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywg
ZnJhbWUsIHVybCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKKyAgICBpZiAoYXV0byogYWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhmcmFtZSkpCisgICAgICAgIHdpbGxFdmFsdWF0ZVNj
cmlwdEltcGwoKmFnZW50cywgZnJhbWUsIHVybCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsK
IH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRFdmFsdWF0ZVNj
cmlwdChGcmFtZSYgZnJhbWUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZv
aWQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBkaWRFdmFsdWF0ZVNjcmlwdEltcGwoKmlu
c3RydW1lbnRpbmdBZ2VudHMsIGZyYW1lKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50cyhmcmFtZSkpCisgICAgICAgIGRpZEV2YWx1YXRlU2NyaXB0SW1wbCgqYWdl
bnRzLCBmcmFtZSk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d2lsbEZpcmVUaW1lcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBpbnQgdGltZXJJ
ZCwgYm9vbCBvbmVTaG90KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lk
KCkpOwotICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvckNvbnRleHQoY29udGV4dCkpCi0gICAgICAgIHdpbGxGaXJlVGltZXJJbXBsKCppbnN0
cnVtZW50aW5nQWdlbnRzLCB0aW1lcklkLCBvbmVTaG90LCBjb250ZXh0KTsKKyAgICBpZiAoYXV0
byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhjb250ZXh0KSkKKyAgICAgICAgd2lsbEZp
cmVUaW1lckltcGwoKmFnZW50cywgdGltZXJJZCwgb25lU2hvdCwgY29udGV4dCk7CiB9CiAKIGlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmlyZVRpbWVyKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGludCB0aW1lcklkLCBib29sIG9uZVNob3QpCiB7CiAg
ICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKGF1dG8qIGlu
c3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0
KSkKLSAgICAgICAgZGlkRmlyZVRpbWVySW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgdGltZXJJ
ZCwgb25lU2hvdCk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMo
Y29udGV4dCkpCisgICAgICAgIGRpZEZpcmVUaW1lckltcGwoKmFnZW50cywgdGltZXJJZCwgb25l
U2hvdCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW52
YWxpZGF0ZUxheW91dChGcmFtZSYgZnJhbWUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJP
TlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBk
aWRJbnZhbGlkYXRlTGF5b3V0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUpOworICAg
IGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGZyYW1lKSkKKyAgICAgICAg
ZGlkSW52YWxpZGF0ZUxheW91dEltcGwoKmFnZW50cywgZnJhbWUpOwogfQogCiBpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMYXlvdXQoRnJhbWUmIGZyYW1lKQogewog
ICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRvKiBp
bnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkK
LSAgICAgICAgd2lsbExheW91dEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGZyYW1lKTsKKyAg
ICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhmcmFtZSkpCisgICAgICAg
IHdpbGxMYXlvdXRJbXBsKCphZ2VudHMsIGZyYW1lKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRMYXlvdXQoRnJhbWUmIGZyYW1lLCBSZW5kZXJPYmplY3Qm
IHJvb3QpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAg
aWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJh
bWUoZnJhbWUpKQotICAgICAgICBkaWRMYXlvdXRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBy
b290KTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhmcmFtZSkp
CisgICAgICAgIGRpZExheW91dEltcGwoKmFnZW50cywgcm9vdCk7CiB9CiAKIGlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2Nyb2xsKFBhZ2UmIHBhZ2UpCiB7CiAgICAg
RkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgZGlkU2Nyb2xsSW1wbChp
bnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSk7CisgICAgZGlkU2Nyb2xsSW1wbChpbnN0
cnVtZW50aW5nQWdlbnRzKHBhZ2UpKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsQ29tcG9zaXRlKEZyYW1lJiBmcmFtZSkKIHsKICAgICBGQVNUX1JFVFVS
Tl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkp
Ci0gICAgICAgIHdpbGxDb21wb3NpdGVJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSk7
CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoZnJhbWUpKQorICAg
ICAgICB3aWxsQ29tcG9zaXRlSW1wbCgqYWdlbnRzLCBmcmFtZSk7CiB9CiAKIGlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ29tcG9zaXRlKEZyYW1lJiBmcmFtZSkKIHsK
ICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGRpZENvbXBvc2l0ZUltcGwoKmluc3RydW1lbnRpbmdB
Z2VudHMpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGZyYW1l
KSkKKyAgICAgICAgZGlkQ29tcG9zaXRlSW1wbCgqYWdlbnRzKTsKIH0KIAogaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUGFpbnQoUmVuZGVyT2JqZWN0JiByZW5kZXJl
cikKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHNGb3JSZW5kZXJlcihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybiB3aWxsUGFpbnRJbXBs
KCppbnN0cnVtZW50aW5nQWdlbnRzLCByZW5kZXJlcik7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHMocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gd2lsbFBhaW50
SW1wbCgqYWdlbnRzLCByZW5kZXJlcik7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkUGFpbnQoUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgTGF5b3V0
UmVjdCYgcmVjdCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsK
LSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHNGb3JSZW5kZXJlcihyZW5kZXJlcikpCi0gICAgICAgIGRpZFBhaW50SW1w
bCgqaW5zdHJ1bWVudGluZ0FnZW50cywgcmVuZGVyZXIsIHJlY3QpOworICAgIGlmIChhdXRvKiBh
Z2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKHJlbmRlcmVyKSkKKyAgICAgICAgZGlkUGFpbnRJ
bXBsKCphZ2VudHMsIHJlbmRlcmVyLCByZWN0KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVjYWxjdWxhdGVTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQp
CiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKGF1
dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQo
ZG9jdW1lbnQpKQotICAgICAgICB3aWxsUmVjYWxjdWxhdGVTdHlsZUltcGwoKmluc3RydW1lbnRp
bmdBZ2VudHMsIGRvY3VtZW50KTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGlu
Z0FnZW50cyhkb2N1bWVudCkpCisgICAgICAgIHdpbGxSZWNhbGN1bGF0ZVN0eWxlSW1wbCgqYWdl
bnRzLCBkb2N1bWVudCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkUmVjYWxjdWxhdGVTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgRkFTVF9S
RVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAg
ICAgICBkaWRSZWNhbGN1bGF0ZVN0eWxlSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cyk7CisgICAg
aWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoZG9jdW1lbnQpKQorICAgICAg
ICBkaWRSZWNhbGN1bGF0ZVN0eWxlSW1wbCgqYWdlbnRzKTsKIH0KIAogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbihEb2N1
bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQo
KSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBp
bnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICBkaWRTY2hl
ZHVsZVN0eWxlUmVjYWxjdWxhdGlvbkltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGRvY3VtZW50
KTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhkb2N1bWVudCkp
CisgICAgICAgIGRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uSW1wbCgqYWdlbnRzLCBkb2N1
bWVudCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlV
c2VyQWdlbnRPdmVycmlkZShGcmFtZSYgZnJhbWUsIFN0cmluZyYgdXNlckFnZW50KQogewogICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZy
YW1lKGZyYW1lKSkKLSAgICAgICAgYXBwbHlVc2VyQWdlbnRPdmVycmlkZUltcGwoKmluc3RydW1l
bnRpbmdBZ2VudHMsIHVzZXJBZ2VudCk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHMoZnJhbWUpKQorICAgICAgICBhcHBseVVzZXJBZ2VudE92ZXJyaWRlSW1wbCgq
YWdlbnRzLCB1c2VyQWdlbnQpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmFwcGx5RW11bGF0ZWRNZWRpYShGcmFtZSYgZnJhbWUsIFN0cmluZyYgbWVkaWEpCiB7
CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Rm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBhcHBseUVtdWxhdGVkTWVkaWFJbXBsKCppbnN0cnVt
ZW50aW5nQWdlbnRzLCBtZWRpYSk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRp
bmdBZ2VudHMoZnJhbWUpKQorICAgICAgICBhcHBseUVtdWxhdGVkTWVkaWFJbXBsKCphZ2VudHMs
IG1lZGlhKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
U2VuZFJlcXVlc3QoRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19G
Uk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCi0gICAgICAg
IHdpbGxTZW5kUmVxdWVzdEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIsIGxv
YWRlciwgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHMoZnJhbWUpKQorICAgICAgICB3aWxsU2VuZFJlcXVlc3RJbXBs
KCphZ2VudHMsIGlkZW50aWZpZXIsIGxvYWRlciwgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7
CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRSZXF1
ZXN0KFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZSwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCitpbmxpbmUgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kUmVxdWVzdChXb3JrZXJPcldvcmtsZXRHbG9iYWxT
Y29wZSYgZ2xvYmFsU2NvcGUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkp
OwotICAgIHdpbGxTZW5kUmVxdWVzdEltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0Zvcldvcmtlckds
b2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKSwgaWRlbnRpZmllciwgbnVsbHB0ciwgcmVxdWVz
dCwgUmVzb3VyY2VSZXNwb25zZSB7IH0pOworICAgIHdpbGxTZW5kUmVxdWVzdEltcGwoaW5zdHJ1
bWVudGluZ0FnZW50cyhnbG9iYWxTY29wZSksIGlkZW50aWZpZXIsIG51bGxwdHIsIHJlcXVlc3Qs
IFJlc291cmNlUmVzcG9uc2UgeyB9KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsU2VuZFJlcXVlc3RPZlR5cGUoRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgTG9hZFR5cGUgbG9hZFR5cGUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJP
TlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICB3
aWxsU2VuZFJlcXVlc3RPZlR5cGVJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVudGlmaWVy
LCBsb2FkZXIsIHJlcXVlc3QsIGxvYWRUeXBlKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50cyhmcmFtZSkpCisgICAgICAgIHdpbGxTZW5kUmVxdWVzdE9mVHlwZUlt
cGwoKmFnZW50cywgaWRlbnRpZmllciwgbG9hZGVyLCByZXF1ZXN0LCBsb2FkVHlwZSk7CiB9CiAK
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFJlc291cmNlRnJv
bU1lbW9yeUNhY2hlKFBhZ2UmIHBhZ2UsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIENhY2hlZFJl
c291cmNlKiByZXNvdXJjZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9p
ZCgpKTsKLSAgICBkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGVJbXBsKGluc3RydW1lbnRp
bmdBZ2VudHNGb3JQYWdlKHBhZ2UpLCBsb2FkZXIsIHJlc291cmNlKTsKKyAgICBkaWRMb2FkUmVz
b3VyY2VGcm9tTWVtb3J5Q2FjaGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMocGFnZSksIGxvYWRl
ciwgcmVzb3VyY2UpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlKEZyYW1lJiBmcmFtZSwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQogewotICAgIGlmIChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAgZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJ
bXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVudGlmaWVyLCBsb2FkZXIsIHJlc3BvbnNlLCBy
ZXNvdXJjZUxvYWRlcik7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMoZnJhbWUpKQorICAgICAgICBkaWRSZWNlaXZlUmVzb3VyY2VSZXNwb25zZUltcGwoKmFnZW50
cywgaWRlbnRpZmllciwgbG9hZGVyLCByZXNwb25zZSwgcmVzb3VyY2VMb2FkZXIpOwogfQogCi1p
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVSZXNvdXJjZVJl
c3BvbnNlKFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZSwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK2lubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2Uo
V29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUmIGdsb2JhbFNjb3BlLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIGRpZFJl
Y2VpdmVSZXNvdXJjZVJlc3BvbnNlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xv
YmFsU2NvcGUod29ya2VyR2xvYmFsU2NvcGUpLCBpZGVudGlmaWVyLCBudWxscHRyLCByZXNwb25z
ZSwgbnVsbHB0cik7CisgICAgZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBsKGluc3RydW1l
bnRpbmdBZ2VudHMoZ2xvYmFsU2NvcGUpLCBpZGVudGlmaWVyLCBudWxscHRyLCByZXNwb25zZSwg
bnVsbHB0cik7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
UmVjZWl2ZVRocmVhZGFibGVMb2FkZXJSZXNwb25zZShEb2N1bWVudFRocmVhZGFibGVMb2FkZXIm
IGRvY3VtZW50VGhyZWFkYWJsZUxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogewog
ICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
ckRvY3VtZW50KGRvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5kb2N1bWVudCgpKSkKLSAgICAgICAg
ZGlkUmVjZWl2ZVRocmVhZGFibGVMb2FkZXJSZXNwb25zZUltcGwoKmluc3RydW1lbnRpbmdBZ2Vu
dHMsIGRvY3VtZW50VGhyZWFkYWJsZUxvYWRlciwgaWRlbnRpZmllcik7CisgICAgaWYgKGF1dG8q
IGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoZG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmRv
Y3VtZW50KCkpKQorICAgICAgICBkaWRSZWNlaXZlVGhyZWFkYWJsZUxvYWRlclJlc3BvbnNlSW1w
bCgqYWdlbnRzLCBkb2N1bWVudFRocmVhZGFibGVMb2FkZXIsIGlkZW50aWZpZXIpOwogfQogICAg
IAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlRGF0YShG
cmFtZSogZnJhbWUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgY2hhciogZGF0YSwg
aW50IGRhdGFMZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCkKIHsKICAgICBGQVNUX1JFVFVS
Tl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkp
Ci0gICAgICAgIGRpZFJlY2VpdmVEYXRhSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRp
ZmllciwgZGF0YSwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGFMZW5ndGgpOworICAgIGlmIChhdXRv
KiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGZyYW1lKSkKKyAgICAgICAgZGlkUmVjZWl2
ZURhdGFJbXBsKCphZ2VudHMsIGlkZW50aWZpZXIsIGRhdGEsIGRhdGFMZW5ndGgsIGVuY29kZWRE
YXRhTGVuZ3RoKTsKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRSZWNlaXZlRGF0YShXb3JrZXJHbG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUsIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpCitp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVEYXRhKFdvcmtl
ck9yV29ya2xldEdsb2JhbFNjb3BlJiBnbG9iYWxTY29wZSwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkKIHsKICAgICBGQVNUX1JFVFVS
Tl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBkaWRSZWNlaXZlRGF0YUltcGwoaW5zdHJ1
bWVudGluZ0FnZW50c0Zvcldvcmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKSwgaWRl
bnRpZmllciwgZGF0YSwgZGF0YUxlbmd0aCwgZGF0YUxlbmd0aCk7CisgICAgZGlkUmVjZWl2ZURh
dGFJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMoZ2xvYmFsU2NvcGUpLCBpZGVudGlmaWVyLCBkYXRh
LCBkYXRhTGVuZ3RoLCBkYXRhTGVuZ3RoKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRGaW5pc2hMb2FkaW5nKEZyYW1lKiBmcmFtZSwgRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBOZXR3b3JrTG9hZE1l
dHJpY3MmIG5ldHdvcmtMb2FkTWV0cmljcywgUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVy
KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAgZGlkRmluaXNoTG9hZGluZ0ltcGwoKmluc3Ry
dW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIsIGxvYWRlciwgbmV0d29ya0xvYWRNZXRyaWNzLCBy
ZXNvdXJjZUxvYWRlcik7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMoZnJhbWUpKQorICAgICAgICBkaWRGaW5pc2hMb2FkaW5nSW1wbCgqYWdlbnRzLCBpZGVudGlm
aWVyLCBsb2FkZXIsIG5ldHdvcmtMb2FkTWV0cmljcywgcmVzb3VyY2VMb2FkZXIpOwogfQogCi1p
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpbmlzaExvYWRpbmcoV29y
a2VyR2xvYmFsU2NvcGUmIHdvcmtlckdsb2JhbFNjb3BlLCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyYgbmV0d29ya0xvYWRNZXRyaWNzKQoraW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaW5pc2hMb2FkaW5nKFdvcmtlck9y
V29ya2xldEdsb2JhbFNjb3BlJiBnbG9iYWxTY29wZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmIG5ldHdvcmtMb2FkTWV0cmljcykKIHsKICAgICBG
QVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBkaWRGaW5pc2hMb2FkaW5n
SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2NvcGUod29ya2VyR2xvYmFs
U2NvcGUpLCBpZGVudGlmaWVyLCBudWxscHRyLCBuZXR3b3JrTG9hZE1ldHJpY3MsIG51bGxwdHIp
OworICAgIGRpZEZpbmlzaExvYWRpbmdJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMoZ2xvYmFsU2Nv
cGUpLCBpZGVudGlmaWVyLCBudWxscHRyLCBuZXR3b3JrTG9hZE1ldHJpY3MsIG51bGxwdHIpOwog
fQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZhaWxMb2FkaW5n
KEZyYW1lKiBmcmFtZSwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBpZiAoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JG
cmFtZShmcmFtZSkpCi0gICAgICAgIGRpZEZhaWxMb2FkaW5nSW1wbCgqaW5zdHJ1bWVudGluZ0Fn
ZW50cywgaWRlbnRpZmllciwgbG9hZGVyLCBlcnJvcik7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHMoZnJhbWUpKQorICAgICAgICBkaWRGYWlsTG9hZGluZ0ltcGwo
KmFnZW50cywgaWRlbnRpZmllciwgbG9hZGVyLCBlcnJvcik7CiB9CiAKLWlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmFpbExvYWRpbmcoV29ya2VyR2xvYmFsU2NvcGUm
IHdvcmtlckdsb2JhbFNjb3BlLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291
cmNlRXJyb3ImIGVycm9yKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRGYWlsTG9hZGluZyhXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZSYgZ2xvYmFsU2NvcGUsIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0g
ICAgZGlkRmFpbExvYWRpbmdJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3JXb3JrZXJHbG9iYWxT
Y29wZSh3b3JrZXJHbG9iYWxTY29wZSksIGlkZW50aWZpZXIsIG51bGxwdHIsIGVycm9yKTsKKyAg
ICBkaWRGYWlsTG9hZGluZ0ltcGwoaW5zdHJ1bWVudGluZ0FnZW50cyhnbG9iYWxTY29wZSksIGlk
ZW50aWZpZXIsIG51bGxwdHIsIGVycm9yKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpjb250aW51ZUFmdGVyWEZyYW1lT3B0aW9uc0RlbmllZChGcmFtZSYgZnJh
bWUsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXImIGxvYWRlciwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgLy8gVHJlYXQgdGhlIHNhbWUg
YXMgZGlkUmVjZWl2ZVJlc3BvbnNlLgotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0
cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKLSAg
ICAgICAgZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2VJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRz
LCBpZGVudGlmaWVyLCAmbG9hZGVyLCByZXNwb25zZSwgbnVsbHB0cik7CisgICAgaWYgKGF1dG8q
IGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoZnJhbWUpKQorICAgICAgICBkaWRSZWNlaXZl
UmVzb3VyY2VSZXNwb25zZUltcGwoKmFnZW50cywgaWRlbnRpZmllciwgJmxvYWRlciwgcmVzcG9u
c2UsIG51bGxwdHIpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmNvbnRpbnVlV2l0aFBvbGljeURvd25sb2FkKEZyYW1lJiBmcmFtZSwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciYgbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKIHsKICAgICAvLyBUcmVhdCB0aGUgc2FtZSBhcyBkaWRSZWNlaXZlUmVzcG9u
c2UuCi0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBp
bnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBkaWRSZWNlaXZlUmVz
b3VyY2VSZXNwb25zZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIsICZsb2Fk
ZXIsIHJlc3BvbnNlLCBudWxscHRyKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVu
dGluZ0FnZW50cyhmcmFtZSkpCisgICAgICAgIGRpZFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlSW1w
bCgqYWdlbnRzLCBpZGVudGlmaWVyLCAmbG9hZGVyLCByZXNwb25zZSwgbnVsbHB0cik7CiB9CiAK
IGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29udGludWVXaXRoUG9saWN5
SWdub3JlKEZyYW1lJiBmcmFtZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExv
YWRlciYgbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICAv
LyBUcmVhdCB0aGUgc2FtZSBhcyBkaWRSZWNlaXZlUmVzcG9uc2UuCi0gICAgaWYgKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
RnJhbWUoZnJhbWUpKQotICAgICAgICBkaWRSZWNlaXZlUmVzb3VyY2VSZXNwb25zZUltcGwoKmlu
c3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIsICZsb2FkZXIsIHJlc3BvbnNlLCBudWxscHRy
KTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhmcmFtZSkpCisg
ICAgICAgIGRpZFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlSW1wbCgqYWdlbnRzLCBpZGVudGlmaWVy
LCAmbG9hZGVyLCByZXNwb25zZSwgbnVsbHB0cik7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJTeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZv
aWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAgICAgd2lsbExv
YWRYSFJTeW5jaHJvbm91c2x5SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cyk7CisgICAgaWYgKGF1
dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoY29udGV4dCkpCisgICAgICAgIHdpbGxM
b2FkWEhSU3luY2hyb25vdXNseUltcGwoKmFnZW50cyk7CiB9CiAKIGlubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFhIUlN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMo
dm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICBkaWRM
b2FkWEhSU3luY2hyb25vdXNseUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMpOworICAgIGlmIChh
dXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGNvbnRleHQpKQorICAgICAgICBkaWRM
b2FkWEhSU3luY2hyb25vdXNseUltcGwoKmFnZW50cyk7CiB9CiAKIGlubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0SW1wb3J0ZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVN0cmluZykKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAg
ICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1l
bnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICBzY3JpcHRJbXBvcnRlZElt
cGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIsIHNvdXJjZVN0cmluZyk7CisgICAg
aWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoY29udGV4dCkpCisgICAgICAg
IHNjcmlwdEltcG9ydGVkSW1wbCgqYWdlbnRzLCBpZGVudGlmaWVyLCBzb3VyY2VTdHJpbmcpOwog
fQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNjcmlwdEV4ZWN1dGlv
bkJsb2NrZWRCeUNTUChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIGRpcmVjdGl2ZVRleHQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZv
aWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0KSkKLSAgICAgICAgc2NyaXB0
RXhlY3V0aW9uQmxvY2tlZEJ5Q1NQSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZGlyZWN0aXZl
VGV4dCk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoY29udGV4
dCkpCisgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkJsb2NrZWRCeUNTUEltcGwoKmFnZW50cywgZGly
ZWN0aXZlVGV4dCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkUmVjZWl2ZVNjcmlwdFJlc3BvbnNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9O
VEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGlu
Z0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAg
ICBkaWRSZWNlaXZlU2NyaXB0UmVzcG9uc2VJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVu
dGlmaWVyKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhjb250
ZXh0KSkKKyAgICAgICAgZGlkUmVjZWl2ZVNjcmlwdFJlc3BvbnNlSW1wbCgqYWdlbnRzLCBpZGVu
dGlmaWVyKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkb21D
b250ZW50TG9hZGVkRXZlbnRGaXJlZChGcmFtZSYgZnJhbWUpCiB7CiAgICAgRkFTVF9SRVRVUk5f
SUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQot
ICAgICAgICBkb21Db250ZW50TG9hZGVkRXZlbnRGaXJlZEltcGwoKmluc3RydW1lbnRpbmdBZ2Vu
dHMsIGZyYW1lKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhm
cmFtZSkpCisgICAgICAgIGRvbUNvbnRlbnRMb2FkZWRFdmVudEZpcmVkSW1wbCgqYWdlbnRzLCBm
cmFtZSk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bG9hZEV2
ZW50RmlyZWQoRnJhbWUqIGZyYW1lKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5E
Uyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAgbG9hZEV2
ZW50RmlyZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSk7CisgICAgaWYgKGF1dG8q
IGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoZnJhbWUpKQorICAgICAgICBsb2FkRXZlbnRG
aXJlZEltcGwoKmFnZW50cywgZnJhbWUpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmZyYW1lRGV0YWNoZWRGcm9tUGFyZW50KEZyYW1lJiBmcmFtZSkKIHsKICAg
ICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JG
cmFtZShmcmFtZSkpCi0gICAgICAgIGZyYW1lRGV0YWNoZWRGcm9tUGFyZW50SW1wbCgqaW5zdHJ1
bWVudGluZ0FnZW50cywgZnJhbWUpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzKGZyYW1lKSkKKyAgICAgICAgZnJhbWVEZXRhY2hlZEZyb21QYXJlbnRJbXBsKCph
Z2VudHMsIGZyYW1lKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRDb21taXRMb2FkKEZyYW1lJiBmcmFtZSwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsK
LSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGRpZENvbW1pdExvYWRJbXBs
KCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSwgbG9hZGVyKTsKKyAgICBpZiAoYXV0byogYWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhmcmFtZSkpCisgICAgICAgIGRpZENvbW1pdExvYWRJ
bXBsKCphZ2VudHMsIGZyYW1lLCBsb2FkZXIpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmZyYW1lRG9jdW1lbnRVcGRhdGVkKEZyYW1lJiBmcmFtZSkKIHsKICAg
ICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JG
cmFtZShmcmFtZSkpCi0gICAgICAgIGZyYW1lRG9jdW1lbnRVcGRhdGVkSW1wbCgqaW5zdHJ1bWVu
dGluZ0FnZW50cywgZnJhbWUpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzKGZyYW1lKSkKKyAgICAgICAgZnJhbWVEb2N1bWVudFVwZGF0ZWRJbXBsKCphZ2VudHMs
IGZyYW1lKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpsb2Fk
ZXJEZXRhY2hlZEZyb21GcmFtZShGcmFtZSYgZnJhbWUsIERvY3VtZW50TG9hZGVyJiBsb2FkZXIp
CiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdl
bnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBsb2FkZXJEZXRhY2hlZEZyb21GcmFtZUltcGwo
Kmluc3RydW1lbnRpbmdBZ2VudHMsIGxvYWRlcik7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGlu
c3RydW1lbnRpbmdBZ2VudHMoZnJhbWUpKQorICAgICAgICBsb2FkZXJEZXRhY2hlZEZyb21GcmFt
ZUltcGwoKmFnZW50cywgbG9hZGVyKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpmcmFtZVN0YXJ0ZWRMb2FkaW5nKEZyYW1lJiBmcmFtZSkKIHsKICAgICBGQVNU
X1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShm
cmFtZSkpCi0gICAgICAgIGZyYW1lU3RhcnRlZExvYWRpbmdJbXBsKCppbnN0cnVtZW50aW5nQWdl
bnRzLCBmcmFtZSk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMo
ZnJhbWUpKQorICAgICAgICBmcmFtZVN0YXJ0ZWRMb2FkaW5nSW1wbCgqYWdlbnRzLCBmcmFtZSk7
CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVTdG9wcGVk
TG9hZGluZyhGcmFtZSYgZnJhbWUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRT
KHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBmcmFtZVN0
b3BwZWRMb2FkaW5nSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUpOworICAgIGlmIChh
dXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGZyYW1lKSkKKyAgICAgICAgZnJhbWVT
dG9wcGVkTG9hZGluZ0ltcGwoKmFnZW50cywgZnJhbWUpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYgZnJh
bWUsIFNlY29uZHMgZGVsYXkpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZv
aWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBmcmFtZVNjaGVk
dWxlZE5hdmlnYXRpb25JbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSwgZGVsYXkpOwor
ICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGZyYW1lKSkKKyAgICAg
ICAgZnJhbWVTY2hlZHVsZWROYXZpZ2F0aW9uSW1wbCgqYWdlbnRzLCBmcmFtZSwgZGVsYXkpOwog
fQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lQ2xlYXJlZFNj
aGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmIGZyYW1lKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05P
X0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKLSAgICAg
ICAgZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbkltcGwoKmluc3RydW1lbnRpbmdBZ2Vu
dHMsIGZyYW1lKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhm
cmFtZSkpCisgICAgICAgIGZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb25JbXBsKCphZ2Vu
dHMsIGZyYW1lKTsKIH0KIAogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RB
UktfTU9ERV9TVVBQT1JUKQogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
ZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZShQYWdlJiBwYWdlLCBib29sIHVzZURhcmtBcHBlYXJh
bmNlKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGRl
ZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShw
YWdlKSwgdXNlRGFya0FwcGVhcmFuY2UpOworICAgIGRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdl
SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzKHBhZ2UpLCB1c2VEYXJrQXBwZWFyYW5jZSk7CiB9CiAj
ZW5kaWYKIApAQCAtMTI2NiwyMDMgKzEyNjYsMjAzIEBAIGlubGluZSB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbERlc3Ryb3lDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSYK
IGlubGluZSBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEludGVyY2VwdChjb25z
dCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBG
QVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoZmFsc2UpOwotICAgIGlmIChhdXRvKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKLSAgICAg
ICAgcmV0dXJuIHdpbGxJbnRlcmNlcHRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCByZXF1ZXN0
KTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhmcmFtZSkpCisg
ICAgICAgIHJldHVybiB3aWxsSW50ZXJjZXB0SW1wbCgqYWdlbnRzLCByZXF1ZXN0KTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGlubGluZSBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c2hvdWxkSW50ZXJjZXB0UmVxdWVzdChjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBBU1NFUlQoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
UHVibGljOjpoYXNGcm9udGVuZHMoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2Vu
dHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICByZXR1cm4g
c2hvdWxkSW50ZXJjZXB0UmVxdWVzdEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHJlcXVlc3Qp
OworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGZyYW1lKSkKKyAg
ICAgICAgcmV0dXJuIHNob3VsZEludGVyY2VwdFJlcXVlc3RJbXBsKCphZ2VudHMsIHJlcXVlc3Qp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogaW5saW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpzaG91bGRJbnRlcmNlcHRSZXNwb25zZShjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIEFTU0VSVChJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25QdWJsaWM6Omhhc0Zyb250ZW5kcygpKTsKLSAgICBpZiAoYXV0byogaW5zdHJ1
bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCi0gICAg
ICAgIHJldHVybiBzaG91bGRJbnRlcmNlcHRSZXNwb25zZUltcGwoKmluc3RydW1lbnRpbmdBZ2Vu
dHMsIHJlc3BvbnNlKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50
cyhmcmFtZSkpCisgICAgICAgIHJldHVybiBzaG91bGRJbnRlcmNlcHRSZXNwb25zZUltcGwoKmFn
ZW50cywgcmVzcG9uc2UpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnRlcmNlcHRSZXF1ZXN0KFJlc291cmNlTG9hZGVyJiBs
b2FkZXIsIEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik+JiYgaGFuZGxlcikK
IHsKICAgICBBU1NFUlQoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzaG91bGRJbnRlcmNlcHRS
ZXF1ZXN0KCpsb2FkZXIuZnJhbWUoKSwgbG9hZGVyLnJlcXVlc3QoKSkpOwotICAgIGlmIChhdXRv
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGxvYWRl
ci5mcmFtZSgpKSkKLSAgICAgICAgaW50ZXJjZXB0UmVxdWVzdEltcGwoKmluc3RydW1lbnRpbmdB
Z2VudHMsIGxvYWRlciwgV1RGTW92ZShoYW5kbGVyKSk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHMobG9hZGVyLmZyYW1lKCkpKQorICAgICAgICBpbnRlcmNlcHRS
ZXF1ZXN0SW1wbCgqYWdlbnRzLCBsb2FkZXIsIFdURk1vdmUoaGFuZGxlcikpOwogfQogCiBpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmludGVyY2VwdFJlc3BvbnNlKGNvbnN0
IEZyYW1lJiBmcmFtZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pPiYmIGhhbmRsZXIpCiB7CiAgICAgQVNTRVJU
KEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2hvdWxkSW50ZXJjZXB0UmVzcG9uc2UoZnJhbWUs
IHJlc3BvbnNlKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBpbnRlcmNlcHRSZXNwb25zZUlt
cGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHJlc3BvbnNlLCBpZGVudGlmaWVyLCBXVEZNb3ZlKGhh
bmRsZXIpKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhmcmFt
ZSkpCisgICAgICAgIGludGVyY2VwdFJlc3BvbnNlSW1wbCgqYWdlbnRzLCByZXNwb25zZSwgaWRl
bnRpZmllciwgV1RGTW92ZShoYW5kbGVyKSk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlKERhdGFiYXNlJiBkYXRhYmFzZSkKIHsKICAg
ICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoYXV0byogaW5z
dHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGRhdGFiYXNl
LmRvY3VtZW50KCkpKQotICAgICAgICBkaWRPcGVuRGF0YWJhc2VJbXBsKCppbnN0cnVtZW50aW5n
QWdlbnRzLCBkYXRhYmFzZSk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHMoZGF0YWJhc2UuZG9jdW1lbnQoKSkpCisgICAgICAgIGRpZE9wZW5EYXRhYmFzZUltcGwo
KmFnZW50cywgZGF0YWJhc2UpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50KFBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBT
dG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQog
ewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGRpZERpc3Bh
dGNoRE9NU3RvcmFnZUV2ZW50SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSwg
a2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHN0b3JhZ2VUeXBlLCBzZWN1cml0eU9yaWdpbik7Cisg
ICAgZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZlbnRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMocGFn
ZSksIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBzdG9yYWdlVHlwZSwgc2VjdXJpdHlPcmlnaW4p
OwogfQogCiBpbmxpbmUgYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNob3VsZFdhaXRG
b3JEZWJ1Z2dlck9uU3RhcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKIHsKICAg
ICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMoZmFsc2UpOwotICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNv
bnRleHQoY29udGV4dCkpCi0gICAgICAgIHJldHVybiBzaG91bGRXYWl0Rm9yRGVidWdnZXJPblN0
YXJ0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cyk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGlu
c3RydW1lbnRpbmdBZ2VudHMoY29udGV4dCkpCisgICAgICAgIHJldHVybiBzaG91bGRXYWl0Rm9y
RGVidWdnZXJPblN0YXJ0SW1wbCgqYWdlbnRzKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d29ya2VyU3RhcnRlZChXb3JrZXJJ
bnNwZWN0b3JQcm94eSYgcHJveHkpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRT
KHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChwcm94eS5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpKQotICAgICAgICB3b3JrZXJTdGFydGVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50
cywgcHJveHkpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKHBy
b3h5LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCisgICAgICAgIHdvcmtlclN0YXJ0ZWRJbXBs
KCphZ2VudHMsIHByb3h5KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3b3JrZXJUZXJtaW5hdGVkKFdvcmtlckluc3BlY3RvclByb3h5JiBwcm94eSkKIHsKICAg
ICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JD
b250ZXh0KHByb3h5LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCi0gICAgICAgIHdvcmtlclRl
cm1pbmF0ZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBwcm94eSk7CisgICAgaWYgKGF1dG8q
IGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMocHJveHkuc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKSkKKyAgICAgICAgd29ya2VyVGVybWluYXRlZEltcGwoKmFnZW50cywgcHJveHkpOwogfQog
CiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdlYlNvY2tl
dChEb2N1bWVudCogZG9jdW1lbnQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgVVJM
JiByZXF1ZXN0VVJMKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkp
OwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgZGlkQ3JlYXRl
V2ViU29ja2V0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRpZmllciwgcmVxdWVzdFVS
TCk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoZG9jdW1lbnQp
KQorICAgICAgICBkaWRDcmVhdGVXZWJTb2NrZXRJbXBsKCphZ2VudHMsIGlkZW50aWZpZXIsIHJl
cXVlc3RVUkwpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdChEb2N1bWVudCogZG9jdW1lbnQsIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewog
ICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0Zv
ckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgd2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VS
ZXF1ZXN0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRpZmllciwgcmVxdWVzdCk7Cisg
ICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoZG9jdW1lbnQpKQorICAg
ICAgICB3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3RJbXBsKCphZ2VudHMsIGlkZW50
aWZpZXIsIHJlcXVlc3QpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZShEb2N1bWVudCogZG9jdW1l
bnQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICBkaWRSZWNlaXZlV2ViU29j
a2V0SGFuZHNoYWtlUmVzcG9uc2VJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBpZGVudGlmaWVy
LCByZXNwb25zZSk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMo
ZG9jdW1lbnQpKQorICAgICAgICBkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2VJ
bXBsKCphZ2VudHMsIGlkZW50aWZpZXIsIHJlc3BvbnNlKTsKIH0KIAogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDbG9zZVdlYlNvY2tldChEb2N1bWVudCogZG9jdW1l
bnQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19G
Uk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVudCkpCi0g
ICAgICAgIGRpZENsb3NlV2ViU29ja2V0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgaWRlbnRp
Zmllcik7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoZG9jdW1l
bnQpKQorICAgICAgICBkaWRDbG9zZVdlYlNvY2tldEltcGwoKmFnZW50cywgaWRlbnRpZmllcik7
CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdl
YlNvY2tldEZyYW1lKERvY3VtZW50KiBkb2N1bWVudCwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBXZWJTb2NrZXRGcmFtZSYgZnJhbWUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9f
RlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQot
ICAgICAgICBkaWRSZWNlaXZlV2ViU29ja2V0RnJhbWVJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRz
LCBpZGVudGlmaWVyLCBmcmFtZSk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRp
bmdBZ2VudHMoZG9jdW1lbnQpKQorICAgICAgICBkaWRSZWNlaXZlV2ViU29ja2V0RnJhbWVJbXBs
KCphZ2VudHMsIGlkZW50aWZpZXIsIGZyYW1lKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlV2ViU29ja2V0RnJhbWVFcnJvcihEb2N1bWVudCog
ZG9jdW1lbnQsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICBkaWRSZWNlaXZlV2ViU29j
a2V0RnJhbWVFcnJvckltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIsIGVycm9y
TWVzc2FnZSk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoZG9j
dW1lbnQpKQorICAgICAgICBkaWRSZWNlaXZlV2ViU29ja2V0RnJhbWVFcnJvckltcGwoKmFnZW50
cywgaWRlbnRpZmllciwgZXJyb3JNZXNzYWdlKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRTZW5kV2ViU29ja2V0RnJhbWUoRG9jdW1lbnQqIGRvY3VtZW50
LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFtZSkK
IHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JEb2N1bWVudChkb2N1bWVudCkpCi0gICAgICAgIGRpZFNlbmRXZWJTb2NrZXRGcmFtZUlt
cGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGlkZW50aWZpZXIsIGZyYW1lKTsKKyAgICBpZiAoYXV0
byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhkb2N1bWVudCkpCisgICAgICAgIGRpZFNl
bmRXZWJTb2NrZXRGcmFtZUltcGwoKmFnZW50cywgaWRlbnRpZmllciwgZnJhbWUpOwogfQogCiAj
aWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRIYW5kbGVNZW1vcnlQcmVzc3VyZShQYWdlJiBwYWdlLCBDcml0aWNhbCBjcml0
aWNhbCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBk
aWRIYW5kbGVNZW1vcnlQcmVzc3VyZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFn
ZSksIGNyaXRpY2FsKTsKKyAgICBkaWRIYW5kbGVNZW1vcnlQcmVzc3VyZUltcGwoaW5zdHJ1bWVu
dGluZ0FnZW50cyhwYWdlKSwgY3JpdGljYWwpOwogfQogI2VuZGlmCiAKIGlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMoQ2Fu
dmFzQmFzZSYgY2FudmFzQmFzZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMo
dm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNhbnZhc0Jhc2Uuc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKSkKLSAgICAgICAgZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXNJbXBs
KCppbnN0cnVtZW50aW5nQWdlbnRzLCBjYW52YXNCYXNlKTsKKyAgICBpZiAoYXV0byogYWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50cyhjYW52YXNCYXNlLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkpCisgICAgICAgIGRpZENoYW5nZUNTU0NhbnZhc0NsaWVudE5vZGVzSW1wbCgqYWdlbnRzLCBj
YW52YXNCYXNlKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNv
bnRleHQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0LmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpKQotICAgICAgICBkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250ZXh0SW1wbCgq
aW5zdHJ1bWVudGluZ0FnZW50cywgY29udGV4dCk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGlu
c3RydW1lbnRpbmdBZ2VudHMoY29udGV4dC5jYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKSkKKyAgICAgICAgZGlkQ3JlYXRlQ2FudmFzUmVuZGVyaW5nQ29udGV4dEltcGwoKmFn
ZW50cywgY29udGV4dCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQp
CiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdl
bnRzRm9yQ29udGV4dChjb250ZXh0LmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpKQotICAgICAgICBkaWRDaGFuZ2VDYW52YXNNZW1vcnlJbXBsKCppbnN0cnVtZW50aW5nQWdl
bnRzLCBjb250ZXh0KTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50
cyhjb250ZXh0LmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQorICAgICAg
ICBkaWRDaGFuZ2VDYW52YXNNZW1vcnlJbXBsKCphZ2VudHMsIGNvbnRleHQpOwogfQogCiBpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJlY29yZENhbnZhc0FjdGlvbihDYW52
YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxSZWNvcmRDYW52YXNBY3Rpb25WYXJpYW50PiYmIHBhcmFtZXRlcnMpCiB7
CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Rm9yQ29udGV4dChjb250ZXh0LmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
KQotICAgICAgICByZWNvcmRDYW52YXNBY3Rpb25JbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBj
b250ZXh0LCBuYW1lLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAoYXV0byogYWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50cyhjb250ZXh0LmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpKQorICAgICAgICByZWNvcmRDYW52YXNBY3Rpb25JbXBsKCphZ2VudHMsIGNv
bnRleHQsIG5hbWUsIFdURk1vdmUocGFyYW1ldGVycykpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIGJvb2wgZm9yY2VEaXNwYXRjaCkKIHsKICAgICBG
QVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250
ZXh0KGNvbnRleHQuY2FudmFzQmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCi0gICAg
ICAgIGRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50
cywgY29udGV4dCwgZm9yY2VEaXNwYXRjaCk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMoY29udGV4dC5jYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKSkKKyAgICAgICAgZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWVJbXBsKCphZ2VudHMs
IGNvbnRleHQsIGZvcmNlRGlzcGF0Y2gpOwogfQogCiAjaWYgRU5BQkxFKFdFQkdMKQogaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRFbmFibGVFeHRlbnNpb24oV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dFdlYkdMQmFzZSwgY29uc3QgU3RyaW5nJiBleHRl
bnNpb24pCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yQ29udGV4dChjb250ZXh0V2ViR0xCYXNlLmNhbnZhc0Jhc2UoKS5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpKQotICAgICAgICBkaWRFbmFibGVFeHRlbnNpb25JbXBsKCppbnN0
cnVtZW50aW5nQWdlbnRzLCBjb250ZXh0V2ViR0xCYXNlLCBleHRlbnNpb24pOworICAgIGlmIChh
dXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGNvbnRleHRXZWJHTEJhc2UuY2FudmFz
QmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCisgICAgICAgIGRpZEVuYWJsZUV4dGVu
c2lvbkltcGwoKmFnZW50cywgY29udGV4dFdlYkdMQmFzZSwgZXh0ZW5zaW9uKTsKIH0KIAogaW5s
aW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVXZWJHTFByb2dyYW0o
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dFdlYkdMQmFzZSwgV2ViR0xQcm9ncmFt
JiBwcm9ncmFtKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwot
ICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dFdlYkdMQmFzZS5jYW52YXNCYXNlKCkuc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKLSAgICAgICAgZGlkQ3JlYXRlV2ViR0xQcm9ncmFtSW1w
bCgqaW5zdHJ1bWVudGluZ0FnZW50cywgY29udGV4dFdlYkdMQmFzZSwgcHJvZ3JhbSk7CisgICAg
aWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoY29udGV4dFdlYkdMQmFzZS5j
YW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKKyAgICAgICAgZGlkQ3JlYXRl
V2ViR0xQcm9ncmFtSW1wbCgqYWdlbnRzLCBjb250ZXh0V2ViR0xCYXNlLCBwcm9ncmFtKTsKIH0K
IAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGVzdHJveVdlYkdM
UHJvZ3JhbShXZWJHTFByb2dyYW0mIHByb2dyYW0pCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9f
RlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChwcm9ncmFtLnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkpCi0gICAgICAgIHdpbGxEZXN0cm95V2ViR0xQcm9ncmFtSW1w
bCgqaW5zdHJ1bWVudGluZ0FnZW50cywgcHJvZ3JhbSk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHMocHJvZ3JhbS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQor
ICAgICAgICB3aWxsRGVzdHJveVdlYkdMUHJvZ3JhbUltcGwoKmFnZW50cywgcHJvZ3JhbSk7CiB9
CiAKIGlubGluZSBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aXNXZWJHTFByb2dyYW1E
aXNhYmxlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0V2ViR0xCYXNlLCBXZWJH
TFByb2dyYW0mIHByb2dyYW0pCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKGZh
bHNlKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHRXZWJHTEJhc2UuY2FudmFzQmFz
ZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCi0gICAgICAgIHJldHVybiBpc1dlYkdMUHJv
Z3JhbURpc2FibGVkSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgcHJvZ3JhbSk7CisgICAgaWYg
KGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoY29udGV4dFdlYkdMQmFzZS5jYW52
YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKKyAgICAgICAgcmV0dXJuIGlzV2Vi
R0xQcm9ncmFtRGlzYWJsZWRJbXBsKCphZ2VudHMsIHByb2dyYW0pOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogaW5saW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppc1dlYkdMUHJv
Z3JhbUhpZ2hsaWdodGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHRXZWJHTEJh
c2UsIFdlYkdMUHJvZ3JhbSYgcHJvZ3JhbSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9O
VEVORFMoZmFsc2UpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dFdlYkdMQmFzZS5j
YW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKLSAgICAgICAgcmV0dXJuIGlz
V2ViR0xQcm9ncmFtSGlnaGxpZ2h0ZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBwcm9ncmFt
KTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhjb250ZXh0V2Vi
R0xCYXNlLmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQorICAgICAgICBy
ZXR1cm4gaXNXZWJHTFByb2dyYW1IaWdobGlnaHRlZEltcGwoKmFnZW50cywgcHJvZ3JhbSk7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogI2VuZGlmCkBAIC0xNDcxLDI5NCArMTQ3MSwyOTQgQEAgaW5s
aW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppc1dlYkdMUHJvZ3JhbUhpZ2hsaWdo
dGVkKFdlYkdMUmVuZGVyaW5nQ28KIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkQ3JlYXRlV2ViR1BVRGV2aWNlKFdlYkdQVURldmljZSYgZGV2aWNlKQogewogICAgIEZB
U1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRvKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvcldlYkdQVURldmljZShkZXZpY2Up
KQotICAgICAgICBkaWRDcmVhdGVXZWJHUFVEZXZpY2VJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRz
LCBkZXZpY2UpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGRl
dmljZSkpCisgICAgICAgIGRpZENyZWF0ZVdlYkdQVURldmljZUltcGwoKmFnZW50cywgZGV2aWNl
KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGVzdHJv
eVdlYkdQVURldmljZShXZWJHUFVEZXZpY2UmIGRldmljZSkKIHsKICAgICBGQVNUX1JFVFVSTl9J
Rl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JXZWJHUFVEZXZpY2UoZGV2aWNlKSkKLSAgICAgICAg
d2lsbERlc3Ryb3lXZWJHUFVEZXZpY2VJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBkZXZpY2Up
OworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGRldmljZSkpCisg
ICAgICAgIHdpbGxEZXN0cm95V2ViR1BVRGV2aWNlSW1wbCgqYWdlbnRzLCBkZXZpY2UpOwogfQog
CiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxDb25maWd1cmVTd2Fw
Q2hhaW4oR1BVQ2FudmFzQ29udGV4dCYgY29udGV4dEdQVSwgV2ViR1BVU3dhcENoYWluJiBuZXdT
d2FwQ2hhaW4pCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0g
ICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
Q29udGV4dChjb250ZXh0R1BVLmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
KQotICAgICAgICB3aWxsQ29uZmlndXJlU3dhcENoYWluSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50
cywgY29udGV4dEdQVSwgbmV3U3dhcENoYWluKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50cyhjb250ZXh0R1BVLmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpKQorICAgICAgICB3aWxsQ29uZmlndXJlU3dhcENoYWluSW1wbCgqYWdlbnRzLCBj
b250ZXh0R1BVLCBuZXdTd2FwQ2hhaW4pOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZENyZWF0ZVdlYkdQVVBpcGVsaW5lKFdlYkdQVURldmljZSYgZGV2aWNl
LCBXZWJHUFVQaXBlbGluZSYgcGlwZWxpbmUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJP
TlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzRm9yV2ViR1BVRGV2aWNlKGRldmljZSkpCi0gICAgICAgIGRpZENyZWF0
ZVdlYkdQVVBpcGVsaW5lSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZGV2aWNlLCBwaXBlbGlu
ZSk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoZGV2aWNlKSkK
KyAgICAgICAgZGlkQ3JlYXRlV2ViR1BVUGlwZWxpbmVJbXBsKCphZ2VudHMsIGRldmljZSwgcGlw
ZWxpbmUpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxE
ZXN0cm95V2ViR1BVUGlwZWxpbmUoV2ViR1BVUGlwZWxpbmUmIHBpcGVsaW5lKQogewogICAgIEZB
U1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRvKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQocGlwZWxpbmUuc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKLSAgICAgICAgd2lsbERlc3Ryb3lXZWJHUFVQaXBlbGlu
ZUltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHBpcGVsaW5lKTsKKyAgICBpZiAoYXV0byogYWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhwaXBlbGluZS5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpKQorICAgICAgICB3aWxsRGVzdHJveVdlYkdQVVBpcGVsaW5lSW1wbCgqYWdlbnRzLCBwaXBl
bGluZSk7CiB9CiAjZW5kaWYKIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsQXBwbHlLZXlmcmFtZUVmZmVjdChFbGVtZW50JiB0YXJnZXQsIEtleWZyYW1lRWZmZWN0
JiBlZmZlY3QsIENvbXB1dGVkRWZmZWN0VGltaW5nIGNvbXB1dGVkVGltaW5nKQogewogICAgIEZB
U1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRvKiBpbnN0cnVt
ZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KHRhcmdldC5kb2N1
bWVudCgpKSkKLSAgICAgICAgd2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3RJbXBsKCppbnN0cnVtZW50
aW5nQWdlbnRzLCB0YXJnZXQsIGVmZmVjdCwgY29tcHV0ZWRUaW1pbmcpOworICAgIGlmIChhdXRv
KiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKHRhcmdldC5kb2N1bWVudCgpKSkKKyAgICAg
ICAgd2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3RJbXBsKCphZ2VudHMsIHRhcmdldCwgZWZmZWN0LCBj
b21wdXRlZFRpbWluZyk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkQ2hhbmdlV2ViQW5pbWF0aW9uTmFtZShXZWJBbmltYXRpb24mIGFuaW1hdGlvbikKIHsK
ICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoYXV0byog
aW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGFuaW1h
dGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQotICAgICAgICBkaWRDaGFuZ2VXZWJBbmlt
YXRpb25OYW1lSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgYW5pbWF0aW9uKTsKKyAgICBpZiAo
YXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhhbmltYXRpb24uc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKSkKKyAgICAgICAgZGlkQ2hhbmdlV2ViQW5pbWF0aW9uTmFtZUltcGwoKmFn
ZW50cywgYW5pbWF0aW9uKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRTZXRXZWJBbmltYXRpb25FZmZlY3QoV2ViQW5pbWF0aW9uJiBhbmltYXRpb24pCiB7
CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKGF1dG8q
IGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChhbmlt
YXRpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKLSAgICAgICAgZGlkU2V0V2ViQW5pbWF0
aW9uRWZmZWN0SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgYW5pbWF0aW9uKTsKKyAgICBpZiAo
YXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhhbmltYXRpb24uc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKSkKKyAgICAgICAgZGlkU2V0V2ViQW5pbWF0aW9uRWZmZWN0SW1wbCgqYWdl
bnRzLCBhbmltYXRpb24pOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZENoYW5nZVdlYkFuaW1hdGlvbkVmZmVjdFRpbWluZyhXZWJBbmltYXRpb24mIGFuaW1h
dGlvbikKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBp
ZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250
ZXh0KGFuaW1hdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQotICAgICAgICBkaWRDaGFu
Z2VXZWJBbmltYXRpb25FZmZlY3RUaW1pbmdJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBhbmlt
YXRpb24pOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGFuaW1h
dGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQorICAgICAgICBkaWRDaGFuZ2VXZWJBbmlt
YXRpb25FZmZlY3RUaW1pbmdJbXBsKCphZ2VudHMsIGFuaW1hdGlvbik7CiB9CiAKIGlubGluZSB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlV2ViQW5pbWF0aW9uRWZmZWN0
VGFyZ2V0KFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05P
X0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoYW5pbWF0aW9uLnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSkpCi0gICAgICAgIGRpZENoYW5nZVdlYkFuaW1hdGlvbkVmZmVjdFRhcmdldEltcGwo
Kmluc3RydW1lbnRpbmdBZ2VudHMsIGFuaW1hdGlvbik7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHMoYW5pbWF0aW9uLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkp
CisgICAgICAgIGRpZENoYW5nZVdlYkFuaW1hdGlvbkVmZmVjdFRhcmdldEltcGwoKmFnZW50cywg
YW5pbWF0aW9uKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRDcmVhdGVXZWJBbmltYXRpb24oV2ViQW5pbWF0aW9uJiBhbmltYXRpb24pCiB7CiAgICAgRkFT
VF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1l
bnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChhbmltYXRpb24uc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKLSAgICAgICAgZGlkQ3JlYXRlV2ViQW5pbWF0aW9uSW1w
bCgqaW5zdHJ1bWVudGluZ0FnZW50cywgYW5pbWF0aW9uKTsKKyAgICBpZiAoYXV0byogYWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50cyhhbmltYXRpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KSkKKyAgICAgICAgZGlkQ3JlYXRlV2ViQW5pbWF0aW9uSW1wbCgqYWdlbnRzLCBhbmltYXRpb24p
OwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEZXN0cm95
V2ViQW5pbWF0aW9uKFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uKQogewogICAgIEZBU1RfUkVUVVJO
X0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoYW5pbWF0aW9uLnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSkpCi0gICAgICAgIHdpbGxEZXN0cm95V2ViQW5pbWF0aW9uSW1wbCgqaW5z
dHJ1bWVudGluZ0FnZW50cywgYW5pbWF0aW9uKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50cyhhbmltYXRpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKKyAg
ICAgICAgd2lsbERlc3Ryb3lXZWJBbmltYXRpb25JbXBsKCphZ2VudHMsIGFuaW1hdGlvbik7CiB9
CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bmV0d29ya1N0YXRlQ2hh
bmdlZChQYWdlJiBwYWdlKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lk
KCkpOwotICAgIG5ldHdvcmtTdGF0ZUNoYW5nZWRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3JQ
YWdlKHBhZ2UpKTsKKyAgICBuZXR3b3JrU3RhdGVDaGFuZ2VkSW1wbChpbnN0cnVtZW50aW5nQWdl
bnRzKHBhZ2UpKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp1
cGRhdGVBcHBsaWNhdGlvbkNhY2hlU3RhdHVzKEZyYW1lKiBmcmFtZSkKIHsKICAgICBGQVNUX1JF
VFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoYXV0byogaW5zdHJ1bWVudGlu
Z0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIHVw
ZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCAqZnJh
bWUpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGZyYW1lKSkK
KyAgICAgICAgdXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1c0ltcGwoKmFnZW50cywgKmZyYW1l
KTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdl
VG9Db25zb2xlKFBhZ2UmIHBhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkNvbnNvbGVN
ZXNzYWdlPiBtZXNzYWdlKQogewotICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKGluc3RydW1l
bnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpLCBXVEZNb3ZlKG1lc3NhZ2UpKTsKKyAgICBhZGRNZXNz
YWdlVG9Db25zb2xlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzKHBhZ2UpLCBXVEZNb3ZlKG1lc3Nh
Z2UpKTsKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNz
YWdlVG9Db25zb2xlKFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZSwgc3RkOjp1
bmlxdWVfcHRyPEluc3BlY3Rvcjo6Q29uc29sZU1lc3NhZ2U+IG1lc3NhZ2UpCitpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyT3JX
b3JrbGV0R2xvYmFsU2NvcGUmIGdsb2JhbFNjb3BlLCBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9y
OjpDb25zb2xlTWVzc2FnZT4gbWVzc2FnZSkKIHsKLSAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1w
bChpbnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2NvcGUod29ya2VyR2xvYmFsU2Nv
cGUpLCBXVEZNb3ZlKG1lc3NhZ2UpKTsKKyAgICBhZGRNZXNzYWdlVG9Db25zb2xlSW1wbChpbnN0
cnVtZW50aW5nQWdlbnRzKGdsb2JhbFNjb3BlKSwgV1RGTW92ZShtZXNzYWdlKSk7CiB9CiAKIGlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50KFBhZ2UmIHBh
Z2UsIEpTQzo6SlNHbG9iYWxPYmplY3QqIHN0YXRlLCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewot
ICAgIGNvbnNvbGVDb3VudEltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSksIHN0
YXRlLCBsYWJlbCk7CisgICAgY29uc29sZUNvdW50SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzKHBh
Z2UpLCBzdGF0ZSwgbGFiZWwpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmNvbnNvbGVDb3VudChXb3JrZXJHbG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUs
IEpTQzo6SlNHbG9iYWxPYmplY3QqIHN0YXRlLCBjb25zdCBTdHJpbmcmIGxhYmVsKQoraW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnQoV29ya2VyT3JXb3Jr
bGV0R2xvYmFsU2NvcGUmIGdsb2JhbFNjb3BlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBzdGF0ZSwg
Y29uc3QgU3RyaW5nJiBsYWJlbCkKIHsKLSAgICBjb25zb2xlQ291bnRJbXBsKGluc3RydW1lbnRp
bmdBZ2VudHNGb3JXb3JrZXJHbG9iYWxTY29wZSh3b3JrZXJHbG9iYWxTY29wZSksIHN0YXRlLCBs
YWJlbCk7CisgICAgY29uc29sZUNvdW50SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzKGdsb2JhbFNj
b3BlKSwgc3RhdGUsIGxhYmVsKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpjb25zb2xlQ291bnRSZXNldChQYWdlJiBwYWdlLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBsYWJlbCkKIHsKLSAgICBjb25zb2xlQ291bnRSZXNldElt
cGwoaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSksIHN0YXRlLCBsYWJlbCk7CisgICAg
Y29uc29sZUNvdW50UmVzZXRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMocGFnZSksIHN0YXRlLCBs
YWJlbCk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29s
ZUNvdW50UmVzZXQoV29ya2VyR2xvYmFsU2NvcGUmIHdvcmtlckdsb2JhbFNjb3BlLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBsYWJlbCkKK2lubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50UmVzZXQoV29ya2VyT3JXb3JrbGV0
R2xvYmFsU2NvcGUmIGdsb2JhbFNjb3BlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBzdGF0ZSwgY29u
c3QgU3RyaW5nJiBsYWJlbCkKIHsKLSAgICBjb25zb2xlQ291bnRSZXNldEltcGwoaW5zdHJ1bWVu
dGluZ0FnZW50c0Zvcldvcmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKSwgc3RhdGUs
IGxhYmVsKTsKKyAgICBjb25zb2xlQ291bnRSZXNldEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cyhn
bG9iYWxTY29wZSksIHN0YXRlLCBsYWJlbCk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6dGFrZUhlYXBTbmFwc2hvdChGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0g
ICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICB0YWtlSGVhcFNuYXBzaG90SW1w
bCgqaW5zdHJ1bWVudGluZ0FnZW50cywgdGl0bGUpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBp
bnN0cnVtZW50aW5nQWdlbnRzKGZyYW1lKSkKKyAgICAgICAgdGFrZUhlYXBTbmFwc2hvdEltcGwo
KmFnZW50cywgdGl0bGUpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OnN0YXJ0Q29uc29sZVRpbWluZyhGcmFtZSYgZnJhbWUsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWwpCiB7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBz
dGFydENvbnNvbGVUaW1pbmdJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSwgZXhlYywg
bGFiZWwpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGZyYW1l
KSkKKyAgICAgICAgc3RhcnRDb25zb2xlVGltaW5nSW1wbCgqYWdlbnRzLCBmcmFtZSwgZXhlYywg
bGFiZWwpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0
Q29uc29sZVRpbWluZyhXb3JrZXJHbG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUsIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWwpCitpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0Q29uc29sZVRpbWluZyhXb3JrZXJPcldvcmts
ZXRHbG9iYWxTY29wZSYgZ2xvYmFsU2NvcGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgbGFiZWwpCiB7Ci0gICAgc3RhcnRDb25zb2xlVGltaW5nSW1wbChpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2NvcGUod29ya2VyR2xvYmFsU2NvcGUpLCBleGVj
LCBsYWJlbCk7CisgICAgc3RhcnRDb25zb2xlVGltaW5nSW1wbChpbnN0cnVtZW50aW5nQWdlbnRz
KGdsb2JhbFNjb3BlKSwgZXhlYywgbGFiZWwpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmxvZ0NvbnNvbGVUaW1pbmcoRnJhbWUmIGZyYW1lLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBleGVjLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBSZWY8SW5zcGVjdG9yOjpTY3Jp
cHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewotICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5n
QWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAgbG9n
Q29uc29sZVRpbWluZ0ltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGV4ZWMsIGxhYmVsLCBXVEZN
b3ZlKGFyZ3VtZW50cykpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdl
bnRzKGZyYW1lKSkKKyAgICAgICAgbG9nQ29uc29sZVRpbWluZ0ltcGwoKmFnZW50cywgZXhlYywg
bGFiZWwsIFdURk1vdmUoYXJndW1lbnRzKSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6bG9nQ29uc29sZVRpbWluZyhXb3JrZXJHbG9iYWxTY29wZSYgd29ya2Vy
R2xvYmFsU2NvcGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFi
ZWwsIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCitpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmxvZ0NvbnNvbGVUaW1pbmcoV29ya2VyT3JX
b3JrbGV0R2xvYmFsU2NvcGUmIGdsb2JhbFNjb3BlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBleGVj
LCBjb25zdCBTdHJpbmcmIGxhYmVsLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYg
YXJndW1lbnRzKQogewotICAgIGxvZ0NvbnNvbGVUaW1pbmdJbXBsKGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JXb3JrZXJHbG9iYWxTY29wZSh3b3JrZXJHbG9iYWxTY29wZSksIGV4ZWMsIGxhYmVsLCBX
VEZNb3ZlKGFyZ3VtZW50cykpOworICAgIGxvZ0NvbnNvbGVUaW1pbmdJbXBsKGluc3RydW1lbnRp
bmdBZ2VudHMoZ2xvYmFsU2NvcGUpLCBleGVjLCBsYWJlbCwgV1RGTW92ZShhcmd1bWVudHMpKTsK
IH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRp
bWluZyhGcmFtZSYgZnJhbWUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0IFN0cmlu
ZyYgbGFiZWwpCiB7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBzdG9wQ29uc29sZVRpbWluZ0lt
cGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGZyYW1lLCBleGVjLCBsYWJlbCk7CisgICAgaWYgKGF1
dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoZnJhbWUpKQorICAgICAgICBzdG9wQ29u
c29sZVRpbWluZ0ltcGwoKmFnZW50cywgZnJhbWUsIGV4ZWMsIGxhYmVsKTsKIH0KIAotaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZyhXb3JrZXJH
bG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMs
IGNvbnN0IFN0cmluZyYgbGFiZWwpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OnN0b3BDb25zb2xlVGltaW5nKFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJiBnbG9iYWxT
Y29wZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZXhlYywgY29uc3QgU3RyaW5nJiBsYWJlbCkKIHsK
LSAgICBzdG9wQ29uc29sZVRpbWluZ0ltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0Zvcldvcmtlckds
b2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKSwgZXhlYywgbGFiZWwpOworICAgIHN0b3BDb25z
b2xlVGltaW5nSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzKGdsb2JhbFNjb3BlKSwgZXhlYywgbGFi
ZWwpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVU
aW1lU3RhbXAoRnJhbWUmIGZyYW1lLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYg
YXJndW1lbnRzKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwot
ICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1
bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKLSAgICAgICAgY29uc29sZVRpbWVTdGFtcElt
cGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGZyYW1lLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAg
IGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGZyYW1lKSkKKyAgICAgICAg
Y29uc29sZVRpbWVTdGFtcEltcGwoKmFnZW50cywgZnJhbWUsIFdURk1vdmUoYXJndW1lbnRzKSk7
CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRQcm9maWxp
bmcoUGFnZSYgcGFnZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZXhlYywgY29uc3QgU3RyaW5nICZ0
aXRsZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBz
dGFydFByb2ZpbGluZ0ltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSksIGV4ZWMs
IHRpdGxlKTsKKyAgICBzdGFydFByb2ZpbGluZ0ltcGwoaW5zdHJ1bWVudGluZ0FnZW50cyhwYWdl
KSwgZXhlYywgdGl0bGUpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OnN0b3BQcm9maWxpbmcoUGFnZSYgcGFnZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZXhlYywg
Y29uc3QgU3RyaW5nICZ0aXRsZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFMo
dm9pZCgpKTsKLSAgICBzdG9wUHJvZmlsaW5nSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFn
ZShwYWdlKSwgZXhlYywgdGl0bGUpOworICAgIHN0b3BQcm9maWxpbmdJbXBsKGluc3RydW1lbnRp
bmdBZ2VudHMocGFnZSksIGV4ZWMsIHRpdGxlKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCYgY29udGV4dCwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZXhlYywgSlNDOjpKU09i
amVjdCogb3B0aW9ucykKIHsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQuY2FudmFz
QmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCi0gICAgICAgIGNvbnNvbGVTdGFydFJl
Y29yZGluZ0NhbnZhc0ltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnRleHQsIGV4ZWMsIG9w
dGlvbnMpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGNvbnRl
eHQuY2FudmFzQmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCisgICAgICAgIGNvbnNv
bGVTdGFydFJlY29yZGluZ0NhbnZhc0ltcGwoKmFnZW50cywgY29udGV4dCwgZXhlYywgb3B0aW9u
cyk7CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZVN0
b3BSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKIHsKLSAg
ICBpZiAoYXV0byogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JD
b250ZXh0KGNvbnRleHQuY2FudmFzQmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCi0g
ICAgICAgIGNvbnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFzSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50
cywgY29udGV4dCk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMo
Y29udGV4dC5jYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKKyAgICAgICAg
Y29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXNJbXBsKCphZ2VudHMsIGNvbnRleHQpOwogfQogCiBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlcXVlc3RBbmltYXRpb25G
cmFtZShEb2N1bWVudCYgZG9jdW1lbnQsIGludCBjYWxsYmFja0lkKQogewogICAgIEZBU1RfUkVU
VVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckRvY3VtZW50KGRv
Y3VtZW50KSkKLSAgICAgICAgZGlkUmVxdWVzdEFuaW1hdGlvbkZyYW1lSW1wbCgqaW5zdHJ1bWVu
dGluZ0FnZW50cywgY2FsbGJhY2tJZCwgZG9jdW1lbnQpOworICAgIGlmIChhdXRvKiBhZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzKGRvY3VtZW50KSkKKyAgICAgICAgZGlkUmVxdWVzdEFuaW1h
dGlvbkZyYW1lSW1wbCgqYWdlbnRzLCBjYWxsYmFja0lkLCBkb2N1bWVudCk7CiB9CiAKIGlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FuY2VsQW5pbWF0aW9uRnJhbWUo
RG9jdW1lbnQmIGRvY3VtZW50LCBpbnQgY2FsbGJhY2tJZCkKIHsKICAgICBGQVNUX1JFVFVSTl9J
Rl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVu
dCkpCi0gICAgICAgIGRpZENhbmNlbEFuaW1hdGlvbkZyYW1lSW1wbCgqaW5zdHJ1bWVudGluZ0Fn
ZW50cywgY2FsbGJhY2tJZCwgZG9jdW1lbnQpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzKGRvY3VtZW50KSkKKyAgICAgICAgZGlkQ2FuY2VsQW5pbWF0aW9uRnJh
bWVJbXBsKCphZ2VudHMsIGNhbGxiYWNrSWQsIGRvY3VtZW50KTsKIH0KIAogaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRmlyZUFuaW1hdGlvbkZyYW1lKERvY3VtZW50
JiBkb2N1bWVudCwgaW50IGNhbGxiYWNrSWQpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJP
TlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0
cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICB3aWxsRmlyZUFu
aW1hdGlvbkZyYW1lSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgY2FsbGJhY2tJZCwgZG9jdW1l
bnQpOworICAgIGlmIChhdXRvKiBhZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzKGRvY3VtZW50
KSkKKyAgICAgICAgd2lsbEZpcmVBbmltYXRpb25GcmFtZUltcGwoKmFnZW50cywgY2FsbGJhY2tJ
ZCwgZG9jdW1lbnQpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZEZpcmVBbmltYXRpb25GcmFtZShEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgRkFTVF9S
RVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKGF1dG8qIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAg
ICAgICBkaWRGaXJlQW5pbWF0aW9uRnJhbWVJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzKTsKKyAg
ICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhkb2N1bWVudCkpCisgICAg
ICAgIGRpZEZpcmVBbmltYXRpb25GcmFtZUltcGwoKmFnZW50cyk7CiB9CiAKIGlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEZpcmVPYnNlcnZlckNhbGxiYWNrKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgY2FsbGJhY2tUeXBlKQog
ewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRv
KiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29u
dGV4dCkpCi0gICAgICAgIHdpbGxGaXJlT2JzZXJ2ZXJDYWxsYmFja0ltcGwoKmluc3RydW1lbnRp
bmdBZ2VudHMsIGNhbGxiYWNrVHlwZSwgY29udGV4dCk7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHMoY29udGV4dCkpCisgICAgICAgIHdpbGxGaXJlT2JzZXJ2ZXJD
YWxsYmFja0ltcGwoKmFnZW50cywgY2FsbGJhY2tUeXBlLCBjb250ZXh0KTsKIH0KIAogaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaXJlT2JzZXJ2ZXJDYWxsYmFjayhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05P
X0ZST05URU5EUyh2b2lkKCkpOwotICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdlbnRzID0g
aW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoY29udGV4dCkpCi0gICAgICAgIGRpZEZpcmVP
YnNlcnZlckNhbGxiYWNrSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cyk7CisgICAgaWYgKGF1dG8q
IGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMoY29udGV4dCkpCisgICAgICAgIGRpZEZpcmVP
YnNlcnZlckNhbGxiYWNrSW1wbCgqYWdlbnRzKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpsYXllclRyZWVEaWRDaGFuZ2UoUGFnZSogcGFnZSkKIHsKICAgICBG
QVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKLSAgICBpZiAoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdl
KHBhZ2UpKQotICAgICAgICBsYXllclRyZWVEaWRDaGFuZ2VJbXBsKCppbnN0cnVtZW50aW5nQWdl
bnRzKTsKKyAgICBpZiAoYXV0byogYWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50cyhwYWdlKSkK
KyAgICAgICAgbGF5ZXJUcmVlRGlkQ2hhbmdlSW1wbCgqYWdlbnRzKTsKIH0KIAogaW5saW5lIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpyZW5kZXJMYXllckRlc3Ryb3llZChQYWdlKiBw
YWdlLCBjb25zdCBSZW5kZXJMYXllciYgcmVuZGVyTGF5ZXIpCiB7CiAgICAgRkFTVF9SRVRVUk5f
SUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7Ci0gICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKLSAg
ICAgICAgcmVuZGVyTGF5ZXJEZXN0cm95ZWRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCByZW5k
ZXJMYXllcik7CisgICAgaWYgKGF1dG8qIGFnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHMocGFn
ZSkpCisgICAgICAgIHJlbmRlckxheWVyRGVzdHJveWVkSW1wbCgqYWdlbnRzLCByZW5kZXJMYXll
cik7CiB9CiAKLWlubGluZSBJbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpCitpbmxpbmUgSW5zdHJ1bWVudGluZ0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCiB7Ci0gICAgcmV0dXJuIGNvbnRleHQgPyBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29u
dGV4dCgqY29udGV4dCkgOiBudWxscHRyOworICAgIHJldHVybiBjb250ZXh0ID8gaW5zdHJ1bWVu
dGluZ0FnZW50cygqY29udGV4dCkgOiBudWxscHRyOwogfQogCi1pbmxpbmUgSW5zdHJ1bWVudGlu
Z0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzRm9y
RnJhbWUoY29uc3QgRnJhbWUqIGZyYW1lKQoraW5saW5lIEluc3RydW1lbnRpbmdBZ2VudHMqIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50cyhjb25zdCBGcmFtZSog
ZnJhbWUpCiB7Ci0gICAgcmV0dXJuIGZyYW1lID8gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1l
KCpmcmFtZSkgOiBudWxscHRyOworICAgIHJldHVybiBmcmFtZSA/IGluc3RydW1lbnRpbmdBZ2Vu
dHMoKmZyYW1lKSA6IG51bGxwdHI7CiB9CiAKLWlubGluZSBJbnN0cnVtZW50aW5nQWdlbnRzKiBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHNGb3JGcmFtZShjb25z
dCBGcmFtZSYgZnJhbWUpCitpbmxpbmUgSW5zdHJ1bWVudGluZ0FnZW50cyogSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjppbnN0cnVtZW50aW5nQWdlbnRzKGNvbnN0IEZyYW1lJiBmcmFtZSkKIHsK
LSAgICByZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UoZnJhbWUucGFnZSgpKTsKKyAg
ICByZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50cyhmcmFtZS5wYWdlKCkpOwogfQogCi1pbmxpbmUg
SW5zdHJ1bWVudGluZ0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50
aW5nQWdlbnRzRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQoraW5saW5lIEluc3RydW1l
bnRpbmdBZ2VudHMqIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50
cyhEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIGRvY3VtZW50ID8gaW5zdHJ1bWVu
dGluZ0FnZW50c0ZvckRvY3VtZW50KCpkb2N1bWVudCkgOiBudWxscHRyOworICAgIHJldHVybiBk
b2N1bWVudCA/IGluc3RydW1lbnRpbmdBZ2VudHMoKmRvY3VtZW50KSA6IG51bGxwdHI7CiB9CiAK
LWlubGluZSBJbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omlu
c3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCitpbmxpbmUg
SW5zdHJ1bWVudGluZ0FnZW50cyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppbnN0cnVtZW50
aW5nQWdlbnRzKERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBQYWdlKiBwYWdlID0gZG9jdW1l
bnQucGFnZSgpOwogICAgIGlmICghcGFnZSAmJiBkb2N1bWVudC50ZW1wbGF0ZURvY3VtZW50SG9z
dCgpKQogICAgICAgICBwYWdlID0gZG9jdW1lbnQudGVtcGxhdGVEb2N1bWVudEhvc3QoKS0+cGFn
ZSgpOwotICAgIHJldHVybiBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKTsKKyAgICBy
ZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50cyhwYWdlKTsKIH0KIAotaW5saW5lIEluc3RydW1lbnRp
bmdBZ2VudHMqIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0Zv
clBhZ2UoUGFnZSogcGFnZSkKK2lubGluZSBJbnN0cnVtZW50aW5nQWdlbnRzKiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHMoUGFnZSogcGFnZSkKIHsKLSAgICBy
ZXR1cm4gcGFnZSA/ICZpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZSgqcGFnZSkgOiBudWxscHRy
OworICAgIHJldHVybiBwYWdlID8gJmluc3RydW1lbnRpbmdBZ2VudHMoKnBhZ2UpIDogbnVsbHB0
cjsKIH0KIAotaW5saW5lIEluc3RydW1lbnRpbmdBZ2VudHMqIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6aW5zdHJ1bWVudGluZ0FnZW50c0Zvcldvcmtlckdsb2JhbFNjb3BlKFdvcmtlckdsb2Jh
bFNjb3BlKiB3b3JrZXJHbG9iYWxTY29wZSkKK2lubGluZSBJbnN0cnVtZW50aW5nQWdlbnRzKiBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omluc3RydW1lbnRpbmdBZ2VudHMoV29ya2VyT3JXb3Jr
bGV0R2xvYmFsU2NvcGUqIGdsb2JhbFNjb3BlKQogewotICAgIHJldHVybiB3b3JrZXJHbG9iYWxT
Y29wZSA/ICZpbnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2NvcGUoKndvcmtlckds
b2JhbFNjb3BlKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGdsb2JhbFNjb3BlID8gJmluc3RydW1l
bnRpbmdBZ2VudHMoKmdsb2JhbFNjb3BlKSA6IG51bGxwdHI7CiB9CiAKIGlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJvbnRlbmRDcmVhdGVkKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXZWJBZ2VudEJhc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXZWJBZ2VudEJhc2UuaAppbmRleCA3MDQ0NjQ0YmZm
OTUyMGVhYWU4NmVmZDRiMmFlMzkxOTIzZmM3ZWY0Li5hYjZmZjM1MTY1Y2ZiNWQwZTNhMzUxMzNj
ZDQ5MjgwMjE1MDYwYjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yV2ViQWdlbnRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvcldlYkFnZW50QmFzZS5oCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIFBhZ2U7Ci1jbGFzcyBXb3JrZXJH
bG9iYWxTY29wZTsKK2NsYXNzIFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlOwogCiAvLyBGSVhN
RTogbW92ZSB0aGlzIHRvIEluc3BlY3RvciBuYW1lc3BhY2Ugd2hlbiByZW1haW5pbmcgYWdlbnRz
IG1vdmUuCiBzdHJ1Y3QgV2ViQWdlbnRDb250ZXh0IDogcHVibGljIEluc3BlY3Rvcjo6QWdlbnRD
b250ZXh0IHsKQEAgLTU3LDEzICs1NywxMyBAQCBzdHJ1Y3QgUGFnZUFnZW50Q29udGV4dCA6IHB1
YmxpYyBXZWJBZ2VudENvbnRleHQgewogfTsKIAogc3RydWN0IFdvcmtlckFnZW50Q29udGV4dCA6
IHB1YmxpYyBXZWJBZ2VudENvbnRleHQgewotICAgIFdvcmtlckFnZW50Q29udGV4dChXZWJBZ2Vu
dENvbnRleHQmIGNvbnRleHQsIFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZSkK
KyAgICBXb3JrZXJBZ2VudENvbnRleHQoV2ViQWdlbnRDb250ZXh0JiBjb250ZXh0LCBXb3JrZXJP
cldvcmtsZXRHbG9iYWxTY29wZSYgZ2xvYmFsU2NvcGUpCiAgICAgICAgIDogV2ViQWdlbnRDb250
ZXh0KGNvbnRleHQpCi0gICAgICAgICwgd29ya2VyR2xvYmFsU2NvcGUod29ya2VyR2xvYmFsU2Nv
cGUpCisgICAgICAgICwgZ2xvYmFsU2NvcGUoZ2xvYmFsU2NvcGUpCiAgICAgewogICAgIH0KIAot
ICAgIFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZTsKKyAgICBXb3JrZXJPcldv
cmtsZXRHbG9iYWxTY29wZSYgZ2xvYmFsU2NvcGU7CiB9OwogCiBjbGFzcyBJbnNwZWN0b3JBZ2Vu
dEJhc2UgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JBZ2VudEJhc2UgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlci5jcHAKaW5kZXggODBjOWExMDVjNTRhM2U1
MzcwYWNjZDZjMTJmZjA2ZjJiMzQzNWRhMi4uOGE3YWI4YzIwZTA5NDkwYmUzN2U1YzA2NzU2MmIy
YzNkMjUxYmM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckRl
YnVnZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXIu
Y3BwCkBAIC0zNCw3ICszNCw4IEBACiAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5n
LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5oIgor
I2luY2x1ZGUgIldvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlLmgiCisjaW5jbHVkZSAiV29ya2Vy
T3JXb3JrbGV0U2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldvcmtlclJ1bkxvb3AuaCIK
ICNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WTS5o
PgpAQCAtNDMsOSArNDQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CiAKLVdvcmtlckRlYnVnZ2VyOjpXb3JrZXJEZWJ1Z2dlcihXb3JrZXJHbG9i
YWxTY29wZSYgY29udGV4dCkKK1dvcmtlckRlYnVnZ2VyOjpXb3JrZXJEZWJ1Z2dlcihXb3JrZXJP
cldvcmtsZXRHbG9iYWxTY29wZSYgY29udGV4dCkKICAgICA6IERlYnVnZ2VyKGNvbnRleHQuc2Ny
aXB0KCktPnZtKCkpCi0gICAgLCBtX3dvcmtlckdsb2JhbFNjb3BlKGNvbnRleHQpCisgICAgLCBt
X2dsb2JhbFNjb3BlKGNvbnRleHQpCiB7CiB9CiAKQEAgLTUzLDE1ICs1NCwxNSBAQCB2b2lkIFdv
cmtlckRlYnVnZ2VyOjphdHRhY2hEZWJ1Z2dlcigpCiB7CiAgICAgSlNDOjpEZWJ1Z2dlcjo6YXR0
YWNoRGVidWdnZXIoKTsKIAotICAgIG1fd29ya2VyR2xvYmFsU2NvcGUuc2NyaXB0KCktPmF0dGFj
aERlYnVnZ2VyKHRoaXMpOworICAgIG1fZ2xvYmFsU2NvcGUuc2NyaXB0KCktPmF0dGFjaERlYnVn
Z2VyKHRoaXMpOwogfQogCiB2b2lkIFdvcmtlckRlYnVnZ2VyOjpkZXRhY2hEZWJ1Z2dlcihib29s
IGlzQmVpbmdEZXN0cm95ZWQpCiB7CiAgICAgSlNDOjpEZWJ1Z2dlcjo6ZGV0YWNoRGVidWdnZXIo
aXNCZWluZ0Rlc3Ryb3llZCk7CiAKLSAgICBpZiAobV93b3JrZXJHbG9iYWxTY29wZS5zY3JpcHQo
KSkKLSAgICAgICAgbV93b3JrZXJHbG9iYWxTY29wZS5zY3JpcHQoKS0+ZGV0YWNoRGVidWdnZXIo
dGhpcyk7CisgICAgaWYgKG1fZ2xvYmFsU2NvcGUuc2NyaXB0KCkpCisgICAgICAgIG1fZ2xvYmFs
U2NvcGUuc2NyaXB0KCktPmRldGFjaERlYnVnZ2VyKHRoaXMpOwogICAgIGlmICghaXNCZWluZ0Rl
c3Ryb3llZCkKICAgICAgICAgcmVjb21waWxlQWxsSlNGdW5jdGlvbnMoKTsKIH0KQEAgLTgwLDcg
KzgxLDcgQEAgdm9pZCBXb3JrZXJEZWJ1Z2dlcjo6cnVuRXZlbnRMb29wV2hpbGVQYXVzZWQoKQog
CiAgICAgTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCByZXN1bHQ7CiAgICAgZG8gewotICAgICAgICBy
ZXN1bHQgPSBtX3dvcmtlckdsb2JhbFNjb3BlLnRocmVhZCgpLnJ1bkxvb3AoKS5ydW5JbkRlYnVn
Z2VyTW9kZShtX3dvcmtlckdsb2JhbFNjb3BlKTsKKyAgICAgICAgcmVzdWx0ID0gbV9nbG9iYWxT
Y29wZS53b3JrZXJPcldvcmtsZXRUaHJlYWQoKS0+cnVuTG9vcCgpLnJ1bkluRGVidWdnZXJNb2Rl
KG1fZ2xvYmFsU2NvcGUpOwogICAgIH0gd2hpbGUgKHJlc3VsdCAhPSBNZXNzYWdlUXVldWVUZXJt
aW5hdGVkICYmICFkb25lUHJvY2Vzc2luZ0RlYnVnZ2VyRXZlbnRzKCkpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlci5oCmluZGV4IDFjNDU2OTk5YWVmNjJiNTQ0
NmFmOTdkNjU0NjRmOGM1NmM5ZTFhZDMuLjg4YTU1ZTllMzg2NDdiOGZkMzBhZGE3YjRiMWEwOWM1
MjljNDg4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1
Z2dlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlci5oCkBA
IC0zNSwxMyArMzUsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXb3JrZXJH
bG9iYWxTY29wZTsKK2NsYXNzIFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlOwogCiBjbGFzcyBX
b3JrZXJEZWJ1Z2dlciBmaW5hbCA6IHB1YmxpYyBKU0M6OkRlYnVnZ2VyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShXb3JrZXJEZWJ1Z2dlcik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgV29ya2VyRGVidWdnZXIoV29ya2VyR2xvYmFsU2NvcGUmKTsKKyAg
ICBXb3JrZXJEZWJ1Z2dlcihXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZSYpOwogICAgIH5Xb3Jr
ZXJEZWJ1Z2dlcigpIG92ZXJyaWRlID0gZGVmYXVsdDsKIAogCkBAIC01Myw3ICs1Myw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBydW5FdmVudExvb3BXaGlsZVBhdXNlZCgpIGZpbmFsOwogICAgIHZv
aWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4Y2VwdGlvbiop
IGNvbnN0IGZpbmFsOwogCi0gICAgV29ya2VyR2xvYmFsU2NvcGUmIG1fd29ya2VyR2xvYmFsU2Nv
cGU7CisgICAgV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUmIG1fZ2xvYmFsU2NvcGU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggOTBlOTg1NDRiNTNhNTAy
ZWI5OGE1ZDhjMjI1YjcwMzNiMzlhMDY3Zi4uN2Y0ODQ2MDMzMjhiZmZiNDBkNzQyOGUyNDRjNDdh
MGI5MjlkNGIyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlcklu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3Jr
ZXJJbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMzYsOCArMzYsOCBAQAogI2luY2x1ZGUgIldv
cmtlckNvbnNvbGVBZ2VudC5oIgogI2luY2x1ZGUgIldvcmtlckRPTURlYnVnZ2VyQWdlbnQuaCIK
ICNpbmNsdWRlICJXb3JrZXJEZWJ1Z2dlckFnZW50LmgiCi0jaW5jbHVkZSAiV29ya2VyR2xvYmFs
U2NvcGUuaCIKICNpbmNsdWRlICJXb3JrZXJOZXR3b3JrQWdlbnQuaCIKKyNpbmNsdWRlICJXb3Jr
ZXJPcldvcmtsZXRHbG9iYWxTY29wZS5oIgogI2luY2x1ZGUgIldvcmtlclJ1bnRpbWVBZ2VudC5o
IgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgogI2luY2x1ZGUgIldvcmtlclRvUGFnZUZyb250
ZW5kQ2hhbm5lbC5oIgpAQCAtNTcsMTYgKzU3LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCi1Xb3JrZXJJ
bnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyKFdvcmtlckdsb2Jh
bFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZSkKK1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXI6Oldv
cmtlckluc3BlY3RvckNvbnRyb2xsZXIoV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUmIGdsb2Jh
bFNjb3BlKQogICAgIDogbV9pbnN0cnVtZW50aW5nQWdlbnRzKEluc3RydW1lbnRpbmdBZ2VudHM6
OmNyZWF0ZSgqdGhpcykpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihtYWtlVW5pcXVl
PFdlYkluamVjdGVkU2NyaXB0TWFuYWdlcj4oKnRoaXMsIFdlYkluamVjdGVkU2NyaXB0SG9zdDo6
Y3JlYXRlKCkpKQogICAgICwgbV9mcm9udGVuZFJvdXRlcihGcm9udGVuZFJvdXRlcjo6Y3JlYXRl
KCkpCiAgICAgLCBtX2JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUo
bV9mcm9udGVuZFJvdXRlci5jb3B5UmVmKCkpKQogICAgICwgbV9leGVjdXRpb25TdG9wd2F0Y2go
U3RvcHdhdGNoOjpjcmVhdGUoKSkKLSAgICAsIG1fZGVidWdnZXIod29ya2VyR2xvYmFsU2NvcGUp
Ci0gICAgLCBtX3dvcmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKQorICAgICwgbV9k
ZWJ1Z2dlcihnbG9iYWxTY29wZSkKKyAgICAsIG1fZ2xvYmFsU2NvcGUoZ2xvYmFsU2NvcGUpCiB7
Ci0gICAgQVNTRVJUKHdvcmtlckdsb2JhbFNjb3BlLmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBB
U1NFUlQoZ2xvYmFsU2NvcGUuaXNDb250ZXh0VGhyZWFkKCkpOwogCiAgICAgYXV0byB3b3JrZXJD
b250ZXh0ID0gd29ya2VyQWdlbnRDb250ZXh0KCk7CiAKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lk
IFdvcmtlckluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCgpCiAgICAgbV9leGVj
dXRpb25TdG9wd2F0Y2gtPnJlc2V0KCk7CiAgICAgbV9leGVjdXRpb25TdG9wd2F0Y2gtPnN0YXJ0
KCk7CiAKLSAgICBtX2ZvcndhcmRpbmdDaGFubmVsID0gbWFrZVVuaXF1ZTxXb3JrZXJUb1BhZ2VG
cm9udGVuZENoYW5uZWw+KG1fd29ya2VyR2xvYmFsU2NvcGUpOworICAgIG1fZm9yd2FyZGluZ0No
YW5uZWwgPSBtYWtlVW5pcXVlPFdvcmtlclRvUGFnZUZyb250ZW5kQ2hhbm5lbD4obV9nbG9iYWxT
Y29wZSk7CiAgICAgbV9mcm9udGVuZFJvdXRlci0+Y29ubmVjdEZyb250ZW5kKCptX2ZvcndhcmRp
bmdDaGFubmVsLmdldCgpKTsKICAgICBtX2FnZW50cy5kaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tl
bmQoJm1fZnJvbnRlbmRSb3V0ZXIuZ2V0KCksICZtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpKTsK
IH0KQEAgLTE0OCw3ICsxNDgsNyBAQCBXb3JrZXJBZ2VudENvbnRleHQgV29ya2VySW5zcGVjdG9y
Q29udHJvbGxlcjo6d29ya2VyQWdlbnRDb250ZXh0KCkKIAogICAgIFdvcmtlckFnZW50Q29udGV4
dCB3b3JrZXJDb250ZXh0ID0gewogICAgICAgICB3ZWJDb250ZXh0LAotICAgICAgICBtX3dvcmtl
ckdsb2JhbFNjb3BlLAorICAgICAgICBtX2dsb2JhbFNjb3BlLAogICAgIH07CiAKICAgICByZXR1
cm4gd29ya2VyQ29udGV4dDsKQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lkIFdvcmtlckluc3BlY3Rv
ckNvbnRyb2xsZXI6OmNyZWF0ZUxhenlBZ2VudHMoKQogICAgIG1fYWdlbnRzLmFwcGVuZChtYWtl
VW5pcXVlPFdvcmtlclJ1bnRpbWVBZ2VudD4od29ya2VyQ29udGV4dCkpOwogCiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIGlmIChpczxTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU+KG1f
d29ya2VyR2xvYmFsU2NvcGUpKSB7CisgICAgaWYgKGlzPFNlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZT4obV9nbG9iYWxTY29wZSkpIHsKICAgICAgICAgbV9hZ2VudHMuYXBwZW5kKG1ha2VVbmlxdWU8
U2VydmljZVdvcmtlckFnZW50Pih3b3JrZXJDb250ZXh0KSk7CiAgICAgICAgIG1fYWdlbnRzLmFw
cGVuZChtYWtlVW5pcXVlPFdvcmtlck5ldHdvcmtBZ2VudD4od29ya2VyQ29udGV4dCkpOwogICAg
IH0KQEAgLTE5OSw3ICsxOTksNyBAQCBJbnNwZWN0b3JFdmFsdWF0ZUhhbmRsZXIgV29ya2VySW5z
cGVjdG9yQ29udHJvbGxlcjo6ZXZhbHVhdGVIYW5kbGVyKCkgY29uc3QKIAogVk0mIFdvcmtlcklu
c3BlY3RvckNvbnRyb2xsZXI6OnZtKCkKIHsKLSAgICByZXR1cm4gbV93b3JrZXJHbG9iYWxTY29w
ZS52bSgpOworICAgIHJldHVybiBtX2dsb2JhbFNjb3BlLnZtKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJ
bnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5z
cGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDdhNTNkODA0YmZiY2UwZjYyZTExNTNjNTEzYjE3OGQ3
NDIzODNlZGUuLjUyZmZhMjY3OTZhZjAyNTYwMDA0ZmNlOTVlNmZmZDJmNTVmZWY3ZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNvbnRyb2xs
ZXIuaApAQCAtNDEsMTQgKzQxLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW5z
dHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIFdlYkluamVjdGVkU2NyaXB0TWFuYWdlcjsKLWNsYXNz
IFdvcmtlckdsb2JhbFNjb3BlOworY2xhc3MgV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGU7CiBz
dHJ1Y3QgV29ya2VyQWdlbnRDb250ZXh0OwogCiBjbGFzcyBXb3JrZXJJbnNwZWN0b3JDb250cm9s
bGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yRW52aXJvbm1lbnQgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFdvcmtlckluc3BlY3RvckNvbnRyb2xsZXIpOwogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IFdvcmtlckluc3Bl
Y3RvckNvbnRyb2xsZXIoV29ya2VyR2xvYmFsU2NvcGUmKTsKKyAgICBleHBsaWNpdCBXb3JrZXJJ
bnNwZWN0b3JDb250cm9sbGVyKFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJik7CiAgICAgfldv
cmtlckluc3BlY3RvckNvbnRyb2xsZXIoKSBvdmVycmlkZTsKIAogICAgIHZvaWQgd29ya2VyVGVy
bWluYXRpbmcoKTsKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKICAgICBSZWY8V1RGOjpTdG9w
d2F0Y2g+IG1fZXhlY3V0aW9uU3RvcHdhdGNoOwogICAgIFdvcmtlckRlYnVnZ2VyIG1fZGVidWdn
ZXI7CiAgICAgSW5zcGVjdG9yOjpBZ2VudFJlZ2lzdHJ5IG1fYWdlbnRzOwotICAgIFdvcmtlckds
b2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOworICAgIFdvcmtlck9yV29ya2xldEdsb2Jh
bFNjb3BlJiBtX2dsb2JhbFNjb3BlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkZy
b250ZW5kQ2hhbm5lbD4gbV9mb3J3YXJkaW5nQ2hhbm5lbDsKICAgICBib29sIG1fZGlkQ3JlYXRl
TGF6eUFnZW50cyB7IGZhbHNlIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1dvcmtlclRvUGFnZUZyb250ZW5kQ2hhbm5lbC5oIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1dvcmtlclRvUGFnZUZyb250ZW5kQ2hhbm5lbC5oCmluZGV4IGMwMjYyMTEzNWM1NWVi
ZDcwNmUwNDM1MWI1YzEzZjYxM2JlYTY1MzQuLjMyNzAyYmVlYTRkN2ZhNDg4MWNhMDI2NWM3ZWRj
OTMxYmM2ZmMwMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJU
b1BhZ2VGcm9udGVuZENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29y
a2VyVG9QYWdlRnJvbnRlbmRDaGFubmVsLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiV29ya2VyRGVidWdnZXJQcm94eS5oIgotI2luY2x1ZGUgIldvcmtlckds
b2JhbFNjb3BlLmgiCisjaW5jbHVkZSAiV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUuaCIKICNp
bmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwuaD4KIApAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBXb3JrZXJUb1BhZ2VGcm9udGVuZENoYW5uZWwgZmluYWwgOiBwdWJsaWMgSW5z
cGVjdG9yOjpGcm9udGVuZENoYW5uZWwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIGV4cGxpY2l0IFdvcmtlclRvUGFnZUZyb250ZW5kQ2hhbm5lbChXb3JrZXJH
bG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUpCi0gICAgICAgIDogbV93b3JrZXJHbG9iYWxT
Y29wZSh3b3JrZXJHbG9iYWxTY29wZSkKKyAgICBleHBsaWNpdCBXb3JrZXJUb1BhZ2VGcm9udGVu
ZENoYW5uZWwoV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUmIGdsb2JhbFNjb3BlKQorICAgICAg
ICA6IG1fZ2xvYmFsU2NvcGUoZ2xvYmFsU2NvcGUpCiAgICAgewogICAgIH0KICAgICB+V29ya2Vy
VG9QYWdlRnJvbnRlbmRDaGFubmVsKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OwpAQCAtNDYsMTAgKzQ2
LDExIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBtX3dvcmtlckdsb2JhbFNj
b3BlLnRocmVhZCgpLndvcmtlckRlYnVnZ2VyUHJveHkoKS5wb3N0TWVzc2FnZVRvRGVidWdnZXIo
bWVzc2FnZSk7CisgICAgICAgIGlmIChhdXRvKiB3b3JrZXJEZWJ1Z2dlclByb3h5ID0gbV9nbG9i
YWxTY29wZS53b3JrZXJPcldvcmtsZXRUaHJlYWQoKS0+d29ya2VyRGVidWdnZXJQcm94eSgpKQor
ICAgICAgICAgICAgd29ya2VyRGVidWdnZXJQcm94eS0+cG9zdE1lc3NhZ2VUb0RlYnVnZ2VyKG1l
c3NhZ2UpOwogICAgIH0KIAotICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNj
b3BlOworICAgIFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJiBtX2dsb2JhbFNjb3BlOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5jcHAKaW5kZXgg
YmJlMmNjMDNkNjQ1ZmMxMjkwODRkYmVlOWRkODA0MjJiYmQ2M2ZkOC4uMjFiMzBlZTI5NDcyNmIy
M2MyN2FiMjA0NTZlNTk4MjUzNjkxM2QxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuY3BwCkBA
IC0zOCwxMCArMzgsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogU2VydmljZVdv
cmtlckFnZW50OjpTZXJ2aWNlV29ya2VyQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0JiBjb250ZXh0
KQogICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKCJTZXJ2aWNlV29ya2VyIl9zLCBjb250ZXh0KQot
ICAgICwgbV9zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUoZG93bmNhc3Q8U2VydmljZVdvcmtlckds
b2JhbFNjb3BlPihjb250ZXh0Lndvcmtlckdsb2JhbFNjb3BlKSkKKyAgICAsIG1fc2VydmljZVdv
cmtlckdsb2JhbFNjb3BlKGRvd25jYXN0PFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZT4oY29udGV4
dC5nbG9iYWxTY29wZSkpCiAgICAgLCBtX2JhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6U2Vy
dmljZVdvcmtlckJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoY29udGV4dC5iYWNrZW5kRGlzcGF0
Y2hlciwgdGhpcykpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQud29ya2VyR2xvYmFsU2NvcGUuaXND
b250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChjb250ZXh0Lmdsb2JhbFNjb3BlLmlzQ29udGV4
dFRocmVhZCgpKTsKIH0KIAogU2VydmljZVdvcmtlckFnZW50Ojp+U2VydmljZVdvcmtlckFnZW50
KCkgPSBkZWZhdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmNwcAppbmRleCBmNjRkNTc1MzBiN2I2MTcw
ZWFhZGU5MjNlNDA5YjViZGRlYTcyZTQwLi41MTU5MDQ0YmFlYjAwNGQwN2ViNmQ0NmYxNzAzYjdj
MjA4Nzk4MTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dv
cmtlci9Xb3JrZXJBdWRpdEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2lu
Y2x1ZGUgIldvcmtlckF1ZGl0QWdlbnQuaCIKIAogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCi0j
aW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlICJXb3JrZXJPcldvcmtsZXRH
bG9iYWxTY29wZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luamVjdGVkU2NyaXB0Lmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgpAQCAtNDEsOSArNDEsOSBAQCB1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBXb3JrZXJBdWRpdEFnZW50OjpXb3JrZXJBdWRpdEFn
ZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKICAgICA6IEluc3BlY3RvckF1ZGl0QWdl
bnQoY29udGV4dCkKLSAgICAsIG1fd29ya2VyR2xvYmFsU2NvcGUoY29udGV4dC53b3JrZXJHbG9i
YWxTY29wZSkKKyAgICAsIG1fZ2xvYmFsU2NvcGUoY29udGV4dC5nbG9iYWxTY29wZSkKIHsKLSAg
ICBBU1NFUlQoY29udGV4dC53b3JrZXJHbG9iYWxTY29wZS5pc0NvbnRleHRUaHJlYWQoKSk7Cisg
ICAgQVNTRVJUKGNvbnRleHQuZ2xvYmFsU2NvcGUuaXNDb250ZXh0VGhyZWFkKCkpOwogfQogCiBX
b3JrZXJBdWRpdEFnZW50Ojp+V29ya2VyQXVkaXRBZ2VudCgpID0gZGVmYXVsdDsKQEAgLTU1LDcg
KzU1LDcgQEAgSW5qZWN0ZWRTY3JpcHQgV29ya2VyQXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRG
b3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXIKICAgICAgICAgcmV0dXJuIEluamVjdGVk
U2NyaXB0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGluamVjdGVkU2NyaXB0TWFuYWdlcigpLmlu
amVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9iamVjdChtX3dvcmtlckdsb2JhbFNjb3BlKSk7CisgICAg
cmV0dXJuIGluamVjdGVkU2NyaXB0TWFuYWdlcigpLmluamVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9i
amVjdChtX2dsb2JhbFNjb3BlKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1
ZGl0QWdlbnQuaAppbmRleCBkMjU5YzZhNzZjMmVjYjBlZWI4ZWRkNzMzOWVjMDQ1OWJkMzcyYjNk
Li44NTUyMDc5ODUwZTUwZGVlODVjZTIyNzRiOWY0NTViNDQ5NDMzNTk1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRB
Z2VudC5oCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
V29ya2VyR2xvYmFsU2NvcGU7CitjbGFzcyBXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZTsKIAog
Y2xhc3MgV29ya2VyQXVkaXRBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rv
ckF1ZGl0QWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdvcmtlckF1ZGl0QWdlbnQp
OwpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0
aW9uQ29udGV4dElkPiYmKTsKIAotICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2Jh
bFNjb3BlOworICAgIFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlJiBtX2dsb2JhbFNjb3BlOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckNvbnNvbGVBZ2VudC5jcHAKaW5k
ZXggZWFkNDJkYzMzZDY4N2YwNDNlZDU2N2UzYjhmNGIxNTgwNzY5NjY3Ni4uOGZiODhmY2U5YTYy
M2VmOGNhMTQzOTYzMGRhMGQ2M2I3NjBkYzkwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJDb25zb2xlQWdlbnQuY3Bw
CkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV29ya2Vy
Q29uc29sZUFnZW50LmgiCiAKLSNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5oIgorI2luY2x1
ZGUgIldvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMzUsNyArMzUsNyBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogV29ya2VyQ29u
c29sZUFnZW50OjpXb3JrZXJDb25zb2xlQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0JiBjb250ZXh0
KQogICAgIDogV2ViQ29uc29sZUFnZW50KGNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQu
d29ya2VyR2xvYmFsU2NvcGUuaXNDb250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChjb250ZXh0
Lmdsb2JhbFNjb3BlLmlzQ29udGV4dFRocmVhZCgpKTsKIH0KIAogV29ya2VyQ29uc29sZUFnZW50
Ojp+V29ya2VyQ29uc29sZUFnZW50KCkgPSBkZWZhdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50
LmNwcAppbmRleCAzYWUzNWM2N2EzMDM0MWQ3ZWUxMmY2Y2M1Njg4ZGUxZWM3OGM2M2UwLi41MDQ3
MmNkODEwNTE0MGE3M2VkYmY3NjgyNzIzZDdiYzJmMmU1YWQwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dl
ckFnZW50LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIldvcmtlckRlYnVnZ2VyQWdl
bnQuaCIKIAogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCi0jaW5jbHVkZSAiV29ya2VyR2xvYmFs
U2NvcGUuaCIKKyNpbmNsdWRlICJXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZS5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVNZXNzYWdlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5qZWN0ZWRTY3JpcHQuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuaD4KQEAgLTQxLDE2ICs0MSwxNiBAQCB1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwogCiBXb3JrZXJEZWJ1Z2dlckFnZW50OjpXb3JrZXJEZWJ1Z2dlckFnZW50KFdvcmtl
ckFnZW50Q29udGV4dCYgY29udGV4dCkKICAgICA6IFdlYkRlYnVnZ2VyQWdlbnQoY29udGV4dCkK
LSAgICAsIG1fd29ya2VyR2xvYmFsU2NvcGUoY29udGV4dC53b3JrZXJHbG9iYWxTY29wZSkKKyAg
ICAsIG1fZ2xvYmFsU2NvcGUoY29udGV4dC5nbG9iYWxTY29wZSkKIHsKLSAgICBBU1NFUlQoY29u
dGV4dC53b3JrZXJHbG9iYWxTY29wZS5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgQVNTRVJUKGNv
bnRleHQuZ2xvYmFsU2NvcGUuaXNDb250ZXh0VGhyZWFkKCkpOwogfQogCiBXb3JrZXJEZWJ1Z2dl
ckFnZW50Ojp+V29ya2VyRGVidWdnZXJBZ2VudCgpID0gZGVmYXVsdDsKIAogdm9pZCBXb3JrZXJE
ZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uTG9nKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgbV93b3JrZXJHbG9i
YWxTY29wZS5hZGRDb25zb2xlTWVzc2FnZShtYWtlVW5pcXVlPENvbnNvbGVNZXNzYWdlPihNZXNz
YWdlU291cmNlOjpKUywgTWVzc2FnZVR5cGU6OkxvZywgTWVzc2FnZUxldmVsOjpMb2csIG1lc3Nh
Z2UsIGNyZWF0ZVNjcmlwdENhbGxTdGFjayhsZXhpY2FsR2xvYmFsT2JqZWN0KSkpOworICAgIG1f
Z2xvYmFsU2NvcGUuYWRkQ29uc29sZU1lc3NhZ2UobWFrZVVuaXF1ZTxDb25zb2xlTWVzc2FnZT4o
TWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VUeXBlOjpMb2csIE1lc3NhZ2VMZXZlbDo6TG9nLCBt
ZXNzYWdlLCBjcmVhdGVTY3JpcHRDYWxsU3RhY2sobGV4aWNhbEdsb2JhbE9iamVjdCkpKTsKIH0K
IAogSW5qZWN0ZWRTY3JpcHQgV29ya2VyRGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29s
OjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQpAQCAt
NjAsNyArNjAsNyBAQCBJbmplY3RlZFNjcmlwdCBXb3JrZXJEZWJ1Z2dlckFnZW50OjppbmplY3Rl
ZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJgogICAgICAgICByZXR1cm4gSW5q
ZWN0ZWRTY3JpcHQoKTsKICAgICB9CiAKLSAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KCkuaW5qZWN0ZWRTY3JpcHRGb3IoZ2xvYmFsT2JqZWN0KG1fd29ya2VyR2xvYmFsU2NvcGUpKTsK
KyAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkuaW5qZWN0ZWRTY3JpcHRGb3IoZ2xv
YmFsT2JqZWN0KG1fZ2xvYmFsU2NvcGUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
RGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyRGVidWdnZXJBZ2VudC5oCmluZGV4IDdjYTY0ZTQwMTNhNTRiNDE4ZDUzZTQ3NDgwMmU3
MzJiZjE5MDhjOTcuLjg0MzNlM2JjYWZmODM3ZWMxZWEzMThlNDhlYWQwZjY2NTlhMWQ1NmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRl
YnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtl
ci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBXb3JrZXJHbG9iYWxTY29wZTsKK2NsYXNzIFdvcmtlck9yV29ya2xl
dEdsb2JhbFNjb3BlOwogCiBjbGFzcyBXb3JrZXJEZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGlj
IFdlYkRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdvcmtlckRlYnVn
Z2VyQWdlbnQpOwpAQCAtNDgsNyArNDgsNyBAQCBwcml2YXRlOgogCiAgICAgSW5zcGVjdG9yOjpJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVj
dXRpb25Db250ZXh0SWQ+JiYpOwogCi0gICAgV29ya2VyR2xvYmFsU2NvcGUmIG1fd29ya2VyR2xv
YmFsU2NvcGU7CisgICAgV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUmIG1fZ2xvYmFsU2NvcGU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmNwcApp
bmRleCA1ZGNlODI2ZjRiMTBlMGNkNDg1Yzg1OWFhMzcyOTMyYmVlNjRiNWE5Li45MDhlODgzN2Fk
MTg2YzE3M2U3M2UxZTI4YTg5MmM3YzIxOGVjNjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5j
cHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJXb3JrZXJOZXR3b3JrQWdlbnQuaCIKIAog
I2luY2x1ZGUgIldvcmtlckRlYnVnZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJXb3JrZXJHbG9iYWxT
Y29wZS5oIgorI2luY2x1ZGUgIldvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlLmgiCiAjaW5jbHVk
ZSAiV29ya2VyVGhyZWFkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDkgKzM2LDkg
QEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogV29ya2VyTmV0d29ya0FnZW50OjpXb3Jr
ZXJOZXR3b3JrQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0JiBjb250ZXh0KQogICAgIDogSW5zcGVj
dG9yTmV0d29ya0FnZW50KGNvbnRleHQpCi0gICAgLCBtX3dvcmtlckdsb2JhbFNjb3BlKGNvbnRl
eHQud29ya2VyR2xvYmFsU2NvcGUpCisgICAgLCBtX2dsb2JhbFNjb3BlKGNvbnRleHQuZ2xvYmFs
U2NvcGUpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQud29ya2VyR2xvYmFsU2NvcGUuaXNDb250ZXh0
VGhyZWFkKCkpOworICAgIEFTU0VSVChjb250ZXh0Lmdsb2JhbFNjb3BlLmlzQ29udGV4dFRocmVh
ZCgpKTsKIH0KIAogV29ya2VyTmV0d29ya0FnZW50Ojp+V29ya2VyTmV0d29ya0FnZW50KCkgPSBk
ZWZhdWx0OwpAQCAtNjEsMTIgKzYxLDEzIEBAIFZlY3RvcjxXZWJTb2NrZXQqPiBXb3JrZXJOZXR3
b3JrQWdlbnQ6OmFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRlciYpCiAKIHZvaWQgV29y
a2VyTmV0d29ya0FnZW50OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZEludGVybmFsKGJvb2wg
ZGlzYWJsZWQpCiB7Ci0gICAgbV93b3JrZXJHbG9iYWxTY29wZS50aHJlYWQoKS53b3JrZXJEZWJ1
Z2dlclByb3h5KCkuc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRCeVdlYkluc3BlY3RvcihkaXNh
YmxlZCk7CisgICAgaWYgKGF1dG8qIHdvcmtlckRlYnVnZ2VyUHJveHkgPSBtX2dsb2JhbFNjb3Bl
Lndvcmtlck9yV29ya2xldFRocmVhZCgpLT53b3JrZXJEZWJ1Z2dlclByb3h5KCkpCisgICAgICAg
IHdvcmtlckRlYnVnZ2VyUHJveHktPnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkQnlXZWJJbnNw
ZWN0b3IoZGlzYWJsZWQpOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBXb3JrZXJOZXR3
b3JrQWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwg
Y29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKQogewotICAgIHJldHVybiAmbV93b3Jr
ZXJHbG9iYWxTY29wZTsKKyAgICByZXR1cm4gJm1fZ2xvYmFsU2NvcGU7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmgKaW5kZXggZGQ4N2Q4MTAyMDJlNWIx
N2RlOWNmMDdiNzYyYjUyNWVlZTJlM2JlOC4uZTVkZmY5ZDFhMzRkOWJjNDNjYjI3MzBhODMwNDYw
Yjc3OWU0NWEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93
b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmgKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJp
dmF0ZToKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6TmV0d29yazo6RnJhbWVJZCYpOwogICAgIGJvb2wgc2hvdWxkRm9yY2VCdWZmZXJpbmdO
ZXR3b3JrUmVzb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgV29ya2Vy
R2xvYmFsU2NvcGUmIG1fd29ya2VyR2xvYmFsU2NvcGU7CisgICAgV29ya2VyT3JXb3JrbGV0R2xv
YmFsU2NvcGUmIG1fZ2xvYmFsU2NvcGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJS
dW50aW1lQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50LmNwcAppbmRleCBhYTU4YTFmMGQ3YTgxYjAwNjgxZjY2OGE5ZmM0
YTcyNTg2YjEzZGNkLi4xMmI4MDBmYzc4ZGE3NDgxOTg0NDI3ZTMyZDIwYTkxNTBkYjg2YzE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJS
dW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJX
b3JrZXJSdW50aW1lQWdlbnQuaCIKIAogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCi0jaW5jbHVk
ZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlICJXb3JrZXJPcldvcmtsZXRHbG9iYWxT
Y29wZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luamVjdGVkU2NyaXB0Lmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmg+CiAKQEAgLTQ0LDkg
KzQ0LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIFdvcmtlclJ1bnRpbWVBZ2VudDo6
V29ya2VyUnVudGltZUFnZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKICAgICA6IElu
c3BlY3RvclJ1bnRpbWVBZ2VudChjb250ZXh0KQogICAgICwgbV9iYWNrZW5kRGlzcGF0Y2hlcihS
dW50aW1lQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShjb250ZXh0LmJhY2tlbmREaXNwYXRjaGVy
LCB0aGlzKSkKLSAgICAsIG1fd29ya2VyR2xvYmFsU2NvcGUoY29udGV4dC53b3JrZXJHbG9iYWxT
Y29wZSkKKyAgICAsIG1fZ2xvYmFsU2NvcGUoY29udGV4dC5nbG9iYWxTY29wZSkKIHsKLSAgICBB
U1NFUlQoY29udGV4dC53b3JrZXJHbG9iYWxTY29wZS5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAg
QVNTRVJUKGNvbnRleHQuZ2xvYmFsU2NvcGUuaXNDb250ZXh0VGhyZWFkKCkpOwogfQogCiBXb3Jr
ZXJSdW50aW1lQWdlbnQ6On5Xb3JrZXJSdW50aW1lQWdlbnQoKSA9IGRlZmF1bHQ7CkBAIC01OCw3
ICs1OCw3IEBAIEluamVjdGVkU2NyaXB0IFdvcmtlclJ1bnRpbWVBZ2VudDo6aW5qZWN0ZWRTY3Jp
cHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYKICAgICAgICAgcmV0dXJuIEluamVjdGVk
U2NyaXB0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGluamVjdGVkU2NyaXB0TWFuYWdlcigpLmlu
amVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9iamVjdChtX3dvcmtlckdsb2JhbFNjb3BlKSk7CisgICAg
cmV0dXJuIGluamVjdGVkU2NyaXB0TWFuYWdlcigpLmluamVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9i
amVjdChtX2dsb2JhbFNjb3BlKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRp
bWVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
UnVudGltZUFnZW50LmgKaW5kZXggNmI5OThmNGQxNzMxODUxZjk5YjY3ZWUxNWE1ZDIwMDE1ODdm
NGQwNi4uYjkyZGIzNzNlNjE1YzE4ODc2M2Q3Yjg3MTNiZGIwMDZmMzJiODQ1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
UnVudGltZUFnZW50LmgKQEAgLTM2LDcgKzM2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBXb3JrZXJHbG9iYWxTY29wZTsKK2NsYXNzIFdvcmtlck9yV29ya2xldEdsb2JhbFNj
b3BlOwogCiBjbGFzcyBXb3JrZXJSdW50aW1lQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9y
OjpJbnNwZWN0b3JSdW50aW1lQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdvcmtl
clJ1bnRpbWVBZ2VudCk7CkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1bm11
dGVDb25zb2xlKCkgeyB9CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpSdW50aW1lQmFja2VuZERp
c3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci0gICAgV29ya2VyR2xvYmFsU2NvcGUmIG1f
d29ya2VyR2xvYmFsU2NvcGU7CisgICAgV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUmIG1fZ2xv
YmFsU2NvcGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCmluZGV4IDU3YjlmNzIzN2ZmN2YxNjZhNWJi
YzRhNjIzYWIyMWVjMTVhMTY0NjcuLjUwMmVjN2Q3NzYzNTVmOTZlMGRlOGRjOGM0MzkxNTgxZjkw
NmY2MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2Nv
cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3Bw
CkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5Qb2xpY3kuaCIKICNp
bmNsdWRlICJTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaCIKICNpbmNsdWRlICJTb2NrZXRQcm92
aWRlci5oIgotI2luY2x1ZGUgIldvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJXb3JrZXJMb2FkZXJQcm94eS5oIgogI2luY2x1ZGUgIldvcmtlckxvY2F0aW9uLmgiCiAjaW5j
bHVkZSAiV29ya2VyTWVzc2FnaW5nUHJveHkuaCIKQEAgLTY1LDcgKzY0LDYgQEAgV29ya2VyR2xv
YmFsU2NvcGU6Oldvcmtlckdsb2JhbFNjb3BlKGNvbnN0IFdvcmtlclBhcmFtZXRlcnMmIHBhcmFt
cywgUmVmPFNlY3VyaXQKICAgICAsIG1fdXJsKHBhcmFtcy5zY3JpcHRVUkwpCiAgICAgLCBtX2lk
ZW50aWZpZXIocGFyYW1zLmlkZW50aWZpZXIpCiAgICAgLCBtX3VzZXJBZ2VudChwYXJhbXMudXNl
ckFnZW50KQotICAgICwgbV9pbnNwZWN0b3JDb250cm9sbGVyKG1ha2VVbmlxdWU8V29ya2VySW5z
cGVjdG9yQ29udHJvbGxlcj4oKnRoaXMpKQogICAgICwgbV9pc09ubGluZShwYXJhbXMuaXNPbmxp
bmUpCiAgICAgLCBtX3Nob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeShw
YXJhbXMuc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KQogICAgICwg
bV90b3BPcmlnaW4oV1RGTW92ZSh0b3BPcmlnaW4pKQpAQCAtMTIxLDggKzExOSw2IEBAIHZvaWQg
V29ya2VyR2xvYmFsU2NvcGU6OnByZXBhcmVGb3JEZXN0cnVjdGlvbigpCiAKICAgICBpZiAobV9j
YWNoZVN0b3JhZ2VDb25uZWN0aW9uKQogICAgICAgICBtX2NhY2hlU3RvcmFnZUNvbm5lY3Rpb24t
PmNsZWFyUGVuZGluZ1JlcXVlc3RzKCk7Ci0KLSAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPndv
cmtlclRlcm1pbmF0aW5nKCk7CiB9CiAKIHZvaWQgV29ya2VyR2xvYmFsU2NvcGU6OnJlbW92ZUFs
bEV2ZW50TGlzdGVuZXJzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyR2xvYmFsU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2Nv
cGUuaAppbmRleCAyZGU4MGUxNGMyYjYzOGM0NTFjOTMzZjYyODYxOTY3NmFmYjkzZmRlLi5kOTIy
MWRiOWY1ODY3YTJjMGIyODljMzM4ZDNkNDQyMGY4MzY0NmMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCkBAIC00Nyw3ICs0Nyw2IEBAIGNsYXNzIENvbnRl
bnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVyczsKIGNsYXNzIENyeXB0bzsKIGNsYXNzIFBl
cmZvcm1hbmNlOwogY2xhc3MgU2NoZWR1bGVkQWN0aW9uOwotY2xhc3MgV29ya2VySW5zcGVjdG9y
Q29udHJvbGxlcjsKIGNsYXNzIFdvcmtlckxvY2F0aW9uOwogY2xhc3MgV29ya2VyTmF2aWdhdG9y
OwogY2xhc3MgV29ya2VyU1dDbGllbnRDb25uZWN0aW9uOwpAQCAtODEsOCArODAsNiBAQCBwdWJs
aWM6CiAgICAgV29ya2VyU1dDbGllbnRDb25uZWN0aW9uJiBzd0NsaWVudENvbm5lY3Rpb24oKTsK
ICNlbmRpZgogCi0gICAgV29ya2VySW5zcGVjdG9yQ29udHJvbGxlciYgaW5zcGVjdG9yQ29udHJv
bGxlcigpIGNvbnN0IHsgcmV0dXJuICptX2luc3BlY3RvckNvbnRyb2xsZXI7IH0KLQogICAgIFdv
cmtlclRocmVhZCYgdGhyZWFkKCkgY29uc3Q7CiAKICAgICB1c2luZyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHk7CkBAIC0xNjgsNyArMTY1LDYgQEAgcHJpdmF0ZToK
ICAgICBtdXRhYmxlIFJlZlB0cjxXb3JrZXJOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOwogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPFdvcmtlck9yV29ya2xldFNjcmlwdENvbnRyb2xsZXI+IG1fc2NyaXB0
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyPiBtX2luc3Bl
Y3RvckNvbnRyb2xsZXI7CiAKICAgICBib29sIG1faXNPbmxpbmU7CiAgICAgYm9vbCBtX3Nob3Vs
ZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZS5jcHAKaW5kZXggNWY2
NjM1ZWJiMzdjY2VkMzI2MDU2YjgyM2M3MDA5Nzk4Y2RlMjIxMS4uNmFkMzRlYzhmYTIxYzVjMWE2
N2RiN2YyMjRiMWQ2NDczZGUwYWU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiV29ya2Vy
RXZlbnRMb29wLmgiCisjaW5jbHVkZSAiV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIldvcmtlck9yV29ya2xldFNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXb3Jr
ZXJPcldvcmtsZXRUaHJlYWQuaCIKICNpbmNsdWRlICJXb3JrZXJSdW5Mb29wLmgiCkBAIC0zOSw2
ICs0MCw3IEBAIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChXb3JrZXJPcldvcmtsZXRHbG9i
YWxTY29wZSk7CiBXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZTo6V29ya2VyT3JXb3JrbGV0R2xv
YmFsU2NvcGUoUmVmPEpTQzo6Vk0+JiYgdm0sIFdvcmtlck9yV29ya2xldFRocmVhZCogdGhyZWFk
KQogICAgIDogbV9zY3JpcHQobWFrZVVuaXF1ZTxXb3JrZXJPcldvcmtsZXRTY3JpcHRDb250cm9s
bGVyPihXVEZNb3ZlKHZtKSwgdGhpcykpCiAgICAgLCBtX3RocmVhZCh0aHJlYWQpCisgICAgLCBt
X2luc3BlY3RvckNvbnRyb2xsZXIobWFrZVVuaXF1ZTxXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVy
PigqdGhpcykpCiB7CiB9CiAKQEAgLTU5LDYgKzYxLDggQEAgdm9pZCBXb3JrZXJPcldvcmtsZXRH
bG9iYWxTY29wZTo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKICAgICBpZiAobV9ldmVudExvb3Ap
CiAgICAgICAgIG1fZXZlbnRMb29wLT5jbGVhck1pY3JvdGFza1F1ZXVlKCk7CiAgICAgcmVtb3Zl
UmVqZWN0ZWRQcm9taXNlVHJhY2tlcigpOworCisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT53
b3JrZXJUZXJtaW5hdGluZygpOwogfQogCiB2b2lkIFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3Bl
OjpjbGVhclNjcmlwdCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ck9yV29ya2xldEdsb2JhbFNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlck9y
V29ya2xldEdsb2JhbFNjb3BlLmgKaW5kZXggOGExNzgwZjY4NTBkOTFkMzUwNDEzYTc1NzkwNWVl
ZjJhODlhOTExMy4uZjBjOTBjMjIxOWJmZTQ5MjZjODI4NzEzNjZjMzg5MDljNjFmNzQ4NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJPcldvcmtsZXRHbG9iYWxTY29w
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyT3JXb3JrbGV0R2xvYmFsU2Nv
cGUuaApAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50
TG9vcFRhc2tHcm91cDsKIGNsYXNzIFdvcmtlckV2ZW50TG9vcDsKK2NsYXNzIFdvcmtlckluc3Bl
Y3RvckNvbnRyb2xsZXI7CiBjbGFzcyBXb3JrZXJPcldvcmtsZXRTY3JpcHRDb250cm9sbGVyOwog
Y2xhc3MgV29ya2VyT3JXb3JrbGV0VGhyZWFkOwogCkBAIC00OCw2ICs0OSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNsZWFyU2NyaXB0KCk7CiAKICAgICBKU0M6OlZNJiB2bSgpIGZpbmFsOworICAg
IFdvcmtlckluc3BlY3RvckNvbnRyb2xsZXImIGluc3BlY3RvckNvbnRyb2xsZXIoKSBjb25zdCB7
IHJldHVybiAqbV9pbnNwZWN0b3JDb250cm9sbGVyOyB9CiAKICAgICB1bnNpZ25lZCBsb25nIGNy
ZWF0ZVVuaXF1ZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX3VuaXF1ZUlkZW50aWZpZXIrKzsgfQog
CkBAIC04OCw2ICs5MCw3IEBAIHByaXZhdGU6CiAgICAgV29ya2VyT3JXb3JrbGV0VGhyZWFkKiBt
X3RocmVhZDsKICAgICBSZWZQdHI8V29ya2VyRXZlbnRMb29wPiBtX2V2ZW50TG9vcDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29wVGFza0dyb3VwPiBtX2RlZmF1bHRUYXNrR3JvdXA7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdvcmtlckluc3BlY3RvckNvbnRyb2xsZXI+IG1faW5zcGVjdG9y
Q29udHJvbGxlcjsKICAgICB1bnNpZ25lZCBsb25nIG1fdW5pcXVlSWRlbnRpZmllciB7IDEgfTsK
ICAgICBib29sIG1faXNDbG9zaW5nIHsgZmFsc2UgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlck9yV29ya2xldFRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJPcldvcmtsZXRUaHJlYWQuaAppbmRleCBiM2U3OTI0MDlkYzkwYTEyYzVm
Zjg5ZTc2YjA3ZDM4MTQzZTdiMGEwLi5hMDk0M2Q4MzhkNTgxOTUxMjM0ZjcwZWEzN2Q0ZTAwNjM5
OGY4NzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlck9yV29ya2xl
dFRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyT3JXb3JrbGV0VGhy
ZWFkLmgKQEAgLTM4LDYgKzM4LDcgQEAgY2xhc3MgVGhyZWFkOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIFdvcmtlckRlYnVnZ2VyUHJveHk7CiBjbGFzcyBXb3JrZXJMb2FkZXJQcm94
eTsKIGNsYXNzIFdvcmtlclJ1bkxvb3A7CiAKQEAgLTQ2LDYgKzQ3LDggQEAgcHVibGljOgogICAg
IHZpcnR1YWwgfldvcmtlck9yV29ya2xldFRocmVhZCgpOwogCiAgICAgV1RGOjpUaHJlYWQqIHRo
cmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkLmdldCgpOyB9CisKKyAgICB2aXJ0dWFsIFdv
cmtlckRlYnVnZ2VyUHJveHkqIHdvcmtlckRlYnVnZ2VyUHJveHkoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBXb3JrZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVyUHJveHkoKSA9IDA7CiAKICAg
ICBXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZSogZ2xvYmFsU2NvcGUoKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbFNjb3BlLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlclRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQu
aAppbmRleCAzNTk1YzVkODdmZTRhYmE2ZWJiOTBkNjExMDMyNzAwYzk5NWFjMWU2Li5lM2RmMDll
NDgzMDE0NWJiYzc0YWQwMWJiZGE0ODYxMmIwOWMwNjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyVGhyZWFkLmgKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfldv
cmtlclRocmVhZCgpOwogCiAgICAgV29ya2VyTG9hZGVyUHJveHkmIHdvcmtlckxvYWRlclByb3h5
KCkgZmluYWwgeyByZXR1cm4gbV93b3JrZXJMb2FkZXJQcm94eTsgfQotICAgIFdvcmtlckRlYnVn
Z2VyUHJveHkmIHdvcmtlckRlYnVnZ2VyUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3dvcmtlckRl
YnVnZ2VyUHJveHk7IH0KKyAgICBXb3JrZXJEZWJ1Z2dlclByb3h5KiB3b3JrZXJEZWJ1Z2dlclBy
b3h5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gJm1fd29ya2VyRGVidWdnZXJQcm94eTsgfQogICAg
IFdvcmtlclJlcG9ydGluZ1Byb3h5JiB3b3JrZXJSZXBvcnRpbmdQcm94eSgpIGNvbnN0IHsgcmV0
dXJuIG1fd29ya2VyUmVwb3J0aW5nUHJveHk7IH0KIAogICAgIC8vIE51bWJlciBvZiBhY3RpdmUg
d29ya2VyIHRocmVhZHMuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>