<?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>122982</bug_id>
          
          <creation_ts>2013-10-17 11:23:57 -0700</creation_ts>
          <short_desc>Change native function call stubs to use JIT operations instead of ctiVMHandleException</short_desc>
          <delta_ts>2013-10-18 09:23:30 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>122758</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>alex.christensen</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>940861</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-17 11:23:57 -0700</bug_when>
    <thetext>CTI Native call is the last user of ctiVMHandleException.  These need to be transitioned to JIT Operations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941070</commentid>
    <comment_count>1</comment_count>
      <attachid>214538</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-17 18:33:49 -0700</bug_when>
    <thetext>Created attachment 214538
Patch

This patch also fixes https://bugs.webkit.org/show_bug.cgi?id=122980 by eliminating the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941072</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-17 18:36:03 -0700</bug_when>
    <thetext>*** Bug 122980 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941075</commentid>
    <comment_count>3</comment_count>
      <attachid>214538</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-17 18:53:47 -0700</bug_when>
    <thetext>Comment on attachment 214538
Patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:155
&gt; +    // lookupExceptionHandler leaves the handler CallFrame* in vm-&gt;callFrameForThrow,
&gt; +    // and the address of the handler in vm-&gt;targetMachinePCForThrow.
&gt; +    move(TrustedImmPtr(m_vm), GPRInfo::regT0);
&gt; +    loadPtr(Address(GPRInfo::regT0, VM::targetMachinePCForThrowOffset()), GPRInfo::regT1);
&gt; +    loadPtr(Address(GPRInfo::regT0, VM::callFrameForThrowOffset()), GPRInfo::regT0);
&gt; +    jump(GPRInfo::regT1);

Can you put this in a helper function?

&gt; Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:195
&gt; +    // operationVMHandleException leaves the handler CallFrame* in vm-&gt;callFrameForThrow,
&gt; +    // and the address of the handler in vm-&gt;targetMachinePCForThrow.
&gt; +    move(TrustedImmPtr(vm), regT0);
&gt; +    loadPtr(Address(regT0, VM::targetMachinePCForThrowOffset()), regT1);
&gt; +    loadPtr(Address(regT0, VM::callFrameForThrowOffset()), regT0);
&gt;      jump(regT1);

Can you put this in a helper function? (It should be the same on 32-bit: loadPtr in both cases.)

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:1642
&gt; +void JIT_OPERATION operationVMHandleException(ExecState* exec, VM* vm)

Why do we need the VM* argument? Let&apos;s remove it, to simplify callers.

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:1654
&gt; +    vm-&gt;topCallFrame = exec;

We don&apos;t need this. NativeCallFrameTracer takes care of this for us.

&gt; Source/JavaScriptCore/runtime/VM.h:352
&gt; +        static ptrdiff_t callFrameForThrowOffset()
&gt; +        {
&gt; +            return OBJECT_OFFSETOF(VM, callFrameForThrow);
&gt; +        }
&gt; +
&gt; +        static ptrdiff_t targetMachinePCForThrowOffset()
&gt; +        {
&gt; +            return OBJECT_OFFSETOF(VM, targetMachinePCForThrow);
&gt; +        }

Interesting: Looks like we were doing this already -- just inconsistently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941079</commentid>
    <comment_count>4</comment_count>
      <attachid>214538</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-17 19:15:40 -0700</bug_when>
    <thetext>Comment on attachment 214538
Patch

Attachment 214538 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/4578002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941086</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2013-10-17 20:12:25 -0700</bug_when>
    <thetext>Delete &quot;EXTERN cti_vm_handle_exception : near&quot; in JITStubsMSVC64.asm and the MSVC ctiVMHandleException implementation in JITStubsX86.h and this compiles successfully.  It runs the tests successfully on Win32 but not on Win64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941093</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-17 22:52:49 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 214538 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=214538&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITOperations.cpp:1642
&gt; &gt; +void JIT_OPERATION operationVMHandleException(ExecState* exec, VM* vm)
&gt; 
&gt; Why do we need the VM* argument? Let&apos;s remove it, to simplify callers.

The original code for cti_vm_handle_exception handled the case where callFrame is null.  That version was returning a struct with the catch callFrame/PC.  Given that we are now using the VM to pass back those values, we need a VM even if we don&apos;t have a callFrame.  That&apos;s why I passed it in as an argument.  Saying that, I have instrumented the code and it doesn&apos;t appear that we ever exercise that path.  Unless we can come up with a scenario where we need to unwind and exception and won&apos;t have a valid callFrame, I&apos;ll remove the VM argument and corresponding code.

&gt; &gt; Source/JavaScriptCore/jit/JITOperations.cpp:1654
&gt; &gt; +    vm-&gt;topCallFrame = exec;
&gt; 
&gt; We don&apos;t need this. NativeCallFrameTracer takes care of this for us.

I&apos;ll remove.
 
&gt; &gt; Source/JavaScriptCore/runtime/VM.h:352
&gt; &gt; +        static ptrdiff_t callFrameForThrowOffset()
&gt; &gt; +        {
&gt; &gt; +            return OBJECT_OFFSETOF(VM, callFrameForThrow);
&gt; &gt; +        }
&gt; &gt; +
&gt; &gt; +        static ptrdiff_t targetMachinePCForThrowOffset()
&gt; &gt; +        {
&gt; &gt; +            return OBJECT_OFFSETOF(VM, targetMachinePCForThrow);
&gt; &gt; +        }
&gt; 
&gt; Interesting: Looks like we were doing this already -- just inconsistently.

It appears we never consumed the values from the VM.

I&apos;ll make the helpers requested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941094</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-17 22:54:05 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Delete &quot;EXTERN cti_vm_handle_exception : near&quot; in JITStubsMSVC64.asm and the MSVC ctiVMHandleException implementation in JITStubsX86.h and this compiles successfully.  It runs the tests successfully on Win32 but not on Win64.

Alex, thanks for the help.  I removed the dead references from those two files.  I also found another in jit/JITStubsARM.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941227</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-18 09:23:30 -0700</bug_when>
    <thetext>Committed r157636: &lt;http://trac.webkit.org/changeset/157636&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214538</attachid>
            <date>2013-10-17 18:33:49 -0700</date>
            <delta_ts>2013-10-17 19:15:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>122982.patch</filename>
            <type>text/plain</type>
            <size>35940</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3NjE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBA
CisyMDEzLTEwLTE3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIENoYW5nZSBuYXRpdmUgZnVuY3Rpb24gY2FsbCBzdHVicyB0byB1c2UgSklUIG9wZXJhdGlv
bnMgaW5zdGVhZCBvZiBjdGlWTUhhbmRsZUV4Y2VwdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyOTgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlIGN0aVZNSGFuZGxlRXhjZXB0aW9uIHRv
IG9wZXJhdGlvblZNSGFuZGxlRXhjZXB0aW9uLiAgQ2hhbmdlIGFsbCBleGNlcHRpb24gb3BlcmF0
aW9ucyB0bworICAgICAgICByZXR1cm4gdGhlIGNhdGNoIGNhbGxGcmFtZSBhbmQgZW50cnlQQyB2
aWEgdm0uY2FsbEZyYW1lRm9yVGhyb3cgYW5kIHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93Lgor
ICAgICAgICBUaGlzIHJlbW92ZWQgY2FsbGluZyBjb252ZW50aW9uIGhlYWRhY2hlcywgZml4aW5n
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI5ODAKKyAgICAgICAg
aW4gdGhlIHByb2Nlc3MuCisKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlcnMpOgor
ICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxl
RXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQv
SklURXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxl
cik6CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAqIGppdC9KSVRFeGNl
cHRpb25zLmg6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklU
OjpjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayk6CisgICAgICAgICogaml0L0pJVE9wY29k
ZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTmF0aXZlQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAg
ICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25z
Lmg6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMu
aDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnNBUk0uaDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnNB
Uk02NC5oOgorICAgICAgICAqIGppdC9KSVRTdHVic0FSTXY3Lmg6CisgICAgICAgICogaml0L0pJ
VFN0dWJzTUlQUy5oOgorICAgICAgICAqIGppdC9KSVRTdHVic01TVkM2NC5hc206CisgICAgICAg
ICogaml0L0pJVFN0dWJzU0g0Lmg6CisgICAgICAgICogaml0L0pJVFN0dWJzWDg2Lmg6CisgICAg
ICAgICogaml0L0pJVFN0dWJzWDg2XzY0Lmg6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgor
ICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKiBqaXQvU2xvd1Bh
dGhDYWxsLmg6CisgICAgICAgIChKU0M6OkpJVFNsb3dQYXRoQ2FsbDo6Y2FsbCk6CisgICAgICAg
ICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om5hdGl2ZUZvckdlbmVy
YXRvcik6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6Y2FsbEZy
YW1lRm9yVGhyb3dPZmZzZXQpOgorICAgICAgICAoSlNDOjpWTTo6dGFyZ2V0TWFjaGluZVBDRm9y
VGhyb3dPZmZzZXQpOgorCiAyMDEzLTEwLTE3ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxl
LmNvbT4KIAogICAgICAgICBQYXNzIFZNIGluc3RlYWQgb2YgSlNHbG9iYWxPYmplY3QgdG8gSlNP
Tk9iamVjdCBjb25zdHJ1Y3Rvci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNTc1OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDkgKzE0
NiwxMyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlCiAgICAgcG9r
ZShHUFJJbmZvOjphcmd1bWVudEdQUjApOwogI2VuZGlmCiAgICAgbV9jYWxscy5hcHBlbmQoQ2Fs
bExpbmtSZWNvcmQoY2FsbCgpLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7Ci0gICAgLy8gbG9v
a3VwRXhjZXB0aW9uSGFuZGxlciBsZWF2ZXMgdGhlIGhhbmRsZXIgQ2FsbEZyYW1lKiBpbiB0aGUg
cmV0dXJuVmFsdWVHUFIsCi0gICAgLy8gYW5kIHRoZSBhZGRyZXNzIG9mIHRoZSBoYW5kbGVyIGlu
IHJldHVyblZhbHVlR1BSMi4KLSAgICBqdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisK
KyAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyIGxlYXZlcyB0aGUgaGFuZGxlciBDYWxsRnJh
bWUqIGluIHZtLT5jYWxsRnJhbWVGb3JUaHJvdywKKyAgICAvLyBhbmQgdGhlIGFkZHJlc3Mgb2Yg
dGhlIGhhbmRsZXIgaW4gdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93LgorICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX3ZtKSwgR1BSSW5mbzo6cmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhH
UFJJbmZvOjpyZWdUMCwgVk06OnRhcmdldE1hY2hpbmVQQ0ZvclRocm93T2Zmc2V0KCkpLCBHUFJJ
bmZvOjpyZWdUMSk7CisgICAgbG9hZFB0cihBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2Fs
bEZyYW1lRm9yVGhyb3dPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBqdW1wKEdQUklu
Zm86OnJlZ1QxKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTU3NTkx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NjksOSArODY5LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRs
ZXIKICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKICAgICBtX2NhbGxz
LmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoKSwgKHVuc2lnbmVkKS0xLCBGdW5jdGlvblB0cihsb29r
dXBFeGNlcHRpb25IYW5kbGVyKS52YWx1ZSgpKSk7Ci0gICAgLy8gbG9va3VwRXhjZXB0aW9uSGFu
ZGxlciBsZWF2ZXMgdGhlIGhhbmRsZXIgQ2FsbEZyYW1lKiBpbiB0aGUgcmV0dXJuVmFsdWVHUFIs
Ci0gICAgLy8gYW5kIHRoZSBhZGRyZXNzIG9mIHRoZSBoYW5kbGVyIGluIHJldHVyblZhbHVlR1BS
Mi4KLSAgICBqdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgLy8gbG9va3VwRXhj
ZXB0aW9uSGFuZGxlciBsZWF2ZXMgdGhlIGhhbmRsZXIgQ2FsbEZyYW1lKiBpbiB2bS0+Y2FsbEZy
YW1lRm9yVGhyb3csCisgICAgLy8gYW5kIHRoZSBhZGRyZXNzIG9mIHRoZSBoYW5kbGVyIGluIHZt
LT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdy4KKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSks
IEdQUkluZm86OnJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIFZN
Ojp0YXJnZXRNYWNoaW5lUENGb3JUaHJvd09mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDEpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OmNhbGxGcmFtZUZvclRocm93T2Zm
c2V0KCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAganVtcChHUFJJbmZvOjpyZWdUMSk7CiB9CiAK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNTc1OTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OTIsMTEgKzc5
Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQLCBpbnQsIHZvaWQqKTsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihXaXRoUHJvZmlsZVRhZywgSl9KSVRPcGVyYXRp
b25fRVBjLCBpbnQsIEluc3RydWN0aW9uKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVosIGludCwgaW50MzJfdCk7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
aGVfSklUT3BlcmF0aW9uX0VKLCBSZWdpc3RlcklEKTsKLSNlbHNlCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSmhlX0pJVE9wZXJhdGlvbl9FSiwgUmVnaXN0ZXJJ
RCwgUmVnaXN0ZXJJRCk7Ci0jZW5kaWYKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FSlMsIEdQUlJlZywgc2l6ZV90KTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlvbl9FWiwgaW50
MzJfdCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRP
cGVyYXRpb25fRUNDLCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKQEAgLTgwOSw2ICs4MDQsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9KSVRPcGVyYXRpb25fRUNJQ0MsIFJlZ2lzdGVySUQsIGNvbnN0IElkZW50aWZpZXIq
LCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSWRKWiwgY29uc3QgSWRlbnRpZmllciosIFJl
Z2lzdGVySUQsIGludDMyX3QpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKLCBSZWdpc3RlcklEKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhWX0pJVE9wZXJhdGlvbl9FSiwgUmVnaXN0ZXJJRCk7CisjZWxzZQorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhWX0pJVE9wZXJh
dGlvbl9FSiwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CisjZW5kaWYKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSklkSkosIFJlZ2lz
dGVySUQsIGNvbnN0IElkZW50aWZpZXIqLCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFZfSklUT3BlcmF0aW9uX0VKSkksIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFN0cmluZ0ltcGwq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAko
cmV2aXNpb24gMTU3NTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMjMgKzM4LDE0IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLUVuY29kZWRFeGNlcHRpb25IYW5kbGVyIGVu
Y29kZShFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXIpCi17Ci0gICAgRXhjZXB0aW9uSGFuZGxlclVu
aW9uIHU7Ci0gICAgdS5oYW5kbGVyID0gaGFuZGxlcjsKLSAgICByZXR1cm4gdS5lbmNvZGVkSGFu
ZGxlcjsKLX0KLSNlbmRpZgotCi1FeGNlcHRpb25IYW5kbGVyIHVuY2F1Z2h0RXhjZXB0aW9uSGFu
ZGxlcigpCit2b2lkIHVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlcihWTSogdm0pCiB7CiAgICAgdm9p
ZCogY2F0Y2hSb3V0aW5lID0gRnVuY3Rpb25QdHIoTExJbnQ6OmdldENvZGVQdHIoY3RpT3BUaHJv
d05vdENhdWdodCkpLnZhbHVlKCk7Ci0gICAgRXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb25IYW5k
bGVyID0geyAwLCBjYXRjaFJvdXRpbmV9OwotICAgIHJldHVybiBleGNlcHRpb25IYW5kbGVyOwor
ICAgIHZtLT5jYWxsRnJhbWVGb3JUaHJvdyA9IDA7CisgICAgdm0tPnRhcmdldE1hY2hpbmVQQ0Zv
clRocm93ID0gY2F0Y2hSb3V0aW5lOwogfQogCi1FeGNlcHRpb25IYW5kbGVyIGdlbmVyaWNVbndp
bmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSkK
K3ZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBKU1ZhbHVl
IGV4Y2VwdGlvblZhbHVlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2VwdGlvblZhbHVlKTsK
ICAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IHZtLT5pbnRlcnByZXRlci0+dW53aW5kKGNhbGxG
cmFtZSwgZXhjZXB0aW9uVmFsdWUpOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lLgpAQCAt
NzIsOCArNjMsNiBAQCBFeGNlcHRpb25IYW5kbGVyIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFCiAg
ICAgdm0tPnRhcmdldEludGVycHJldGVyUENGb3JUaHJvdyA9IGNhdGNoUENGb3JJbnRlcnByZXRl
cjsKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVChjYXRjaFJvdXRpbmUpOwotICAgIEV4Y2VwdGlv
bkhhbmRsZXIgZXhjZXB0aW9uSGFuZGxlciA9IHsgY2FsbEZyYW1lLCBjYXRjaFJvdXRpbmV9Owot
ICAgIHJldHVybiBleGNlcHRpb25IYW5kbGVyOwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaAkocmV2aXNpb24gMTU3NTkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDcgKzI3LDYgQEAKICNkZWZpbmUgSklURXhjZXB0aW9uc19oCiAKICNpbmNsdWRlICJKU0NKU1Zh
bHVlLmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAKICNpZiBFTkFCTEUo
SklUKSB8fCBFTkFCTEUoTExJTlQpCiAKQEAgLTM2LDI5ICszNSw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgVk07CiAKLS8vIFRoaXMgaGVhZGVyIGdpdmVzIG90
aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYWNjZXNzIHRvIHRoZSBKSVQncyBwcm90b3RvY29sCi0v
LyBmb3IgdGhlIHRocm93aW5nIGFuZCBoYW5kbGluZyBleGNlcHRpb25zLgotCi1zdHJ1Y3QgRXhj
ZXB0aW9uSGFuZGxlciB7Ci0gICAgRXhlY1N0YXRlKiBjYWxsRnJhbWU7Ci0gICAgdm9pZCogY2F0
Y2hSb3V0aW5lOwotfTsKLQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0vLyBFbmNvZGVkRXhjZXB0
aW9uSGFuZGxlciBpcyB1c2VkIHRvIGNvbnZpbmNlIHRoZSBjb21waWxlciB0byByZXR1cm4gYW4g
RXhjZXB0aW9uSGFuZGVyCi0vLyBzdHJ1Y3QgaW4gdHdvIHJlZ2lzdGVycyBmb3IgMzIgYml0IGJ1
aWxkcy4KLXR5cGVkZWYgaW50NjRfdCBFbmNvZGVkRXhjZXB0aW9uSGFuZGxlcjsKLQotdW5pb24g
RXhjZXB0aW9uSGFuZGxlclVuaW9uIHsKLSAgICBFeGNlcHRpb25IYW5kbGVyIGhhbmRsZXI7Ci0g
ICAgRW5jb2RlZEV4Y2VwdGlvbkhhbmRsZXIgZW5jb2RlZEhhbmRsZXI7Ci19OwotCi1FbmNvZGVk
RXhjZXB0aW9uSGFuZGxlciBlbmNvZGUoRXhjZXB0aW9uSGFuZGxlcik7Ci0jZW5kaWYKLQotRXhj
ZXB0aW9uSGFuZGxlciB1bmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIoKTsKLUV4Y2VwdGlvbkhhbmRs
ZXIgZ2VuZXJpY1Vud2luZChWTSosIEV4ZWNTdGF0ZSosIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUp
Owordm9pZCB1bmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIoVk0qKTsKK3ZvaWQgZ2VuZXJpY1Vud2lu
ZChWTSosIEV4ZWNTdGF0ZSosIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUpOwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJl
dmlzaW9uIDE1NzU5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsMjYgKzI5MiwxNCBAQCBBTFdBWVNfSU5MSU5FIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIEpJVDo6CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotQUxXQVlTX0lO
TElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSmhlX0pJVE9wZXJh
dGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxKQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKFZfSklUT3BlcmF0
aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEpCiB7Ci0jaWYgQ09NUElMRVIoTVNWQykgJiYg
Q1BVKFg4NikKLSAgICAvLyBOZWVkIHRvIG1ha2Ugc3BhY2Ugb24gc3RhY2sgZm9yIHJldHVybiB2
YWx1ZSwgdXNlIHRoYXQgYWRkcmVzcyBhcyBmaXJzdCBhcmcgKGluIHJlZ2lzdGVyKSwKLSAgICAv
LyBtb3ZlIGNhbGxGcmFtZVJlZ2lzdGVyIHRvIHNlY29uZCBhcmd1bWVudCByZWdpc3RlciBhbmQg
cHVzaCB0aGUgcGFzc2VkIGFyZzEuCi0gICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKLSAgICAvLyBU
aGVzZSBtYXkgbm90IGJlIHBvcHM6Ci0gICAgLy8gcG9wKHJlZ1QwKTsgLy8gUmVzdG9yZSBhcmcx
IHNsb3QKLSAgICAvLyBwb3AocmVnVDApOyAvLyBHZXQgaGFuZGxlcidzIGNhbGwgZnJhbWUKLSAg
ICAvLyBwb3AocmVnVDEpOyAvLyBHZXQgaGFuZGxlcidzIGFkZHJlc3MKLSAgICByZXR1cm4gY2Fs
bDsKLSNlbHNlCiAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgIHVw
ZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7Ci0j
ZW5kaWYKIH0KICNlbHNlCi1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6
Y2FsbE9wZXJhdGlvbihKaGVfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFU
YWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjpjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhWX0pJVE9wZXJhdGlvbl9FSiBv
cGVyYXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiB7CiAgICAgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzFQYXlsb2FkLCBhcmcxVGFnKTsKICAgICB1cGRh
dGVUb3BDYWxsRnJhbWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDE1NzU5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAjaW5jbHVkZSAiSklULmgiCiAKKyNpbmNsdWRl
ICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklU
U3R1YkNhbGwuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCkBAIC0xNzEsNyArMTcyLDI2IEBAIEpJ
VDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYKICAgICBzdG9yZVB0cihyZWdU
MSwgcmVnVDIpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCAmbV92bS0+dG9wQ2Fs
bEZyYW1lKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihjdGlWTUhhbmRs
ZUV4Y2VwdGlvbikudmFsdWUoKSksIHJlZ1QxKTsKKyNpZiBDUFUoWDg2KQorICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoLTgpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgcHVzaChUcnVzdGVk
SW1tMzIoSklUOjpUcnVzdGVkSW1tUHRyKHZtKSkpOworICAgIHB1c2goY2FsbEZyYW1lUmVnaXN0
ZXIpOworI2Vsc2UKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0pLCBzZWNvbmRBcmd1bWVudFJl
Z2lzdGVyKTsKKyAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCBmaXJzdEFyZ3VtZW50UmVnaXN0
ZXIpOworI2VuZGlmCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKEZ1bmN0aW9uUHRyKG9wZXJhdGlv
blZNSGFuZGxlRXhjZXB0aW9uKS52YWx1ZSgpKSwgcmVnVDMpOworICAgIGNhbGwocmVnVDMpOwor
CisjaWYgQ1BVKFg4NikKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDE2KSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworI2VuZGlmCisKKyAgICAvLyBvcGVyYXRpb25WTUhhbmRsZUV4Y2VwdGlvbiBs
ZWF2ZXMgdGhlIGhhbmRsZXIgQ2FsbEZyYW1lKiBpbiB2bS0+Y2FsbEZyYW1lRm9yVGhyb3csCisg
ICAgLy8gYW5kIHRoZSBhZGRyZXNzIG9mIHRoZSBoYW5kbGVyIGluIHZtLT50YXJnZXRNYWNoaW5l
UENGb3JUaHJvdy4KKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0pLCByZWdUMCk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBWTTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dPZmZzZXQoKSks
IHJlZ1QxKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIFZNOjpjYWxsRnJhbWVGb3JUaHJv
d09mZnNldCgpKSwgcmVnVDApOwogICAgIGp1bXAocmVnVDEpOwogCiAgICAgLy8gQWxsIHRyYW1w
b2xpbmVzIGNvbnN0cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0
IHRoZSBwb2ludGVycyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCkBAIC04MTQsMTAgKzgzNCwxNCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhJbnN0cnVjdGlvbiogY3VyCiB7CiAgICAgQVNTRVJU
KHJlZ1QwID09IHJldHVyblZhbHVlUmVnaXN0ZXIpOwogICAgIGVtaXRMb2FkKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKLSAgICAvLyBBZnRlciBvcGVyYXRpb25UaHJv
dyByZXR1cm5zLCByZXR1cm5WYWx1ZVJlZ2lzdGVyIChyZWdUMCkgaGFzIHRoZSBoYW5kbGVyJ3Mg
Y2FsbEZyYW1lIGFuZAotICAgIC8vIHJldHVyblZhbHVlMlJlZ2lzdGVyIGhhcyB0aGUgaGFuZGxl
cidzIGVudHJ5IGFkZHJlc3MuCi0gICAganVtcChyZXR1cm5WYWx1ZTJSZWdpc3Rlcik7CisgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdU
MCk7CisKKyAgICAvLyBBZnRlciBvcGVyYXRpb25UaHJvdyByZXR1cm5zLCB2bS0+Y2FsbEZyYW1l
Rm9yVGhyb3cgaGFzIHRoZSBoYW5kbGVyJ3MgY2FsbEZyYW1lIGFuZAorICAgIC8vIHZtLT50YXJn
ZXRNYWNoaW5lUENGb3JUaHJvdyBoYXMgdGhlIGhhbmRsZXIncyBlbnRyeSBhZGRyZXNzLgorICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QwLCBWTTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgVk06OmNhbGxGcmFtZUZvclRocm93T2Zmc2V0KCkpLCByZWdU
MCk7CisgICAganVtcChyZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wbmFtZXMo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTU3NTkxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg1LDEwICs0
ODUsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1Y3Rpb24qIGN1cgogewogICAg
IEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93LCByZWdUMCk7Ci0gICAgLy8gQWZ0ZXIgb3BlcmF0
aW9uVGhyb3cgcmV0dXJucywgcmV0dXJuVmFsdWVSZWdpc3RlciAocmVnVDApIGhhcyB0aGUgaGFu
ZGxlcidzIGNhbGxGcmFtZSBhbmQKLSAgICAvLyByZXR1cm5WYWx1ZTJSZWdpc3RlciBoYXMgdGhl
IGhhbmRsZXIncyBlbnRyeSBhZGRyZXNzLgotICAgIGp1bXAocmV0dXJuVmFsdWUyUmVnaXN0ZXIp
OworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdU
MCk7CisKKyAgICAvLyBBZnRlciBvcGVyYXRpb25UaHJvdyByZXR1cm5zLCB2bS0+Y2FsbEZyYW1l
Rm9yVGhyb3cgaGFzIHRoZSBoYW5kbGVyJ3MgY2FsbEZyYW1lIGFuZAorICAgIC8vIHZtLT50YXJn
ZXRNYWNoaW5lUENGb3JUaHJvdyBoYXMgdGhlIGhhbmRsZXIncyBlbnRyeSBhZGRyZXNzLgorICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDApOworICAgIGxvYWQ2NChBZGRyZXNzKHJl
Z1QwLCBWTTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBs
b2FkNjQoQWRkcmVzcyhyZWdUMCwgVk06OmNhbGxGcmFtZUZvclRocm93T2Zmc2V0KCkpLCByZWdU
MCk7CisgICAganVtcChyZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wbmFtZXMo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU3NTkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYxNSwxOCArMTYxNSwxOSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29w
ZShFCiAgICAgfQogfQogCi1KSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blRocm93KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEV4Y2VwdGlvblZh
bHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEV4Y2VwdGlvblZhbHVlKQogewogICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwog
CiAgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkRXhj
ZXB0aW9uVmFsdWUpOwogICAgIHZtLT50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb25WYWx1
ZSk7Ci0gICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Vud2luZCh2bSwgZXhl
YywgZXhjZXB0aW9uVmFsdWUpOwotICAgIHJldHVybiBkZmdIYW5kbGVyRW5jb2RlZChoYW5kbGVy
LmNhbGxGcmFtZSwgaGFuZGxlci5jYXRjaFJvdXRpbmUpOworCisgICAgLy8gUmVzdWx0cyBzdG9y
ZWQgb3V0LW9mLWJhbmQgaW4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cgJiB2bS5jYWxsRnJh
bWVGb3JUaHJvdworICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsK
IH0KIAotSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5k
bGVyKEV4ZWNTdGF0ZSogZXhlYykKK3ZvaWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25I
YW5kbGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKQEAgLTE2MzQsOSArMTYz
NSwyNCBAQCBKSVRIYW5kbGVyRW5jb2RlZCBKSVRfT1BFUkFUSU9OIGxvb2t1cEV4CiAgICAgSlNW
YWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgIEFTU0VSVChleGNl
cHRpb25WYWx1ZSk7CiAgICAgCi0gICAgRXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJp
Y1Vud2luZCh2bSwgZXhlYywgZXhjZXB0aW9uVmFsdWUpOwotICAgIEFTU0VSVChoYW5kbGVyLmNh
dGNoUm91dGluZSk7Ci0gICAgcmV0dXJuIGRmZ0hhbmRsZXJFbmNvZGVkKGhhbmRsZXIuY2FsbEZy
YW1lLCBoYW5kbGVyLmNhdGNoUm91dGluZSk7CisgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywg
ZXhjZXB0aW9uVmFsdWUpOworICAgIEFTU0VSVCh2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cp
OworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVk1IYW5kbGVFeGNlcHRpb24oRXhl
Y1N0YXRlKiBleGVjLCBWTSogdm0pCit7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisKKyAgICBBU1NFUlQoIWV4ZWMtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkp
OworICAgIGlmICghZXhlYykgeworICAgICAgICAvLyBUaGUgZW50aXJlIHN0YWNrIGhhcyBhbHJl
YWR5IGJlZW4gdW53b3VuZC4gTm90aGluZyBtb3JlIHRvIGhhbmRsZS4KKyAgICAgICAgdW5jYXVn
aHRFeGNlcHRpb25IYW5kbGVyKHZtKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFT
U0VSVCh2bSA9PSAmZXhlYy0+dm0oKSk7CisgICAgdm0tPnRvcENhbGxGcmFtZSA9IGV4ZWM7Cisg
ICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgdm0tPmV4Y2VwdGlvbigpKTsKIH0KIAogfSAvLyBl
eHRlcm4gIkMiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAkocmV2aXNpb24gMTU3NTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDQ1ICs0Nyw2IEBAIGNsYXNzIEFycmF5QWxs
b2NhdGlvblByb2ZpbGU7CiAKIGV4dGVybiAiQyIgewogCi0vLyBUaGlzIG1ldGhvZCBpcyB1c2Vk
IHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3
aGljaCBpcwotLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0
IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCi0KLS8vIEFjY29yZGluZyB0
byBDKysgcnVsZXMsIGEgdHlwZSB1c2VkIGZvciB0aGUgcmV0dXJuIHNpZ25hdHVyZSBvZiBmdW5j
dGlvbiB3aXRoIEMgbGlua2FnZSAoaS5lLgotLy8gJ2V4dGVybiAiQyInKSBuZWVkcyB0byBiZSBQ
T0Q7IGhlbmNlIHB1dHRpbmcgYW55IGNvbnN0cnVjdG9ycyBpbnRvIGl0IGNvdWxkIGNhdXNlIGVp
dGhlciBjb21waWxlcgotLy8gd2FybmluZ3MsIG9yIHdvcnNlLCBhIGNoYW5nZSBpbiB0aGUgQUJJ
IHVzZWQgdG8gcmV0dXJuIHRoZXNlIHR5cGVzLgotc3RydWN0IEpJVEhhbmRsZXIgewotICAgIHVu
aW9uIFVuaW9uIHsKLSAgICAgICAgc3RydWN0IFN0cnVjdCB7Ci0gICAgICAgICAgICBFeGVjU3Rh
dGUqIGV4ZWM7Ci0gICAgICAgICAgICB2b2lkKiBoYW5kbGVyOwotICAgICAgICB9IHM7Ci0gICAg
ICAgIHVpbnQ2NF90IGVuY29kZWQ7Ci0gICAgfSB1OwotfTsKLQotaW5saW5lIEpJVEhhbmRsZXIg
Y3JlYXRlSklUSGFuZGxlcihFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGhhbmRsZXIpCi17Ci0gICAg
SklUSGFuZGxlciByZXN1bHQ7Ci0gICAgcmVzdWx0LnUucy5leGVjID0gZXhlYzsKLSAgICByZXN1
bHQudS5zLmhhbmRsZXIgPSBoYW5kbGVyOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLSNpZiBD
UFUoWDg2XzY0KQotdHlwZWRlZiBKSVRIYW5kbGVyIEpJVEhhbmRsZXJFbmNvZGVkOwotaW5saW5l
IEpJVEhhbmRsZXJFbmNvZGVkIGRmZ0hhbmRsZXJFbmNvZGVkKEV4ZWNTdGF0ZSogZXhlYywgdm9p
ZCogaGFuZGxlcikKLXsKLSAgICByZXR1cm4gY3JlYXRlSklUSGFuZGxlcihleGVjLCBoYW5kbGVy
KTsKLX0KLSNlbHNlCi10eXBlZGVmIHVpbnQ2NF90IEpJVEhhbmRsZXJFbmNvZGVkOwotaW5saW5l
IEpJVEhhbmRsZXJFbmNvZGVkIGRmZ0hhbmRsZXJFbmNvZGVkKEV4ZWNTdGF0ZSogZXhlYywgdm9p
ZCogaGFuZGxlcikKLXsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSklUSGFuZGxlcjo6VW5p
b24pID09IHNpemVvZih1aW50NjRfdCksIEpJVEhhbmRsZXJfVW5pb25faXNfNjRiaXQpOwotICAg
IHJldHVybiBjcmVhdGVKSVRIYW5kbGVyKGV4ZWMsIGhhbmRsZXIpLnUuZW5jb2RlZDsKLX0KLSNl
bmRpZgotCiAvLyBUaGVzZSB0eXBlZGVmcyBwcm92aWRlIHR5cGVjaGVja2luZyB3aGVuIGdlbmVy
YXRpbmcgY2FsbHMgb3V0IHRvIGhlbHBlciByb3V0aW5lczsKIC8vIHRoaXMgaGVscHMgcHJldmVu
dCBjYWxsaW5nIGEgaGVscGVyIHJvdXRpbmUgd2l0aCB0aGUgd3JvbmcgYXJndW1lbnRzIQogLyoK
QEAgLTEwMiw3ICs2Myw2IEBAIGlubGluZSBKSVRIYW5kbGVyRW5jb2RlZCBkZmdIYW5kbGVyRW5j
b2QKICAgICBJZGM6IGNvbnN0IElkZW50aWZpZXIqCiAgICAgSjogRW5jb2RlZEpTVmFsdWUKICAg
ICBKY3A6IGNvbnN0IEpTVmFsdWUqCi0gICAgSmhlOiBKSVRIYW5kbGVyRW5jb2RlZAogICAgIEpz
YTogSlNBY3RpdmF0aW9uKgogICAgIEpzczogSlNTdHJpbmcqCiAgICAgTzogSlNPYmplY3QqCkBA
IC0xMTIsNiArNzIsNyBAQCBpbmxpbmUgSklUSGFuZGxlckVuY29kZWQgZGZnSGFuZGxlckVuY29k
CiAgICAgUzogc2l6ZV90CiAgICAgU3Q6IFN0cnVjdHVyZSoKICAgICBWOiB2b2lkCisgICAgVm06
IFZNKgogICAgIFc6IFdhdGNocG9pbnRTZXQqCiAgICAgWjogaW50MzJfdAogKi8KQEAgLTE0Miw3
ICsxMDMsNiBAQCB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKCiB0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FWikoRXhl
Y1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
KCpKX0pJVE9wZXJhdGlvbl9FWkljZlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGluZUNhbGxG
cmFtZSosIGludDMyX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgq
Sl9KSVRPcGVyYXRpb25fRVpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsKLXR5cGVk
ZWYgSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiAoKkpoZV9KSVRPcGVyYXRpb25fRUop
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFU
SU9OICgqQ19KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIEpTQ2VsbCogSklU
X09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5
cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOwpAQCAtMTkxLDYgKzE1MSw3IEBAIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFU
SU9OICgqVl9KSVRPcGVyYXQKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVy
YXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsK
IHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fVykoV2F0Y2hwb2lu
dFNldCopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FWiko
RXhlY1N0YXRlKiwgaW50MzJfdCk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklU
T3BlcmF0aW9uX0VWbSkoRXhlY1N0YXRlKiwgVk0qKTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJB
VElPTiAoKlBfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBjaGFyKiBKSVRf
T1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdHlw
ZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRUpTKShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90KTsKQEAgLTIxMCw3ICsxNzEsMTEgQEAgdHlwZWRlZiBj
aGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYQogdHlwZWRlZiBTdHJpbmdJbXBsKiBKSVRf
T1BFUkFUSU9OICgqSV9KSVRPcGVyYXRpb25fRUpzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsK
IHR5cGVkZWYgSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gKCpKc3NfSklUT3BlcmF0aW9uX0VaKShF
eGVjU3RhdGUqLCBpbnQzMl90KTsKIAotSklUSGFuZGxlckVuY29kZWQgSklUX09QRVJBVElPTiBs
b29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKKy8vIFRoaXMg
bWV0aG9kIGlzIHVzZWQgdG8gbG9va3VwIGFuIGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZh
dWx0TG9jYXRpb24sIHdoaWNoIGlzCisvLyB0aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20gb25lIG9m
IHRoZSBjYWxscyBvdXQgdG8gb25lIG9mIHRoZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92ZS4KKyAg
ICAKK3ZvaWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSop
IFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25WTUhhbmRsZUV4Y2Vw
dGlvbihFeGVjU3RhdGUqLCBWTSopIFdURl9JTlRFUk5BTDsKIAogdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblN0YWNrQ2hlY2soRXhlY1N0YXRlKiwgQ29kZUJsb2NrKikgV1RGX0lOVEVSTkFM
OwogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKEV4ZWNTdGF0
ZSopIFdURl9JTlRFUk5BTDsKQEAgLTI2NCw3ICsyMjksNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3T2JqZWN0CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9nVGltZXIoRXhlY1N0YXRlKikgV1RGX0lO
VEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3RhdGljRXJyb3IoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLUpJVEhhbmRs
ZXJFbmNvZGVkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3coRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJv
dyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkRlYnVnKEV4ZWNTdGF0ZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT3B0aW1p
emUoRXhlY1N0YXRlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NzU5MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMzQgKzEw
OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICNkZWZpbmUgQ1RJX1NBTVBMRVIgMAogI2VuZGlm
CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotRW5jb2RlZEV4Y2VwdGlvbkhhbmRsZXIgSklUX1NU
VUIgY3RpX3ZtX2hhbmRsZV9leGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAg
QVNTRVJUKCFjYWxsRnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkpOwotICAgIGlmICghY2Fs
bEZyYW1lKSB7Ci0gICAgICAgIC8vIFRoZSBlbnRpcmUgc3RhY2sgaGFzIGFscmVhZHkgYmVlbiB1
bndvdW5kLiBOb3RoaW5nIG1vcmUgdG8gaGFuZGxlLgotICAgICAgICByZXR1cm4gZW5jb2RlKHVu
Y2F1Z2h0RXhjZXB0aW9uSGFuZGxlcigpKTsKLSAgICB9Ci0KLSAgICBWTSogdm0gPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT52bSgpOwotICAgIHZtLT50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7
Ci0gICAgcmV0dXJuIGVuY29kZShnZW5lcmljVW53aW5kKHZtLCBjYWxsRnJhbWUsIHZtLT5leGNl
cHRpb24oKSkpOwotfQotI2Vsc2UKLUV4Y2VwdGlvbkhhbmRsZXIgSklUX1NUVUIgY3RpX3ZtX2hh
bmRsZV9leGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgQVNTRVJUKCFjYWxs
RnJhbWUtPmhhc0hvc3RDYWxsRnJhbWVGbGFnKCkpOwotICAgIGlmICghY2FsbEZyYW1lKSB7Ci0g
ICAgICAgIC8vIFRoZSBlbnRpcmUgc3RhY2sgaGFzIGFscmVhZHkgYmVlbiB1bndvdW5kLiBOb3Ro
aW5nIG1vcmUgdG8gaGFuZGxlLgotICAgICAgICByZXR1cm4gdW5jYXVnaHRFeGNlcHRpb25IYW5k
bGVyKCk7Ci0gICAgfQotCi0gICAgVk0qIHZtID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+dm0o
KTsKLSAgICB2bS0+dG9wQ2FsbEZyYW1lID0gY2FsbEZyYW1lOwotICAgIHJldHVybiBnZW5lcmlj
VW53aW5kKHZtLCBjYWxsRnJhbWUsIHZtLT5leGNlcHRpb24oKSk7Ci19Ci0jZW5kaWYKLQogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTU3NTkxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEsMTYgKzM1MSw2
IEBAIGlubGluZSBib29sIHJldHVybkFkZHJlc3NJc0luQ3RpVHJhbXBvbGkKIGV4dGVybiAiQyIg
dm9pZCBjdGlNYXNtUHJvYmVUcmFtcG9saW5lKCk7CiAjZW5kaWYKIAotZXh0ZXJuICJDIiB7Ci0K
LSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotRW5jb2RlZEV4Y2VwdGlvbkhhbmRsZXIgSklUX1NUVUIg
Y3RpX3ZtX2hhbmRsZV9leGNlcHRpb24oQ2FsbEZyYW1lKikgUkVGRVJFTkNFRF9GUk9NX0FTTSBX
VEZfSU5URVJOQUw7Ci0jZWxzZQotRXhjZXB0aW9uSGFuZGxlciBKSVRfU1RVQiBjdGlfdm1faGFu
ZGxlX2V4Y2VwdGlvbihDYWxsRnJhbWUqKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5B
TDsKLSNlbmRpZgotCi19IC8vIGV4dGVybiAiQyIKLQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVic0FSTTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVic0FSTTY0LmgJKHJldmlzaW9uIDE1NzU5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnNBUk02NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsMTQgKzEwMCw2IEBAIFNZ
TUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIjoiICJcbiIKICAgICAiYWRkIHNwLCBzcCwgIyIg
U1RSSU5HSVpFX1ZBTFVFX09GKFNJWkVPRl9KSVRTVEFDS0ZSQU1FKSAiXG4iCiAgICAgInJldCIg
IlxuIgogCi1ISURFX1NZTUJPTChjdGlWTUhhbmRsZUV4Y2VwdGlvbikgIlxuIgotU1lNQk9MX1NU
UklORyhjdGlWTUhhbmRsZUV4Y2VwdGlvbikgIjoiICJcbiIKLSAgICAibW92IHgwLCB4MjUiICJc
biIKLSAgICAiYmwgIiBMT0NBTF9SRUZFUkVOQ0UoY3RpX3ZtX2hhbmRsZV9leGNlcHRpb24pICJc
biIKLSAgICAvLyBXaGVuIGN0aV92bV9oYW5kbGVfZXhjZXB0aW9uIHJldHVybnMsIHgwIGhhcyBj
YWxsRnJhbWUgYW5kIHgxIGhhcyBoYW5kbGVyIGFkZHJlc3MKLSAgICAibW92IHgyNSwgeDAiICJc
biIKLSAgICAiYnIgeDEiICJcbiIKLQogSElERV9TWU1CT0woY3RpT3BUaHJvd05vdENhdWdodCkg
IlxuIgogU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiOiIgIlxuIgogICAgICJs
ZHIgeDI4LCBbc3AsICMiIFNUUklOR0laRV9WQUxVRV9PRihQUkVTRVJWRURfWDI4X09GRlNFVCkg
Il0iICJcbiIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnNBUk0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzQVJNLmgJKHJl
dmlzaW9uIDE1NzU5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnNBUk0u
aAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDE5ICsxODYsNiBAQCBTWU1CT0xfU1RSSU5HKGN0aU9w
VGhyb3dOb3RDYXVnaHQpICI6IiAiCiAgICAgImJ4IGxyIiAiXG4iCiApOwogCi1hc20gKAotIi50
ZXh0IiAiXG4iCi0iLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlWTUhhbmRsZUV4Y2VwdGlvbikg
IlxuIgotSElERV9TWU1CT0woY3RpVk1IYW5kbGVFeGNlcHRpb24pICJcbiIKLUlOTElORV9BUk1f
RlVOQ1RJT04oY3RpVk1IYW5kbGVFeGNlcHRpb24pCi1TWU1CT0xfU1RSSU5HKGN0aVZNSGFuZGxl
RXhjZXB0aW9uKSAiOiIgIlxuIgotICAgICJtb3YgcjAsIHI1IiAiXG4iCi0gICAgImJsICIgU1lN
Qk9MX1NUUklORyhjdGlfdm1faGFuZGxlX2V4Y2VwdGlvbikgIlxuIgotICAgIC8vIFdoZW4gY3Rp
X3ZtX2hhbmRsZV9leGNlcHRpb24gcmV0dXJucywgcjAgaGFzIGNhbGxGcmFtZSBhbmQgcjEgaGFz
IGhhbmRsZXIgYWRkcmVzcwotICAgICJtb3YgcjUsIHIwIiAiXG4iCi0gICAgImJ4IHIxIiAiXG4i
Ci0pOwotCiAjaWYgVVNFKE1BU01fUFJPQkUpCiBhc20gKAogIi50ZXh0IiAiXG4iCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzQVJNdjcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzQVJNdjcuaAkocmV2aXNpb24gMTU3NTkx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVic0FSTXY3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI0NSwyMSArMjQ1LDYgQEAgU1lNQk9MX1NUUklORyhjdGlUcmFtcG9saW5lRW5k
KSAiOiIgIlxuIgogYXNtICgKICIudGV4dCIgIlxuIgogIi5hbGlnbiAyIiAiXG4iCi0iLmdsb2Js
ICIgU1lNQk9MX1NUUklORyhjdGlWTUhhbmRsZUV4Y2VwdGlvbikgIlxuIgotSElERV9TWU1CT0wo
Y3RpVk1IYW5kbGVFeGNlcHRpb24pICJcbiIKLSIudGh1bWIiICJcbiIKLSIudGh1bWJfZnVuYyAi
IFRIVU1CX0ZVTkNfUEFSQU0oY3RpVk1IYW5kbGVFeGNlcHRpb24pICJcbiIKLVNZTUJPTF9TVFJJ
TkcoY3RpVk1IYW5kbGVFeGNlcHRpb24pICI6IiAiXG4iCi0gICAgIm1vdiByMCwgcjUiICJcbiIK
LSAgICAiYmwgIiBMT0NBTF9SRUZFUkVOQ0UoY3RpX3ZtX2hhbmRsZV9leGNlcHRpb24pICJcbiIK
LSAgICAvLyBXaGVuIGN0aV92bV9oYW5kbGVfZXhjZXB0aW9uIHJldHVybnMsIHIwIGhhcyBjYWxs
RnJhbWUgYW5kIHIxIGhhcyBoYW5kbGVyIGFkZHJlc3MKLSAgICAibW92IHI1LCByMCIgIlxuIgot
ICAgICJieCByMSIgIlxuIgotKTsKLQotYXNtICgKLSIudGV4dCIgIlxuIgotIi5hbGlnbiAyIiAi
XG4iCiAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiXG4iCiBI
SURFX1NZTUJPTChjdGlPcFRocm93Tm90Q2F1Z2h0KSAiXG4iCiAiLnRodW1iIiAiXG4iCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzTUlQUy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnNNSVBTLmgJKHJldmlzaW9uIDE1NzU5
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnNNSVBTLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMSwzNSArMTAxLDYgQEAgYXNtICgKICIuc2V0IG5vcmVvcmRlciIgIlxuIgog
Ii5zZXQgbm9tYWNybyIgIlxuIgogIi5zZXQgbm9taXBzMTYiICJcbiIKLSIuZ2xvYmwgIiBTWU1C
T0xfU1RSSU5HKGN0aVZNSGFuZGxlRXhjZXB0aW9uKSAiXG4iCi0iLmVudCAiIFNZTUJPTF9TVFJJ
TkcoY3RpVk1IYW5kbGVFeGNlcHRpb24pICJcbiIKLVNZTUJPTF9TVFJJTkcoY3RpVk1IYW5kbGVF
eGNlcHRpb24pICI6IiAiXG4iCi0jaWYgV1RGX01JUFNfUElDCi0iLnNldCBtYWNybyIgIlxuIgot
Ii5jcGxvYWQgJDI1IiAiXG4iCi0gICAgImxhICAgICQyNSwiIFNZTUJPTF9TVFJJTkcoY3RpX3Zt
X2hhbmRsZV9leGNlcHRpb24pICJcbiIKLSIuc2V0IG5vbWFjcm8iICJcbiIKLSAgICAiYmFsICIg
U1lNQk9MX1NUUklORyhjdGlfdm1faGFuZGxlX2V4Y2VwdGlvbikgIlxuIgotICAgICJtb3ZlICAk
NCwkMTYiICJcbiIKLSNlbHNlCi0gICAgImphbCAiIFNZTUJPTF9TVFJJTkcoY3RpX3ZtX2hhbmRs
ZV9leGNlcHRpb24pICJcbiIKLSAgICAibW92ZSAgJDQsJDE2IiAiXG4iCi0jZW5kaWYKLSAgICAv
LyBXaGVuIGN0aV92bV9oYW5kbGVfZXhjZXB0aW9uIHJldHVybnMsIHYwIGhhcyBjYWxsRnJhbWUg
YW5kIHYxIGhhcyBoYW5kbGVyIGFkZHJlc3MKLSAgICAibW92ZSAgJDMxLCQzIiAiXG4iCi0gICAg
ImpyICAgICQzMSIgIlxuIgotICAgICJtb3ZlICAkMTYsJDIgIiAiXG4iCi0iLnNldCByZW9yZGVy
IiAiXG4iCi0iLnNldCBtYWNybyIgIlxuIgotIi5lbmQgIiBTWU1CT0xfU1RSSU5HKGN0aVZNSGFu
ZGxlRXhjZXB0aW9uKSAiXG4iCi0pOwotCi1hc20gKAotIi50ZXh0IiAiXG4iCi0iLmFsaWduIDIi
ICJcbiIKLSIuc2V0IG5vcmVvcmRlciIgIlxuIgotIi5zZXQgbm9tYWNybyIgIlxuIgotIi5zZXQg
bm9taXBzMTYiICJcbiIKICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVn
aHQpICJcbiIKICIuZW50ICIgU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiXG4i
CiBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICI6IiAiXG4iCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzTVNWQzY0LmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzTVNWQzY0LmFzbQkocmV2aXNpb24gMTU3
NTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVic01TVkM2NC5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTY1LDE4ICs2NSw2IEBAIGN0aVRyYW1wb2xpbmUgUFJPQwogICAgIHJl
dAogY3RpVHJhbXBvbGluZSBFTkRQCiAKLWN0aVZNSGFuZGxlRXhjZXB0aW9uIFBST0MKLQlzdWIg
cnNwLCAxNgotICAgIG1vdiByY3gsIHJzcAotCW1vdiByZHgsIHIxMwotCWNhbGwgY3RpX3ZtX2hh
bmRsZV9leGNlcHRpb24KLSAgICA7IFdoZW4gY3RpX3ZtX2hhbmRsZV9leGNlcHRpb24gcmV0dXJu
cywgcmF4IHBvaW50cyB0byB0aGUgbWVtb3J5IHdlIGFsbG9jYXRlZCBvbiBzdGFjawotCTsgSXQg
Y29udGFpbnMgdGhlIGNhbGxGcmFtZSBhbmQgaGFuZGxlciBhZGRyZXNzCi0JcG9wIHJheAkJOyBj
YWxsRnJhbWUKLQlwb3AgcmR4CQk7IGhhbmRsZXIKLSAgICBqbXAgcmR4Ci1jdGlWTUhhbmRsZUV4
Y2VwdGlvbiBFTkRQCi0gCiBjdGlPcFRocm93Tm90Q2F1Z2h0IFBST0MKICAgICBhZGQgcnNwLCA1
OGgKICAgICBwb3AgcmJ4CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
U0g0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVic1NI
NC5oCShyZXZpc2lvbiAxNTc1OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzU0g0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDI0ICs4Myw2IEBAIFNZTUJPTF9TVFJJTkco
Y3RpVHJhbXBvbGluZUVuZCkgIjoiICJcbiIKICk7CiAKIGFzbSB2b2xhdGlsZSAoCi0iLmdsb2Js
ICIgU1lNQk9MX1NUUklORyhjdGlWTUhhbmRsZUV4Y2VwdGlvbikgIlxuIgotSElERV9TWU1CT0wo
Y3RpVk1IYW5kbGVFeGNlcHRpb24pICJcbiIKLVNZTUJPTF9TVFJJTkcoY3RpVk1IYW5kbGVFeGNl
cHRpb24pICI6IiAiXG4iCi0gICAgIm1vdi5sIC5MMiIgU1lNQk9MX1NUUklORyhjdGlfdm1faGFu
ZGxlX2V4Y2VwdGlvbikgIixyMCIgIlxuIgotICAgICJtb3YgcjE0LCByNCIgIlxuIgotICAgICJt
b3YubCBAKHIwLHIxMikscjExIiAiXG4iCi0gICAgImpzciBAcjExIiAiXG4iCi0gICAgLy8gV2hl
biBjdGlfdm1faGFuZGxlX2V4Y2VwdGlvbiByZXR1cm5zLCByMCBoYXMgY2FsbEZyYW1lIGFuZCBy
MSBoYXMgaGFuZGxlciBhZGRyZXNzCi0gICAgIm5vcCIgIlxuIgotICAgICJtb3YgcjAsIHIxNCIg
IlxuIgotICAgICJsZHMgcjEsIHByIiAiXG4iCi0gICAgInJ0cyIgIlxuIgotICAgICJub3AiICJc
biIKLSAgICAiLmFsaWduIDIiICJcbiIKLSAgICAiLkwyIiBTWU1CT0xfU1RSSU5HKGN0aV92bV9o
YW5kbGVfZXhjZXB0aW9uKSAiOi5sb25nICIgU1lNQk9MX1NUUklORyhjdGlfdm1faGFuZGxlX2V4
Y2VwdGlvbikgIkBHT1QgXG4iCi0pOwotCi1hc20gdm9sYXRpbGUgKAogIi5nbG9ibCAiIFNZTUJP
TF9TVFJJTkcoY3RpT3BUaHJvd05vdENhdWdodCkgIlxuIgogSElERV9TWU1CT0woY3RpT3BUaHJv
d05vdENhdWdodCkgIlxuIgogU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiOiIg
IlxuIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVic1g4Ni5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnNYODYuaAkocmV2aXNp
b24gMTU3NTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVic1g4Ni5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MCwxNiArNzAsNiBAQCBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xp
bmVFbmQpICI6IiAiXG4iCiApOwogCiBhc20gKAotIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3Rp
Vk1IYW5kbGVFeGNlcHRpb24pICJcbiIKLUhJREVfU1lNQk9MKGN0aVZNSGFuZGxlRXhjZXB0aW9u
KSAiXG4iCi1TWU1CT0xfU1RSSU5HKGN0aVZNSGFuZGxlRXhjZXB0aW9uKSAiOiIgIlxuIgotICAg
ICJtb3ZsICVlZGksICVlY3giICJcbiIKLSAgICAiY2FsbCAiIExPQ0FMX1JFRkVSRU5DRShjdGlf
dm1faGFuZGxlX2V4Y2VwdGlvbikgIlxuIgotICAgIC8vIFdoZW4gY3RpX3ZtX2hhbmRsZV9leGNl
cHRpb24gcmV0dXJucywgZWF4IGhhcyBjYWxsRnJhbWUgYW5kIGVkeCBoYXMgaGFuZGxlciBhZGRy
ZXNzCi0gICAgImptcCAqJWVkeCIgIlxuIgotKTsKLQotYXNtICgKICIuZ2xvYmwgIiBTWU1CT0xf
U1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICJcbiIKIEhJREVfU1lNQk9MKGN0aU9wVGhyb3dO
b3RDYXVnaHQpICJcbiIKIFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05vdENhdWdodCkgIjoiICJc
biIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnNYODZfNjQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzWDg2XzY0LmgJKHJl
dmlzaW9uIDE1NzU5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnNYODZf
NjQuaAkod29ya2luZyBjb3B5KQpAQCAtODQsMTYgKzg0LDYgQEAgU1lNQk9MX1NUUklORyhjdGlU
cmFtcG9saW5lRW5kKSAiOiIgIlxuIgogKTsKIAogYXNtICgKLSIuZ2xvYmwgIiBTWU1CT0xfU1RS
SU5HKGN0aVZNSGFuZGxlRXhjZXB0aW9uKSAiXG4iCi1ISURFX1NZTUJPTChjdGlWTUhhbmRsZUV4
Y2VwdGlvbikgIlxuIgotU1lNQk9MX1NUUklORyhjdGlWTUhhbmRsZUV4Y2VwdGlvbikgIjoiICJc
biIKLSAgICAibW92cSAlcjEzLCAlcmRpIiAiXG4iCi0gICAgImNhbGwgIiBMT0NBTF9SRUZFUkVO
Q0UoY3RpX3ZtX2hhbmRsZV9leGNlcHRpb24pICJcbiIKLSAgICAvLyBXaGVuIGN0aV92bV9oYW5k
bGVfZXhjZXB0aW9uIHJldHVybnMsIHJheCBoYXMgY2FsbEZyYW1lIGFuZCByZHggaGFzIGhhbmRs
ZXIgYWRkcmVzcwotICAgICJqbXAgKiVyZHgiICJcbiIKLSk7Ci0KLWFzbSAoCiAiLmdsb2JsICIg
U1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiXG4iCiBISURFX1NZTUJPTChjdGlP
cFRocm93Tm90Q2F1Z2h0KSAiXG4iCiBTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQp
ICI6IiAiXG4iCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlz
aW9uIDE1NzU5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxNyw3ICs1MTcsMTMgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRC
eUlETGlzdChFeGVjU3RhdAogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdHViSml0LnNldHVw
QXJndW1lbnRzRXhlY1N0YXRlKCk7CiAgICAgICAgICAgICBoYW5kbGVyQ2FsbCA9IHN0dWJKaXQu
Y2FsbCgpOwotICAgICAgICAgICAgc3R1YkppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
Mik7CisgICAgICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyIGxlYXZlcyB0aGUgaGFu
ZGxlciBDYWxsRnJhbWUqIGluIHZtLT5jYWxsRnJhbWVGb3JUaHJvdywKKyAgICAgICAgICAgIC8v
IGFuZCB0aGUgYWRkcmVzcyBvZiB0aGUgaGFuZGxlciBpbiB2bS0+dGFyZ2V0TWFjaGluZVBDRm9y
VGhyb3cuCisgICAgICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHZtKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgVk06OnRhcmdldE1hY2hpbmVQQ0Zv
clRocm93T2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICBzdHViSml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6Y2FsbEZyYW1l
Rm9yVGhyb3dPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIHN0dWJKaXQu
anVtcChHUFJJbmZvOjpyZWdUMSk7CisKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlm
IChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewogI2lmIFVTRShKU1ZBTFVF
NjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJKHJldmlz
aW9uIDE1NzU5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDE4ICs4MSw4IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQt
PnVubWFwKCk7CiAjZWxzZQogICAgICAgICBtX2ppdC0+a2lsbExhc3RSZXN1bHRSZWdpc3Rlcigp
OwotI2VuZGlmCi0gICAgICAgIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIEpJVDo6
SnVtcCBub0V4Y2VwdGlvbiA9IG1faml0LT5icmFuY2gzMihKSVQ6OkVxdWFsLCBKSVQ6OkFic29s
dXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2ppdC0+bV9jb2RlQmxvY2stPnZt
KCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSwgSklUOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwot
I2Vsc2UKLSAgICAgICAgSklUOjpKdW1wIG5vRXhjZXB0aW9uID0gbV9qaXQtPmJyYW5jaFRlc3Q2
NChKSVQ6Olplcm8sIEpJVDo6QWJzb2x1dGVBZGRyZXNzKG1faml0LT5tX2NvZGVCbG9jay0+dm0o
KS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKLSNlbmRpZgotICAgICAgICBtX2ppdC0+dXBkYXRl
VG9wQ2FsbEZyYW1lKCk7Ci0gICAgICAgIG1faml0LT5tb3ZlKEpJVDo6VHJ1c3RlZEltbVB0cihG
dW5jdGlvblB0cihjdGlWTUhhbmRsZUV4Y2VwdGlvbikudmFsdWUoKSksIEpJVDo6cmVnVDEpOwot
ICAgICAgICBtX2ppdC0+anVtcChKSVQ6OnJlZ1QxKTsKLSAgICAgICAgbm9FeGNlcHRpb24ubGlu
ayhtX2ppdCk7Ci0gICAgICAgIAorI2VuZGlmICAgCisgICAgICAgIG1faml0LT5leGNlcHRpb25D
aGVjaygpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE1NzU5MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODIsOCArODIsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhj
ZXB0aW9uRnJvbQogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3
aXNlX2Nhc3Q8dm9pZCo+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7CiAgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BS
MCk7CiAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgZW1pdFBvaW50ZXJW
YWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICBqaXQuanVtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworCisgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxl
ciBsZWF2ZXMgdGhlIGhhbmRsZXIgQ2FsbEZyYW1lKiBpbiB2bS0+Y2FsbEZyYW1lRm9yVGhyb3cs
CisgICAgLy8gYW5kIHRoZSBhZGRyZXNzIG9mIHRoZSBoYW5kbGVyIGluIHZtLT50YXJnZXRNYWNo
aW5lUENGb3JUaHJvdy4KKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
dm0pLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QwLCBWTTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dPZmZzZXQoKSks
IEdQUkluZm86OnJlZ1QxKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDAsIFZNOjpjYWxsRnJhbWVGb3JUaHJvd09mZnNldCgpKSwgR1BSSW5mbzo6
cmVnVDApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1QxKTsK
KyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMSk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsICgiVGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGgg
dGh1bmsiKSk7CkBAIC00NzQsOSArNDgwLDI2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbmF0aXZlRm9yR2UKIAogICAgIGppdC5zdG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZy
YW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKIAotICAgIGppdC5tb3ZlKEpTSW50ZXJm
YWNlSklUOjpUcnVzdGVkSW1tUHRyKEZ1bmN0aW9uUHRyKGN0aVZNSGFuZGxlRXhjZXB0aW9uKS52
YWx1ZSgpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKLSAgICBqaXQuanVtcChKU0ludGVyZmFj
ZUpJVDo6cmVnVDEpOworI2lmIENQVShYODYpICYmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgaml0
LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKC04KSwgSlNJbnRlcmZhY2VKSVQ6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQucHVzaChKU0ludGVyZmFjZUpJVDo6VHJ1
c3RlZEltbTMyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHZtKSkpOworICAgIGppdC5w
dXNoKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisjZWxzZQorICAgIGppdC5t
b3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHZtKSwgSlNJbnRlcmZhY2VKSVQ6OnNl
Y29uZEFyZ3VtZW50UmVnaXN0ZXIpOworICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpjYWxs
RnJhbWVSZWdpc3RlciwgSlNJbnRlcmZhY2VKSVQ6OmZpcnN0QXJndW1lbnRSZWdpc3Rlcik7Cisj
ZW5kaWYKKyAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cihGdW5jdGlv
blB0cihvcGVyYXRpb25WTUhhbmRsZUV4Y2VwdGlvbikudmFsdWUoKSksIEpTSW50ZXJmYWNlSklU
OjpyZWdUMyk7CisgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsKKyNpZiBDUFUo
WDg2KSAmJiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGppdC5hZGRQdHIoSlNJbnRlcmZhY2VKSVQ6
OlRydXN0ZWRJbW0zMigxNiksIEpTSW50ZXJmYWNlSklUOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisjZW5kaWYKIAorICAgIC8vIG9wZXJhdGlvblZNSGFuZGxlRXhjZXB0aW9uIGxlYXZlcyB0aGUg
aGFuZGxlciBDYWxsRnJhbWUqIGluIHZtLT5jYWxsRnJhbWVGb3JUaHJvdywKKyAgICAvLyBhbmQg
dGhlIGFkZHJlc3Mgb2YgdGhlIGhhbmRsZXIgaW4gdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93
LgorICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHZtKSwgSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QwKTsKKyAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVz
cyhKU0ludGVyZmFjZUpJVDo6cmVnVDAsIFZNOjp0YXJnZXRNYWNoaW5lUENGb3JUaHJvd09mZnNl
dCgpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKKyAgICBqaXQubG9hZFB0cihKU0ludGVyZmFj
ZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDAsIFZNOjpjYWxsRnJhbWVGb3JUaHJv
d09mZnNldCgpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKKyAgICBqaXQuanVtcChKU0ludGVy
ZmFjZUpJVDo6cmVnVDEpOwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBH
TE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAo
Im5hdGl2ZSAlcyB0cmFtcG9saW5lIiwgdG9DU3RyaW5nKGtpbmQpLmRhdGEoKSkpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNTc1OTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsNyAr
MzQwLDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFZNLCBtX2V4Y2VwdGlvbik7CiAgICAgICAgIH0KLSAgICAgICAgCisK
KyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBjYWxsRnJhbWVGb3JUaHJvd09mZnNldCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIGNhbGxGcmFtZUZv
clRocm93KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgdGFyZ2V0TWFj
aGluZVBDRm9yVGhyb3dPZmZzZXQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFZNLCB0YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CisgICAgICAgIH0KKwog
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xlYXJFeGNlcHRpb25TdGFjaygpOwogICAgICAgICB2
b2lkIGdldEV4Y2VwdGlvbkluZm8oSlNWYWx1ZSYgZXhjZXB0aW9uLCBSZWZDb3VudGVkQXJyYXk8
U3RhY2tGcmFtZT4mIGV4Y2VwdGlvblN0YWNrKTsK
</data>
<flag name="review"
          id="237092"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="237094"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>