<?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>125975</bug_id>
          
          <creation_ts>2013-12-18 20:06:25 -0800</creation_ts>
          <short_desc>Put write barriers in the right places in the baseline JIT</short_desc>
          <delta_ts>2013-12-19 16:46:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>121074</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>961250</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-18 20:06:25 -0800</bug_when>
    <thetext>This is another step on the way to GenGC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961496</commentid>
    <comment_count>1</comment_count>
      <attachid>219674</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-19 12:17:16 -0800</bug_when>
    <thetext>Created attachment 219674
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961500</commentid>
    <comment_count>2</comment_count>
      <attachid>219674</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-19 12:21:15 -0800</bug_when>
    <thetext>Comment on attachment 219674
Patch

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

Looks good except for the enter thing.

&gt; Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:1025
&gt; +
&gt; +    addSlowCase(jump());

Why doesn&apos;t this just call slow_path_enter here, instead of jumping?

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:805
&gt;          emitInitRegister(virtualRegisterForLocal(j).offset());
&gt; +
&gt; +    addSlowCase(jump());

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961503</commentid>
    <comment_count>3</comment_count>
      <attachid>219674</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-12-19 12:28:51 -0800</bug_when>
    <thetext>Comment on attachment 219674
Patch

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

r- due to stack push/pop shenanigans vs. single add/sub

&gt; Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp:806
&gt; +    emitLoad(value, regT3, regT2);
&gt; +    
&gt; +    emitWriteBarrier(regT0, regT3, regT1, regT2, ShouldFilterImmediates);

Are regT0/regT3 already guaranteed to be the global reference?  Also why can&apos;t we just directly flag the global object mark bit?

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1036
&gt; +    for (unsigned i = 0; i &lt; GPRInfo::numberOfRegisters; ++i)
&gt; +        storePtr(GPRInfo::toRegister(i), &amp;vm()-&gt;writeBarrierRegisterBuffer[i]);
&gt; +    push(scratch);
&gt; +    push(scratch);
&gt; +    push(scratch);
&gt; +    storePtr(MacroAssembler::stackPointerRegister, &amp;vm()-&gt;writeBarrierRegisterBuffer[GPRInfo::numberOfRegisters]);
&gt; +    andPtr(TrustedImm32(~0xf), MacroAssembler::stackPointerRegister);
&gt; +
&gt; +    callOperation(operationUnconditionalWriteBarrier, owner);
&gt; +
&gt; +    loadPtr(&amp;vm()-&gt;writeBarrierRegisterBuffer[GPRInfo::numberOfRegisters], MacroAssembler::stackPointerRegister);
&gt; +    pop(scratch);
&gt; +    pop(scratch);
&gt; +    pop(scratch);
&gt; +    for (unsigned i = 0; i &lt; GPRInfo::numberOfRegisters; ++i)
&gt; +        loadPtr(&amp;vm()-&gt;writeBarrierRegisterBuffer[i], GPRInfo::toRegister(i)); 
&gt; +
&gt; +    ownerNotMarked.link(this);

Why isn&apos;t this just a single stack decrement and then frame relative load/store?  Among other things it would drop your need to store the stack pointer into a side slot.

I&apos;m also unconvinced you&apos;re going to get correct alignment - doesn&apos;t the call push the return address on x86? that leads to alignment+1 in the callee - or is that what the callee expects?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961512</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-19 13:00:29 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 219674 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219674&amp;action=review
&gt; 
&gt; r- due to stack push/pop shenanigans vs. single add/sub
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp:806
&gt; &gt; +    emitLoad(value, regT3, regT2);
&gt; &gt; +    
&gt; &gt; +    emitWriteBarrier(regT0, regT3, regT1, regT2, ShouldFilterImmediates);
&gt; 
&gt; Are regT0/regT3 already guaranteed to be the global reference?  Also why can&apos;t we just directly flag the global object mark bit?
It&apos;s guaranteed to be the scope object that we&apos;re storing to. In the case of putGlobalProperty, I guess that scope object is the global object. I guess we could just do a write barrier on the global object constant.

Are you asking why we can&apos;t just do a direct store to the mark bit of the global object? Because that&apos;s not how write barriers work. But we can definitely use the write barrier version that takes a JSCell* rather than a GPRReg which improves the size of the write barrier.

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1036
&gt; &gt; +    for (unsigned i = 0; i &lt; GPRInfo::numberOfRegisters; ++i)
&gt; &gt; +        storePtr(GPRInfo::toRegister(i), &amp;vm()-&gt;writeBarrierRegisterBuffer[i]);
&gt; &gt; +    push(scratch);
&gt; &gt; +    push(scratch);
&gt; &gt; +    push(scratch);
&gt; &gt; +    storePtr(MacroAssembler::stackPointerRegister, &amp;vm()-&gt;writeBarrierRegisterBuffer[GPRInfo::numberOfRegisters]);
&gt; &gt; +    andPtr(TrustedImm32(~0xf), MacroAssembler::stackPointerRegister);
&gt; &gt; +
&gt; &gt; +    callOperation(operationUnconditionalWriteBarrier, owner);
&gt; &gt; +
&gt; &gt; +    loadPtr(&amp;vm()-&gt;writeBarrierRegisterBuffer[GPRInfo::numberOfRegisters], MacroAssembler::stackPointerRegister);
&gt; &gt; +    pop(scratch);
&gt; &gt; +    pop(scratch);
&gt; &gt; +    pop(scratch);
&gt; &gt; +    for (unsigned i = 0; i &lt; GPRInfo::numberOfRegisters; ++i)
&gt; &gt; +        loadPtr(&amp;vm()-&gt;writeBarrierRegisterBuffer[i], GPRInfo::toRegister(i)); 
&gt; &gt; +
&gt; &gt; +    ownerNotMarked.link(this);
&gt; 
&gt; Why isn&apos;t this just a single stack decrement and then frame relative load/store?  Among other things it would drop your need to store the stack pointer into a side slot.
I actually don&apos;t need to store the stack pointer. That was leftover cruft :-(

&gt; 
&gt; I&apos;m also unconvinced you&apos;re going to get correct alignment - doesn&apos;t the call push the return address on x86? that leads to alignment+1 in the callee - or is that what the callee expects?
How does that lead to alignment + 1? Are we already misaligned by +1 while we&apos;re executing in the baseline JIT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961544</commentid>
    <comment_count>5</comment_count>
      <attachid>219682</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-19 14:23:50 -0800</bug_when>
    <thetext>Created attachment 219682
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961548</commentid>
    <comment_count>6</comment_count>
      <attachid>219682</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-19 14:46:06 -0800</bug_when>
    <thetext>Comment on attachment 219682
Patch

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

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:919
&gt; +    for (unsigned i = 0; i &lt; GPRInfo::numberOfRegisters; ++i)
&gt; +        storePtr(GPRInfo::toRegister(i), &amp;buffer[i]);

You&apos;re saving way too many registers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961599</commentid>
    <comment_count>7</comment_count>
      <attachid>219695</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-19 15:55:22 -0800</bug_when>
    <thetext>Created attachment 219695
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961609</commentid>
    <comment_count>8</comment_count>
      <attachid>219695</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-19 16:11:51 -0800</bug_when>
    <thetext>Comment on attachment 219695
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961628</commentid>
    <comment_count>9</comment_count>
      <attachid>219695</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-19 16:46:40 -0800</bug_when>
    <thetext>Comment on attachment 219695
Patch

Clearing flags on attachment: 219695

Committed r160878: &lt;http://trac.webkit.org/changeset/160878&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961629</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-19 16:46:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219674</attachid>
            <date>2013-12-19 12:17:16 -0800</date>
            <delta_ts>2013-12-19 14:23:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125975-20131219121713.patch</filename>
            <type>text/plain</type>
            <size>36528</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwODUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDEzLTEyLTE5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUHV0IHdyaXRlIGJhcnJpZXJzIGluIHRoZSByaWdodCBwbGFjZXMgaW4gdGhlIGJh
c2VsaW5lIEpJVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTI1OTc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OkpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2VudGVyKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9lbnRlcik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsUHJvcGVydHkpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQ
dXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luaXRfZ2xvYmFsX2Nv
bnN0KToKKyAgICAgICAgKEpTQzo6SklUOjpjaGVja01hcmtXb3JkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbml0X2dsb2Jh
bF9jb25zdCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjplbWl0
UHV0UmVwbGFjZVN0dWIpOgorICAgICAgICAoSlNDOjplbWl0UHV0VHJhbnNpdGlvblN0dWIpOgor
ICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6CisgICAgICAgICogcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICog
cnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKwogMjAxMy0xMi0xOCAgTWFyayBIYWhuZW5iZXJn
ICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIERlbGF5ZWRSZWxlYXNlU2NvcGUg
aXMgaW4gdGhlIHdyb25nIHBsYWNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAxNjA4MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3Miw2ICszNzIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY3JlYXRlX3RoaXMpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jYXB0dXJlZF9tb3YpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9kaXYpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9lbnRl
cikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2VxKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfZ2V0X2NhbGxlZSkKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfb3V0X29m
X2xpbmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE2MDgyMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTMxOSw4
ICszMTksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9k
ZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMgfTsK
ICAgICAgICAgLy8gdmFsdWUgcmVnaXN0ZXIgaW4gd3JpdGUgYmFycmllciBpcyB1c2VkIGJlZm9y
ZSBhbnkgc2NyYXRjaCByZWdpc3RlcnMKICAgICAgICAgLy8gc28gbWF5IHNhZmVseSBiZSB0aGUg
c2FtZSBhcyBlaXRoZXIgb2YgdGhlIHNjcmF0Y2ggcmVnaXN0ZXJzLgotICAgICAgICB2b2lkIGVt
aXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZVRhZywgUmVn
aXN0ZXJJRCBzY3JhdGNoLCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlLCBX
cml0ZUJhcnJpZXJVc2VLaW5kKTsKLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJy
aWVyTW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCk7CisgICAgICAgIEp1bXAgY2hlY2tNYXJrV29y
ZChSZWdpc3RlcklEIG93bmVyLCBSZWdpc3RlcklEIHNjcmF0Y2gxLCBSZWdpc3RlcklEIHNjcmF0
Y2gyKTsKKyAgICAgICAgSnVtcCBjaGVja01hcmtXb3JkKEpTQ2VsbCogb3duZXIsIFJlZ2lzdGVy
SUQgc2NyYXRjaCk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93
bmVyLCBSZWdpc3RlcklEIHZhbHVlVGFnLCBSZWdpc3RlcklEIHNjcmF0Y2gxLCBSZWdpc3RlcklE
IHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJy
aWVyKEpTQ2VsbCogb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwg
V3JpdGVCYXJyaWVyTW9kZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RydWN0dXJl
VHlwZT4gLy8gU3RydWN0dXJlVHlwZSBjYW4gYmUgUmVnaXN0ZXJJRCBvciBJbW1QdHIuCiAgICAg
ICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmplY3QoUmVnaXN0ZXJJRCBhbGxvY2F0b3IsIFN0cnVj
dHVyZVR5cGUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwpAQCAtNTY3
LDYgKzU2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3Rv
X3RoaXMoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZGl2
KEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2VudGVyKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VxKEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2dldF9jYWxsZWUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjc4LDYgKzY4MSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VBYXBKY3BaLCBpbnQsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUq
LCBHUFJSZWcsIGludDMyX3QpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VBYXBKY3BaLCBpbnQsIEFycmF5QWxsb2NhdGlvblByb2Zp
bGUqLCBjb25zdCBKU1ZhbHVlKiwgaW50MzJfdCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUMsIGludCwgSlNDZWxsKik7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUMs
IEpTQ2VsbCopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
SklUT3BlcmF0aW9uX0VKLCBpbnQsIEdQUlJlZyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihXaXRoUHJvZmlsZVRhZywgSl9K
SVRPcGVyYXRpb25fRVNzaUpJLCBpbnQsIFN0cnVjdHVyZVN0dWJJbmZvKiwgR1BSUmVnLCBTdHJp
bmdJbXBsKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2
aXNpb24gMTYwODIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksMTIgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7CiB9CiAKK0FMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VD
IG9wZXJhdGlvbiwgSlNDZWxsKiBjZWxsKQoreworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShUcnVzdGVkSW1tUHRyKGNlbGwpKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOworfQorCiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUCBvcGVyYXRpb24sIGlu
dCBkc3QsIHZvaWQqIHBvaW50ZXIpCiB7CiAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwpAQCAtNzI5LDcgKzczNSw2IEBAIGlubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZShSZWdpc3RlcklEIHN0cnVjdHVyZUFuZEluZGV4aW5nVHlwZSwgUmVnaXN0
ZXJJRCBzY3JhdGNoLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc2NyYXRjaCk7IC8vIFdlIGhhZCBmb3VuZCB0aGlzIHNjcmF0Y2ggcmVnaXN0ZXIgdXNl
ZnVsIGhlcmUgYmVmb3JlLCBzbyBJIHdpbGwga2VlcCBpdCBmb3Igbm93LgotICAgIAogICAgIFJl
Z2lzdGVySUQgc3RydWN0dXJlID0gc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlOwogICAgIFJlZ2lz
dGVySUQgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlOwogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2
aXNpb24gMTYwODIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIxLDYgKzEwMjEsMTYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZW50ZXIoSW5zdHJ1Y3Rpb24qKQogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5j
cmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fY29kZUJsb2Nr
LT5tX251bVZhcnM7ICsraSkKICAgICAgICAgZW1pdFN0b3JlKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGkpLm9mZnNldCgpLCBqc1VuZGVmaW5lZCgpKTsKKworICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lbnRlcihJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorewor
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKyAgICAKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudGVyKTsKKyAgICBz
bG93UGF0aENhbGwuY2FsbCgpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfYWN0aXZh
dGlvbihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNjA4MjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDEs
NiArODAxLDE2IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3RydWN0aW9uKikKICAgICBz
aXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bV9udW1WYXJzOwogICAgIGZvciAoc2l6ZV90IGog
PSAwOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVn
aXN0ZXJGb3JMb2NhbChqKS5vZmZzZXQoKSk7CisKKyAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwor
fQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW50ZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7CisgICAgCisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnRlcik7CisgICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX2FjdGl2YXRpb24o
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24g
MTYwODIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDYgKzMxMiw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KIAogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5l
cmljQ29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQogeworICAg
IGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgdmFs
dWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKICAgICAKQEAg
LTMyNywxMCArMzI4LDE0IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3Vv
dXMKICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKICAgICBjYXNlIEludDMyU2hhcGU6CiAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KKyAg
ICAgICAgc3RvcmUzMihyZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0
b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ29udGlndW91c1NoYXBlOgogICAgICAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVn
VDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
cGF5bG9hZCkpKTsKICAgICAgICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdU
MiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsK
KyAgICAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgZW1pdFdyaXRl
QmFycmllcihyZWdUMywgcmVnVDEsIHJlZ1QwLCByZWdUMiwgVW5jb25kaXRpb25hbFdyaXRlQmFy
cmllcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRG91YmxlU2hhcGU6IHsKICAgICAgICAg
SnVtcCBub3RJbnQgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZykpOwpAQCAtMzYxLDEzICszNjYsMTIgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRHZW5lcmljQ29udGlndW91cwogICAgIAogICAgIGRvbmUubGluayh0aGlzKTsKICAgICAK
LSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDEsIHJlZ1QzLCBVbmNvbmRp
dGlvbmFsV3JpdGVCYXJyaWVyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0gICAg
CiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJh
eVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlKQogeworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKICAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51
LmFycmF5UHJvZmlsZTsKICAgICAKQEAgLTM5Nyw3ICs0MDEsOCBAQCBKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5CiAgICAgCiAgICAgZW5kLmxpbmsodGhpcyk7CiAgICAg
Ci0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QxLCByZWdUMywgVW5jb25k
aXRpb25hbFdyaXRlQmFycmllciwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAg
IGVtaXRMb2FkKGJhc2UsIHJlZ1QyLCByZWdUMyk7IAorICAgIGVtaXRXcml0ZUJhcnJpZXIocmVn
VDMsIHJlZ1QxLCByZWdUMCwgcmVnVDIsIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpOwogICAg
IAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CkBAIC01MTksOCArNTI0LDEwIEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICAKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIo
cmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRl
QmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKLSAgICAKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJl
Z1QwLCByZWdUMywgcmVnVDEsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKTsKKyAgICBl
bWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMywg
cmVnVDIpOworCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJl
Z2lzdGVycygpLAogICAgICAgICBjYWxsRnJhbWVSZWdpc3RlciwgSlNWYWx1ZVJlZ3M6OnBheWxv
YWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwKQEAgLTUzOSw3ICs1NDYs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0CiAKICAgICBsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
Ci0gICAgCisKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CkBAIC03
OTQsMTAgKzgwMSwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoSW5z
CiAKIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl90KiBvcGVyYW5kU2xv
dCwgaW50IHZhbHVlKQogeworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOworICAg
IAorICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVnVDIsIFNob3Vs
ZEZpbHRlckltbWVkaWF0ZXMpOworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwor
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMCk7CiAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwogICAgIG5lZ1B0cihy
ZWdUMSk7Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7CiAgICAgc3RvcmUzMihy
ZWdUMywgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgc3RvcmUzMihyZWdUMiwg
QmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwogfQpAQCAtODQxLDYgKzg1Miw5IEBA
IHZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoUmVnaXN0ZXJJRCB0YWcKIHZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFZhcmlhYmxlV2F0Y2hw
b2ludFNldCogc2V0KQogewogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOworCisg
ICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBy
ZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcyk7CisKICAgICBlbWl0Tm90aWZ5V3JpdGUocmVn
VDEsIHJlZ1QwLCByZWdUMiwgc2V0KTsKICAgICBzdG9yZTMyKHJlZ1QxLCByZWludGVycHJldF9j
YXN0PGNoYXIqPihvcGVyYW5kKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSk7CiAgICAgc3RvcmUzMihyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4ob3BlcmFuZCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKTsKQEAgLTg1MCw5ICs4NjQsMTMgQEAgdm9pZCBKSVQ6OmVtaXRQdXRD
bG9zdXJlVmFyKGludCBzY29wZSwgdQogewogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVn
VDIpOwogICAgIGVtaXRMb2FkKHNjb3BlLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRXcml0ZUJh
cnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMp
OworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOworCiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDAp
OwogICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDAsIG9wZXJhbmQgKiBzaXplb2YoUmVn
aXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50
YWcpKSk7CiAgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgb3BlcmFuZCAqIHNpemVv
ZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnBheWxvYWQpKSk7CisKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MTAsMTEgKzkyOCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2luaXRfZ2xvYmFsX2NvbnN0KEluc3QKIAogICAgIGVtaXRMb2FkKHZhbHVl
LCByZWdUMSwgcmVnVDApOwogICAgIAotICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJs
ZWQoKSkgewotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgcmVnVDIp
OwotICAgICAgICAKLSAgICAgICAgZW1pdFdyaXRlQmFycmllcihnbG9iYWxPYmplY3QsIHJlZ1Qx
LCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVB
Y2Nlc3MpOwotICAgIH0KKyAgICBlbWl0V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDEs
IHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKTsKIAogICAgIHN0b3JlMzIocmVnVDEsIHJl
Z2lzdGVyUG9pbnRlci0+dGFnUG9pbnRlcigpKTsKICAgICBzdG9yZTMyKHJlZ1QwLCByZWdpc3Rl
clBvaW50ZXItPnBheWxvYWRQb2ludGVyKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE2MDgyMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNDksNyArMzQ5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0
cnVjdGlvbgogICAgIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29t
cGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKIAot
ICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVnVDMsIFNob3VsZEZp
bHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKIH0KIAogSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1NoYXBlKQpAQCAtMzg1LDYgKzM4NCw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0R2VuZXJpY0NvbnRpZ3VvdXMKICAgICB9CiAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CiAg
ICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQp
KTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDMsIHJlZ1QxLCByZWdUMiwg
U2hvdWxkRmlsdGVySW1tZWRpYXRlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIENSQVNIKCk7CkBAIC00MjMsNiArNDIzLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRBcnJheVN0b3JhZ2VQdXRCeQogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKICAgICBzdG9yZTY0KHJlZ1QzLCBC
YXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdU
MywgcmVnVDEsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKTsKICAgICBKdW1wIGVuZCA9
IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwpAQCAtNTYwLDggKzU2MSw4IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKIAogICAgIC8vIEp1bXAg
dG8gYSBzbG93IGNhc2UgaWYgZWl0aGVyIHRoZSBiYXNlIG9iamVjdCBpcyBhbiBpbW1lZGlhdGUs
IG9yIGlmIHRoZSBTdHJ1Y3R1cmUgZG9lcyBub3QgbWF0Y2guCiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgCi0gICAgZW1pdFdyaXRlQmFycmll
cihyZWdUMCwgcmVnVDEsIHJlZ1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3Jp
dGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworCisgICAgZW1pdFdyaXRlQmFycmllcihyZWdU
MCwgcmVnVDEsIHJlZ1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcyk7CiAKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4o
bV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCksCkBAIC03
NTksMTAgKzc2MCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoSW5z
CiAKIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl90KiBvcGVyYW5kU2xv
dCwgaW50IHZhbHVlKQogeworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qy
KTsKKworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QyLCByZWdUMSwgcmVnVDMsIFNo
b3VsZEZpbHRlckltbWVkaWF0ZXMpOworCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihvcGVyYW5kU2xv
dCwgcmVnVDEpOwogICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDIpOwogICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJl
Z1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpKTsKIH0KIApAQCAtNzk5LDYgKzgwMyw5IEBAIHZvaWQgSklUOjplbWl0Tm90
aWZ5V3JpdGUoUmVnaXN0ZXJJRCB2YWwKIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRw
dHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0KQogewog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAKKyAgICBlbWl0
V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyLCBT
aG91bGRGaWx0ZXJJbW1lZGlhdGVzKTsKKwogICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMCwgcmVn
VDEsIHNldCk7CiAgICAgc3RvcmVQdHIocmVnVDAsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9w
ZXJhbmQpKTsKIH0KQEAgLTgwNyw2ICs4MTQsOSBAQCB2b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVW
YXIoaW50IHNjb3BlLCB1CiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKworICAgIGVt
aXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDMsIFNob3VsZEZpbHRlcklt
bWVkaWF0ZXMpOworCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1ZhcmlhYmxlT2JqZWN0
OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDApOwogICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QwLCBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogfQpAQCAtODYwLDQ0ICs4
NzAsMTgxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoSW5zdHIKIHZvaWQg
SklUOjplbWl0X29wX2luaXRfZ2xvYmFsX2NvbnN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKTsKLQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDApOwotCisgICAgZW1pdFdyaXRlQmFycmllcihn
bG9iYWxPYmplY3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcyk7CiAgICAg
c3RvcmU2NChyZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKTsK
LSAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpCi0gICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMCwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0
ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKIH0KIAogI2VuZGlmIC8vIFVTRShK
U1ZBTFVFNjQpCiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFJlZ2lzdGVySUQgb3duZXIs
IFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgUmVnaXN0ZXJJRCBzY3JhdGNo
MiwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCitK
SVQ6Okp1bXAgSklUOjpjaGVja01hcmtXb3JkKFJlZ2lzdGVySUQgb3duZXIsIFJlZ2lzdGVySUQg
c2NyYXRjaDEsIFJlZ2lzdGVySUQgc2NyYXRjaDIpCit7CisgICAgbW92ZShvd25lciwgc2NyYXRj
aDEpOworICAgIG1vdmUob3duZXIsIHNjcmF0Y2gyKTsKKworICAgIGFuZFB0cihUcnVzdGVkSW1t
UHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoMSk7CisgICAgYW5kUHRyKFRydXN0
ZWRJbW1QdHIofk1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoMik7CisKKyAgICByc2hp
ZnQzMihUcnVzdGVkSW1tMzIoMyArIDQpLCBzY3JhdGNoMik7CisKKyAgICByZXR1cm4gYnJhbmNo
VGVzdDgoWmVybywgQmFzZUluZGV4KHNjcmF0Y2gxLCBzY3JhdGNoMiwgVGltZXNPbmUsIE1hcmtl
ZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpKTsKK30KKworSklUOjpKdW1wIEpJVDo6Y2hlY2tNYXJr
V29yZChKU0NlbGwqIG93bmVyLCBSZWdpc3RlcklEIC8qc2NyYXRjaCovKQogeworICAgIE1hcmtl
ZEJsb2NrKiBibG9jayA9IE1hcmtlZEJsb2NrOjpibG9ja0Zvcihvd25lcik7CisgICAgc2l6ZV90
IGluZGV4ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Pihvd25lcikgJiB+TWFya2VkQmxvY2s6
OmJsb2NrTWFzaykgPj4gKDMgKyA0KTsKKyAgICB2b2lkKiBhZGRyZXNzID0gKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGJsb2NrKSArIE1hcmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpICsgaW5k
ZXg7CisKKyAgICByZXR1cm4gYnJhbmNoVGVzdDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKGFkZHJl
c3MpKTsKK30KKworI2lmIFVTRShKU1ZBTFVFNjQpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmll
cihSZWdpc3RlcklEIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gx
LCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit7CisjaWYgRU5B
QkxFKEdHQykKKyAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDEpOworICAgIEFTU0VSVChvd25l
ciAhPSBzY3JhdGNoMik7CisgICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNjcmF0Y2gyKTsKKworICAg
IEp1bXAgdmFsdWVOb3RDZWxsOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckltbWVkaWF0
ZXMpCisgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCB2YWx1ZSwg
dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAKKyAgICBKdW1wIG93bmVyTm90TWFya2VkID0gY2hlY2tN
YXJrV29yZChvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKQorICAgICAgICBzdG9y
ZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCAmdm0oKS0+d3JpdGVCYXJyaWVyUmVnaXN0ZXJC
dWZmZXJbaV0pOworCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3Jp
dGVCYXJyaWVyLCBvd25lcik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgbG9hZFB0cigmdm0oKS0+d3JpdGVC
YXJyaWVyUmVnaXN0ZXJCdWZmZXJbaV0sIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOyAKKworICAg
IG93bmVyTm90TWFya2VkLmxpbmsodGhpcyk7CisKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJJbW1lZGlhdGVzKSAKKyAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CisjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShvd25lcik7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOworICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsKICAgICBV
TlVTRURfUEFSQU0oc2NyYXRjaDIpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKKyAgICBV
TlVTRURfUEFSQU0obW9kZSk7CisjZW5kaWYgLy8gRU5BQkxFKEdHQykKK30KKwordm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0
ZXJJRCBzY3JhdGNoLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit7CisjaWYgRU5BQkxFKEdHQykK
KyAgICBKdW1wIHZhbHVlTm90Q2VsbDsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJJbW1l
ZGlhdGVzKQorICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgdmFs
dWUsIHRhZ01hc2tSZWdpc3Rlcik7CisKKyAgICBKdW1wIG93bmVyTm90TWFya2VkID0gY2hlY2tN
YXJrV29yZChvd25lciwgc2NyYXRjaCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5m
bzo6dG9SZWdpc3RlcihpKSwgJnZtKCktPndyaXRlQmFycmllclJlZ2lzdGVyQnVmZmVyW2ldKTsK
KyAgICAKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJp
ZXIsIG93bmVyKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVyczsgKytpKQorICAgICAgICBsb2FkUHRyKCZ2bSgpLT53cml0ZUJhcnJpZXJS
ZWdpc3RlckJ1ZmZlcltpXSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7IAorCisgICAgb3duZXJO
b3RNYXJrZWQubGluayh0aGlzKTsKKworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckltbWVk
aWF0ZXMpIAorICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKG93bmVyKTsKICAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTShzY3JhdGNoKTsKICAgICBVTlVTRURfUEFSQU0obW9kZSk7Ci0gICAgQVNTRVJUKG93bmVy
ICE9IHNjcmF0Y2gpOworI2VuZGlmIC8vIEVOQUJMRShHR0MpCit9CisjZWxzZQordm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZVRhZywg
UmVnaXN0ZXJJRCBzY3JhdGNoMSwgUmVnaXN0ZXJJRCBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlKQoreworI2lmIEVOQUJMRShHR0MpCisgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gx
KTsKICAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDIpOwotICAgIAotI2lmIEVOQUJMRShXUklU
RV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBlbWl0Q291bnQoV3JpdGVCYXJyaWVyQ291bnRlcnM6
OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwotI2VuZGlmCisgICAgQVNTRVJUKHNjcmF0Y2gxICE9
IHNjcmF0Y2gyKTsKKworICAgIEp1bXAgdmFsdWVOb3RDZWxsOworICAgIGlmIChtb2RlID09IFNo
b3VsZEZpbHRlckltbWVkaWF0ZXMpCisgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaDMyKE5v
dEVxdWFsLCB2YWx1ZVRhZywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKworICAg
IEp1bXAgb3duZXJOb3RNYXJrZWQgPSBjaGVja01hcmtXb3JkKG93bmVyLCBzY3JhdGNoMSwgc2Ny
YXRjaDIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyArK2kpCisgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSks
ICZ2bSgpLT53cml0ZUJhcnJpZXJSZWdpc3RlckJ1ZmZlcltpXSk7CisgICAgcHVzaChzY3JhdGNo
MSk7CisgICAgcHVzaChzY3JhdGNoMSk7CisgICAgcHVzaChzY3JhdGNoMSk7CisgICAgc3RvcmVQ
dHIoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAmdm0oKS0+d3JpdGVCYXJy
aWVyUmVnaXN0ZXJCdWZmZXJbR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdKTsKKyAgICBhbmRQ
dHIoVHJ1c3RlZEltbTMyKH4weGYpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIAorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRl
QmFycmllciwgb3duZXIpOworCisgICAgbG9hZFB0cigmdm0oKS0+d3JpdGVCYXJyaWVyUmVnaXN0
ZXJCdWZmZXJbR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdLCBNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgIHBvcChzY3JhdGNoMSk7CisgICAgcG9wKHNjcmF0Y2gx
KTsKKyAgICBwb3Aoc2NyYXRjaDEpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKQorICAgICAgICBsb2FkUHRyKCZ2bSgpLT53cml0
ZUJhcnJpZXJSZWdpc3RlckJ1ZmZlcltpXSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7IAorCisg
ICAgb3duZXJOb3RNYXJrZWQubGluayh0aGlzKTsKKworICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlckltbWVkaWF0ZXMpIAorICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWVUYWcpOwor
ICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsK
KyAgICBVTlVTRURfUEFSQU0obW9kZSk7CisjZW5kaWYgLy8gRU5BQkxFKEdHQykKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwg
UmVnaXN0ZXJJRCBzY3JhdGNoLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUsIFdyaXRlQmFycmllclVz
ZUtpbmQgdXNlS2luZCkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIs
IFJlZ2lzdGVySUQgdmFsdWVUYWcsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlKQogeworI2lmIEVOQUJMRShHR0MpCisgICAgSnVtcCB2YWx1ZU5vdENlbGw7CisgICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVySW1tZWRpYXRlcykKKyAgICAgICAgdmFsdWVOb3RDZWxs
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHZhbHVlVGFnLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZykpOworCisKKyAgICBKdW1wIG93bmVyTm90TWFya2VkID0gY2hlY2tNYXJrV29yZChvd25l
ciwgc2NyYXRjaCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3Rl
cihpKSwgJnZtKCktPndyaXRlQmFycmllclJlZ2lzdGVyQnVmZmVyW2ldKTsKKyAgICBwdXNoKHNj
cmF0Y2gpOworICAgIHB1c2goc2NyYXRjaCk7CisgICAgcHVzaChzY3JhdGNoKTsKKyAgICBzdG9y
ZVB0cihNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsICZ2bSgpLT53cml0ZUJh
cnJpZXJSZWdpc3RlckJ1ZmZlcltHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyc10pOworICAgIGFu
ZFB0cihUcnVzdGVkSW1tMzIofjB4ZiksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJh
cnJpZXIsIG93bmVyKTsKKworICAgIGxvYWRQdHIoJnZtKCktPndyaXRlQmFycmllclJlZ2lzdGVy
QnVmZmVyW0dQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBwb3Aoc2NyYXRjaCk7CisgICAgcG9wKHNjcmF0Y2gpOwor
ICAgIHBvcChzY3JhdGNoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgbG9hZFB0cigmdm0oKS0+d3JpdGVCYXJy
aWVyUmVnaXN0ZXJCdWZmZXJbaV0sIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOyAKKworICAgIG93
bmVyTm90TWFya2VkLmxpbmsodGhpcyk7CisKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJJ
bW1lZGlhdGVzKSAKKyAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CisjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShvd25lcik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlVGFnKTsKICAgICBV
TlVTRURfUEFSQU0oc2NyYXRjaCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwotICAgIFVO
VVNFRF9QQVJBTSh2YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKG1vZGUpOwotICAgIAotI2lmIEVO
QUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBlbWl0Q291bnQoV3JpdGVCYXJyaWVy
Q291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwotI2VuZGlmCisjZW5kaWYgLy8gRU5B
QkxFKEdHQykKIH0KKyNlbmRpZgogCiBKSVQ6Okp1bXAgSklUOjphZGRTdHJ1Y3R1cmVUcmFuc2l0
aW9uQ2hlY2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKQEAgLTk4OCw3ICsxMTM1
LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICAKICAg
ICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAor
CisjaWYgRU5BQkxFKEdHQykKKyAgICBib29sIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IGZh
bHNlOworI2VuZGlmCisKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgIGNhc2UgSklUSW50
MzI6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSk7CkBAIC05OTgsOSArMTE0OSwxNSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUQ29udGln
dW91czoKICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworI2lmIEVOQUJMRShHR0MpCisgICAgICAgIG5lZWRzTGlu
a0ZvcldyaXRlQmFycmllciA9IHRydWU7CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQ
dXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworI2lmIEVOQUJMRShHR0MpCisg
ICAgICAgIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7CisjZW5kaWYKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVk
QXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CkBAIC0xMDE0LDExICsxMTcxLDE1
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBt
X2NvZGVCbG9jayk7Ci0gICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9j
YXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRk
cmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0
dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywg
Q29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbElu
Zm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Ci0gICAgCiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5i
YWRUeXBlSnVtcFRvRG9uZSkpOworI2lmIEVOQUJMRShHR0MpCisgICAgaWYgKG5lZWRzTGlua0Zv
cldyaXRlQmFycmllcikgeworICAgICAgICBBU1NFUlQobV9jYWxscy5sYXN0KCkudG8gPT0gb3Bl
cmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcik7CisgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsobV9jYWxscy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmll
cik7CisgICAgfQorI2VuZGlmCiAgICAgCiAgICAgYm9vbCBpc0RpcmVjdCA9IG1faW50ZXJwcmV0
ZXItPmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9i
eV92YWxfZGlyZWN0OwogICAgIGlmICghaXNEaXJlY3QpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTYwODIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAog
CiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lSW5saW5lcy5o
IgorI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJ
VC5oIgogI2luY2x1ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91
dGluZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTc4OCw3MCArNzkwLDU5IEBAIHN0
YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSBz
dGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKICNlbmRpZgog
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gu
dmFsdWVHUFIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJ
bmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jl
c3RvcmVTY3JhdGNoID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5H
KQotICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKLSAgICBjb25zdCBib29sIHdyaXRlQmFycmllck5l
ZWRlZCA9IHRydWU7Ci0jZWxzZQotICAgIGNvbnN0IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0g
ZmFsc2U7CisKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZv
LnBhdGNoLnVzZWRSZWdpc3RlcnMpOworICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOworI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVUYWdHUFIpOwogI2Vu
ZGlmCisgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOwogICAgIAotICAgIE1hY3JvQXNzZW1i
bGVyIHN0dWJKaXQ7Ci0gICAgCi0gICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZyAm
JiAod3JpdGVCYXJyaWVyTmVlZGVkIHx8IGlzT3V0T2ZMaW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBBc3Nl
bWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIpOwotI2Vsc2UK
LSAgICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihi
YXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9
IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyNpZiBFTkFCTEUoR0dDKQorICAgIEdQ
UlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICNlbmRp
ZgotICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIHN0dWJKaXQu
cHVzaFRvU2F2ZShzY3JhdGNoR1BSKTsKLSAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnMgc3R1Ykpp
dCh2bSwgZXhlYy0+Y29kZUJsb2NrKCkpOworCisgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2Vk
UmVnaXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
YmFkU3RydWN0dXJlID0gc3R1YkppdC5icmFuY2hQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSkpOwotICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJ
TElORykKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHNjcmF0Y2hHUFIyID0gQXNzZW1ibHlIZWxw
ZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSNl
bHNlCi0gICAgc2NyYXRjaEdQUjIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIo
YmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAg
IHN0dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSMik7Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjp3
cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIFdy
aXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKLSAgICBzdHViSml0LnBvcFRvUmVzdG9yZShz
Y3JhdGNoR1BSMik7Ci0jZW5kaWYKLSAgICAKKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQogICAgICAgICBzdHViSml0LnN0
b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIGVsc2UgewotICAgICAgICBz
dHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmU2
NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5C
dXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5z
dG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zm
c2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsK
ICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlmIChpc0lubGluZU9mZnNldChz
bG90LmNhY2hlZE9mZnNldCgpKSkgewogICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCkpKTsKICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnRhZykpKTsKICAgICB9IGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3Rv
cmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zm
c2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1Ykpp
dC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwg
b2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQp
KSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCiAgICAgCisjaWYgRU5BQkxFKEdH
QykKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCB3cml0ZUJhcnJpZXJPcGVyYXRpb24gPSBERkc6
OlNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQ
UjEsIHNjcmF0Y2hHUFIyKTsKKyNlbmRpZgorICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHN1Y2Nlc3M7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKICAgICAKLSAgICBp
ZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc3R1YkppdC5wb3BUb1Jlc3RvcmUo
c2NyYXRjaEdQUik7CisgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7Cisg
ICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQp
OwogICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgIAogICAgICAgICBi
YWRTdHJ1Y3R1cmUubGluaygmc3R1YkppdCk7Ci0gICAgICAgIHN0dWJKaXQucG9wVG9SZXN0b3Jl
KHNjcmF0Y2hHUFIpOworICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5
UG9wcGluZyhzdHViSml0KTsKICAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKQEAgLTg1OSw2ICs4
NTAsOSBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgfQogICAgIAogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkp
OworI2lmIEVOQUJMRShHR0MpCisgICAgcGF0Y2hCdWZmZXIubGluayh3cml0ZUJhcnJpZXJPcGVy
YXRpb24sIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKTsKKyNlbmRpZgogICAgIHBh
dGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgcGF0Y2hCdWZm
ZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwogICAgICAgICAgICAgCkBAIC05MDAsMjkg
Kzg5NCwyMSBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgCiAgICAg
Q0NhbGxIZWxwZXJzIHN0dWJKaXQodm0pOwogICAgIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9
IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjEg
IT0gYmFzZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsKLSAgICAK
LSAgICBib29sIG5lZWRTZWNvbmRTY3JhdGNoID0gZmFsc2U7CiAgICAgYm9vbCBuZWVkVGhpcmRT
Y3JhdGNoID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAg
IG5lZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsKLSNlbmRpZgogICAgIGlmIChzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAg
ICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBu
ZWVkU2Vjb25kU2NyYXRjaCA9IHRydWU7CiAgICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVl
OwogICAgIH0KIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKLSAgICBpZiAobmVlZFNlY29uZFNj
cmF0Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBiYXNlR1BSKTsKLSAgICAgICAg
QVNTRVJUKHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hH
UFIyICE9IHNjcmF0Y2hHUFIxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUjIgPSBJ
bnZhbGlkR1BSUmVnOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQUik7CisgICAg
QVNTRVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsKKyAgICAKKyAgICBHUFJSZWcgc2NyYXRj
aEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgQVNTRVJUKHNjcmF0
Y2hHUFIyICE9IGJhc2VHUFIpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSB2YWx1ZUdQUik7
CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKKwogICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMzsKICAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkgewogICAgICAgICBzY3JhdGNo
R1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKQEAgLTkzMiw3ICs5MTgsNyBA
QCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgIEFTU0VSVChzY3Jh
dGNoR1BSMyAhPSBzY3JhdGNoR1BSMik7CiAgICAgfSBlbHNlCiAgICAgICAgIHNjcmF0Y2hHUFIz
ID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgIAorICAgIAogICAgIGFsbG9jYXRvci5wcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhzdHViSml0KTsKIAogICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CkBAIC05NTMsMTMgKzkzOSw2IEBAIHN0YXRpYyB2
b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgfQogICAgIH0KIAotI2lmIEVOQUJM
RShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBBU1NFUlQobmVlZFNlY29uZFNjcmF0Y2gp
OwotICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAvLyBNdXN0
IGFsd2F5cyBlbWl0IHRoaXMgd3JpdGUgYmFycmllciBhcyB0aGUgc3RydWN0dXJlIHRyYW5zaXRp
b24gaXRzZWxmIHJlcXVpcmVzIGl0Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjp3cml0ZUJhcnJpZXIo
c3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJG
b3JQcm9wZXJ0eUFjY2Vzcyk7Ci0jZW5kaWYKLSAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd1BhdGg7CiAgICAgCiAgICAgYm9vbCBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSBm
YWxzZTsKQEAgLTEwMTgsNiArOTk3LDEwIEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9u
U3R1YigKICAgICB9CiAjZW5kaWYKICAgICAKKyNpZiBFTkFCTEUoR0dDKQorICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIHdyaXRlQmFycmllck9wZXJhdGlvbiA9IERGRzo6U3BlY3VsYXRpdmVKSVQ6
OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIp
OworI2VuZGlmCisgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOwogICAgICAgICAgICAgCkBAIC0xMDUxLDYgKzEw
MzQsOSBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgfQogICAgIAog
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2Nr
KCkpOworI2lmIEVOQUJMRShHR0MpCisgICAgcGF0Y2hCdWZmZXIubGluayh3cml0ZUJhcnJpZXJP
cGVyYXRpb24sIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKTsKKyNlbmRpZgogICAg
IHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYgKGFs
bG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZh
aWx1cmUsIGZhaWx1cmVMYWJlbCk7CkBAIC0xMTQ3LDcgKzExMzMsNyBAQCBzdGF0aWMgYm9vbCB0
cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiB2b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwotICAgIAor
CiAgICAgYm9vbCBjYWNoZWQgPSB0cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKICAgICBpZiAoIWNhY2hlZCkKICAg
ICAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcAkocmV2aXNpb24gMTYwODIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE1LDYgKzUxNSwx
NCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fcHJpbWl0aXZlKQogICAgIFJFVFVSTihP
UF9DKDIpLmpzVmFsdWUoKS50b1ByaW1pdGl2ZShleGVjKSk7CiB9CiAKK1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9lbnRlcikKK3sKKyAgICBCRUdJTigpOworICAgIFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSA9IGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKTsK
KyAgICBIZWFwOjpoZWFwKG93bmVyRXhlY3V0YWJsZSktPndyaXRlQmFycmllcihvd25lckV4ZWN1
dGFibGUpOworICAgIEVORCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQpIHx8IEVOQUJMRShMTElOVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxNjA4MjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTYzLDYgKzE2Myw3IEBAIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
Y29uc3RydWMKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdG91Y2hfZW50cnkpOwog
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfYXJndW1lbnRzKTsKIFNMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX3RoaXMpOworU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9lbnRlcik7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X2dldF9jYWxsZWUpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b190aGlzKTsK
IFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2FwdHVyZWRfbW92KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219682</attachid>
            <date>2013-12-19 14:23:50 -0800</date>
            <delta_ts>2013-12-19 15:55:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125975-20131219142343.patch</filename>
            <type>text/plain</type>
            <size>34926</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwODUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDEzLTEyLTE5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUHV0IHdyaXRlIGJhcnJpZXJzIGluIHRoZSByaWdodCBwbGFjZXMgaW4gdGhlIGJh
c2VsaW5lIEpJVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTI1OTc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OkpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2VudGVyKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9lbnRlcik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsUHJvcGVydHkpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQ
dXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luaXRfZ2xvYmFsX2Nv
bnN0KToKKyAgICAgICAgKEpTQzo6SklUOjpjaGVja01hcmtXb3JkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbml0X2dsb2Jh
bF9jb25zdCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjplbWl0
UHV0UmVwbGFjZVN0dWIpOgorICAgICAgICAoSlNDOjplbWl0UHV0VHJhbnNpdGlvblN0dWIpOgor
ICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6CisgICAgICAgICogcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICog
cnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKwogMjAxMy0xMi0xOCAgTWFyayBIYWhuZW5iZXJn
ICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIERlbGF5ZWRSZWxlYXNlU2NvcGUg
aXMgaW4gdGhlIHdyb25nIHBsYWNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlz
aW9uIDE2MDgyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxOSw4ICszMTksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVudW0g
V3JpdGVCYXJyaWVyTW9kZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRl
ckltbWVkaWF0ZXMgfTsKICAgICAgICAgLy8gdmFsdWUgcmVnaXN0ZXIgaW4gd3JpdGUgYmFycmll
ciBpcyB1c2VkIGJlZm9yZSBhbnkgc2NyYXRjaCByZWdpc3RlcnMKICAgICAgICAgLy8gc28gbWF5
IHNhZmVseSBiZSB0aGUgc2FtZSBhcyBlaXRoZXIgb2YgdGhlIHNjcmF0Y2ggcmVnaXN0ZXJzLgot
ICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJ
RCB2YWx1ZVRhZywgUmVnaXN0ZXJJRCBzY3JhdGNoLCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0
ZUJhcnJpZXJNb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kKTsKLSAgICAgICAgdm9pZCBlbWl0V3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2Ny
YXRjaCwgV3JpdGVCYXJyaWVyTW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCk7CisgICAgICAgIEp1
bXAgY2hlY2tNYXJrV29yZChSZWdpc3RlcklEIG93bmVyLCBSZWdpc3RlcklEIHNjcmF0Y2gxLCBS
ZWdpc3RlcklEIHNjcmF0Y2gyKTsKKyAgICAgICAgSnVtcCBjaGVja01hcmtXb3JkKEpTQ2VsbCog
b3duZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBvd25lciwg
UmVnaXN0ZXJJRCB2YWx1ZVRhZywgUmVnaXN0ZXJJRCBzY3JhdGNoMSwgUmVnaXN0ZXJJRCBzY3Jh
dGNoMiwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihK
U0NlbGwqIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiAvLyBTdHJ1Y3R1cmVUeXBlIGNh
biBiZSBSZWdpc3RlcklEIG9yIEltbVB0ci4KICAgICAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU09i
amVjdChSZWdpc3RlcklEIGFsbG9jYXRvciwgU3RydWN0dXJlVHlwZSwgUmVnaXN0ZXJJRCByZXN1
bHQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CkBAIC02NzgsNiArNjgwLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRUFhcEpjcFosIGludCwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSosIEdQUlJlZywgaW50
MzJfdCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRUFhcEpjcFosIGludCwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSosIGNvbnN0IEpT
VmFsdWUqLCBpbnQzMl90KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0pJVE9wZXJhdGlvbl9FQywgaW50LCBKU0NlbGwqKTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQywgSlNDZWxsKik7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RUosIGludCwgR1BSUmVnKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFdpdGhQcm9maWxlVGFnLCBKX0pJVE9wZXJhdGlvbl9F
U3NpSkksIGludCwgU3RydWN0dXJlU3R1YkluZm8qLCBHUFJSZWcsIFN0cmluZ0ltcGwqKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAxNjA4MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTk5LDYgKzE5OSwxMiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6CiAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKIH0KIAorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBK
U0NlbGwqIGNlbGwpCit7CisgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW1QdHIoY2VsbCkpOworICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbik7Cit9CisKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgaW50IGRzdCwgdm9pZCog
cG9pbnRlcikKIHsKICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0
cihwb2ludGVyKSk7CkBAIC03MjksNyArNzM1LDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlKAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRl
KFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gs
IEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQogewogICAgIFVOVVNFRF9QQVJBTShzY3JhdGNo
KTsgLy8gV2UgaGFkIGZvdW5kIHRoaXMgc2NyYXRjaCByZWdpc3RlciB1c2VmdWwgaGVyZSBiZWZv
cmUsIHNvIEkgd2lsbCBrZWVwIGl0IGZvciBub3cuCi0gICAgCiAgICAgUmVnaXN0ZXJJRCBzdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5cGU7CiAgICAgUmVnaXN0ZXJJRCBpbmRleGlu
Z1R5cGUgPSBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5cGU7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxNjA4MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMTIsNyArMTAxMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKElu
c3RydWN0aW9uKiBjdXIKIH0KIAogCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihJbnN0cnVjdGlv
biopCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAgICAgCkBAIC0xMDIx
LDYgKzEwMjEsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihJbnN0cnVjdGlvbiopCiAgICAg
Ly8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm1fbnVtVmFyczsgKytpKQogICAgICAgICBlbWl0
U3RvcmUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkub2Zmc2V0KCksIGpzVW5kZWZpbmVkKCkp
OworCisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dfcGF0aF9lbnRlcik7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX2FjdGl2YXRpb24oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkocmV2aXNpb24gMTYwODIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzkxLDcgKzc5MSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX25lcV9udWxsKEluc3RydWN0aW9uKiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3RydWN0aW9uKikKK3ZvaWQgSklU
OjplbWl0X29wX2VudGVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKICAgICAKQEAgLTgwMSw2ICs4MDEsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihJbnN0cnVjdGlvbiopCiAgICAgc2l6ZV90IGNvdW50ID0g
bV9jb2RlQmxvY2stPm1fbnVtVmFyczsKICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGNvdW50
OyArK2opCiAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
aikub2Zmc2V0KCkpOworCisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnRlcik7CisgICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX2FjdGl2YXRpb24oSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTYwODIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEyLDYgKzMxMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWwoSW5zdHJ1Y3Rpb24KIAogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGln
dW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQogeworICAgIGludCBiYXNl
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgdmFsdWUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKICAgICAKQEAgLTMyNywxMCAr
MzI4LDE0IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXMKICAgICBz
d2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKICAgICBjYXNlIEludDMyU2hhcGU6CiAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KKyAgICAgICAgc3Rv
cmUzMihyZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0b3JlMzIocmVn
VDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGln
dW91c1NoYXBlOgogICAgICAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1Qy
LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
KTsKICAgICAgICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAg
ZW1pdExvYWQoYmFzZSwgcmVnVDIsIHJlZ1QzKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihy
ZWdUMywgcmVnVDEsIHJlZ1QwLCByZWdUMiwgVW5jb25kaXRpb25hbFdyaXRlQmFycmllcik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRG91YmxlU2hhcGU6IHsKICAgICAgICAgSnVtcCBub3RJ
bnQgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpOwpAQCAtMzYxLDEzICszNjYsMTIgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5l
cmljQ29udGlndW91cwogICAgIAogICAgIGRvbmUubGluayh0aGlzKTsKICAgICAKLSAgICBlbWl0
V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDEsIHJlZ1QzLCBVbmNvbmRpdGlvbmFsV3Jp
dGVCYXJyaWVyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0gICAgCiAgICAgcmV0
dXJuIHNsb3dDYXNlczsKIH0KIAogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQ
dXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlKQogeworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKICAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJv
ZmlsZTsKICAgICAKQEAgLTM5Nyw3ICs0MDEsOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFy
cmF5U3RvcmFnZVB1dEJ5CiAgICAgCiAgICAgZW5kLmxpbmsodGhpcyk7CiAgICAgCi0gICAgZW1p
dFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QxLCByZWdUMywgVW5jb25kaXRpb25hbFdy
aXRlQmFycmllciwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAgIGVtaXRMb2Fk
KGJhc2UsIHJlZ1QyLCByZWdUMyk7IAorICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDMsIHJlZ1Qx
LCByZWdUMCwgcmVnVDIsIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIpOwogICAgIAogICAgIHJl
dHVybiBzbG93Q2FzZXM7CiB9CkBAIC01MTksOCArNTI0LDEwIEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZSwgcmVnVDEpOwogICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJl
Z1QxLCByZWdUMiwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZv
clByb3BlcnR5QWNjZXNzKTsKLSAgICAKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdU
MywgcmVnVDEsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKTsKKyAgICBlbWl0TG9hZChi
YXNlLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwor
CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygp
LAogICAgICAgICBjYWxsRnJhbWVSZWdpc3RlciwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwKQEAgLTUzOSw3ICs1NDYsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0CiAKICAgICBsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgCisK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1dEJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CkBAIC03OTQsMTAgKzgw
MSwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoSW5zCiAKIHZvaWQg
SklUOjplbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl90KiBvcGVyYW5kU2xvdCwgaW50IHZh
bHVlKQogeworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOworICAgIAorICAgIGVt
aXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMywgU2hvdWxk
RmlsdGVySW1tZWRpYXRlcyk7CisKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBy
ZWdUMSk7CiAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJl
Z1QyKTsKICAgICBzdG9yZTMyKHJlZ1QzLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0Vp
Z2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsK
ICAgICBzdG9yZTMyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CiB9
CkBAIC04NDEsNiArODUxLDkgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShSZWdpc3RlcklE
IHRhZwogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQsIGludCB2
YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1pdExvYWQodmFsdWUs
IHJlZ1QxLCByZWdUMCk7CisKKyAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgcmVnVDEsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMpOworCiAgICAgZW1pdE5v
dGlmeVdyaXRlKHJlZ1QxLCByZWdUMCwgcmVnVDIsIHNldCk7CiAgICAgc3RvcmUzMihyZWdUMSwg
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob3BlcmFuZCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwogICAgIHN0b3JlMzIocmVnVDAsIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9wZXJhbmQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CkBAIC04NTAsOSArODYzLDEzIEBAIHZvaWQg
SklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHUKIHsKICAgICBlbWl0TG9hZCh2YWx1
ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChzY29wZSwgcmVnVDEsIHJlZ1QwKTsKKyAg
ICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMywgcmVnVDEsIHJlZ1QyLCBTaG91bGRGaWx0
ZXJJbW1lZGlhdGVzKTsKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKKwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3Rl
cnMoKSksIHJlZ1QwKTsKICAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJlZ1QwLCBvcGVyYW5k
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSkpOwogICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIG9w
ZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF90b19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTEwLDExICs5
MjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbml0X2dsb2JhbF9jb25zdChJbnN0CiAKICAgICBl
bWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICAKLSAgICBpZiAoSGVhcDo6aXNXcml0
ZUJhcnJpZXJFbmFibGVkKCkpIHsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9i
amVjdCksIHJlZ1QyKTsKLSAgICAgICAgCi0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFs
T2JqZWN0LCByZWdUMSwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmll
ckZvclZhcmlhYmxlQWNjZXNzKTsKLSAgICB9CisgICAgZW1pdFdyaXRlQmFycmllcihnbG9iYWxP
YmplY3QsIHJlZ1QxLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKTsKIAogICAgIHN0b3JlMzIocmVn
VDEsIHJlZ2lzdGVyUG9pbnRlci0+dGFnUG9pbnRlcigpKTsKICAgICBzdG9yZTMyKHJlZ1QwLCBy
ZWdpc3RlclBvaW50ZXItPnBheWxvYWRQb2ludGVyKCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE2MDgyMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDksNyArMzQ5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bChJbnN0cnVjdGlvbgogICAgIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUp
KTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVnVDMsIFNo
b3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKIH0K
IAogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4
aW5nVHlwZSBpbmRleGluZ1NoYXBlKQpAQCAtMzg1LDYgKzM4NCw3IEBAIEpJVDo6SnVtcExpc3Qg
SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXMKICAgICB9CiAgICAgY2FzZSBDb250aWd1b3VzU2hh
cGU6CiAgICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVz
RWlnaHQpKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDMsIHJlZ1QxLCBy
ZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC00MjMsNiArNDIzLDcgQEAgSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeQogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKICAgICBzdG9yZTY0KHJl
Z1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1Qw
LCByZWdUMywgcmVnVDEsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKTsKICAgICBKdW1w
IGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwpAQCAtNTYwLDggKzU2
MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKIAogICAgIC8v
IEp1bXAgdG8gYSBzbG93IGNhc2UgaWYgZWl0aGVyIHRoZSBiYXNlIG9iamVjdCBpcyBhbiBpbW1l
ZGlhdGUsIG9yIGlmIHRoZSBTdHJ1Y3R1cmUgZG9lcyBub3QgbWF0Y2guCiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgCi0gICAgZW1pdFdyaXRl
QmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRl
cywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworCisgICAgZW1pdFdyaXRlQmFycmll
cihyZWdUMCwgcmVnVDEsIHJlZ1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcyk7CiAK
ICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVP
cmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCks
CkBAIC03NTksMTAgKzc2MCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoSW5zCiAKIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl90KiBvcGVy
YW5kU2xvdCwgaW50IHZhbHVlKQogeworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QyKTsKKworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QyLCByZWdUMSwgcmVn
VDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMpOworCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihvcGVy
YW5kU2xvdCwgcmVnVDEpOwogICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVn
VDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpKTsKIH0KIApAQCAtNzk5LDYgKzgwMyw5IEBAIHZvaWQgSklUOjpl
bWl0Tm90aWZ5V3JpdGUoUmVnaXN0ZXJJRCB2YWwKIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFy
KHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0
KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAKKyAg
ICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIFNo
b3VsZEZpbHRlckltbWVkaWF0ZXMpOworCiAgICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QwLCByZWdU
MSwgc2V0KTsKICAgICBzdG9yZVB0cihyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3Bl
cmFuZCkpOwogfQpAQCAtODA3LDYgKzgxNCw5IEBAIHZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZh
cihpbnQgc2NvcGUsIHUKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworCisgICAgZW1p
dFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1t
ZWRpYXRlcyk7CisKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTVmFyaWFibGVPYmplY3Q6
Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCByZWdUMCk7CiAgICAgc3RvcmVQdHIocmVnVDEsIEFkZHJl
c3MocmVnVDAsIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiB9CkBAIC04NjAsNDQgKzg3
MCwxNjggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShJbnN0cgogdm9pZCBK
SVQ6OmVtaXRfb3BfaW5pdF9nbG9iYWxfY29uc3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpOwotCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCk7Ci0KKyAgICBlbWl0V3JpdGVCYXJyaWVyKGds
b2JhbE9iamVjdCwgcmVnVDAsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMpOwogICAgIHN0b3JlNjQo
cmVnVDAsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51LnJlZ2lzdGVyUG9pbnRlcik7Ci0gICAgaWYg
KEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKQotICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KGdsb2JhbE9iamVjdCwgcmVnVDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0
ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0
KQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93bmVyLCBSZWdpc3Rl
cklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFJlZ2lzdGVySUQgc2NyYXRjaDIsIFdyaXRl
QmFycmllck1vZGUgbW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQorSklUOjpKdW1w
IEpJVDo6Y2hlY2tNYXJrV29yZChSZWdpc3RlcklEIG93bmVyLCBSZWdpc3RlcklEIHNjcmF0Y2gx
LCBSZWdpc3RlcklEIHNjcmF0Y2gyKQoreworICAgIG1vdmUob3duZXIsIHNjcmF0Y2gxKTsKKyAg
ICBtb3ZlKG93bmVyLCBzY3JhdGNoMik7CisKKyAgICBhbmRQdHIoVHJ1c3RlZEltbVB0cihNYXJr
ZWRCbG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaDEpOworICAgIGFuZFB0cihUcnVzdGVkSW1tUHRy
KH5NYXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaDIpOworCisgICAgcnNoaWZ0MzIoVHJ1
c3RlZEltbTMyKDMgKyA0KSwgc2NyYXRjaDIpOworCisgICAgcmV0dXJuIGJyYW5jaFRlc3Q4KFpl
cm8sIEJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIFRpbWVzT25lLCBNYXJrZWRCbG9jazo6
b2Zmc2V0T2ZNYXJrcygpKSk7Cit9CisKK0pJVDo6SnVtcCBKSVQ6OmNoZWNrTWFya1dvcmQoSlND
ZWxsKiBvd25lcikKK3sKKyAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBNYXJrZWRCbG9jazo6Ymxv
Y2tGb3Iob3duZXIpOworICAgIHNpemVfdCBpbmRleCA9IChyZWludGVycHJldF9jYXN0PHNpemVf
dD4ob3duZXIpICYgfk1hcmtlZEJsb2NrOjpibG9ja01hc2spID4+ICgzICsgNCk7CisgICAgdm9p
ZCogYWRkcmVzcyA9IChyZWludGVycHJldF9jYXN0PGNoYXIqPihibG9jaykgKyBNYXJrZWRCbG9j
azo6b2Zmc2V0T2ZNYXJrcygpKSArIGluZGV4OworCisgICAgcmV0dXJuIGJyYW5jaFRlc3Q4KFpl
cm8sIEFic29sdXRlQWRkcmVzcyhhZGRyZXNzKSk7Cit9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQor
dm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2
YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoMSwgUmVnaXN0ZXJJRCBzY3JhdGNoMiwgV3JpdGVCYXJy
aWVyTW9kZSBtb2RlKQogeworI2lmIEVOQUJMRShHR0MpCisgICAgQVNTRVJUKG93bmVyICE9IHNj
cmF0Y2gxKTsKKyAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDIpOworICAgIEFTU0VSVChzY3Jh
dGNoMSAhPSBzY3JhdGNoMik7CisKKyAgICBKdW1wIHZhbHVlTm90Q2VsbDsKKyAgICBpZiAobW9k
ZSA9PSBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKQorICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFu
Y2hUZXN0NjQoTm9uWmVybywgdmFsdWUsIHRhZ01hc2tSZWdpc3Rlcik7CisgICAgCisgICAgSnVt
cCBvd25lck5vdE1hcmtlZCA9IGNoZWNrTWFya1dvcmQob3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNo
Mik7CisKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0oKS0+c2NyYXRjaEJ1
ZmZlckZvclNpemUoc2l6ZW9mKHZvaWQqKSAqIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsK
KyAgICB2b2lkKiogYnVmZmVyID0gc3RhdGljX2Nhc3Q8dm9pZCoqPihzY3JhdGNoQnVmZmVyLT5k
YXRhQnVmZmVyKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVyczsgKytpKQorICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVy
KGkpLCAmYnVmZmVyW2ldKTsKKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRp
b25hbFdyaXRlQmFycmllciwgb3duZXIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGxvYWRQdHIoJmJ1ZmZl
cltpXSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7IAorCisgICAgb3duZXJOb3RNYXJrZWQubGlu
ayh0aGlzKTsKKworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckltbWVkaWF0ZXMpIAorICAg
ICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKKyNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG93
bmVyKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwogICAgIFVOVVNFRF9QQVJBTShzY3JhdGNo
Mik7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOworICAgIFVOVVNFRF9QQVJBTShtb2RlKTsK
KyNlbmRpZiAvLyBFTkFCTEUoR0dDKQorfQorCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihK
U0NlbGwqIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit7
CisjaWYgRU5BQkxFKEdHQykKKyAgICBKdW1wIHZhbHVlTm90Q2VsbDsKKyAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKQorICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hU
ZXN0NjQoTm9uWmVybywgdmFsdWUsIHRhZ01hc2tSZWdpc3Rlcik7CisKKyAgICBKdW1wIG93bmVy
Tm90TWFya2VkID0gY2hlY2tNYXJrV29yZChvd25lcik7CisKKyAgICBTY3JhdGNoQnVmZmVyKiBz
Y3JhdGNoQnVmZmVyID0gdm0oKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKHZvaWQqKSAq
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKKyAgICB2b2lkKiogYnVmZmVyID0gc3RhdGlj
X2Nhc3Q8dm9pZCoqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKQorICAgICAg
ICBzdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCAmYnVmZmVyW2ldKTsKKyAgICAKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIG93bmVy
KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVyczsgKytpKQorICAgICAgICBsb2FkUHRyKCZidWZmZXJbaV0sIEdQUkluZm86OnRvUmVnaXN0
ZXIoaSkpOyAKKworICAgIG93bmVyTm90TWFya2VkLmxpbmsodGhpcyk7CisKKyAgICBpZiAobW9k
ZSA9PSBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzKSAKKyAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmso
dGhpcyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShvd25lcik7CiAgICAgVU5VU0VEX1BBUkFN
KHZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0obW9kZSk7Ci0gICAgQVNTRVJUKG93bmVyICE9IHNj
cmF0Y2gpOworI2VuZGlmIC8vIEVOQUJMRShHR0MpCit9CisjZWxzZQordm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZVRhZywgUmVnaXN0
ZXJJRCBzY3JhdGNoMSwgUmVnaXN0ZXJJRCBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
KQoreworI2lmIEVOQUJMRShHR0MpCisgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gxKTsKICAg
ICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDIpOworICAgIEFTU0VSVChzY3JhdGNoMSAhPSBzY3Jh
dGNoMik7CisKKyAgICBKdW1wIHZhbHVlTm90Q2VsbDsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJJbW1lZGlhdGVzKQorICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2gzMihOb3RFcXVh
bCwgdmFsdWVUYWcsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisKKyAgICBKdW1w
IG93bmVyTm90TWFya2VkID0gY2hlY2tNYXJrV29yZChvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gy
KTsKKworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bSgpLT5zY3JhdGNoQnVm
ZmVyRm9yU2l6ZShzaXplb2Yodm9pZCopICogR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwor
ICAgIHZvaWQqKiBidWZmZXIgPSBzdGF0aWNfY2FzdDx2b2lkKio+KHNjcmF0Y2hCdWZmZXItPmRh
dGFCdWZmZXIoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIo
aSksICZidWZmZXJbaV0pOwogICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElO
RykKLSAgICBlbWl0Q291bnQoV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNl
S2luZCkpOwotI2VuZGlmCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFs
V3JpdGVCYXJyaWVyLCBvd25lcik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgbG9hZFB0cigmYnVmZmVyW2ld
LCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsgCisKKyAgICBvd25lck5vdE1hcmtlZC5saW5rKHRo
aXMpOworCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVySW1tZWRpYXRlcykgCisgICAgICAg
IHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ob3duZXIp
OworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZVRhZyk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gx
KTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOworICAgIFVOVVNFRF9QQVJBTShtb2RlKTsK
KyNlbmRpZiAvLyBFTkFCTEUoR0dDKQogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihK
U0NlbGwqIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFdyaXRl
QmFycmllck1vZGUgbW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQordm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZVRhZywgV3Jp
dGVCYXJyaWVyTW9kZSBtb2RlKQogeworI2lmIEVOQUJMRShHR0MpCisgICAgSnVtcCB2YWx1ZU5v
dENlbGw7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVySW1tZWRpYXRlcykKKyAgICAgICAg
dmFsdWVOb3RDZWxsID0gYnJhbmNoMzIoTm90RXF1YWwsIHZhbHVlVGFnLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZykpOworCisgICAgSnVtcCBvd25lck5vdE1hcmtlZCA9IGNoZWNrTWFy
a1dvcmQob3duZXIpOworCisgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtKCkt
PnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZih2b2lkKikgKiBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycyk7CisgICAgdm9pZCoqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PHZvaWQqKj4oc2NyYXRj
aEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6
dG9SZWdpc3RlcihpKSwgJmJ1ZmZlcltpXSk7CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIG93bmVyKTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKQorICAgICAgICBsb2Fk
UHRyKCZidWZmZXJbaV0sIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOyAKKworICAgIG93bmVyTm90
TWFya2VkLmxpbmsodGhpcyk7CisKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJJbW1lZGlh
dGVzKSAKKyAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CisjZWxzZQogICAgIFVOVVNF
RF9QQVJBTShvd25lcik7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwotICAgIFVOVVNFRF9Q
QVJBTSh1c2VLaW5kKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFVOVVNFRF9QQVJB
TSh2YWx1ZVRhZyk7CiAgICAgVU5VU0VEX1BBUkFNKG1vZGUpOwotICAgIAotI2lmIEVOQUJMRShX
UklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBlbWl0Q291bnQoV3JpdGVCYXJyaWVyQ291bnRl
cnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKEdH
QykKIH0KKyNlbmRpZgogCiBKSVQ6Okp1bXAgSklUOjphZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hl
Y2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKQEAgLTk4OCw3ICsxMTIyLDExIEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICAKICAgICBQYXRj
aGFibGVKdW1wIGJhZFR5cGU7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAorCisjaWYg
RU5BQkxFKEdHQykKKyAgICBib29sIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IGZhbHNlOwor
I2VuZGlmCisKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgIGNhc2UgSklUSW50MzI6CiAg
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YmFkVHlwZSk7CkBAIC05OTgsOSArMTEzNiwxNSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbChCeVZhbEluCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUQ29udGlndW91czoK
ICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUpOworI2lmIEVOQUJMRShHR0MpCisgICAgICAgIG5lZWRzTGlua0Zvcldy
aXRlQmFycmllciA9IHRydWU7CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRB
cnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworI2lmIEVOQUJMRShHR0MpCisgICAgICAg
IG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7CisjZW5kaWYKICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlU
eXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CkBAIC0xMDE0LDExICsxMTU4LDE1IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVC
bG9jayk7Ci0gICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25M
YWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhy
ZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRk
cmVzc1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxv
Y2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFk
ZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJl
dHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Ci0gICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25l
LCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBl
SnVtcFRvRG9uZSkpOworI2lmIEVOQUJMRShHR0MpCisgICAgaWYgKG5lZWRzTGlua0ZvcldyaXRl
QmFycmllcikgeworICAgICAgICBBU1NFUlQobV9jYWxscy5sYXN0KCkudG8gPT0gb3BlcmF0aW9u
VW5jb25kaXRpb25hbFdyaXRlQmFycmllcik7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9j
YWxscy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcik7Cisg
ICAgfQorI2VuZGlmCiAgICAgCiAgICAgYm9vbCBpc0RpcmVjdCA9IG1faW50ZXJwcmV0ZXItPmdl
dE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92YWxf
ZGlyZWN0OwogICAgIGlmICghaXNEaXJlY3QpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTYwODIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5j
bHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgog
I2luY2x1ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5o
IgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTc4OCw3MCArNzkwLDU5IEBAIHN0YXRpYyB2
b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKICNlbmRpZgogICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFsdWVH
UFIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBh
dGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAg
IEdQUlJlZyBzY3JhdGNoR1BSMjsKLSAgICBjb25zdCBib29sIHdyaXRlQmFycmllck5lZWRlZCA9
IHRydWU7Ci0jZWxzZQotICAgIGNvbnN0IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gZmFsc2U7
CisKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNo
LnVzZWRSZWdpc3RlcnMpOworICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOworI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVUYWdHUFIpOwogI2VuZGlmCisg
ICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyIHN0
dWJKaXQ7Ci0gICAgCi0gICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZyAmJiAod3Jp
dGVCYXJyaWVyTmVlZGVkIHx8IGlzT3V0T2ZMaW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
KSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhl
bHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIpOwotI2Vsc2UKLSAgICAg
ICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BS
LCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyNpZiBFTkFCTEUoR0dDKQorICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICNlbmRpZgotICAg
ICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIHN0dWJKaXQucHVzaFRv
U2F2ZShzY3JhdGNoR1BSKTsKLSAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwg
ZXhlYy0+Y29kZUJsb2NrKCkpOworCisgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0
ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmFkU3Ry
dWN0dXJlID0gc3R1YkppdC5icmFuY2hQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSkpOwotICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHNjcmF0Y2hHUFIyID0gQXNzZW1ibHlIZWxwZXJzOjpz
ZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSNlbHNlCi0g
ICAgc2NyYXRjaEdQUjIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQ
UiwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAgIHN0dWJK
aXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSMik7Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjp3cml0ZUJh
cnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIFdyaXRlQmFy
cmllckZvclByb3BlcnR5QWNjZXNzKTsKLSAgICBzdHViSml0LnBvcFRvUmVzdG9yZShzY3JhdGNo
R1BSMik7Ci0jZW5kaWYKLSAgICAKKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQogICAgICAgICBzdHViSml0LnN0b3JlNjQo
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIGVsc2UgewotICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJm
bHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgc3R1
YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTY0
KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5C
dXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICB9
CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNh
Y2hlZE9mZnNldCgpKSkgewogICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVv
ZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpKTsKICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXpl
b2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnRhZykpKTsKICAgICB9IGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2
YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5C
dXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICAgICAg
c3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5zdG9y
ZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0
SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Cisg
ICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCiAgICAgCisjaWYgRU5BQkxFKEdHQykKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCB3cml0ZUJhcnJpZXJPcGVyYXRpb24gPSBERkc6OlNwZWN1
bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUjEsIHNj
cmF0Y2hHUFIyKTsKKyNlbmRpZgorICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nl
c3M7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKICAgICAKLSAgICBpZiAobmVl
ZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc3R1YkppdC5wb3BUb1Jlc3RvcmUoc2NyYXRj
aEdQUik7CisgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7CisgICAgICAg
IGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOwogICAg
ICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgIAogICAgICAgICBiYWRTdHJ1
Y3R1cmUubGluaygmc3R1YkppdCk7Ci0gICAgICAgIHN0dWJKaXQucG9wVG9SZXN0b3JlKHNjcmF0
Y2hHUFIpOworICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGlu
ZyhzdHViSml0KTsKICAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKQEAgLTg1OSw2ICs4NTAsOSBA
QCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgfQogICAgIAogICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworI2lm
IEVOQUJMRShHR0MpCisgICAgcGF0Y2hCdWZmZXIubGluayh3cml0ZUJhcnJpZXJPcGVyYXRpb24s
IG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKTsKKyNlbmRpZgogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwogICAgICAgICAgICAgCkBAIC05MDAsMjkgKzg5NCwy
MSBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgCiAgICAgQ0NhbGxI
ZWxwZXJzIHN0dWJKaXQodm0pOwogICAgIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFz
ZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsKLSAgICAKLSAgICBi
b29sIG5lZWRTZWNvbmRTY3JhdGNoID0gZmFsc2U7CiAgICAgYm9vbCBuZWVkVGhpcmRTY3JhdGNo
ID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIG5lZWRT
ZWNvbmRTY3JhdGNoID0gdHJ1ZTsKLSNlbmRpZgogICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAgICAg
ICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBuZWVkU2Vj
b25kU2NyYXRjaCA9IHRydWU7CiAgICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVlOwogICAg
IH0KIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKLSAgICBpZiAobmVlZFNlY29uZFNjcmF0Y2gp
IHsKLSAgICAgICAgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBiYXNlR1BSKTsKLSAgICAgICAgQVNTRVJU
KHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9
IHNjcmF0Y2hHUFIxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUjIgPSBJbnZhbGlk
R1BSUmVnOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0
Y2hHUFIoKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQUik7CisgICAgQVNTRVJU
KHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsKKyAgICAKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjIg
PSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgQVNTRVJUKHNjcmF0Y2hHUFIy
ICE9IGJhc2VHUFIpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSB2YWx1ZUdQUik7CisgICAg
QVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKKwogICAgIEdQUlJlZyBzY3JhdGNo
R1BSMzsKICAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkgewogICAgICAgICBzY3JhdGNoR1BSMyA9
IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKQEAgLTkzMiw3ICs5MTgsNyBAQCBzdGF0
aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgIEFTU0VSVChzY3JhdGNoR1BS
MyAhPSBzY3JhdGNoR1BSMik7CiAgICAgfSBlbHNlCiAgICAgICAgIHNjcmF0Y2hHUFIzID0gSW52
YWxpZEdQUlJlZzsKLSAgICAgICAgICAgIAorICAgIAogICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJl
dXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhzdHViSml0KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBmYWlsdXJlQ2FzZXM7CkBAIC05NTMsMTMgKzkzOSw2IEBAIHN0YXRpYyB2b2lkIGVt
aXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgfQogICAgIH0KIAotI2lmIEVOQUJMRShXUklU
RV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBBU1NFUlQobmVlZFNlY29uZFNjcmF0Y2gpOwotICAg
IEFTU0VSVChzY3JhdGNoR1BSMiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAvLyBNdXN0IGFsd2F5
cyBlbWl0IHRoaXMgd3JpdGUgYmFycmllciBhcyB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gaXRz
ZWxmIHJlcXVpcmVzIGl0Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjp3cml0ZUJhcnJpZXIoc3R1Ykpp
dCwgYmFzZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQcm9w
ZXJ0eUFjY2Vzcyk7Ci0jZW5kaWYKLSAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAgICAgCiAgICAgYm9vbCBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSBmYWxzZTsK
QEAgLTEwMTgsNiArOTk3LDEwIEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigK
ICAgICB9CiAjZW5kaWYKICAgICAKKyNpZiBFTkFCTEUoR0dDKQorICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIHdyaXRlQmFycmllck9wZXJhdGlvbiA9IERGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIpOworI2Vu
ZGlmCisgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBmYWlsdXJlOwogICAgICAgICAgICAgCkBAIC0xMDUxLDYgKzEwMzQsOSBA
QCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgfQogICAgIAogICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOwor
I2lmIEVOQUJMRShHR0MpCisgICAgcGF0Y2hCdWZmZXIubGluayh3cml0ZUJhcnJpZXJPcGVyYXRp
b24sIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKTsKKyNlbmRpZgogICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYgKGFsbG9jYXRv
ci5kaWRSZXVzZVJlZ2lzdGVycygpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUs
IGZhaWx1cmVMYWJlbCk7CkBAIC0xMTQ3LDcgKzExMzMsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNo
ZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiB2b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1
dEtpbmQgcHV0S2luZCkKIHsKICAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihl
eGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwotICAgIAorCiAgICAg
Ym9vbCBjYWNoZWQgPSB0cnlDYWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKICAgICBpZiAoIWNhY2hlZCkKICAgICAgICAg
cmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAkocmV2aXNpb24gMTYwODIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE1LDYgKzUxNSwxNCBAQCBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fcHJpbWl0aXZlKQogICAgIFJFVFVSTihPUF9DKDIp
LmpzVmFsdWUoKS50b1ByaW1pdGl2ZShleGVjKSk7CiB9CiAKK1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9lbnRlcikKK3sKKyAgICBCRUdJTigpOworICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSA9IGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKTsKKyAgICBI
ZWFwOjpoZWFwKG93bmVyRXhlY3V0YWJsZSktPndyaXRlQmFycmllcihvd25lckV4ZWN1dGFibGUp
OworICAgIEVORCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJM
RShKSVQpIHx8IEVOQUJMRShMTElOVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxNjA4MjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTYzLDYgKzE2Myw3IEBAIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY29uc3Ry
dWMKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdG91Y2hfZW50cnkpOwogU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfYXJndW1lbnRzKTsKIFNMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX3RoaXMpOworU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9lbnRlcik7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9j
YWxsZWUpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b190aGlzKTsKIFNMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2FwdHVyZWRfbW92KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219695</attachid>
            <date>2013-12-19 15:55:22 -0800</date>
            <delta_ts>2013-12-19 16:46:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125975-20131219155513.patch</filename>
            <type>text/plain</type>
            <size>33808</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwODUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDEzLTEyLTE5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUHV0IHdyaXRlIGJhcnJpZXJzIGluIHRoZSByaWdodCBwbGFjZXMgaW4gdGhlIGJh
c2VsaW5lIEpJVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTI1OTc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OkpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2VudGVyKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9lbnRlcik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsUHJvcGVydHkpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQ
dXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luaXRfZ2xvYmFsX2Nv
bnN0KToKKyAgICAgICAgKEpTQzo6SklUOjpjaGVja01hcmtXb3JkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbml0X2dsb2Jh
bF9jb25zdCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjplbWl0
UHV0UmVwbGFjZVN0dWIpOgorICAgICAgICAoSlNDOjplbWl0UHV0VHJhbnNpdGlvblN0dWIpOgor
ICAgICAgICAoSlNDOjpyZXBhdGNoUHV0QnlJRCk6CisgICAgICAgICogcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICog
cnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKwogMjAxMy0xMi0xOCAgTWFyayBIYWhuZW5iZXJn
ICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIERlbGF5ZWRSZWxlYXNlU2NvcGUg
aXMgaW4gdGhlIHdyb25nIHBsYWNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlz
aW9uIDE2MDgyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxNiwxMSArMzE2LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhKU0NlbGwqLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1
cmVTdHViSW5mbyosIEp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIFJlZ2lzdGVySUQgc2NyYXRjaCk7
CiAgICAgICAgIHZvaWQgdGVzdFByb3RvdHlwZShKU1ZhbHVlLCBKdW1wTGlzdCYgZmFpbHVyZUNh
c2VzLCBTdHJ1Y3R1cmVTdHViSW5mbyopOwogCi0gICAgICAgIGVudW0gV3JpdGVCYXJyaWVyTW9k
ZSB7IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMgfTsK
KyAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmll
ciwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwogICAgICAg
ICAvLyB2YWx1ZSByZWdpc3RlciBpbiB3cml0ZSBiYXJyaWVyIGlzIHVzZWQgYmVmb3JlIGFueSBz
Y3JhdGNoIHJlZ2lzdGVycwogICAgICAgICAvLyBzbyBtYXkgc2FmZWx5IGJlIHRoZSBzYW1lIGFz
IGVpdGhlciBvZiB0aGUgc2NyYXRjaCByZWdpc3RlcnMuCi0gICAgICAgIHZvaWQgZW1pdFdyaXRl
QmFycmllcihSZWdpc3RlcklEIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlVGFnLCBSZWdpc3RlcklE
IHNjcmF0Y2gsIFJlZ2lzdGVySUQgc2NyYXRjaDIsIFdyaXRlQmFycmllck1vZGUsIFdyaXRlQmFy
cmllclVzZUtpbmQpOwotICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBXcml0ZUJhcnJpZXJNb2Rl
LCBXcml0ZUJhcnJpZXJVc2VLaW5kKTsKKyAgICAgICAgSnVtcCBjaGVja01hcmtXb3JkKFJlZ2lz
dGVySUQgb3duZXIsIFJlZ2lzdGVySUQgc2NyYXRjaDEsIFJlZ2lzdGVySUQgc2NyYXRjaDIpOwor
ICAgICAgICBKdW1wIGNoZWNrTWFya1dvcmQoSlNDZWxsKiBvd25lcik7CisgICAgICAgIHZvaWQg
ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFy
cmllck1vZGUpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwg
dW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOworLyoKKyAgICAgICAgdm9pZCBlbWl0
V3JpdGVCYXJyaWVyKFJlZ2lzdGVySUQgb3duZXIsIFJlZ2lzdGVySUQgdmFsdWVUYWcsIFJlZ2lz
dGVySUQgc2NyYXRjaDEsIFJlZ2lzdGVySUQgc2NyYXRjaDIsIFdyaXRlQmFycmllck1vZGUpOwor
ICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJRCB2
YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisqLwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFN0cnVjdHVyZVR5cGU+IC8vIFN0cnVjdHVyZVR5cGUgY2FuIGJlIFJlZ2lzdGVySUQgb3IgSW1t
UHRyLgogICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KFJlZ2lzdGVySUQgYWxsb2Nh
dG9yLCBTdHJ1Y3R1cmVUeXBlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzY3JhdGNo
KTsKQEAgLTY3OCw2ICs2ODQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQWFwSmNwWiwgaW50LCBB
cnJheUFsbG9jYXRpb25Qcm9maWxlKiwgR1BSUmVnLCBpbnQzMl90KTsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQWFwSmNwWiwgaW50
LCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgY29uc3QgSlNWYWx1ZSosIGludDMyX3QpOwogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VD
LCBpbnQsIEpTQ2VsbCopOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfSklUT3BlcmF0aW9uX0VDLCBKU0NlbGwqKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSiwgaW50LCBHUFJSZWcpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oV2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VTc2lKSSwgaW50LCBTdHJ1Y3R1cmVT
dHViSW5mbyosIEdQUlJlZywgU3RyaW5nSW1wbCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDE2MDgyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiArMTk5LDEyIEBA
IEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjoKICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0aW9uLCBkc3Qp
OwogfQogCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJh
dGlvbihWX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihjZWxsKSk7CisgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKK30KKwogQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRVAgb3BlcmF0aW9uLCBpbnQgZHN0LCB2b2lkKiBwb2ludGVyKQogewogICAgIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9u
IDE2MDgyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAxMiw3ICsxMDEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVidWcoSW5zdHJ1Y3Rpb24qIGN1cgogfQogCiAKLXZvaWQgSklUOjplbWl0X29wX2VudGVyKElu
c3RydWN0aW9uKikKK3ZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKICAgICAK
QEAgLTEwMjEsNiArMTAyMSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3RydWN0aW9u
KikKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV9udW1WYXJzOyArK2kpCiAgICAg
ICAgIGVtaXRTdG9yZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKS5vZmZzZXQoKSwganNVbmRl
ZmluZWQoKSk7CisKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudGVyKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfYWN0aXZhdGlvbihJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCShyZXZpc2lvbiAxNjA4MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTEsNyArNzkxLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbmVxX251bGwoSW5zdHJ1Y3Rpb24qIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoSW5zdHJ1Y3Rpb24qKQor
dm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogICAgIApAQCAtODAxLDYgKzgw
MSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3RydWN0aW9uKikKICAgICBzaXplX3Qg
Y291bnQgPSBtX2NvZGVCbG9jay0+bV9udW1WYXJzOwogICAgIGZvciAoc2l6ZV90IGogPSAwOyBq
IDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChqKS5vZmZzZXQoKSk7CisKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudGVyKTsKKyAgICBzbG93UGF0
aENhbGwuY2FsbCgpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfYWN0aXZhdGlvbihJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAx
NjA4MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNiArMzEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogCiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVy
aWNDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCiB7CisgICAg
aW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIGludCB2YWx1
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwogICAgIApAQCAt
MzI3LDEwICszMjgsMTQgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91
cwogICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewogICAgIGNhc2UgSW50MzJTaGFwZToKICAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKLSAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgorICAg
ICAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3Rv
cmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDb250aWd1b3VzU2hhcGU6CiAgICAgICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdU
MywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSkpOwogICAgICAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1Qy
LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwor
ICAgICAgICBlbWl0TG9hZChiYXNlLCByZWdUMiwgcmVnVDMpOworICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRG91YmxlU2hhcGU6IHsKICAgICAgICAgSnVtcCBub3RJbnQgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwpAQCAtMzYx
LDEzICszNjYsMTIgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91cwog
ICAgIAogICAgIGRvbmUubGluayh0aGlzKTsKICAgICAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJl
Z1QwLCByZWdUMSwgcmVnVDEsIHJlZ1QzLCBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0gICAgCiAgICAgcmV0dXJuIHNsb3dDYXNlczsK
IH0KIAogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogeworICAg
IGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgdmFs
dWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKICAgICAKQEAg
LTM5Nyw3ICs0MDEsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5
CiAgICAgCiAgICAgZW5kLmxpbmsodGhpcyk7CiAgICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihy
ZWdUMCwgcmVnVDEsIHJlZ1QxLCByZWdUMywgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgV3Jp
dGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2VzOwog
fQpAQCAtNTE1LDEyICs1MTksMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3Ry
dWN0aW9uKgogICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
CiAgICAgaW50IGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51Lm9wZXJhbmQ7CiAgICAg
CisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlKTsKKwogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHZhbHVlLCByZWdUMywg
cmVnVDIpOwogICAgIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7CiAgICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QyLCByZWdU
MywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3Mp
OwotICAgIAorICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQo
dmFsdWUsIHJlZ1QzLCByZWdUMik7CisKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKICAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVy
U2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCksCiAgICAgICAgIGNhbGxGcmFtZVJlZ2lzdGVyLCBKU1Zh
bHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLApA
QCAtNzk0LDEwICs4MDEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KElucwogCiB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFByb3BlcnR5KHVpbnRwdHJfdCogb3BlcmFu
ZFNsb3QsIGludCB2YWx1ZSkKIHsKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsK
KyAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CiAgICAgbmVn
UHRyKHJlZ1QxKTsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICBzdG9y
ZTMyKHJlZ1QzLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICBzdG9yZTMyKHJl
Z1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CiB9CkBAIC04NjYsMTYgKzg3
NCwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJl
U2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbi4KICAgICAgICAg
ZW1pdFB1dEdsb2JhbFByb3BlcnR5KG9wZXJhbmRTbG90LCB2YWx1ZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgR2xvYmFsVmFyOgogICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICBl
bWl0UHV0R2xvYmFsVmFyKCpvcGVyYW5kU2xvdCwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1
XS51LndhdGNocG9pbnRTZXQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENsb3N1cmVWYXI6
CiAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgZW1p
dFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CiAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVl
KTsKICAgICAgICAgYnJlYWs7CkBAIC05MDgsMTQgKzkxOSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbml0X2dsb2JhbF9jb25zdChJbnN0CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwogCisgICAgZW1pdFdyaXRlQmFycmll
cihnbG9iYWxPYmplY3QsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisKICAgICBlbWl0TG9h
ZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICAKLSAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJp
ZXJFbmFibGVkKCkpIHsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCks
IHJlZ1QyKTsKLSAgICAgICAgCi0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0
LCByZWdUMSwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZh
cmlhYmxlQWNjZXNzKTsKLSAgICB9Ci0KICAgICBzdG9yZTMyKHJlZ1QxLCByZWdpc3RlclBvaW50
ZXItPnRhZ1BvaW50ZXIoKSk7CiAgICAgc3RvcmUzMihyZWdUMCwgcmVnaXN0ZXJQb2ludGVyLT5w
YXlsb2FkUG9pbnRlcigpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxNjA4MjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQ5LDcgKzM0OSw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24K
ICAgICAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9u
SW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7CiAKLSAgICBlbWl0
V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1l
ZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CiB9CiAKIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhp
bmdTaGFwZSkKQEAgLTM4NSw2ICszODQsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVy
aWNDb250aWd1b3VzCiAgICAgfQogICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgogICAgICAgICBz
dG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7CisgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgQ1JBU0goKTsKQEAgLTQyMyw2ICs0MjMsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEFycmF5U3RvcmFnZVB1dEJ5CiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwogICAgIHN0b3JlNjQocmVnVDMsIEJh
c2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICBKdW1w
IGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwpAQCAtNTUyLDYgKzU1
Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBpbnQg
dmFsdWVWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICB1bnNpZ25l
ZCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5vcGVyYW5kOwogCisgICAgZW1pdFdy
aXRlQmFycmllcihiYXNlVlJlZywgdmFsdWVWUmVnLCBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUp
OworCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1
cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8g
dG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3Rl
cnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0
IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBm
cm9tIHRoaXMuCkBAIC01NjAsOCArNTYzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lk
KEluc3RydWN0aW9uKgogCiAgICAgLy8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBlaXRoZXIgdGhl
IGJhc2Ugb2JqZWN0IGlzIGFuIGltbWVkaWF0ZSwgb3IgaWYgdGhlIFN0cnVjdHVyZSBkb2VzIG5v
dCBtYXRjaC4KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKLSAgICAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIsIHJlZ1Qz
LCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7
CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJz
KCksCkBAIC03NTksMTAgKzc2MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGUoSW5zCiAKIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl90KiBv
cGVyYW5kU2xvdCwgaW50IHZhbHVlKQogeworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKKwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsK
ICAgICBuZWdQdHIocmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QyKTsKICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNF
aWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSk7CiB9CiAKQEAgLTgyMiwxNiArODI0LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShJbnN0cnVjdGkKICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czoKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2
YXIgaW5qZWN0aW9uLgogICAgICAgICBlbWl0UHV0R2xvYmFsUHJvcGVydHkob3BlcmFuZFNsb3Qs
IHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgY2FzZSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7CiAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXIoKm9wZXJhbmRTbG90LCB2YWx1
ZSwgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hwb2ludFNldCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOgorICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2Nv
cGUsICpvcGVyYW5kU2xvdCwgdmFsdWUpOwogICAgICAgICBicmVhazsKQEAgLTg2MCw0NSArODY1
LDE0NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKEluc3RyCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbml0X2dsb2JhbF9jb25zdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCk7Ci0KKyAgICBlbWl0V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVn
VDApOwotCiAgICAgc3RvcmU2NChyZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0
ZXJQb2ludGVyKTsKLSAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpCi0gICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMCwgcmVnVDIsIFNob3VsZEZp
bHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKIH0KIAogI2Vu
ZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFJlZ2lz
dGVySUQgb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgUmVnaXN0
ZXJJRCBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5k
IHVzZUtpbmQpCitKSVQ6Okp1bXAgSklUOjpjaGVja01hcmtXb3JkKFJlZ2lzdGVySUQgb3duZXIs
IFJlZ2lzdGVySUQgc2NyYXRjaDEsIFJlZ2lzdGVySUQgc2NyYXRjaDIpCit7CisgICAgbW92ZShv
d25lciwgc2NyYXRjaDEpOworICAgIG1vdmUob3duZXIsIHNjcmF0Y2gyKTsKKworICAgIGFuZFB0
cihUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoMSk7CisgICAg
YW5kUHRyKFRydXN0ZWRJbW1QdHIofk1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoMik7
CisKKyAgICByc2hpZnQzMihUcnVzdGVkSW1tMzIoMyArIDQpLCBzY3JhdGNoMik7CisKKyAgICBy
ZXR1cm4gYnJhbmNoVGVzdDgoWmVybywgQmFzZUluZGV4KHNjcmF0Y2gxLCBzY3JhdGNoMiwgVGlt
ZXNPbmUsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpKTsKK30KKworSklUOjpKdW1wIEpJ
VDo6Y2hlY2tNYXJrV29yZChKU0NlbGwqIG93bmVyKQoreworICAgIE1hcmtlZEJsb2NrKiBibG9j
ayA9IE1hcmtlZEJsb2NrOjpibG9ja0Zvcihvd25lcik7CisgICAgc2l6ZV90IGluZGV4ID0gKHJl
aW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Pihvd25lcikgJiB+TWFya2VkQmxvY2s6OmJsb2NrTWFzaykg
Pj4gKDMgKyA0KTsKKyAgICB2b2lkKiBhZGRyZXNzID0gKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGJsb2NrKSArIE1hcmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpICsgaW5kZXg7CisKKyAgICBy
ZXR1cm4gYnJhbmNoVGVzdDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKGFkZHJlc3MpKTsKK30KKwor
I2lmIFVTRShKU1ZBTFVFNjQpCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBv
d25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKKyNpZiBFTkFC
TEUoR0dDKQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBK
dW1wIHZhbHVlTm90Q2VsbDsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKKyAgICAgICAgdmFsdWVOb3RDZWxsID0g
YnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1QwLCB0YWdNYXNrUmVnaXN0ZXIpOworICAgIAorICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVyTm90
Q2VsbDsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCisgICAgICAg
IG93bmVyTm90Q2VsbCA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUMCwgdGFnTWFza1JlZ2lz
dGVyKTsKKworICAgIEp1bXAgb3duZXJOb3RNYXJrZWQgPSBjaGVja01hcmtXb3JkKHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdy
aXRlQmFycmllciwgcmVnVDApOworICAgIG93bmVyTm90TWFya2VkLmxpbmsodGhpcyk7CisKKyAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCisgICAgICAgIG93bmVyTm90
Q2VsbC5saW5rKHRoaXMpOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSAKKyAgICAgICAgdmFsdWVOb3RDZWxsLmxp
bmsodGhpcyk7CisjZWxzZQogICAgIFVOVVNFRF9QQVJBTShvd25lcik7Ci0gICAgVU5VU0VEX1BB
UkFNKHNjcmF0Y2gpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7Ci0gICAgVU5VU0VEX1BB
UkFNKHVzZUtpbmQpOwogICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KG1vZGUpOwotICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoKTsKLSAgICBBU1NFUlQob3duZXIg
IT0gc2NyYXRjaDIpOwotICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykK
LSAgICBlbWl0Q291bnQoV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2lu
ZCkpOwogI2VuZGlmCiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3du
ZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCit2b2lkIEpJVDo6ZW1pdFdyaXRl
QmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBt
b2RlKQogeworI2lmIEVOQUJMRShHR0MpCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgIEp1bXAgdmFsdWVOb3RDZWxsOworICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlclZhbHVlKQorICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hUZXN0NjQoTm9uWmVy
bywgcmVnVDAsIHRhZ01hc2tSZWdpc3Rlcik7CisKKyAgICBpZiAoIU1hcmtlZEJsb2NrOjpibG9j
a0Zvcihvd25lciktPmlzTWFya2VkKG93bmVyKSkgeworICAgICAgICBKdW1wIG93bmVyTm90TWFy
a2VkID0gY2hlY2tNYXJrV29yZChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBvd25lcik7CisgICAg
ICAgIG93bmVyTm90TWFya2VkLmxpbmsodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgb3duZXIpOworCisg
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIAorICAgICAgICB2YWx1ZU5vdENlbGwu
bGluayh0aGlzKTsKKyNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKLSAgICBVTlVTRURf
UEFSQU0oc2NyYXRjaCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwogICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKG1vZGUpOwotICAgIAotI2lmIEVOQUJMRShX
UklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBlbWl0Q291bnQoV3JpdGVCYXJyaWVyQ291bnRl
cnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwogI2VuZGlmCiB9CiAKKyNlbHNlIC8vIFVTRShK
U1ZBTFVFNjQpCisKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1
bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQoreworI2lmIEVOQUJMRShHR0Mp
CisgICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKKyAgICBKdW1wIHZhbHVlTm90Q2VsbDsK
KyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSkKKyAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworICAgIAorICAgIGVtaXRM
b2FkKG93bmVyLCByZWdUMCwgcmVnVDEpOworICAgIEp1bXAgb3duZXJOb3RDZWxsOworICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKKyAgICAgICAgb3duZXJOb3RDZWxs
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZykpOworCisgICAgSnVtcCBvd25lck5vdE1hcmtlZCA9IGNoZWNrTWFya1dvcmQocmVnVDEsIHJl
Z1QwLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3Jp
dGVCYXJyaWVyLCByZWdUMSk7CisgICAgb3duZXJOb3RNYXJrZWQubGluayh0aGlzKTsKKworICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKKyAgICAgICAgb3duZXJOb3RD
ZWxsLmxpbmsodGhpcyk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIAorICAgICAgICB2YWx1ZU5vdENlbGwubGlu
ayh0aGlzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKKyAgICBVTlVTRURfUEFS
QU0odmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKKyNlbmRpZgorfQorCit2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSBtb2RlKQoreworI2lmIEVOQUJMRShHR0MpCisgICAgZW1pdExvYWRUYWcodmFs
dWUsIHJlZ1QwKTsKKyAgICBKdW1wIHZhbHVlTm90Q2VsbDsKKyAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJWYWx1ZSkKKyAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworCisgICAgaWYgKCFNYXJr
ZWRCbG9jazo6YmxvY2tGb3Iob3duZXIpLT5pc01hcmtlZChvd25lcikpIHsKKyAgICAgICAgSnVt
cCBvd25lck5vdE1hcmtlZCA9IGNoZWNrTWFya1dvcmQocmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwg
b3duZXIpOworICAgICAgICBvd25lck5vdE1hcmtlZC5saW5rKHRoaXMpOworICAgIH0gZWxzZQor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIs
IG93bmVyKTsKKworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKKyAgICAgICAg
dmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShvd25lcik7
CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0obW9kZSk7CisjZW5k
aWYKK30KKworI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisKIEpJVDo6SnVtcCBKSVQ6OmFkZFN0
cnVjdHVyZVRyYW5zaXRpb25DaGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUmVnaXN0ZXJJRCBzY3JhdGNoKQogewog
ICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKQEAgLTk4OCw3ICsxMDkyLDEx
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICAKICAgICBQ
YXRjaGFibGVKdW1wIGJhZFR5cGU7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAorCisj
aWYgRU5BQkxFKEdHQykKKyAgICBib29sIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IGZhbHNl
OworI2VuZGlmCisKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgIGNhc2UgSklUSW50MzI6
CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlv
biwgYmFkVHlwZSk7CkBAIC05OTgsOSArMTEwNiwxNSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbChCeVZhbEluCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUQ29udGlndW91
czoKICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUpOworI2lmIEVOQUJMRShHR0MpCisgICAgICAgIG5lZWRzTGlua0Zv
cldyaXRlQmFycmllciA9IHRydWU7CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBK
SVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworI2lmIEVOQUJMRShHR0MpCisgICAg
ICAgIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7CisjZW5kaWYKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJy
YXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CkBAIC0xMDE0LDExICsxMTI4LDE1IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2Nv
ZGVCbG9jayk7Ci0gICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRp
b25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVz
cyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJu
QWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29k
ZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJs
ZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8t
PnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Ci0gICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhk
b25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcFRvRG9uZSkpOworI2lmIEVOQUJMRShHR0MpCisgICAgaWYgKG5lZWRzTGlua0Zvcldy
aXRlQmFycmllcikgeworICAgICAgICBBU1NFUlQobV9jYWxscy5sYXN0KCkudG8gPT0gb3BlcmF0
aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcik7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
bV9jYWxscy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcik7
CisgICAgfQorI2VuZGlmCiAgICAgCiAgICAgYm9vbCBpc0RpcmVjdCA9IG1faW50ZXJwcmV0ZXIt
PmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92
YWxfZGlyZWN0OwogICAgIGlmICghaXNEaXJlY3QpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTYwODIyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiAj
aW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lSW5saW5lcy5oIgor
I2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5o
IgogI2luY2x1ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGlu
ZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKQEAgLTc4OCw3MCArNzkwLDU5IEBAIHN0YXRp
YyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLnZhbHVlVGFnR1BSKTsKICNlbmRpZgogICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2gudmFs
dWVHUFIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gVGVtcFJlZ2lzdGVyU2V0KHN0dWJJbmZv
LnBhdGNoLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKLSAgICBib29sIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKLSAgICBjb25zdCBib29sIHdyaXRlQmFycmllck5lZWRl
ZCA9IHRydWU7Ci0jZWxzZQotICAgIGNvbnN0IGJvb2wgd3JpdGVCYXJyaWVyTmVlZGVkID0gZmFs
c2U7CisKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBh
dGNoLnVzZWRSZWdpc3RlcnMpOworICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOworI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCisgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVUYWdHUFIpOwogI2VuZGlm
CisgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVHUFIpOwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVy
IHN0dWJKaXQ7Ci0gICAgCi0gICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZyAmJiAo
d3JpdGVCYXJyaWVyTmVlZGVkIHx8IGlzT3V0T2ZMaW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJs
eUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIpOwotI2Vsc2UKLSAg
ICAgICAgc2NyYXRjaEdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihiYXNl
R1BSLCB2YWx1ZUdQUiwgdmFsdWVUYWdHUFIpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyNpZiBFTkFCTEUoR0dDKQorICAgIEdQUlJl
ZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICNlbmRpZgot
ICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIHN0dWJKaXQucHVz
aFRvU2F2ZShzY3JhdGNoR1BSKTsKLSAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2
bSwgZXhlYy0+Y29kZUJsb2NrKCkpOworCisgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVn
aXN0ZXJzQnlQdXNoaW5nKHN0dWJKaXQpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmFk
U3RydWN0dXJlID0gc3R1YkppdC5icmFuY2hQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHN0cnVjdHVyZSkpOwotICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElO
RykKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHNjcmF0Y2hHUFIyID0gQXNzZW1ibHlIZWxwZXJz
OjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSNlbHNl
Ci0gICAgc2NyYXRjaEdQUjIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoYmFz
ZUdQUiwgdmFsdWVHUFIsIHZhbHVlVGFnR1BSLCBzY3JhdGNoR1BSKTsKLSNlbmRpZgotICAgIHN0
dWJKaXQucHVzaFRvU2F2ZShzY3JhdGNoR1BSMik7Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjp3cml0
ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIFdyaXRl
QmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKLSAgICBzdHViSml0LnBvcFRvUmVzdG9yZShzY3Jh
dGNoR1BSMik7Ci0jZW5kaWYKLSAgICAKKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQogICAgICAgICBzdHViSml0LnN0b3Jl
NjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIGVsc2UgewotICAgICAgICBzdHVi
Sml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2
YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0
ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAg
c3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5zdG9y
ZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0
SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAg
ICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlmIChpc0lubGluZU9mZnNldChzbG90
LmNhY2hlZE9mZnNldCgpKSkgewogICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNp
emVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpKTsKICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpKTsKICAgICB9IGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0
SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5z
dG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zm
c2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7
CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCiAgICAgCisjaWYgRU5BQkxFKEdHQykK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCB3cml0ZUJhcnJpZXJPcGVyYXRpb24gPSBERkc6OlNw
ZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUjEs
IHNjcmF0Y2hHUFIyKTsKKyNlbmRpZgorICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1
Y2Nlc3M7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKICAgICAKLSAgICBpZiAo
bmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKLSAgICAgICAgc3R1YkppdC5wb3BUb1Jlc3RvcmUoc2Ny
YXRjaEdQUik7CisgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7CisgICAg
ICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKHN0dWJKaXQpOwog
ICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgIAogICAgICAgICBiYWRT
dHJ1Y3R1cmUubGluaygmc3R1YkppdCk7Ci0gICAgICAgIHN0dWJKaXQucG9wVG9SZXN0b3JlKHNj
cmF0Y2hHUFIpOworICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9w
cGluZyhzdHViSml0KTsKICAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQuanVtcCgpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKQEAgLTg1OSw2ICs4NTAs
OSBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgfQogICAgIAogICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOwor
I2lmIEVOQUJMRShHR0MpCisgICAgcGF0Y2hCdWZmZXIubGluayh3cml0ZUJhcnJpZXJPcGVyYXRp
b24sIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKTsKKyNlbmRpZgogICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgcGF0Y2hCdWZmZXIu
bGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwogICAgICAgICAgICAgCkBAIC05MDAsMjkgKzg5
NCwyMSBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgCiAgICAgQ0Nh
bGxIZWxwZXJzIHN0dWJKaXQodm0pOwogICAgIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0g
YmFzZUdQUik7Ci0gICAgQVNTRVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsKLSAgICAKLSAg
ICBib29sIG5lZWRTZWNvbmRTY3JhdGNoID0gZmFsc2U7CiAgICAgYm9vbCBuZWVkVGhpcmRTY3Jh
dGNoID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIG5l
ZWRTZWNvbmRTY3JhdGNoID0gdHJ1ZTsKLSNlbmRpZgogICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkgIT0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAg
ICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICBuZWVk
U2Vjb25kU2NyYXRjaCA9IHRydWU7CiAgICAgICAgIG5lZWRUaGlyZFNjcmF0Y2ggPSB0cnVlOwog
ICAgIH0KIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKLSAgICBpZiAobmVlZFNlY29uZFNjcmF0
Y2gpIHsKLSAgICAgICAgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBiYXNlR1BSKTsKLSAgICAgICAgQVNT
RVJUKHNjcmF0Y2hHUFIyICE9IHZhbHVlR1BSKTsKLSAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIy
ICE9IHNjcmF0Y2hHUFIxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUjIgPSBJbnZh
bGlkR1BSUmVnOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNj
cmF0Y2hHUFIoKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjEgIT0gYmFzZUdQUik7CisgICAgQVNT
RVJUKHNjcmF0Y2hHUFIxICE9IHZhbHVlR1BSKTsKKyAgICAKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgQVNTRVJUKHNjcmF0Y2hH
UFIyICE9IGJhc2VHUFIpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSB2YWx1ZUdQUik7Cisg
ICAgQVNTRVJUKHNjcmF0Y2hHUFIyICE9IHNjcmF0Y2hHUFIxKTsKKwogICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMzsKICAgICBpZiAobmVlZFRoaXJkU2NyYXRjaCkgewogICAgICAgICBzY3JhdGNoR1BS
MyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKQEAgLTkzMiw3ICs5MTgsNyBAQCBz
dGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgIEFTU0VSVChzY3JhdGNo
R1BSMyAhPSBzY3JhdGNoR1BSMik7CiAgICAgfSBlbHNlCiAgICAgICAgIHNjcmF0Y2hHUFIzID0g
SW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgIAorICAgIAogICAgIGFsbG9jYXRvci5wcmVzZXJ2
ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhzdHViSml0KTsKIAogICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CkBAIC05NTMsMTMgKzkzOSw2IEBAIHN0YXRpYyB2b2lk
IGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgfQogICAgIH0KIAotI2lmIEVOQUJMRShX
UklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBBU1NFUlQobmVlZFNlY29uZFNjcmF0Y2gpOwot
ICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAvLyBNdXN0IGFs
d2F5cyBlbWl0IHRoaXMgd3JpdGUgYmFycmllciBhcyB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24g
aXRzZWxmIHJlcXVpcmVzIGl0Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjp3cml0ZUJhcnJpZXIoc3R1
YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBXcml0ZUJhcnJpZXJGb3JQ
cm9wZXJ0eUFjY2Vzcyk7Ci0jZW5kaWYKLSAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7CiAgICAgCiAgICAgYm9vbCBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSBmYWxz
ZTsKQEAgLTEwMTgsNiArOTk3LDEwIEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1
YigKICAgICB9CiAjZW5kaWYKICAgICAKKyNpZiBFTkFCTEUoR0dDKQorICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIHdyaXRlQmFycmllck9wZXJhdGlvbiA9IERGRzo6U3BlY3VsYXRpdmVKSVQ6Ondy
aXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIpOwor
I2VuZGlmCisgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlOwogICAgICAgICAgICAgCkBAIC0xMDUxLDYgKzEwMzQs
OSBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgfQogICAgIAogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkp
OworI2lmIEVOQUJMRShHR0MpCisgICAgcGF0Y2hCdWZmZXIubGluayh3cml0ZUJhcnJpZXJPcGVy
YXRpb24sIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKTsKKyNlbmRpZgogICAgIHBh
dGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYgKGFsbG9j
YXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1
cmUsIGZhaWx1cmVMYWJlbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE2MDgyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxNSw2ICs1MTUsMTQgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2
ZSkKICAgICBSRVRVUk4oT1BfQygyKS5qc1ZhbHVlKCkudG9QcmltaXRpdmUoZXhlYykpOwogfQog
CitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZW50ZXIpCit7CisgICAgQkVHSU4oKTsKKyAgICBT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUgPSBleGVjLT5jb2RlQmxvY2soKS0+b3du
ZXJFeGVjdXRhYmxlKCk7CisgICAgSGVhcDo6aGVhcChvd25lckV4ZWN1dGFibGUpLT53cml0ZUJh
cnJpZXIob3duZXJFeGVjdXRhYmxlKTsKKyAgICBFTkQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNp
b24gMTYwODIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw2ICsxNjMsNyBAQCBTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjCiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X3RvdWNoX2VudHJ5KTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX2Fy
Z3VtZW50cyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV90aGlzKTsK
K1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZW50ZXIpOwogU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9nZXRfY2FsbGVlKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfdG9fdGhpcyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhcHR1cmVk
X21vdik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>