<?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>121732</bug_id>
          
          <creation_ts>2013-09-20 20:48:35 -0700</creation_ts>
          <short_desc>VirtualRegister should be a class</short_desc>
          <delta_ts>2013-09-26 15:52:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>121966</dependson>
          <blocked>116888</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>931711</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-09-20 20:48:35 -0700</bug_when>
    <thetext>VirtualRegister is currently an enum, but this offer little type safety and breaks when a VirtualRegister variable is used for an array index.

Instead it should be a POD class with a single int member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931712</commentid>
    <comment_count>1</comment_count>
      <attachid>212252</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-09-20 20:52:09 -0700</bug_when>
    <thetext>Created attachment 212252
First pass - compiles and runs - need to convert more &quot;int&quot; variables to VirtualRegister</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932569</commentid>
    <comment_count>2</comment_count>
      <attachid>212469</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-09-24 08:25:43 -0700</bug_when>
    <thetext>Created attachment 212469
Patch - Pretty close to done.  Runs js tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932792</commentid>
    <comment_count>3</comment_count>
      <attachid>212520</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-09-24 16:41:38 -0700</bug_when>
    <thetext>Created attachment 212520
Patch for Review

The style failure already existed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932821</commentid>
    <comment_count>4</comment_count>
      <attachid>212520</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-24 17:36:34 -0700</bug_when>
    <thetext>Comment on attachment 212520
Patch for Review

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

&gt; Source/JavaScriptCore/ChangeLog:18
&gt; +        * bytecode/CodeBlock.cpp:
&gt; +        (JSC::CodeBlock::registerName):

I&apos;m not a fan of this long, unannotated list.

&gt; Source/JavaScriptCore/bytecode/VirtualRegister.h:38
&gt; +// enum VirtualRegister { InvalidVirtualRegister = 0x3fffffff };

Please remove this commented-out code.

&gt; Source/JavaScriptCore/bytecode/VirtualRegister.h:50
&gt; +    VirtualRegister(int virtualRegister)

This should be explicit, so we don&apos;t automatically convert unknown data into this typed format. Otherwise, we don&apos;t get any type safety.

&gt; Source/JavaScriptCore/bytecode/VirtualRegister.h:65
&gt; +    VirtualRegister operator+(int offset) { return VirtualRegister(m_virtualRegister + offset); }

This is another way to accidentally convert an int to a VirtualRegister without explicitly specifying your intent, so let&apos;s get rid of it.

&gt; Source/JavaScriptCore/bytecode/VirtualRegister.h:89
&gt; +    operator int() { return m_virtualRegister; }

This is a hole in our type safety, since it allows someone to accidentally cast a VirtualRegister into an index into an array of locals or arguments. Let&apos;s remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933370</commentid>
    <comment_count>5</comment_count>
      <attachid>212668</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-09-25 22:30:15 -0700</bug_when>
    <thetext>Created attachment 212668
Patch with updates from initial review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933379</commentid>
    <comment_count>6</comment_count>
      <attachid>212668</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-25 23:34:37 -0700</bug_when>
    <thetext>Comment on attachment 212668
Patch with updates from initial review

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

&gt; Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:27
&gt; +#ifndef DFGAssemblyHelpers_h
&gt; +#define DFGAssemblyHelpers_h

What&apos;s up with this file move?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933477</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-09-26 07:04:07 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 212668 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=212668&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:27
&gt; &gt; +#ifndef DFGAssemblyHelpers_h
&gt; &gt; +#define DFGAssemblyHelpers_h
&gt; 
&gt; What&apos;s up with this file move?

I think it got moved while I was working on this patch.  I&apos;ll rebase my patch so that I don&apos;t move it back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933586</commentid>
    <comment_count>8</comment_count>
      <attachid>212724</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-09-26 10:48:23 -0700</bug_when>
    <thetext>Created attachment 212724
Patch for Landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933588</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-09-26 10:49:37 -0700</bug_when>
    <thetext>Committed r156474: &lt;http://trac.webkit.org/changeset/156474&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933606</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-26 11:13:28 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 121966</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933753</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-09-26 15:52:48 -0700</bug_when>
    <thetext>Committed r156511: &lt;http://trac.webkit.org/changeset/156511&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212252</attachid>
            <date>2013-09-20 20:52:09 -0700</date>
            <delta_ts>2013-09-24 08:25:43 -0700</delta_ts>
            <desc>First pass - compiles and runs - need to convert more &quot;int&quot; variables to VirtualRegister</desc>
            <filename>virt-reg-class-wip1.patch</filename>
            <type>text/plain</type>
            <size>41071</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE0LDExICs1MTQsMTEgQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIGlmICh1c2VzQXJndW1lbnRzKCkpIHsK
ICAgICAgICAgb3V0LnByaW50ZigKICAgICAgICAgICAgICI7IHVzZXMgYXJndW1lbnRzLCBpbiBy
JWQsIHIlZCIsCi0gICAgICAgICAgICBhcmd1bWVudHNSZWdpc3RlcigpLAotICAgICAgICAgICAg
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKCkpKTsKKyAgICAg
ICAgICAgIGFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCksCisgICAgICAgICAgICB1bm1vZGlm
aWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIoKSkub2Zmc2V0KCkpOwogICAg
IH0KICAgICBpZiAobmVlZHNGdWxsU2NvcGVDaGFpbigpICYmIGNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlKQotICAgICAgICBvdXQucHJpbnRmKCI7IGFjdGl2YXRpb24gaW4gciVkIiwgYWN0aXZh
dGlvblJlZ2lzdGVyKCkpOworICAgICAgICBvdXQucHJpbnRmKCI7IGFjdGl2YXRpb24gaW4gciVk
IiwgYWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpOwogICAgIG91dC5wcmludGYoIlxuIik7
CiAgICAgCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVn
aW4oKTsKQEAgLTE2MjIsNyArMTYyMiw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4
ZWN1dGFibGUqIG8KIAogICAgIHNldENvbnN0YW50UmVnaXN0ZXJzKHVubGlua2VkQ29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVycygpKTsKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPnVzZXNH
bG9iYWxPYmplY3QoKSkKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxpbmtlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUs
IG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxp
bmtlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKS5vZmZzZXQoKV0uc2V0KCptX3Zt
LCBvd25lckV4ZWN1dGFibGUsIG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKICAgICBtX2Z1bmN0aW9u
RGVjbHMuZ3Jvdyh1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkpOwog
ICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rp
b25EZWNscygpLCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5m
dW5jdGlvbkRlY2woaSk7CkBAIC0zNDQxLDcgKzM0NDEsNyBAQCBTdHJpbmcgQ29kZUJsb2NrOjpu
YW1lRm9yUmVnaXN0ZXIoaW50IHJlCiAgICAgaWYgKHVzZXNBcmd1bWVudHMoKSkgewogICAgICAg
ICBpZiAocmVnaXN0ZXJOdW1iZXIgPT0gYXJndW1lbnRzUmVnaXN0ZXIoKSkKICAgICAgICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoImFyZ3VtZW50cyIpOwotICAgICAgICBpZiAodW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKCkpID09IHJlZ2lzdGVyTnVtYmVy
KQorICAgICAgICBpZiAodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lz
dGVyKCkpLm9mZnNldCgpID09IHJlZ2lzdGVyTnVtYmVyKQogICAgICAgICAgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgicmVhbCBhcmd1bWVudHMiKTsKICAgICB9CiAgICAgaWYgKHJlZ2lzdGVyTnVt
YmVyIDwgMCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAi
U3RydWN0dXJlU3R1YkluZm8uaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgi
CiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgi
CiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTg2LDcgKzg3LDcgQEAgY2xhc3MgRXhlY1N0
YXRlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgUmVwYXRjaEJ1ZmZlcjsK
IAotaW5saW5lIGludCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoaW50IGFyZ3VtZW50c1Jl
Z2lzdGVyKSB7IHJldHVybiBhcmd1bWVudHNSZWdpc3RlciArIDE7IH0KK2lubGluZSBWaXJ0dWFs
UmVnaXN0ZXIgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBhcmd1
bWVudHNSZWdpc3RlcikgeyByZXR1cm4gYXJndW1lbnRzUmVnaXN0ZXIgKyAxOyB9CiAKIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nVGhpc09iamVjdE1hcmtlcigpIHsgcmV0dXJuIHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7IH0KIApAQCAtMzE0LDQ1ICszMTUsNDggQEAg
cHVibGljOgogICAgIHZvaWQgc2V0Vk0oVk0qIHZtKSB7IG1fdm0gPSB2bTsgfQogICAgIFZNKiB2
bSgpIHsgcmV0dXJuIG1fdm07IH0KIAotICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKGludCB0aGlz
UmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KLSAgICBpbnQgdGhp
c1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90aGlzUmVnaXN0ZXI7IH0KKyAgICB2b2lkIHNl
dFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lz
dGVyID0gdGhpc1JlZ2lzdGVyOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3Rlcigp
IGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9CiAKICAgICBib29sIG5lZWRzRnVsbFNj
b3BlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bmVlZHNGdWxsU2NvcGVD
aGFpbigpOyB9CiAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT51c2VzRXZhbCgpOyB9CiAKLSAgICB2b2lkIHNldEFyZ3VtZW50c1JlZ2lzdGVyKGludCBh
cmd1bWVudHNSZWdpc3RlcikKKyAgICB2b2lkIHNldEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChhcmd1bWVu
dHNSZWdpc3RlciAhPSAoaW50KUludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NF
UlQoYXJndW1lbnRzUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgbV9hcmd1bWVudHNSZWdp
c3RlciA9IGFyZ3VtZW50c1JlZ2lzdGVyOwogICAgICAgICBBU1NFUlQodXNlc0FyZ3VtZW50cygp
KTsKICAgICB9Ci0gICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyKCkgY29uc3QKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KHVzZXNBcmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyOwog
ICAgIH0KLSAgICBpbnQgdW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXIoKQorICAgIFZpcnR1YWxS
ZWdpc3RlciB1bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlcigpCiAgICAgewogICAgICAgICBpZiAo
IXVzZXNBcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHJldHVybiBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyOworICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICByZXR1
cm4gYXJndW1lbnRzUmVnaXN0ZXIoKTsKICAgICB9Ci0gICAgdm9pZCBzZXRBY3RpdmF0aW9uUmVn
aXN0ZXIoaW50IGFjdGl2YXRpb25SZWdpc3RlcikKKyAgICB2b2lkIHNldEFjdGl2YXRpb25SZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIgYWN0aXZhdGlvblJlZ2lzdGVyKQogICAgIHsKICAgICAgICAg
bV9hY3RpdmF0aW9uUmVnaXN0ZXIgPSBhY3RpdmF0aW9uUmVnaXN0ZXI7CiAgICAgfQotICAgIGlu
dCBhY3RpdmF0aW9uUmVnaXN0ZXIoKSBjb25zdAorCisgICAgVmlydHVhbFJlZ2lzdGVyIGFjdGl2
YXRpb25SZWdpc3RlcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobmVlZHNGdWxsU2Nv
cGVDaGFpbigpKTsKICAgICAgICAgcmV0dXJuIG1fYWN0aXZhdGlvblJlZ2lzdGVyOwogICAgIH0K
LSAgICBpbnQgdW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyKCkKKworICAgIFZpcnR1YWxSZWdp
c3RlciB1bmNoZWNrZWRBY3RpdmF0aW9uUmVnaXN0ZXIoKQogICAgIHsKICAgICAgICAgaWYgKCFu
ZWVkc0Z1bGxTY29wZUNoYWluKCkpCi0gICAgICAgICAgICByZXR1cm4gSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcjsKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAg
cmV0dXJuIGFjdGl2YXRpb25SZWdpc3RlcigpOwogICAgIH0KLSAgICBib29sIHVzZXNBcmd1bWVu
dHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyICE9IChpbnQpSW52YWxpZFZp
cnR1YWxSZWdpc3RlcjsgfQorCisgICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1
cm4gbV9hcmd1bWVudHNSZWdpc3Rlci5pc1ZhbGlkKCk7IH0KIAogICAgIGJvb2wgbmVlZHNBY3Rp
dmF0aW9uKCkgY29uc3QKICAgICB7CkBAIC0xMDY3LDkgKzEwNzEsOSBAQCBwcml2YXRlOgogICAg
IFZNKiBtX3ZtOwogCiAgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiBtX2luc3RydWN0
aW9uczsKLSAgICBpbnQgbV90aGlzUmVnaXN0ZXI7Ci0gICAgaW50IG1fYXJndW1lbnRzUmVnaXN0
ZXI7Ci0gICAgaW50IG1fYWN0aXZhdGlvblJlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3RlciBt
X3RoaXNSZWdpc3RlcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9hcmd1bWVudHNSZWdpc3RlcjsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9hY3RpdmF0aW9uUmVnaXN0ZXI7CiAKICAgICBib29sIG1f
aXNTdHJpY3RNb2RlOwogICAgIGJvb2wgbV9uZWVkc0FjdGl2YXRpb247CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUuaAkocmV2aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDI2ICs0
NiwyNiBAQCBjbGFzcyBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSB7CiBwdWJsaWM6CiAgICAg
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoKQogICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQo
MCkgLy8gMCA9IGVtcHR5IHZhbHVlCi0gICAgICAgICwgbV9vcGVyYW5kKEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpIC8vIG5vdCBhIHZhbGlkIG9wZXJhbmQgaW5kZXggaW4gb3VyIGN1cnJlbnQgc2No
ZW1lCisgICAgICAgICwgbV9vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigpKSAvLyBub3QgYSB2YWxp
ZCBvcGVyYW5kIGluZGV4IGluIG91ciBjdXJyZW50IHNjaGVtZQogICAgIHsKICAgICB9CiAgICAg
CiAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlKQogICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoMSkgLy8gMSA9IGRlbGV0ZWQgdmFs
dWUKLSAgICAgICAgLCBtX29wZXJhbmQoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgLy8gbm90IGEg
dmFsaWQgb3BlcmFuZCBpbmRleCBpbiBvdXIgY3VycmVudCBzY2hlbWUKKyAgICAgICAgLCBtX29w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyKCkpIC8vIG5vdCBhIHZhbGlkIG9wZXJhbmQgaW5kZXggaW4g
b3VyIGN1cnJlbnQgc2NoZW1lCiAgICAgewogICAgIH0KICAgICAKLSAgICBMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZUtleSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50IG9wZXJhbmQpCisgICAg
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQogICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQpCiAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NF
UlQob3BlcmFuZCAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgQVNTRVJUKG1f
b3BlcmFuZC5pc1ZhbGlkKCkpOwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9vcGVyYW5kID09IEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXI7CisgICAgICAgIHJldHVybiAhbV9vcGVyYW5kLmlzVmFsaWQoKTsKICAgICB9CiAgICAg
CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5JiBv
dGhlcikgY29uc3QKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVj
b2RlT2Zmc2V0KSArIG1fb3BlcmFuZDsKKyAgICAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2J5
dGVjb2RlT2Zmc2V0KSArIG1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICB9CiAgICAgCiAgICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25zdApAQCAtODQsNyArODQsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIEFTU0VSVCghISp0aGlzKTsKICAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQ7
CiAgICAgfQotICAgIGludCBvcGVyYW5kKCkgY29uc3QKKworICAgIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCghISp0aGlzKTsKICAgICAgICAg
cmV0dXJuIG1fb3BlcmFuZDsKQEAgLTkyLDExICs5MywxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gbV9vcGVyYW5kID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgbV9ieXRlY29kZU9mZnNl
dDsKKyAgICAgICAgcmV0dXJuICFtX29wZXJhbmQuaXNWYWxpZCgpICYmIG1fYnl0ZWNvZGVPZmZz
ZXQ7CiAgICAgfQogcHJpdmF0ZTogCiAgICAgdW5zaWduZWQgbV9ieXRlY29kZU9mZnNldDsKLSAg
ICBpbnQgbV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CiB9OwogCiBz
dHJ1Y3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXlIYXNoIHsKQEAgLTEyOSw3ICsxMzAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIHN0cnVjdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSA6IHB1Ymxp
YyBNaW5pbWFsVmFsdWVQcm9maWxlIHsKICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSgpCiAg
ICAgICAgIDogTWluaW1hbFZhbHVlUHJvZmlsZSgpCi0gICAgICAgICwgbV9vcGVyYW5kKEludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICwgbV9vcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcigp
KQogICAgIHsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1NjEzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5NCw4ICsxOTQsOCBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5r
ZWRDb2RlQmxvY2soVk0qCiAgICAgLCBtX251bUNhbGxlZVJlZ2lzdGVycygwKQogICAgICwgbV9u
dW1QYXJhbWV0ZXJzKDApCiAgICAgLCBtX3ZtKHZtKQotICAgICwgbV9hcmd1bWVudHNSZWdpc3Rl
cigoaW50KUludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgLCBtX2dsb2JhbE9iamVjdFJlZ2lz
dGVyKChpbnQpSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAsIG1fYXJndW1lbnRzUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCisgICAgLCBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlcigpKQogICAgICwgbV9uZWVkc0Z1bGxTY29wZUNoYWluKGluZm8ubV9uZWVkc0Fj
dGl2YXRpb24pCiAgICAgLCBtX3VzZXNFdmFsKGluZm8ubV91c2VzRXZhbCkKICAgICAsIG1faXNO
dW1lcmljQ29tcGFyZUZ1bmN0aW9uKGZhbHNlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1NjEzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTgsMTMgKzI1OCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRB
Y3RpdmF0aW9uUmVnaXN0ZXIoaW50IGFjdGl2YXRpb25SZWdpc3RlcikgeyBtX2FjdGl2YXRpb25S
ZWdpc3RlciA9IGFjdGl2YXRpb25SZWdpc3RlcjsgfQogCiAgICAgdm9pZCBzZXRBcmd1bWVudHNS
ZWdpc3RlcihpbnQgYXJndW1lbnRzUmVnaXN0ZXIpIHsgbV9hcmd1bWVudHNSZWdpc3RlciA9IGFy
Z3VtZW50c1JlZ2lzdGVyOyB9Ci0gICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1
cm4gbV9hcmd1bWVudHNSZWdpc3RlciAhPSAoaW50KUludmFsaWRWaXJ0dWFsUmVnaXN0ZXI7IH0K
LSAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1Jl
Z2lzdGVyOyB9CisgICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1
bWVudHNSZWdpc3Rlci5pc1ZhbGlkKCk7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRz
UmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyOyB9CiAKIAotICAg
IGJvb2wgdXNlc0dsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0UmVn
aXN0ZXIgIT0gKGludClJbnZhbGlkVmlydHVhbFJlZ2lzdGVyOyB9CisgICAgYm9vbCB1c2VzR2xv
YmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdpc3Rlci5pc1ZhbGlk
KCk7IH0KICAgICB2b2lkIHNldEdsb2JhbE9iamVjdFJlZ2lzdGVyKGludCBnbG9iYWxPYmplY3RS
ZWdpc3RlcikgeyBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyID0gZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7
IH0KLSAgICBpbnQgZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2dsb2Jh
bE9iamVjdFJlZ2lzdGVyOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIGdsb2JhbE9iamVjdFJlZ2lz
dGVyKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsgfQogCiAgICAgLy8g
UGFyYW1ldGVyIGluZm9ybWF0aW9uCiAgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKGludCBuZXdW
YWx1ZSkgeyBtX251bVBhcmFtZXRlcnMgPSBuZXdWYWx1ZTsgfQpAQCAtMzk5LDggKzM5OSw4IEBA
IHB1YmxpYzoKIAogICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
VHlwZTsgfQogCi0gICAgaW50IHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1Jl
Z2lzdGVyOyB9Ci0gICAgaW50IGFjdGl2YXRpb25SZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YWN0aXZhdGlvblJlZ2lzdGVyOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3Rlcigp
IGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIGFj
dGl2YXRpb25SZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZhdGlvblJlZ2lzdGVyOyB9
CiAKIAogICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbih1bnNpZ25lZCBwcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uKQpAQCAtNDc5LDEwICs0NzksMTAgQEAgcHJpdmF0ZToKICAg
ICBpbnQgbV9udW1QYXJhbWV0ZXJzOwogICAgIFZNKiBtX3ZtOwogCi0gICAgaW50IG1fdGhpc1Jl
Z2lzdGVyOwotICAgIGludCBtX2FyZ3VtZW50c1JlZ2lzdGVyOwotICAgIGludCBtX2FjdGl2YXRp
b25SZWdpc3RlcjsKLSAgICBpbnQgbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fYXJndW1lbnRz
UmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fYWN0aXZhdGlvblJlZ2lzdGVyOworICAg
IFZpcnR1YWxSZWdpc3RlciBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyOwogCiAgICAgYm9vbCBtX25l
ZWRzRnVsbFNjb3BlQ2hhaW4gOiAxOwogICAgIGJvb2wgbV91c2VzRXZhbCA6IDE7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgJKHJldmlz
aW9uIDE1NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292
ZXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw3ICsyMDksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBEaXNwbGFjZWRJbkpTU3RhY2s7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICByZXN1bHQubV9zb3VyY2UudmlydHVhbFJlZyA9
IHZpcnR1YWxSZWc7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS52aXJ0dWFsUmVnID0gdmlydHVh
bFJlZy5vZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0y
OTIsNyArMjkyLDcgQEAgcHVibGljOgogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVlID09IERpc3BsYWNl
ZEluSlNTdGFjayB8fCBtX3RlY2huaXF1ZSA9PSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjayB8fCBt
X3RlY2huaXF1ZSA9PSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2sgfHwgbV90ZWNobmlxdWUgPT0g
Q2VsbERpc3BsYWNlZEluSlNTdGFjayB8fCBtX3RlY2huaXF1ZSA9PSBCb29sZWFuRGlzcGxhY2Vk
SW5KU1N0YWNrIHx8IG1fdGVjaG5pcXVlID09IEludDUyRGlzcGxhY2VkSW5KU1N0YWNrIHx8IG1f
dGVjaG5pcXVlID09IFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrKTsKLSAgICAgICAgcmV0
dXJuIG1fc291cmNlLnZpcnR1YWxSZWc7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIo
bV9zb3VyY2UudmlydHVhbFJlZyk7CiAgICAgfQogICAgIAogICAgIEpTVmFsdWUgY29uc3RhbnQo
KSBjb25zdApAQCAtMzQ5LDI1ICszNDksMjUgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
OwogI2VuZGlmCiAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAg
b3V0LnByaW50ZigiKiVkIiwgdmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiKiVkIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAg
b3V0LnByaW50ZigiKmludDMyKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIippbnQzMiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6
Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIqaW50NTIoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkp
OworICAgICAgICAgICAgb3V0LnByaW50ZigiKmludDUyKCVkKSIsIHZpcnR1YWxSZWdpc3Rlcigp
Lm9mZnNldCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBTdHJpY3RJbnQ1
MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIG91dC5wcmludGYoIipzdHJpY3RJbnQ1
MiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIqc3Ry
aWN0SW50NTIoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAg
ICAgIG91dC5wcmludGYoIipkb3VibGUoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiKmRvdWJsZSglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQo
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNT
dGFjazoKLSAgICAgICAgICAgIG91dC5wcmludGYoIipjZWxsKCVkKSIsIHZpcnR1YWxSZWdpc3Rl
cigpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIipjZWxsKCVkKSIsIHZpcnR1YWxSZWdpc3Rl
cigpLm9mZnNldCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBCb29sZWFu
RGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgb3V0LnByaW50ZigiKmJvb2woJWQpIiwg
dmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgb3V0LnByaW50ZigiKmJvb2woJWQpIiwg
dmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBjYXNlIEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKICAgICAgICAgICAgIG91dC5wcmlu
dGYoImFyZ3VtZW50cyIpOwpAQCAtMzk4LDcgKzM5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSOwogICAgICAgICB9IHBhaXI7
CiAjZW5kaWYKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWc7CisgICAgICAgIGlu
dCB2aXJ0dWFsUmVnOwogICAgICAgICBFbmNvZGVkSlNWYWx1ZSBjb25zdGFudDsKICAgICB9IG1f
c291cmNlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFs
UmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmlydHVhbFJlZ2lzdGVyLmgJKHJldmlzaW9uIDE1NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsOCBAQAogI2lmbmRlZiBWaXJ0dWFsUmVnaXN0ZXJfaAogI2RlZmluZSBWaXJ0dWFsUmVnaXN0
ZXJfaAogCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIApAQCAtMzMsNyArMzUsNjQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIC8vIFR5cGUgZm9yIGEgdmlydHVhbCByZWdpc3RlciBudW1iZXIgKHNw
aWxsIGxvY2F0aW9uKS4KIC8vIFVzaW5nIGFuIGVudW0gdG8gbWFrZSB0aGlzIHR5cGUtY2hlY2tl
ZCBhdCBjb21waWxlIHRpbWUsIHRvIGF2ZXJ0IHByb2dyYW1tZXIgZXJyb3JzLgotZW51bSBWaXJ0
dWFsUmVnaXN0ZXIgeyBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZiB9OworLy8g
ZW51bSBWaXJ0dWFsUmVnaXN0ZXIgeyBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZm
ZiB9OworCitjbGFzcyBWaXJ0dWFsUmVnaXN0ZXIgeworcHVibGljOgorICAgIFZpcnR1YWxSZWdp
c3RlcigpCisgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc19pbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQorICAgIHt9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIoaW50IHZpcnR1YWxSZWdpc3RlcikK
KyAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpCisgICAge30KKwor
ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBz
X2ludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyBy
ZXR1cm4gb3BlcmFuZElzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0Fy
Z3VtZW50KCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZElzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0
ZXIpOyB9CisgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1
cm4gb3BlcmFuZFRvTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgaW50IHRvQXJndW1l
bnQoKSBjb25zdCB7IEFTU0VSVChpc0FyZ3VtZW50KCkpOyByZXR1cm4gb3BlcmFuZFRvQXJndW1l
bnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmlydHVhbFJlZ2lzdGVyOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmlydHVh
bFJlZ2lzdGVyIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA9PSBvdGhl
ci5tX3ZpcnR1YWxSZWdpc3RlcjsgfQorICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYXRvcisoaW50
IG9mZnNldCkgeyByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRnJvbU9mZnNldChtX3ZpcnR1YWxSZWdp
c3RlciArIG9mZnNldCk7IH0KKyAgICBvcGVyYXRvciBpbnQoKSB7IHJldHVybiBtX3ZpcnR1YWxS
ZWdpc3RlcjsgfSAgLy8gICYmJiYgUmVtb3ZlIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZAorCisgICAg
c3RhdGljIGludCBsb2NhbFRvT3BlcmFuZChpbnQgbG9jYWwpIHsgcmV0dXJuIC1sb2NhbDsgfQor
ICAgIHN0YXRpYyBib29sIG9wZXJhbmRJc0xvY2FsKGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVy
YW5kIDw9IDA7IH0KKyAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0xvY2FsKGludCBvcGVyYW5kKSB7
IHJldHVybiAtb3BlcmFuZDsgfQorCisgICAgc3RhdGljIGJvb2wgb3BlcmFuZElzQXJndW1lbnQo
aW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPiAwOyB9CisgICAgc3RhdGljIGludCBvcGVy
YW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxGcmFtZTo6
dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KKyAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9PcGVyYW5k
KGludCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVu
dE9mZnNldCgpOyB9CisKKyAgICBzdGF0aWMgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ckZyb21Mb2NhbChpbnQgbG9jYWwpCisgICAgeworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lz
dGVyKGxvY2FsVG9PcGVyYW5kKGxvY2FsKSk7CisgICAgfQorCisgICAgc3RhdGljIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGcm9tT2Zmc2V0KGludCBvZmZzZXQpCisgICAgeworICAg
ICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG9mZnNldCk7CisgICAgfQorCisgICAgc3RhdGlj
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGcm9tQXJndW1lbnQoaW50IGFyZ3VtZW50
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFRvT3BlcmFu
ZChhcmd1bWVudCkpOworICAgIH0KKworICAgIHN0YXRpYyBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyRm9yVGhpcygpCisgICAgeworICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVy
RnJvbUFyZ3VtZW50KDApOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgaW50
IHNfaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7CisgICAgc3RhdGljIGNvbnN0
IGludCBzX2ZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gMHg0MDAwMDAwMDsKKworICAgIGlu
dCBtX3ZpcnR1YWxSZWdpc3RlcjsKK307CisKIENPTVBJTEVfQVNTRVJUKHNpemVvZihWaXJ0dWFs
UmVnaXN0ZXIpID09IHNpemVvZihpbnQpLCBWaXJ0dWFsUmVnaXN0ZXJfaXNfMzJiaXQpOwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKQEAgLTQyLDcgKzEwMSw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBp
bmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6VmlydHVhbFJl
Z2lzdGVyIHZhbHVlKQogewotICAgIG91dC5wcmludChzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSk7
CisgICAgb3V0LnByaW50KHZhbHVlLm9mZnNldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RG
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJl
dmlzaW9uIDE1NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RI
ZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgICAg
IAogICAgICAgICBQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgICAgICAgICAg
OiBtX2lzVG9wKGZhbHNlKQotICAgICAgICAgICAgLCBtX3ZhbHVlKHN0YXRpY19jYXN0PGludD4o
b3BlcmFuZCkpCisgICAgICAgICAgICAsIG1fdmFsdWUob3BlcmFuZC5vZmZzZXQoKSkgICAgLy8g
ICYmJiYgVmVyaWZ5IHRoYXQgdGhpcyBpcyBjb3JyZWN0CiAgICAgICAgIHsKICAgICAgICAgfQog
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTU2MTM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHNvdXJjZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0KKyAg
ICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0KICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJG
b3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UtPm9w
KCkgIT0gQ3JlYXRlQXJndW1lbnRzICYmIHNvdXJjZS0+b3AoKSAhPSBQaGFudG9tQXJndW1lbnRz
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgc291cmNl
IG9mIHRoZSBTZXRMb2NhbCBrbm93cyB0aGF0IGlmIGl0J3MKQEAgLTIxNiw3ICsyMTYsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1faXNMaXZlLmNvbnRhaW5zKHZh
cmlhYmxlQWNjZXNzRGF0YSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1
bWVudHNSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIuaXNWYWxpZCgpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBhcmd1bWVudHNS
ZWdpc3RlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJsZUFjY2Vz
c0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1Jl
Z2lzdGVyKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVu
dHMuYWRkKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKQEAgLTIzNCw3ICsyMzQs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRl
eHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKGFyZ3VtZW50c1JlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyLmlzVmFsaWQoKQogICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBhcmd1bWVudHNS
ZWdpc3RlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHZhcmlhYmxlQWNjZXNzRGF0
YS0+bG9jYWwoKSA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0
ZXIpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lID09IHNvdXJjZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCkBAIC02
MTksNyArNjE5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0
IGNoaWxkcmVuID0gbm9kZS0+Y2hpbGRyZW47CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRMb2NhbFVubGlua2VkKAotICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPigKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+
Y29kZU9yaWdpbiktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoaW5kZXgpKSk7CiAKQEAgLTcx
MSw4ICs3MTEsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0gbV9n
cmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKTsKLSAg
ICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBo
LnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pOworICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyLmlzVmFsaWQoKQogICAgICAgICAgICAgICAgICYm
IChub2RlLT5sb2NhbCgpID09IGFyZ3VtZW50c1JlZ2lzdGVyCiAgICAgICAgICAgICAgICAgICAg
IHx8IG5vZGUtPmxvY2FsKCkgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50
c1JlZ2lzdGVyKSkpIHsKICAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5v
ZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKQEAgLTc4Myw4ICs3ODMsOCBAQCBwcml2
YXRlOgogICAgICAgICBzd2l0Y2ggKHNvdXJjZS0+b3AoKSkgewogICAgICAgICBjYXNlIEdldExv
Y2FsOiB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IHNvdXJjZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICBpbnQgYXJndW1l
bnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKHNvdXJj
ZS0+Y29kZU9yaWdpbik7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgPT0gSW52
YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVu
dHNSZWdpc3RlciA9IG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Ioc291cmNl
LT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIGlmICghYXJndW1lbnRzUmVnaXN0ZXIuaXNWYWxp
ZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1Jl
Z2lzdGVyID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3Nl
bWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDMxICsxNTUs
MzQgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAgIAorICAgIHN0YXRpYyBBZGRyZXNzIGFk
ZHJlc3NGb3IoaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICB9
CisKICAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIpCiAgICAgewotICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAg
IHJldHVybiBhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSk7CiAgICAgfQotICAg
IHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoaW50IG9wZXJhbmQpCisKKyAgICBzdGF0aWMgQWRk
cmVzcyB0YWdGb3IoaW50IG9mZnNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9y
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICByZXR1cm4g
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICogc2l6ZW9mKFJlZ2lz
dGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSk7CiAgICAgfQogCiAgICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewotICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7CisgICAg
ICAgIHJldHVybiB0YWdGb3IodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKTsKICAgICB9Ci0gICAg
c3RhdGljIEFkZHJlc3MgdGFnRm9yKGludCBvcGVyYW5kKQorCisgICAgc3RhdGljIEFkZHJlc3Mg
cGF5bG9hZEZvcihpbnQgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZ0ZvcihzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuIEFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCAqIHNpemVvZihSZWdpc3Rlcikg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQp
KTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewotICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkp
OwotICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHBheWxvYWRGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVy
PihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rlci5v
ZmZzZXQoKSk7CiAgICAgfQogCiAgICAgSnVtcCBicmFuY2hJZk5vdE9iamVjdChHUFJSZWcgc3Ry
dWN0dXJlUmVnKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsMTEgKzE5
MCwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8
QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwogICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0
b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tzLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBw
b3NzaWJsZVRhcmdldHMpOwogICAgIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKGludCBvcGVyYW5kLCBib29sIGlzQ2FwdHVyZWQpCisgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IGJvb2wgaXNDYXB0dXJlZCkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGVyYW5kIDwgRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXgpOwogICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5tX3Zhcmlh
YmxlQWNjZXNzRGF0YS5hcHBlbmQoVmFyaWFibGVBY2Nlc3NEYXRhKHN0YXRpY19jYXN0PFZpcnR1
YWxSZWdpc3Rlcj4ob3BlcmFuZCksIGlzQ2FwdHVyZWQpKTsKKyAgICAgICAgbV9ncmFwaC5tX3Zh
cmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQoVmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2Fw
dHVyZWQpKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxh
c3QoKTsKICAgICB9CiAgICAgCkBAIC0yNjMsOSArMjYzLDkgQEAgcHJpdmF0ZToKICAgICB9CiAK
ICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9w
ZXJhbmQgaXMgYSBsb2NhbCB2YXJpYWJsZS4KLSAgICBOb2RlKiBnZXRMb2NhbChpbnQgb3BlcmFu
ZCkKKyAgICBOb2RlKiBnZXRMb2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0g
ICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZFRvTG9jYWwob3BlcmFuZCk7CisgICAgICAg
IHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50b0xvY2FsKCk7CiAgICAgICAgIE5vZGUqIG5vZGUg
PSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKICAgICAgICAg
Ym9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgaW5saW5l
Q2FsbEZyYW1lKCkpOwogICAgICAgICAKQEAgLTMwMSw5ICszMDEsOSBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKLSAgICB2b2lkIHNldExvY2FsKGludCBvcGVyYW5k
LCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIHZvaWQgc2V0
TG9jYWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1v
ZGUgPSBOb3JtYWxTZXQpCiAgICAgewotICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmRU
b0xvY2FsKG9wZXJhbmQpOworICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2Nh
bCgpOwogICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChv
cGVyYW5kLCBpbmxpbmVDYWxsRnJhbWUoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoc2V0TW9k
ZSA9PSBOb3JtYWxTZXQpIHsKQEAgLTMyMiw5ICszMjIsOSBAQCBwcml2YXRlOgogICAgIH0KIAog
ICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3Bl
cmFuZCBpcyBhbiBhcmd1bWVudC4KLSAgICBOb2RlKiBnZXRBcmd1bWVudCh1bnNpZ25lZCBvcGVy
YW5kKQorICAgIE5vZGUqIGdldEFyZ3VtZW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAg
IHsKLSAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5k
KTsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kLnRvQXJndW1lbnQoKTsKICAg
ICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogICAgICAgICAKICAgICAg
ICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQo
YXJndW1lbnQpOwpAQCAtNDIxLDE3ICs0MjEsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHZh
bHVlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmbHVzaChpbnQgb3BlcmFuZCkKKyAgICB2b2lk
IGZsdXNoKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgZmx1c2hEaXJl
Y3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpKTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBmbHVzaERpcmVjdChpbnQgb3BlcmFuZCkKKyAgICB2b2lkIGZsdXNoRGlyZWN0
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgZmx1c2hEaXJlY3Qob3Bl
cmFuZCwgZmluZEFyZ3VtZW50UG9zaXRpb24ob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGZsdXNoRGlyZWN0KGludCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBv
c2l0aW9uKQorICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEFy
Z3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCiAgICAgewogICAgICAgICBib29sIGlz
Q2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBpbmxpbmVDYWxsRnJh
bWUoKSk7CiAgICAgICAgIApAQCAtMTg0OSw3ICsxODQ5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLnJlc2l6
ZShtX251bUFyZ3VtZW50cyk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBh
cmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKAotICAgICAg
ICAgICAgICAgIGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSwgbV9jb2RlQmxvY2stPmlzQ2Fw
dHVyZWQoYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKSk7CisgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyOjp2aXJ0dWFsUmVnaXN0ZXJGcm9tQXJndW1lbnQoYXJndW1lbnQpLCBtX2Nv
ZGVCbG9jay0+aXNDYXB0dXJlZChhcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkpKTsKICAgICAg
ICAgICAgIHZhcmlhYmxlLT5tZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoCiAgICAg
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZSht
X2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZUNo
ZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZCgKQEAgLTI5MTYsNyArMjkxNiw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9yZXQ6CiAgICAg
ICAgICAgICBmbHVzaEFyZ3VtZW50c0FuZENhcHR1cmVkVmFyaWFibGVzKCk7CiAgICAgICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxp
bmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZS5pc1Zh
bGlkKCkpOwogICAgICAgICAgICAgICAgIHNldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5tX3Jl
dHVyblZhbHVlLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZGlkUmV0dXJuID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkp
IHsKQEAgLTMzNzAsNyArMzM3MCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5
OjpJbmxpbmUKICAgICBpZiAobV9jYWxsZXIpIHsKICAgICAgICAgLy8gSW5saW5lIGNhc2UuCiAg
ICAgICAgIEFTU0VSVChjb2RlQmxvY2sgIT0gYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrKTsK
LSAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZVN0YXJ0ICE9IEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIpOworICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lU3RhcnQuaXNWYWxpZCgpKTsK
ICAgICAgICAgQVNTRVJUKGNhbGxzaXRlQmxvY2tIZWFkKTsKICAgICAgICAgCiAgICAgICAgIElu
bGluZUNhbGxGcmFtZSBpbmxpbmVDYWxsRnJhbWU7CkBAIC0zNDc4LDggKzM0NzgsOCBAQCBCeXRl
Q29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgIC8vIE1hY2hpbmUg
Y29kZSBibG9jayBjYXNlLgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrID09IGJ5dGVDb2RlUGFy
c2VyLT5tX2NvZGVCbG9jayk7CiAgICAgICAgIEFTU0VSVCghY2FsbGVlKTsKLSAgICAgICAgQVNT
RVJUKHJldHVyblZhbHVlVlIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIEFT
U0VSVChpbmxpbmVDYWxsRnJhbWVTdGFydCA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAg
ICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZVZSLmlzVmFsaWQoKSk7CisgICAgICAgIEFTU0VSVCgh
aW5saW5lQ2FsbEZyYW1lU3RhcnQuaXNWYWxpZCgpKTsKICAgICAgICAgQVNTRVJUKCFjYWxsc2l0
ZUJsb2NrSGVhZCk7CiAKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSAwOwpAQCAtMzYzMiw3
ICszNjMyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogI2VuZGlmCiAgICAgCiAg
ICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KAotICAgICAgICB0aGlzLCBtX2Nv
ZGVCbG9jaywgbV9wcm9maWxlZEJsb2NrLCAwLCAwLCBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyLCBJ
bnZhbGlkVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICB0aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9m
aWxlZEJsb2NrLCAwLCAwLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgVmlydHVhbFJlZ2lzdGVyKCksCiAg
ICAgICAgIG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIENvZGVGb3JDYWxsKTsKICAgICAK
ICAgICBwYXJzZUNvZGVCbG9jaygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkocmV2aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzgsNyArNDM4LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwogICAgIH0KICAg
ICAKLSAgICBpbnQgdW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoY29uc3QgQ29kZU9yaWdp
biYgY29kZU9yaWdpbikKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdW5jaGVja2VkQXJndW1lbnRzUmVn
aXN0ZXJGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIGlm
ICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyKCk7CkBAIC00NDYsNyArNDQ2LDcgQEAg
cHVibGljOgogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9ySW5saW5lQ2FsbEZyYW1lKAogICAgICAgICAgICAgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUpOwogICAgICAgICBpZiAoIWNvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKQotICAgICAgICAg
ICAgcmV0dXJuIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgICAgICAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5hcmd1
bWVudHNSZWdpc3RlcigpICsKICAgICAgICAgICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZp
c2lvbiAxNTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgOiBj
b2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY29kZU9yaWdpbkZvckV4aXRUYXJnZXQo
Y29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihjaGlsZHJlbikKLSAgICAgICAgLCBtX3Zp
cnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAsIG1fdmlydHVh
bFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKQogICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAg
ICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgewpAQCAtMTc3LDcgKzE3Nyw3IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAg
ICwgY29kZU9yaWdpbkZvckV4aXRUYXJnZXQoY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJl
bihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKLSAgICAgICAg
LCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAsIG1f
dmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKQogICAgICAgICAsIG1fcmVmQ291bnQo
MSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgewpAQCAtMTkxLDcgKzE5
MSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAg
ICAgICAgICwgY29kZU9yaWdpbkZvckV4aXRUYXJnZXQoY29kZU9yaWdpbikKICAgICAgICAgLCBj
aGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKLSAg
ICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAg
ICAsIG1fdmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKQogICAgICAgICAsIG1fcmVm
Q291bnQoMSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgICAgICwgbV9v
cEluZm8oaW1tLm1fdmFsdWUpCkBAIC0yMDYsNyArMjA2LDcgQEAgc3RydWN0IE5vZGUgewogICAg
ICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjb2RlT3JpZ2luRm9yRXhp
dFRhcmdldChjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZp
eGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQotICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVy
KEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJl
ZGljdGlvbihTcGVjTm9uZSkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCkBAIC0y
MjIsNyArMjIyLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9y
aWdpbikKICAgICAgICAgLCBjb2RlT3JpZ2luRm9yRXhpdFRhcmdldChjb2RlT3JpZ2luKQogICAg
ICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlLCBmaXJzdENoaWxkLCBudW1D
aGlsZHJlbikKLSAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQorICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKQogICAg
ICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAg
ICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQpAQCAtMTA1NywyMCArMTA1NywyMCBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNWaXJ0dWFsUmVnaXN0ZXIoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXI7CisgICAgICAgIHJldHVybiBtX3ZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCk7CiAgICAgfQog
ICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIoKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLSAgICAgICAgQVNTRVJUKG1fdmlydHVhbFJlZ2lzdGVy
ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQobV92aXJ0dWFsUmVn
aXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyOwogICAg
IH0KICAgICAKICAgICB2b2lkIHNldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLSAgICAg
ICAgQVNTRVJUKG1fdmlydHVhbFJlZ2lzdGVyID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOwor
ICAgICAgICBBU1NFUlQoIW1fdmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIG1f
dmlydHVhbFJlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyOwogICAgIH0KICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJCYW5rLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaAkocmV2aXNpb24gMTU2
MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaAkod29y
a2luZyBjb3B5KQpAQCAtODMsMTAgKzgzLDEwIEBAIHB1YmxpYzoKICAgICAvLyByZXR1cm5zIC0x
IChJbnZhbGlkR1BSUmVnIG9yIEludmFsaWRGUFJSZWcpLgogICAgIFJlZ0lEIHRyeUFsbG9jYXRl
KCkKICAgICB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBpZ25vcmVkOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgaWdub3JlZCA9IFZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAKICAgICAg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IE5VTV9SRUdTOyArK2kpIHsKLSAgICAgICAgICAg
IGlmICghbV9kYXRhW2ldLmxvY2tDb3VudCAmJiBtX2RhdGFbaV0ubmFtZSA9PSBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgaWYgKCFtX2RhdGFbaV0ubG9ja0NvdW50ICYmICFt
X2RhdGFbaV0ubmFtZS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRl
SW50ZXJuYWwoaSwgaWdub3JlZCk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xNDUsNyArMTQ1
LDcgQEAgcHVibGljOgogCiAgICAgICAgICsrbV9kYXRhW2luZGV4XS5sb2NrQ291bnQ7CiAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lID0gbmFtZUF0SW5kZXgoaW5kZXgpOwotICAgICAgICBp
ZiAobmFtZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICBpZiAobmFtZS5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICByZWxlYXNlQXRJbmRleChpbmRleCk7CiAgICAgICAgIAogICAg
ICAgICByZXR1cm4gbmFtZTsKQEAgLTE2Myw4ICsxNjMsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFT
U0VSVChpbmRleCA8IE5VTV9SRUdTKTsKICAgICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0ubG9j
a0NvdW50KTsKICAgICAgICAgLy8gJ2luZGV4JyBzaG91bGQgbm90IGN1cnJlbnRseSBiZSBuYW1l
ZCwgdGhlIG5ldyBuYW1lIG11c3QgYmUgdmFsaWQuCi0gICAgICAgIEFTU0VSVChtX2RhdGFbaW5k
ZXhdLm5hbWUgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIEFTU0VSVChuYW1l
ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQoIW1fZGF0YVtpbmRl
eF0ubmFtZS5pc1ZhbGlkKCkpOworICAgICAgICBBU1NFUlQobmFtZS5pc1ZhbGlkKCkpOwogICAg
ICAgICAvLyAnaW5kZXgnIHNob3VsZCBub3QgY3VycmVudGx5IGhhdmUgYSBzcGlsbE9yZGVyLgog
ICAgICAgICBBU1NFUlQobV9kYXRhW2luZGV4XS5zcGlsbE9yZGVyID09IFNwaWxsSGludEludmFs
aWQpOwogCkBAIC0xOTksNyArMTk5LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEdldCB0
aGUgbmFtZSAoVmlydHVhbFJlZ2lzdGVyKSBhc3NvY2lhdGVkIHdpdGggdGhlCi0gICAgLy8gZ2l2
ZW4gcmVnaXN0ZXIgKG9yIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgZm9yIG5vbmUpLgorICAgIC8v
IGdpdmVuIHJlZ2lzdGVyIChvciBkZWZhdWx0IFZpcnR1YWxSZWdpc3RlcigpIGZvciBub25lKS4K
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZShSZWdJRCByZWcpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbmFtZUF0SW5kZXgoQmFua0luZm86OnRvSW5kZXgocmVnKSk7CkBAIC0yMDcsNyAr
MjA3LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNJblVzZShSZWdJRCByZWcpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gaXNMb2NrZWQocmVnKSB8fCBuYW1lKHJlZykgIT0gSW52
YWxpZFZpcnR1YWxSZWdpc3RlcjsKKyAgICAgICAgcmV0dXJuIGlzTG9ja2VkKHJlZykgfHwgbmFt
ZShyZWcpLmlzVmFsaWQoKTsKICAgICB9CiAgICAgCiAjaWZuZGVmIE5ERUJVRwpAQCAtMjE1LDgg
KzIxNSw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIC8vIEZvciBlYWNoIHJlZ2lzdGVyLCBw
cmludCB0aGUgVmlydHVhbFJlZ2lzdGVyICduYW1lJy4KICAgICAgICAgZm9yICh1aW50MzJfdCBp
ID0wOyBpIDwgTlVNX1JFR1M7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fZGF0YVtpXS5uYW1l
ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlsl
MDJkXSIsIG1fZGF0YVtpXS5uYW1lKTsKKyAgICAgICAgICAgIGlmIChtX2RhdGFbaV0ubmFtZS5p
c1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlslMDJkXSIsIG1fZGF0YVtpXS5u
YW1lLm9mZnNldCgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBkYXRhTG9n
RigiWy0tXSIpOwogICAgICAgICB9CkBAIC0zMTAsMTEgKzMxMCwxMSBAQCBwcml2YXRlOgogICAg
ICAgICAvLyAnaW5kZXgnIG11c3QgYmUgYSB2YWxpZCByZWdpc3Rlci4KICAgICAgICAgQVNTRVJU
KGluZGV4IDwgTlVNX1JFR1MpOwogICAgICAgICAvLyAnaW5kZXgnIHNob3VsZCBjdXJyZW50bHkg
YmUgbmFtZWQuCi0gICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLm5hbWUgIT0gSW52YWxpZFZp
cnR1YWxSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLm5hbWUuaXNWYWxp
ZCgpKTsKICAgICAgICAgLy8gJ2luZGV4JyBzaG91bGQgY3VycmVudGx5IGhhdmUgYSB2YWxpZCBz
cGlsbCBvcmRlci4KICAgICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0uc3BpbGxPcmRlciAhPSBT
cGlsbEhpbnRJbnZhbGlkKTsKIAotICAgICAgICBtX2RhdGFbaW5kZXhdLm5hbWUgPSBJbnZhbGlk
VmlydHVhbFJlZ2lzdGVyOworICAgICAgICBtX2RhdGFbaW5kZXhdLm5hbWUgPSBWaXJ0dWFsUmVn
aXN0ZXIoKTsKICAgICAgICAgbV9kYXRhW2luZGV4XS5zcGlsbE9yZGVyID0gU3BpbGxIaW50SW52
YWxpZDsKICAgICB9CiAKQEAgLTMyNSw3ICszMjUsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NF
UlQoaSA8IE5VTV9SRUdTICYmICFtX2RhdGFbaV0ubG9ja0NvdW50KTsKIAogICAgICAgICAvLyBS
ZXR1cm4gdGhlIFZpcnR1YWxSZWdpc3RlciBvZiB0aGUgbmFtZWQgdmFsdWUgY3VycmVudGx5IHN0
b3JlZCBpbgotICAgICAgICAvLyB0aGUgcmVnaXN0ZXIgYmVpbmcgcmV0dXJuZWQgLSBvciBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyIGlmIG5vbmUuCisgICAgICAgIC8vIHRoZSByZWdpc3RlciBiZWlu
ZyByZXR1cm5lZCAtIG9yIGRlZmF1bHQgVmlydHVhbFJlZ2lzdGVyKCkgaWYgbm9uZS4KICAgICAg
ICAgc3BpbGxNZSA9IG1fZGF0YVtpXS5uYW1lOwogCiAgICAgICAgIC8vIENsZWFyIGFueSBuYW1l
L3NwaWxsT3JkZXIgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnaXN0ZXIsCkBAIC0z
NDMsNyArMzQzLDcgQEAgcHJpdmF0ZToKICAgICAvLyBjb3VudCwgbmFtZSBhbmQgc3BpbGxPcmRl
ciBoaW50LgogICAgIHN0cnVjdCBNYXBFbnRyeSB7CiAgICAgICAgIE1hcEVudHJ5KCkKLSAgICAg
ICAgICAgIDogbmFtZShJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgOiBuYW1l
KFZpcnR1YWxSZWdpc3RlcigpKQogICAgICAgICAgICAgLCBzcGlsbE9yZGVyKFNwaWxsSGludElu
dmFsaWQpCiAgICAgICAgICAgICAsIGxvY2tDb3VudCgwKQogICAgICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNp
b24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODMsNyArMTE4Myw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNoZWNrQ29uc2lzdGVuY3koKQogCiAgICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9
IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBpdGVyLm5hbWUoKTsKLSAgICAgICAg
aWYgKHZpcnR1YWxSZWdpc3RlciA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICBp
ZiAoIXZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAog
ICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxS
ZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwpAQCAtMTIwOSw3ICsxMjA5LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y2hlY2tDb25zaXN0ZW5jeSgpCiAKICAgICBmb3IgKGZwcl9pdGVyYXRvciBp
dGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGl0ZXIubmFtZSgpOwotICAg
ICAgICBpZiAodmlydHVhbFJlZ2lzdGVyID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAg
ICAgIGlmICghdmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmly
dHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNTYxMzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTE4NCw3ICsxODQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHNwaWxsTWU7CiAgICAgICAgIEdQUlJlZyBncHIgPSBtX2dwcnMuYWxsb2NhdGUoc3BpbGxN
ZSk7Ci0gICAgICAgIGlmIChzcGlsbE1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsKKyAg
ICAgICAgaWYgKHNwaWxsTWUuaXNWYWxpZCgpKSB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAg
ICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVh
bFJlZ2lzdGVyKHNwaWxsTWUpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5mby5yZWdp
c3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0RvdWJsZSk7CkBAIC0yMDEsNyArMjAxLDcgQEAg
cHVibGljOgogICAgICAgICBtX2ppdC5hZGRSZWdpc3RlckFsbG9jYXRpb25BdE9mZnNldChtX2pp
dC5kZWJ1Z09mZnNldCgpKTsKICNlbmRpZgogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxN
ZSA9IG1fZ3Bycy5hbGxvY2F0ZVNwZWNpZmljKHNwZWNpZmljKTsKLSAgICAgICAgaWYgKHNwaWxs
TWUgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICBpZiAoc3BpbGxNZS5pc1Zh
bGlkKCkpIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICAgICAgR2VuZXJhdGlvbklu
Zm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3BpbGxNZSk7CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZv
cm1hdEpTRG91YmxlKTsKQEAgLTIyMyw3ICsyMjMsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWU7CiAgICAgICAgIEZQUlJlZyBmcHIgPSBtX2ZwcnMu
YWxsb2NhdGUoc3BpbGxNZSk7Ci0gICAgICAgIGlmIChzcGlsbE1lICE9IEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpCisgICAgICAgIGlmIChzcGlsbE1lLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHNw
aWxsKHNwaWxsTWUpOwogICAgICAgICByZXR1cm4gZnByOwogICAgIH0KQEAgLTM2MCw3ICszNjAs
NyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChwbGFucy5pc0VtcHR5KCkpOwogICAgICAgICBm
b3IgKGdwcl9pdGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVu
ZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBpdGVyLnJlZ0lEKCk7Ci0g
ICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlciAmJiBn
cHIgIT0gZXhjbHVkZSAmJiBncHIgIT0gZXhjbHVkZTIpIHsKKyAgICAgICAgICAgIGlmIChpdGVy
Lm5hbWUoKS5pc1ZhbGlkKCkgJiYgZ3ByICE9IGV4Y2x1ZGUgJiYgZ3ByICE9IGV4Y2x1ZGUyKSB7
CiAgICAgICAgICAgICAgICAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBwbGFuID0gc2lsZW50U2F2
ZVBsYW5Gb3JHUFIoaXRlci5uYW1lKCksIGdwcik7CiAgICAgICAgICAgICAgICAgaWYgKGRvU3Bp
bGwpCiAgICAgICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsKHBsYW4pOwpAQCAtMzY4LDcgKzM2
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKGZw
cl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyAr
K2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJl
Z2lzdGVyICYmIGl0ZXIucmVnSUQoKSAhPSBmcHJFeGNsdWRlKSB7CisgICAgICAgICAgICBpZiAo
aXRlci5uYW1lKCkuaXNWYWxpZCgpICYmIGl0ZXIucmVnSUQoKSAhPSBmcHJFeGNsdWRlKSB7CiAg
ICAgICAgICAgICAgICAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBwbGFuID0gc2lsZW50U2F2ZVBs
YW5Gb3JGUFIoaXRlci5uYW1lKCksIGl0ZXIucmVnSUQoKSk7CiAgICAgICAgICAgICAgICAgaWYg
KGRvU3BpbGwpCiAgICAgICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsKHBsYW4pOwpAQCAtNTk0
LDEzICs1OTQsMTMgQEAgcHVibGljOgogICAgIHZvaWQgZmx1c2hSZWdpc3RlcnMoKQogICAgIHsK
ICAgICAgICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9
IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0g
SW52YWxpZFZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpLmlz
VmFsaWQoKSkgewogICAgICAgICAgICAgICAgIHNwaWxsKGl0ZXIubmFtZSgpKTsKICAgICAgICAg
ICAgICAgICBpdGVyLnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJz
LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlk
VmlydHVhbFJlZ2lzdGVyKSB7CisgICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkuaXNWYWxpZCgp
KSB7CiAgICAgICAgICAgICAgICAgc3BpbGwoaXRlci5uYW1lKCkpOwogICAgICAgICAgICAgICAg
IGl0ZXIucmVsZWFzZSgpOwogICAgICAgICAgICAgfQpAQCAtNjEzLDExICs2MTMsMTEgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNGbHVzaGVkKCkKICAgICB7CiAgICAgICAgIGZvciAoZ3ByX2l0ZXJh
dG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
CisgICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVy
ID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAg
ICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAg
ICAgICAgaWYgKGl0ZXIubmFtZSgpLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaAko
cmV2aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJn
dW1lbnRGb3JPcGVyYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogY2xhc3MgRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZCB7
CiBwdWJsaWM6CiAgICAgRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZCgpCi0gICAgICAgIDogbV9vcGVy
YW5kKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgIDogbV9vcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlcigpKQogICAgIHsKICAgICB9CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212469</attachid>
            <date>2013-09-24 08:25:43 -0700</date>
            <delta_ts>2013-09-24 16:41:38 -0700</delta_ts>
            <desc>Patch - Pretty close to done.  Runs js tests</desc>
            <filename>virt-reg-class-wip2.patch</filename>
            <type>text/plain</type>
            <size>102845</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE0LDExICs1MTQsMTEgQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIGlmICh1c2VzQXJndW1lbnRzKCkpIHsK
ICAgICAgICAgb3V0LnByaW50ZigKICAgICAgICAgICAgICI7IHVzZXMgYXJndW1lbnRzLCBpbiBy
JWQsIHIlZCIsCi0gICAgICAgICAgICBhcmd1bWVudHNSZWdpc3RlcigpLAotICAgICAgICAgICAg
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKCkpKTsKKyAgICAg
ICAgICAgIGFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCksCisgICAgICAgICAgICB1bm1vZGlm
aWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIoKSkub2Zmc2V0KCkpOwogICAg
IH0KICAgICBpZiAobmVlZHNGdWxsU2NvcGVDaGFpbigpICYmIGNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlKQotICAgICAgICBvdXQucHJpbnRmKCI7IGFjdGl2YXRpb24gaW4gciVkIiwgYWN0aXZh
dGlvblJlZ2lzdGVyKCkpOworICAgICAgICBvdXQucHJpbnRmKCI7IGFjdGl2YXRpb24gaW4gciVk
IiwgYWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpOwogICAgIG91dC5wcmludGYoIlxuIik7
CiAgICAgCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVn
aW4oKTsKQEAgLTE2MjIsNyArMTYyMiw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4
ZWN1dGFibGUqIG8KIAogICAgIHNldENvbnN0YW50UmVnaXN0ZXJzKHVubGlua2VkQ29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVycygpKTsKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPnVzZXNH
bG9iYWxPYmplY3QoKSkKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxpbmtlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUs
IG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxp
bmtlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKS5vZmZzZXQoKV0uc2V0KCptX3Zt
LCBvd25lckV4ZWN1dGFibGUsIG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKICAgICBtX2Z1bmN0aW9u
RGVjbHMuZ3Jvdyh1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkpOwog
ICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rp
b25EZWNscygpLCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5m
dW5jdGlvbkRlY2woaSk7CkBAIC0zNDIzLDMyICszNDIzLDMwIEBAIGJvb2wgQ29kZUJsb2NrOjp1
c2VzT3Bjb2RlKE9wY29kZUlEIG9wY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVN0cmluZyBD
b2RlQmxvY2s6Om5hbWVGb3JSZWdpc3RlcihpbnQgcmVnaXN0ZXJOdW1iZXIpCitTdHJpbmcgQ29k
ZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikK
IHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZSgpLT5tX2xvY2sp
OwogICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9IHN5bWJvbFRhYmxlKCktPmVu
ZChsb2NrZXIpOwogICAgIGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgcHRyID0gc3lt
Ym9sVGFibGUoKS0+YmVnaW4obG9ja2VyKTsgcHRyICE9IGVuZDsgKytwdHIpIHsKLSAgICAgICAg
aWYgKHB0ci0+dmFsdWUuZ2V0SW5kZXgoKSA9PSByZWdpc3Rlck51bWJlcikgeworICAgICAgICBp
ZiAocHRyLT52YWx1ZS5nZXRJbmRleCgpID09IHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSkgewog
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgd29uJ3Qgd29yayBmcm9tIHRoZSBjb21waWxhdGlv
biB0aHJlYWQuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE1MzAwCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHB0ci0+a2V5KTsKICAg
ICAgICAgfQogICAgIH0KLSAgICBpZiAobmVlZHNBY3RpdmF0aW9uKCkgJiYgcmVnaXN0ZXJOdW1i
ZXIgPT0gYWN0aXZhdGlvblJlZ2lzdGVyKCkpCisgICAgaWYgKG5lZWRzQWN0aXZhdGlvbigpICYm
IHZpcnR1YWxSZWdpc3RlciA9PSBhY3RpdmF0aW9uUmVnaXN0ZXIoKSkKICAgICAgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgiYWN0aXZhdGlvbiIpOwotICAgIGlmIChyZWdpc3Rlck51bWJlciA9PSB0
aGlzUmVnaXN0ZXIoKSkKKyAgICBpZiAodmlydHVhbFJlZ2lzdGVyID09IHRoaXNSZWdpc3Rlcigp
KQogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ0aGlzIik7CiAgICAgaWYgKHVzZXNBcmd1
bWVudHMoKSkgewotICAgICAgICBpZiAocmVnaXN0ZXJOdW1iZXIgPT0gYXJndW1lbnRzUmVnaXN0
ZXIoKSkKKyAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlciA9PSBhcmd1bWVudHNSZWdpc3Rlcigp
KQogICAgICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYXJndW1lbnRzIik7Ci0gICAgICAg
IGlmICh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIoKSkgPT0g
cmVnaXN0ZXJOdW1iZXIpCisgICAgICAgIGlmICh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIo
YXJndW1lbnRzUmVnaXN0ZXIoKSkgPT0gdmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgicmVhbCBhcmd1bWVudHMiKTsKICAgICB9Ci0gICAgaWYgKHJlZ2lz
dGVyTnVtYmVyIDwgMCkgewotICAgICAgICBpbnQgYXJndW1lbnRQb3NpdGlvbiA9IC1yZWdpc3Rl
ck51bWJlcjsKLSAgICAgICAgYXJndW1lbnRQb3NpdGlvbiAtPSBKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJTaXplICsgMTsKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJhcmd1bWVudHNb
JTNkXSIsIGFyZ3VtZW50UG9zaXRpb24gLSAxKS5pbXBsKCk7Ci0gICAgfQorICAgIGlmICh2aXJ0
dWFsUmVnaXN0ZXIuaXNBcmd1bWVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQo
ImFyZ3VtZW50c1slM2RdIiwgdmlydHVhbFJlZ2lzdGVyLnRvQXJndW1lbnQoKSkuaW1wbCgpOwor
CiAgICAgcmV0dXJuICIiOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIuaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKKyNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtODYsNyArODcsNyBAQCBj
bGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBSZXBh
dGNoQnVmZmVyOwogCi1pbmxpbmUgaW50IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihpbnQg
YXJndW1lbnRzUmVnaXN0ZXIpIHsgcmV0dXJuIGFyZ3VtZW50c1JlZ2lzdGVyICsgMTsgfQoraW5s
aW5lIFZpcnR1YWxSZWdpc3RlciB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyKSB7IHJldHVybiBhcmd1bWVudHNSZWdpc3RlciArIDE7
IH0KIAogc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdUaGlzT2JqZWN0TWFya2VyKCkg
eyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsgfQogCkBAIC0xNDgsNyAr
MTQ5LDcgQEAgcHVibGljOgogCiAgICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShp
bnQgaW5kZXgpCiAgICAgewotICAgICAgICBpZiAoaW5kZXggPT0gbV90aGlzUmVnaXN0ZXIgJiYg
IW1faXNTdHJpY3RNb2RlKQorICAgICAgICBpZiAoaW5kZXggPT0gbV90aGlzUmVnaXN0ZXIub2Zm
c2V0KCkgJiYgIW1faXNTdHJpY3RNb2RlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICAgICAgaWYgKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkKQEAgLTMxNCw1OCArMzE1
LDYxIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZNKFZNKiB2bSkgeyBtX3ZtID0gdm07IH0KICAg
ICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9CiAKLSAgICB2b2lkIHNldFRoaXNSZWdpc3Rlcihp
bnQgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9Ci0gICAg
aW50IHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9CisgICAg
dm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlcikgeyBtX3Ro
aXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQorICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzUmVn
aXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RoaXNSZWdpc3RlcjsgfQogCiAgICAgYm9vbCBuZWVk
c0Z1bGxTY29wZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm5lZWRzRnVs
bFNjb3BlQ2hhaW4oKTsgfQogICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7IHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+dXNlc0V2YWwoKTsgfQogCi0gICAgdm9pZCBzZXRBcmd1bWVudHNSZWdpc3Rl
cihpbnQgYXJndW1lbnRzUmVnaXN0ZXIpCisgICAgdm9pZCBzZXRBcmd1bWVudHNSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBBU1NFUlQo
YXJndW1lbnRzUmVnaXN0ZXIgIT0gKGludClJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAg
ICAgQVNTRVJUKGFyZ3VtZW50c1JlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIG1fYXJndW1l
bnRzUmVnaXN0ZXIgPSBhcmd1bWVudHNSZWdpc3RlcjsKICAgICAgICAgQVNTRVJUKHVzZXNBcmd1
bWVudHMoKSk7CiAgICAgfQotICAgIGludCBhcmd1bWVudHNSZWdpc3RlcigpIGNvbnN0CisgICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyKCkgY29uc3QKICAgICB7CiAgICAgICAg
IEFTU0VSVCh1c2VzQXJndW1lbnRzKCkpOwogICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNSZWdp
c3RlcjsKICAgICB9Ci0gICAgaW50IHVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyKCkKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXIoKQogICAgIHsKICAgICAg
ICAgaWYgKCF1c2VzQXJndW1lbnRzKCkpCi0gICAgICAgICAgICByZXR1cm4gSW52YWxpZFZpcnR1
YWxSZWdpc3RlcjsKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAg
ICAgcmV0dXJuIGFyZ3VtZW50c1JlZ2lzdGVyKCk7CiAgICAgfQotICAgIHZvaWQgc2V0QWN0aXZh
dGlvblJlZ2lzdGVyKGludCBhY3RpdmF0aW9uUmVnaXN0ZXIpCisgICAgdm9pZCBzZXRBY3RpdmF0
aW9uUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGFjdGl2YXRpb25SZWdpc3RlcikKICAgICB7CiAg
ICAgICAgIG1fYWN0aXZhdGlvblJlZ2lzdGVyID0gYWN0aXZhdGlvblJlZ2lzdGVyOwogICAgIH0K
LSAgICBpbnQgYWN0aXZhdGlvblJlZ2lzdGVyKCkgY29uc3QKKworICAgIFZpcnR1YWxSZWdpc3Rl
ciBhY3RpdmF0aW9uUmVnaXN0ZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG5lZWRz
RnVsbFNjb3BlQ2hhaW4oKSk7CiAgICAgICAgIHJldHVybiBtX2FjdGl2YXRpb25SZWdpc3RlcjsK
ICAgICB9Ci0gICAgaW50IHVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlcigpCisKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgdW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyKCkKICAgICB7CiAgICAgICAg
IGlmICghbmVlZHNGdWxsU2NvcGVDaGFpbigpKQotICAgICAgICAgICAgcmV0dXJuIEludmFsaWRW
aXJ0dWFsUmVnaXN0ZXI7CisgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7CiAg
ICAgICAgIHJldHVybiBhY3RpdmF0aW9uUmVnaXN0ZXIoKTsKICAgICB9Ci0gICAgYm9vbCB1c2Vz
QXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHNSZWdpc3RlciAhPSAoaW50KUlu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXI7IH0KKworICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fYXJndW1lbnRzUmVnaXN0ZXIuaXNWYWxpZCgpOyB9CiAKICAgICBib29sIG5l
ZWRzQWN0aXZhdGlvbigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9uZWVkc0FjdGl2
YXRpb247CiAgICAgfQogCi0gICAgYm9vbCBpc0NhcHR1cmVkKGludCBvcGVyYW5kLCBJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IDApIGNvbnN0CisgICAgYm9vbCBpc0NhcHR1cmVk
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IDApIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFu
ZCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkgJiYgdXNl
c0FyZ3VtZW50cygpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gb3BlcmFuZC50b0FyZ3VtZW50KCkgJiYgdXNlc0FyZ3VtZW50cygpOwogCiAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gaW5saW5lQ2Fs
bEZyYW1lLT5jYXB0dXJlZFZhcnMuZ2V0KG9wZXJhbmRUb0xvY2FsKG9wZXJhbmQpKTsKKyAgICAg
ICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5nZXQob3BlcmFuZC50
b0xvY2FsKCkpOwogCiAgICAgICAgIC8vIFRoZSBhY3RpdmF0aW9uIG9iamVjdCBpc24ndCBpbiB0
aGUgY2FwdHVyZWQgcmVnaW9uLCBidXQgaXQncyAiY2FwdHVyZWQiCiAgICAgICAgIC8vIGluIHRo
ZSBzZW5zZSB0aGF0IHN0b3JlcyB0byBpdHMgbG9jYXRpb24gY2FuIGJlIG9ic2VydmVkIGluZGly
ZWN0bHkuCkBAIC0zODQsOCArMzg4LDggQEAgcHVibGljOgogICAgICAgICBpZiAoIXN5bWJvbFRh
YmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgcmV0dXJuIG9wZXJh
bmQgPD0gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCkKLSAgICAgICAgICAgICYmIG9wZXJh
bmQgPiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7CisgICAgICAgIHJldHVybiBvcGVyYW5k
Lm9mZnNldCgpIDw9IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpCisgICAgICAgICAgICAm
JiBvcGVyYW5kLm9mZnNldCgpID4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOwogICAgIH0K
IAogICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUt
PmNvZGVUeXBlKCk7IH0KQEAgLTQwNyw3ICs0MTEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNs
ZWFyRXZhbENhY2hlKCk7CiAKLSAgICBTdHJpbmcgbmFtZUZvclJlZ2lzdGVyKGludCByZWdpc3Rl
ck51bWJlcik7CisgICAgU3RyaW5nIG5hbWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBzZXROdW1iZXJPZlN0
cnVjdHVyZVN0dWJJbmZvcyhzaXplX3Qgc2l6ZSkgeyBtX3N0cnVjdHVyZVN0dWJJbmZvcy5ncm93
KHNpemUpOyB9CkBAIC0xMDY3LDkgKzEwNzEsOSBAQCBwcml2YXRlOgogICAgIFZNKiBtX3ZtOwog
CiAgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiBtX2luc3RydWN0aW9uczsKLSAgICBp
bnQgbV90aGlzUmVnaXN0ZXI7Ci0gICAgaW50IG1fYXJndW1lbnRzUmVnaXN0ZXI7Ci0gICAgaW50
IG1fYWN0aXZhdGlvblJlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3Rl
cjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9hcmd1bWVudHNSZWdpc3RlcjsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV9hY3RpdmF0aW9uUmVnaXN0ZXI7CiAKICAgICBib29sIG1faXNTdHJpY3RNb2Rl
OwogICAgIGJvb2wgbV9uZWVkc0FjdGl2YXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gMTU2MTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJTcGVjaWFsUG9pbnRlci5oIgogI2luY2x1ZGUgIlN0
cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCisjaW5jbHVkZSAiVmlydHVh
bFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3RvclRyYWl0cy5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAxNTYxMzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsMjYgKzQ2LDI2IEBAIGNsYXNzIExhenlPcGVyYW5kVmFsdWVQcm9maWxl
S2V5IHsKIHB1YmxpYzoKICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgpCiAgICAgICAg
IDogbV9ieXRlY29kZU9mZnNldCgwKSAvLyAwID0gZW1wdHkgdmFsdWUKLSAgICAgICAgLCBtX29w
ZXJhbmQoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgLy8gbm90IGEgdmFsaWQgb3BlcmFuZCBpbmRl
eCBpbiBvdXIgY3VycmVudCBzY2hlbWUKKyAgICAgICAgLCBtX29wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyKCkpIC8vIG5vdCBhIHZhbGlkIG9wZXJhbmQgaW5kZXggaW4gb3VyIGN1cnJlbnQgc2NoZW1l
CiAgICAgewogICAgIH0KICAgICAKICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShXVEY6
Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCiAgICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgx
KSAvLyAxID0gZGVsZXRlZCB2YWx1ZQotICAgICAgICAsIG1fb3BlcmFuZChJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyKSAvLyBub3QgYSB2YWxpZCBvcGVyYW5kIGluZGV4IGluIG91ciBjdXJyZW50IHNj
aGVtZQorICAgICAgICAsIG1fb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoKSkgLy8gbm90IGEgdmFs
aWQgb3BlcmFuZCBpbmRleCBpbiBvdXIgY3VycmVudCBzY2hlbWUKICAgICB7CiAgICAgfQogICAg
IAotICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
LCBpbnQgb3BlcmFuZCkKKyAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgICAgIDogbV9ieXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCkKICAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChvcGVyYW5kICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
OworICAgICAgICBBU1NFUlQobV9vcGVyYW5kLmlzVmFsaWQoKSk7CiAgICAgfQogICAgIAogICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX29wZXJhbmQg
PT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKKyAgICAgICAgcmV0dXJuICFtX29wZXJhbmQuaXNW
YWxpZCgpOwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVLZXkmIG90aGVyKSBjb25zdApAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
V1RGOjppbnRIYXNoKG1fYnl0ZWNvZGVPZmZzZXQpICsgbV9vcGVyYW5kOworICAgICAgICByZXR1
cm4gV1RGOjppbnRIYXNoKG1fYnl0ZWNvZGVPZmZzZXQpICsgbV9vcGVyYW5kLm9mZnNldCgpOwog
ICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCgpIGNvbnN0CkBAIC04NCw3
ICs4NCw4IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCEhKnRoaXMpOwogICAgICAgICByZXR1
cm4gbV9ieXRlY29kZU9mZnNldDsKICAgICB9Ci0gICAgaW50IG9wZXJhbmQoKSBjb25zdAorCisg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KCEhKnRoaXMpOwogICAgICAgICByZXR1cm4gbV9vcGVyYW5kOwpAQCAtOTIsMTEgKzkzLDExIEBA
IHB1YmxpYzoKICAgICAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX29wZXJhbmQgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rl
ciAmJiBtX2J5dGVjb2RlT2Zmc2V0OworICAgICAgICByZXR1cm4gIW1fb3BlcmFuZC5pc1ZhbGlk
KCkgJiYgbV9ieXRlY29kZU9mZnNldDsKICAgICB9CiBwcml2YXRlOiAKICAgICB1bnNpZ25lZCBt
X2J5dGVjb2RlT2Zmc2V0OwotICAgIGludCBtX29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVy
IG1fb3BlcmFuZDsKIH07CiAKIHN0cnVjdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleUhhc2gg
ewpAQCAtMTI5LDcgKzEzMCw3IEBAIG5hbWVzcGFjZSBKU0Mgewogc3RydWN0IExhenlPcGVyYW5k
VmFsdWVQcm9maWxlIDogcHVibGljIE1pbmltYWxWYWx1ZVByb2ZpbGUgewogICAgIExhenlPcGVy
YW5kVmFsdWVQcm9maWxlKCkKICAgICAgICAgOiBNaW5pbWFsVmFsdWVQcm9maWxlKCkKLSAgICAg
ICAgLCBtX29wZXJhbmQoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgLCBtX29wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgewogICAgIH0KICAgICAKQEAgLTE0NCw3ICsxNDUs
NyBAQCBzdHJ1Y3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUgOiBwdWJsaWMgCiAgICAgICAgIHJl
dHVybiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleShtX2J5dGVjb2RlT2Zmc2V0LCBtX29wZXJh
bmQpOwogICAgIH0KICAgICAKLSAgICBpbnQgbV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX29wZXJhbmQ7CiAgICAgCiAgICAgdHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8TGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGUsIDg+IExpc3Q7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmNwcAkocmV2aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw3IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgTWV0aG9kT2ZHZXQKICAg
ICByZXN1bHQubV9raW5kID0gTGF6eU9wZXJhbmQ7CiAgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQu
Y29kZUJsb2NrID0gY29kZUJsb2NrOwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmJ5dGVjb2Rl
T2Zmc2V0ID0ga2V5LmJ5dGVjb2RlT2Zmc2V0KCk7Ci0gICAgcmVzdWx0LnUubGF6eU9wZXJhbmQu
b3BlcmFuZCA9IGtleS5vcGVyYW5kKCk7CisgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFu
ZCA9IGtleS5vcGVyYW5kKCkub2Zmc2V0KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDE1
NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNp
bmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorCiAjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0x
NDYsMTAgKzE0OCwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVy
YW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKICAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1th
cmd1bWVudF07CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG1fbG9jYWxz
W29wZXJhbmRUb0xvY2FsKG9wZXJhbmQpXTsKICAgICB9Ci0gICAgCisKKyAgICBUJiBvcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgeworICAgICAgICByZXR1cm4g
b3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOworICAgIH0KKwogICAgIGNvbnN0IFQm
IG9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+
KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7IH0KICAgICAK
ICAgICBib29sIGhhc09wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0CkBAIC0xNzAsNiArMTc3LDEx
IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9jYWwob3BlcmFuZFRvTG9jYWwob3BlcmFuZCksIHZh
bHVlKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBzZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0T3BlcmFu
ZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksIHZhbHVlKTsKKyAgICB9CisKICAgICBzaXplX3Qg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2Fs
cygpOyB9CiAgICAgY29uc3QgVCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDggKzE5NCw4
IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSoKICAgICAsIG1fbnVt
Q2FsbGVlUmVnaXN0ZXJzKDApCiAgICAgLCBtX251bVBhcmFtZXRlcnMoMCkKICAgICAsIG1fdm0o
dm0pCi0gICAgLCBtX2FyZ3VtZW50c1JlZ2lzdGVyKChpbnQpSW52YWxpZFZpcnR1YWxSZWdpc3Rl
cikKLSAgICAsIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoKGludClJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQorICAgICwgbV9hcmd1bWVudHNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkKKyAgICAs
IG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgLCBtX25lZWRz
RnVsbFNjb3BlQ2hhaW4oaW5mby5tX25lZWRzQWN0aXZhdGlvbikKICAgICAsIG1fdXNlc0V2YWwo
aW5mby5tX3VzZXNFdmFsKQogICAgICwgbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb24oZmFsc2Up
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAkocmV2aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OCwxMyArMjU4
LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFjdGl2YXRpb25SZWdpc3RlcihpbnQgYWN0aXZh
dGlvblJlZ2lzdGVyKSB7IG1fYWN0aXZhdGlvblJlZ2lzdGVyID0gYWN0aXZhdGlvblJlZ2lzdGVy
OyB9CiAKICAgICB2b2lkIHNldEFyZ3VtZW50c1JlZ2lzdGVyKGludCBhcmd1bWVudHNSZWdpc3Rl
cikgeyBtX2FyZ3VtZW50c1JlZ2lzdGVyID0gYXJndW1lbnRzUmVnaXN0ZXI7IH0KLSAgICBib29s
IHVzZXNBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyICE9IChp
bnQpSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsgfQotICAgIGludCBhcmd1bWVudHNSZWdpc3Rlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzUmVnaXN0ZXI7IH0KKyAgICBib29sIHVzZXNBcmd1
bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyLmlzVmFsaWQoKTsgfQor
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YXJndW1lbnRzUmVnaXN0ZXI7IH0KIAogCi0gICAgYm9vbCB1c2VzR2xvYmFsT2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdpc3RlciAhPSAoaW50KUludmFsaWRWaXJ0dWFs
UmVnaXN0ZXI7IH0KKyAgICBib29sIHVzZXNHbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBt
X2dsb2JhbE9iamVjdFJlZ2lzdGVyLmlzVmFsaWQoKTsgfQogICAgIHZvaWQgc2V0R2xvYmFsT2Jq
ZWN0UmVnaXN0ZXIoaW50IGdsb2JhbE9iamVjdFJlZ2lzdGVyKSB7IG1fZ2xvYmFsT2JqZWN0UmVn
aXN0ZXIgPSBnbG9iYWxPYmplY3RSZWdpc3RlcjsgfQotICAgIGludCBnbG9iYWxPYmplY3RSZWdp
c3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7IH0KKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2dsb2Jh
bE9iamVjdFJlZ2lzdGVyOyB9CiAKICAgICAvLyBQYXJhbWV0ZXIgaW5mb3JtYXRpb24KICAgICB2
b2lkIHNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKSB7IG1fbnVtUGFyYW1ldGVycyA9IG5l
d1ZhbHVlOyB9CkBAIC0zOTksOCArMzk5LDggQEAgcHVibGljOgogCiAgICAgQ29kZVR5cGUgY29k
ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVUeXBlOyB9CiAKLSAgICBpbnQgdGhpc1JlZ2lz
dGVyKCkgY29uc3QgeyByZXR1cm4gbV90aGlzUmVnaXN0ZXI7IH0KLSAgICBpbnQgYWN0aXZhdGlv
blJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmF0aW9uUmVnaXN0ZXI7IH0KKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90aGlzUmVnaXN0
ZXI7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYWN0aXZhdGlvblJlZ2lzdGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9hY3RpdmF0aW9uUmVnaXN0ZXI7IH0KIAogCiAgICAgdm9pZCBhZGRQcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9uKHVuc2lnbmVkIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24pCkBAIC00
NzksMTAgKzQ3OSwxMCBAQCBwcml2YXRlOgogICAgIGludCBtX251bVBhcmFtZXRlcnM7CiAgICAg
Vk0qIG1fdm07CiAKLSAgICBpbnQgbV90aGlzUmVnaXN0ZXI7Ci0gICAgaW50IG1fYXJndW1lbnRz
UmVnaXN0ZXI7Ci0gICAgaW50IG1fYWN0aXZhdGlvblJlZ2lzdGVyOwotICAgIGludCBtX2dsb2Jh
bE9iamVjdFJlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbV9hcmd1bWVudHNSZWdpc3RlcjsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9hY3RpdmF0aW9uUmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fZ2xvYmFsT2Jq
ZWN0UmVnaXN0ZXI7CiAKICAgICBib29sIG1fbmVlZHNGdWxsU2NvcGVDaGFpbiA6IDE7CiAgICAg
Ym9vbCBtX3VzZXNFdmFsIDogMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAkocmV2aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjA5
LDcgKzIwOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IERp
c3BsYWNlZEluSlNTdGFjazsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IHJlc3VsdC5tX3NvdXJjZS52aXJ0dWFsUmVnID0gdmlydHVhbFJlZzsKKyAgICAgICAgcmVzdWx0
Lm1fc291cmNlLnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVnLm9mZnNldCgpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAgLTI5Miw3ICsyOTIsNyBAQCBwdWJsaWM6CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CiAgICAgewogICAgICAgICBB
U1NFUlQobV90ZWNobmlxdWUgPT0gRGlzcGxhY2VkSW5KU1N0YWNrIHx8IG1fdGVjaG5pcXVlID09
IEludDMyRGlzcGxhY2VkSW5KU1N0YWNrIHx8IG1fdGVjaG5pcXVlID09IERvdWJsZURpc3BsYWNl
ZEluSlNTdGFjayB8fCBtX3RlY2huaXF1ZSA9PSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrIHx8IG1f
dGVjaG5pcXVlID09IEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2sgfHwgbV90ZWNobmlxdWUgPT0g
SW50NTJEaXNwbGFjZWRJbkpTU3RhY2sgfHwgbV90ZWNobmlxdWUgPT0gU3RyaWN0SW50NTJEaXNw
bGFjZWRJbkpTU3RhY2spOwotICAgICAgICByZXR1cm4gbV9zb3VyY2UudmlydHVhbFJlZzsKKyAg
ICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3NvdXJjZS52aXJ0dWFsUmVnKTsKICAgICB9
CiAgICAgCiAgICAgSlNWYWx1ZSBjb25zdGFudCgpIGNvbnN0CkBAIC0zNDksMjUgKzM0OSwyNSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICAgICAgY2FzZSBEaXNw
bGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIqJWQiLCB2aXJ0dWFsUmVn
aXN0ZXIoKSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIqJWQiLCB2aXJ0dWFsUmVnaXN0ZXIo
KS5vZmZzZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgSW50MzJEaXNw
bGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIqaW50MzIoJWQpIiwgdmly
dHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgb3V0LnByaW50ZigiKmludDMyKCVkKSIsIHZp
cnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Y2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIG91dC5wcmludGYoIipp
bnQ1MiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIq
aW50NTIoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAg
ICAgICAgb3V0LnByaW50ZigiKnN0cmljdEludDUyKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpKTsK
KyAgICAgICAgICAgIG91dC5wcmludGYoIipzdHJpY3RJbnQ1MiglZCkiLCB2aXJ0dWFsUmVnaXN0
ZXIoKS5vZmZzZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgRG91Ymxl
RGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgb3V0LnByaW50ZigiKmRvdWJsZSglZCki
LCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIqZG91YmxlKCVk
KSIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgb3V0LnByaW50
ZigiKmNlbGwoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgb3V0LnByaW50
ZigiKmNlbGwoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAg
ICAgICBvdXQucHJpbnRmKCIqYm9vbCglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAg
ICAgICBvdXQucHJpbnRmKCIqYm9vbCglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgQXJndW1lbnRzVGhhdFdlcmVOb3RD
cmVhdGVkOgogICAgICAgICAgICAgb3V0LnByaW50ZigiYXJndW1lbnRzIik7CkBAIC0zOTgsNyAr
Mzk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IHBheWxvYWRHUFI7CiAgICAgICAgIH0gcGFpcjsKICNlbmRpZgotICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZzsKKyAgICAgICAgaW50IHZpcnR1YWxSZWc7CiAgICAgICAgIEVuY29k
ZWRKU1ZhbHVlIGNvbnN0YW50OwogICAgIH0gbV9zb3VyY2U7CiB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24g
MTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw5IEBACiAjaWZuZGVmIFZpcnR1YWxSZWdp
c3Rlcl9oCiAjZGVmaW5lIFZpcnR1YWxSZWdpc3Rlcl9oCiAKKyNpbmNsdWRlICJDYWxsRnJhbWUu
aCIKKy8vI2luY2x1ZGUgIk9wZXJhbmRzLmgiCisKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
ICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIApAQCAtMzMsNyArMzYsNzkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIC8vIFR5cGUgZm9yIGEgdmlydHVhbCByZWdpc3RlciBudW1iZXIgKHNwaWxs
IGxvY2F0aW9uKS4KIC8vIFVzaW5nIGFuIGVudW0gdG8gbWFrZSB0aGlzIHR5cGUtY2hlY2tlZCBh
dCBjb21waWxlIHRpbWUsIHRvIGF2ZXJ0IHByb2dyYW1tZXIgZXJyb3JzLgotZW51bSBWaXJ0dWFs
UmVnaXN0ZXIgeyBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZiB9OworLy8gZW51
bSBWaXJ0dWFsUmVnaXN0ZXIgeyBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZiB9
OworCitjbGFzcyBWaXJ0dWFsUmVnaXN0ZXIgeworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBD
b2RlQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lOworICAgIGZyaWVu
ZCBjbGFzcyBERkdCeXRlQ29kZVBhcnNlcjsKKworICAgIFZpcnR1YWxSZWdpc3RlcigpCisgICAg
ICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgIHt9
CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIoaW50IHZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgOiBt
X3ZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpCisgICAge30KKworICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBzX2ludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0xvY2FsKCkgY29uc3QgeyByZXR1cm4gb3BlcmFu
ZElzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29u
c3QgeyByZXR1cm4gb3BlcmFuZElzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAg
Ym9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gc19m
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQorICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBB
U1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJuIG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVy
KTsgfQorICAgIGludCB0b0FyZ3VtZW50KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsg
cmV0dXJuIG9wZXJhbmRUb0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGludCB0
b0NvbnN0YW50SW5kZXgoKSBjb25zdCB7IEFTU0VSVChpc0NvbnN0YW50KCkpOyByZXR1cm4gbV92
aXJ0dWFsUmVnaXN0ZXIgLSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CisgICAgaW50
IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyOyB9CisKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgVmlydHVhbFJlZ2lzdGVyIG90aGVyKSBjb25zdCB7IHJldHVybiBt
X3ZpcnR1YWxSZWdpc3RlciA9PSBvdGhlci5tX3ZpcnR1YWxSZWdpc3RlcjsgfQorICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBWaXJ0dWFsUmVnaXN0ZXIgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1f
dmlydHVhbFJlZ2lzdGVyICE9IG90aGVyLm1fdmlydHVhbFJlZ2lzdGVyOyB9CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhdG9yKyhpbnQgb2Zmc2V0KSB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJG
cm9tT2Zmc2V0KG1fdmlydHVhbFJlZ2lzdGVyICsgb2Zmc2V0KTsgfQorCisjaWYgMQorICAgIHN0
YXRpYyBpbnQgbG9jYWxUb09wZXJhbmQoaW50IGxvY2FsKSB7IHJldHVybiAtbG9jYWw7IH0KKyAg
ICBzdGF0aWMgYm9vbCBvcGVyYW5kSXNMb2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFu
ZCA8PSAwOyB9CisgICAgc3RhdGljIGludCBvcGVyYW5kVG9Mb2NhbChpbnQgb3BlcmFuZCkgeyBy
ZXR1cm4gLW9wZXJhbmQ7IH0KKworICAgIHN0YXRpYyBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGlu
dCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kID4gMDsgfQorICAgIHN0YXRpYyBpbnQgb3BlcmFu
ZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRo
aXNBcmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFuZChp
bnQgYXJndW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRP
ZmZzZXQoKTsgfQorI2VuZGlmCisKKyAgICBzdGF0aWMgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlckZyb21Mb2NhbChpbnQgbG9jYWwpCisgICAgeworICAgICAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyKGxvY2FsVG9PcGVyYW5kKGxvY2FsKSk7CisgICAgfQorCisgICAgc3RhdGljIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGcm9tT2Zmc2V0KGludCBvZmZzZXQpCisgICAg
eworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG9mZnNldCk7CisgICAgfQorCisgICAg
c3RhdGljIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGcm9tQXJndW1lbnQoaW50IGFy
Z3VtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFRv
T3BlcmFuZChhcmd1bWVudCkpOworICAgIH0KKworICAgIHN0YXRpYyBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyRm9yVGhpcygpCisgICAgeworICAgICAgICByZXR1cm4gdmlydHVhbFJl
Z2lzdGVyRnJvbUFyZ3VtZW50KDApOworICAgIH0KKworICAgIHN0YXRpYyBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyRnJvbUNvbnN0YW50SW5kZXgoaW50IGluZGV4KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihpbmRleCArIHNfZmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfaW52
YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7CisgICAgc3RhdGljIGNvbnN0IGludCBz
X2ZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gMHg0MDAwMDAwMDsKKworICAgIG9wZXJhdG9y
IGludCgpIHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyOyB9CisKKyAgICBpbnQgbV92aXJ0dWFs
UmVnaXN0ZXI7Cit9OworCiBDT01QSUxFX0FTU0VSVChzaXplb2YoVmlydHVhbFJlZ2lzdGVyKSA9
PSBzaXplb2YoaW50KSwgVmlydHVhbFJlZ2lzdGVyX2lzXzMyYml0KTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkBAIC00Miw3ICsxMTcsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogaW5saW5lIHZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OlZpcnR1YWxSZWdpc3RlciB2YWx1
ZSkKIHsKLSAgICBvdXQucHJpbnQoc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpOworICAgIG91dC5w
cmludCh2YWx1ZS5vZmZzZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDE1NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQs
NyArMjM0LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAg
ICAgICAvLyAnYXJndW1lbnRzJyB2YWx1ZXMgYXJlIHN0b3JlZCBpbiBjb25zZWN1dGl2ZSByZWdp
c3RlcnMsIGFuZCBzdG9yaW5nCiAgICAgICAgIC8vIG9ubHkgdGhlIGluZGV4IG9mIHRoZSBhc3Np
Z25hYmxlIG9uZS4KICAgICAgICAgY29kZUJsb2NrLT5zZXRBcmd1bWVudHNSZWdpc3Rlcihhcmd1
bWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQodW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXItPmluZGV4KCkg
PT0gSlNDOjp1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoY29kZUJsb2NrLT5hcmd1bWVudHNS
ZWdpc3RlcigpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQodW5tb2RpZmllZEFyZ3VtZW50c1Jl
Z2lzdGVyLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXItPnZpcnR1YWxSZWdpc3RlcigpID09
IEpTQzo6dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGNvZGVCbG9jay0+YXJndW1lbnRzUmVn
aXN0ZXIoKSkpOwogCiAgICAgICAgIGVtaXRJbml0TGF6eVJlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lz
dGVyKTsKICAgICAgICAgZW1pdEluaXRMYXp5UmVnaXN0ZXIodW5tb2RpZmllZEFyZ3VtZW50c1Jl
Z2lzdGVyKTsKQEAgLTEyNjMsNyArMTI2Myw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0R2V0QXIKIHsKICAgICBlbWl0T3Bjb2RlKG9wX2dldF9hcmd1bWVudHNfbGVuZ3Ro
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKLSAgICBBU1NFUlQo
YmFzZS0+aW5kZXgoKSA9PSBtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CisgICAg
QVNTRVJUKGJhc2UtPnZpcnR1YWxSZWdpc3RlcigpID09IG1fY29kZUJsb2NrLT5hcmd1bWVudHNS
ZWdpc3RlcigpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpKTsKICAgICByZXR1cm4gZHN0OwpAQCAtMTMzOCw3ICsxMzM4LDcgQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRBcgogICAgIFVubGlua2VkQXJyYXlQcm9maWxlIGFy
cmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOwogICAgIFVubGlua2VkVmFsdWVQcm9maWxl
IHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbCk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7Ci0gICAgQVNTRVJUKGJhc2UtPmlu
ZGV4KCkgPT0gbV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpOworICAgIEFTU0VSVChi
YXNlLT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIo
KSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOwogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGFycmF5UHJvZmlsZSk7CkBAIC0xNTU4LDcgKzE1NTgsNyBAQCB2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpjcmVhdGVBcmd1bWVudHNJCiAgICAgICAgIHJldHVybjsKIAogICAgIGVtaXRP
cGNvZGUob3BfY3JlYXRlX2FyZ3VtZW50cyk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1f
Y29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQobV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOyAgLy8gICYmJiYg
IENvbnNpZGVyIHJlbW92aW5nIGlmIFZpcnR1YWxSZWdpc3RlciBpcyBhZGRlZCB0byBpbnN0cnVj
dGlvbiB1bmlvbgogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBY3RpdmF0aW9u
SWZOZWNlc3NhcnkoKQpAQCAtMTc0Myw3ICsxNzQzLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRSZXR1cgogCiAgICAgaWYgKG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRz
KCkgJiYgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAhPSAxICYmICFpc1N0cmljdE1vZGUo
KSkgewogICAgICAgICBlbWl0T3Bjb2RlKG9wX3RlYXJfb2ZmX2FyZ3VtZW50cyk7Ci0gICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7
CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVn
aXN0ZXIoKS5vZmZzZXQoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2FjdGl2
YXRpb25SZWdpc3RlciA/IG1fYWN0aXZhdGlvblJlZ2lzdGVyLT5pbmRleCgpIDogZW1pdExvYWQo
MCwgSlNWYWx1ZSgpKS0+aW5kZXgoKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaAkocmV2aXNpb24gMTU2MTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklELmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNpZm5kZWYgUmVnaXN0ZXJJRF9oCiAjZGVmaW5l
IFJlZ2lzdGVySURfaAogCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisKICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3JUcmFpdHMuaD4KIApAQCAt
NDgsNyArNTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBleHBsaWNpdCBSZWdpc3Rl
cklEKGludCBpbmRleCkKICAgICAgICAgICAgIDogbV9yZWZDb3VudCgwKQotICAgICAgICAgICAg
LCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgpKQogICAgICAgICAgICAgLCBtX2lzVGVtcG9yYXJ5KGZhbHNlKQogI2lm
bmRlZiBOREVCVUcKICAgICAgICAgICAgICwgbV9kaWRTZXRJbmRleCh0cnVlKQpAQCAtNTYsMTMg
KzU4LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAg
ICB2b2lkIHNldEluZGV4KGludCBpbmRleCkKKyAgICAgICAgdm9pZCBzZXRJbmRleChpbnQgaW5k
ZXgpICAvLyAmJiYmICAgRWxpbWluYXRlCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCgh
bV9yZWZDb3VudCk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAgICAgbV9kaWRTZXRJbmRleCA9
IHRydWU7CiAjZW5kaWYKLSAgICAgICAgICAgIG1faW5kZXggPSBpbmRleDsKKyAgICAgICAgICAg
IG1fdmlydHVhbFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKGluZGV4KTsKICAgICAgICAgfQog
CiAgICAgICAgIHZvaWQgc2V0VGVtcG9yYXJ5KCkKQEAgLTcwLDEwICs3MiwxNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIG1faXNUZW1wb3JhcnkgPSB0cnVlOwogICAgICAgICB9CiAK
LSAgICAgICAgaW50IGluZGV4KCkgY29uc3QKKyAgICAgICAgaW50IGluZGV4KCkgY29uc3QgIC8v
ICYmJiYgICBFbGltaW5hdGUKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKG1fZGlkU2V0
SW5kZXgpOwotICAgICAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgICAgICAgICByZXR1cm4g
bV92aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUKG1fdmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CisgICAgICAgICAgICByZXR1cm4g
bV92aXJ0dWFsUmVnaXN0ZXI7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGlzVGVtcG9yYXJ5
KCkKQEAgLTEwMCw3ICsxMDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogCiAg
ICAgICAgIGludCBtX3JlZkNvdW50OwotICAgICAgICBpbnQgbV9pbmRleDsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG1fdmlydHVhbFJlZ2lzdGVyOwogICAgICAgICBib29sIG1faXNUZW1wb3Jh
cnk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBib29sIG1fZGlkU2V0SW5kZXg7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDE1
NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAg
ICBQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgICAgICAgICAgOiBtX2lzVG9w
KGZhbHNlKQotICAgICAgICAgICAgLCBtX3ZhbHVlKHN0YXRpY19jYXN0PGludD4ob3BlcmFuZCkp
CisgICAgICAgICAgICAsIG1fdmFsdWUob3BlcmFuZC5vZmZzZXQoKSkgICAgLy8gICYmJiYgVmVy
aWZ5IHRoYXQgdGhpcyBpcyBjb3JyZWN0CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE1NjEzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICBjYXNlIEdldEFyZ3VtZW50OiB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBo
Lm1fZm9ybSA9PSBTU0EpOwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpOwogICAgICAgICBBU1NFUlQodmFsdWUuaXNIZWFwVG9w
KCkpOwogICAgICAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgICAgICB2YWx1
ZS5maWx0ZXIodHlwZUZpbHRlckZvcih1c2VLaW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgp
KSkpOwpAQCAtMTUyLDggKzE1Miw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6
IHsKLSAgICAgICAgaWYgKCFvcGVyYW5kSXNBcmd1bWVudChub2RlLT51bmxpbmtlZExvY2FsKCkp
Ci0gICAgICAgICAgICAmJiBtX2dyYXBoLm1fbGF6eVZhcnMuZ2V0KG9wZXJhbmRUb0xvY2FsKG5v
ZGUtPnVubGlua2VkTG9jYWwoKSkpKSB7CisgICAgICAgIGlmICghKG5vZGUtPnVubGlua2VkTG9j
YWwoKS5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICAmJiBtX2dyYXBoLm1fbGF6eVZhcnMuZ2V0
KG5vZGUtPnVubGlua2VkTG9jYWwoKS50b0xvY2FsKCkpKSB7CiAgICAgICAgICAgICAvLyBUaGlz
IGlzIGtpbmQgb2YgcGVzc2ltaXN0aWMgLSB3ZSBjb3VsZCBrbm93IGluIHNvbWUgY2FzZXMgdGhh
dCB0aGUKICAgICAgICAgICAgIC8vIERGRyBjb2RlIGF0IHRoZSBwb2ludCBvZiB0aGUgT1NSIGhh
ZCBhbHJlYWR5IGluaXRpYWxpemVkIHRoZSBsYXp5CiAgICAgICAgICAgICAvLyB2YXJpYWJsZS4g
QnV0IG1heWJlIHRoaXMgaXMgZmluZSwgc2luY2Ugd2UncmUgaW5zZXJ0aW5nIE9TUgpAQCAtMTcx
LDcgKzE3MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJs
ZXMoKS5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CisgICAgICAgIEFic3Ry
YWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQodmFyaWFibGVBY2Nl
c3NEYXRhLT5sb2NhbCgpLm9mZnNldCgpKTsKICAgICAgICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKICAg
ICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwpAQCAtMTgzLDcgKzE4Myw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDogewotICAgICAgICBBYnN0cmFjdFZhbHVlIHZh
bHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7
CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJh
bmQobm9kZS0+dW5saW5rZWRMb2NhbCgpLm9mZnNldCgpKTsKICAgICAgICAgaWYgKHZhbHVlLnZh
bHVlKCkpCiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAg
ICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBTZXRMb2NhbDogewotICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS52YXJp
YWJsZXMoKS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkub2Zmc2V0KCkpID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0xMTM1LDcgKzEx
MzUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2Fz
ZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CiAgICAgICAgIGlmIChpc0VtcHR5U3BlY3VsYXRp
b24oCiAgICAgICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAotICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmln
aW4pKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pLm9mZnNldCgpKS5tX3R5cGUpKQogICAgICAgICAgICAg
bV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHNvdXJjZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3Vt
ZW50c1JlZ2lzdGVyID0KKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3Vt
ZW50c1JlZ2lzdGVyID0KICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudW5jaGVja2Vk
QXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChzb3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzICYmIHNvdXJjZS0+b3AoKSAh
PSBQaGFudG9tQXJndW1lbnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1
cmUgdGhhdCB0aGUgc291cmNlIG9mIHRoZSBTZXRMb2NhbCBrbm93cyB0aGF0IGlmIGl0J3MKQEAg
LTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
aXNMaXZlLmNvbnRhaW5zKHZhcmlhYmxlQWNjZXNzRGF0YSkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIuaXNWYWxpZCgp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9j
YWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1Jl
Z2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KTsKQEAgLTIzNCw3ICsyMzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyLmlzVmFs
aWQoKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9j
YWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0
ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IHNvdXJjZS0+Y29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpCkBAIC02MTksNyArNjE5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS0+Y2hpbGRyZW47CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRMb2NhbFVu
bGlua2VkKAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPigKKyAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcigKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVD
b2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUo
aW5kZXgpKSk7CiAKQEAgLTcxMSw4ICs3MTEsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgaW50IGFyZ3Vt
ZW50c1JlZ2lzdGVyID0gbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LT5jb2RlT3JpZ2luKTsKLSAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyCisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRz
UmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNv
ZGVPcmlnaW4pOworICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyLmlzVmFsaWQoKQog
ICAgICAgICAgICAgICAgICYmIChub2RlLT5sb2NhbCgpID09IGFyZ3VtZW50c1JlZ2lzdGVyCiAg
ICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPmxvY2FsKCkgPT0gdW5tb2RpZmllZEFyZ3VtZW50
c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpIHsKICAgICAgICAgICAgICAgICBtX2NyZWF0
ZXNBcmd1bWVudHMuYWRkKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKQEAgLTc4
Myw4ICs3ODMsOCBAQCBwcml2YXRlOgogICAgICAgICBzd2l0Y2ggKHNvdXJjZS0+b3AoKSkgewog
ICAgICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSA9IHNvdXJjZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50
c1JlZ2lzdGVyRm9yKHNvdXJjZS0+Y29kZU9yaWdpbik7Ci0gICAgICAgICAgICBpZiAoYXJndW1l
bnRzUmVnaXN0ZXIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlciA9IG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRz
UmVnaXN0ZXJGb3Ioc291cmNlLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIGlmICghYXJndW1l
bnRzUmVnaXN0ZXIuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTU2MTM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTU1LDMxICsxNTUsMzQgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAgIAorICAg
IHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKiBzaXplb2Yo
UmVnaXN0ZXIpKTsKKyAgICB9CisKICAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewotICAgICAgICByZXR1cm4gQWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyICogc2l6ZW9mKFJl
Z2lzdGVyKSk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlci5vZmZz
ZXQoKSk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoaW50IG9wZXJhbmQp
CisKKyAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoaW50IG9mZnNldCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkp
OworICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zm
c2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMudGFnKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEFkZHJlc3MgdGFnRm9y
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewotICAgICAgICByZXR1cm4g
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyICogc2l6
ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMudGFnKSk7CisgICAgICAgIHJldHVybiB0YWdGb3IodmlydHVhbFJlZ2lzdGVyLm9mZnNl
dCgpKTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKGludCBvcGVyYW5kKQorCisg
ICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihpbnQgb2Zmc2V0KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAg
ICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCAq
IHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2Fk
Rm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewotICAgICAgICByZXR1
cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyICog
c2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCkpOwotICAgIH0KLSAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9y
KGludCBvcGVyYW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHBheWxvYWRGb3Ioc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBwYXlsb2FkRm9y
KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSk7CiAgICAgfQogCiAgICAgSnVtcCBicmFuY2hJZk5v
dE9iamVjdChHUFJSZWcgc3RydWN0dXJlUmVnKQpAQCAtMzgxLDcgKzM4NCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fYmFzZWxpbmVDb2RlQmxvY2s7CiAgICAgfQogICAgIAotICAgIGlu
dCBhcmd1bWVudHNSZWdpc3RlckZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXJGb3IoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkK
ICAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKTsKQEAg
LTM5MCw3ICszOTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUpLT5h
cmd1bWVudHNSZWdpc3RlcigpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICB9
CiAgICAgCi0gICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNv
ZGVPcmlnaW4pCisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0
IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICByZXR1cm4gYXJndW1lbnRz
UmVnaXN0ZXJGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZp
c2lvbiAxNTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDM3ICsxOTAsMzcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2NrKiwgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2li
bGVUYXJnZXRzKTsKICAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPFVubGlua2VkQmxvY2s+JiB1
bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAg
ICAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShpbnQgb3Bl
cmFuZCwgYm9vbCBpc0NhcHR1cmVkKQorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBib29sIGlzQ2FwdHVyZWQpCiAg
ICAgewotICAgICAgICBBU1NFUlQob3BlcmFuZCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
KTsKKyAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAg
ICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChWYXJpYWJsZUFjY2Vzc0Rh
dGEoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSwgaXNDYXB0dXJlZCkpOwor
ICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmFwcGVuZChWYXJpYWJsZUFjY2Vz
c0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCkpOwogICAgICAgICByZXR1cm4gJm1fZ3JhcGgubV92
YXJpYWJsZUFjY2Vzc0RhdGEubGFzdCgpOwogICAgIH0KICAgICAKICAgICAvLyBHZXQvU2V0IHRo
ZSBvcGVyYW5kcy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0cnVjdGlvbi4KLSAgICBOb2RlKiBn
ZXREaXJlY3QoaW50IG9wZXJhbmQpCisgICAgTm9kZSogZ2V0RGlyZWN0KFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgLy8gSXMgdGhpcyBhIGNvbnN0YW50PwotICAgICAg
ICBpZiAob3BlcmFuZCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgewotICAgICAgICAg
ICAgdW5zaWduZWQgY29uc3RhbnQgPSBvcGVyYW5kIC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXg7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgdW5z
aWduZWQgY29uc3RhbnQgPSBvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpOwogICAgICAgICAgICAg
QVNTRVJUKGNvbnN0YW50IDwgbV9jb25zdGFudHMuc2l6ZSgpKTsKICAgICAgICAgICAgIHJldHVy
biBnZXRKU0NvbnN0YW50KGNvbnN0YW50KTsKICAgICAgICAgfQogCi0gICAgICAgIEFTU0VSVChv
cGVyYW5kICE9IEpTU3RhY2s6OkNhbGxlZSk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kLm9mZnNl
dCgpICE9IEpTU3RhY2s6OkNhbGxlZSk7CiAgICAgICAgIAogICAgICAgICAvLyBJcyB0aGlzIGFu
IGFyZ3VtZW50PwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAg
ICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBnZXRBcmd1
bWVudChvcGVyYW5kKTsKIAogICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCiAgICAgICAgIHJl
dHVybiBnZXRMb2NhbChvcGVyYW5kKTsKICAgICB9CiAKLSAgICBOb2RlKiBnZXQoaW50IG9wZXJh
bmQpCisgICAgTm9kZSogZ2V0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAg
ICAgaWYgKG9wZXJhbmQgPT0gSlNTdGFjazo6Q2FsbGVlKSB7CisgICAgICAgIGlmIChvcGVyYW5k
Lm9mZnNldCgpID09IEpTU3RhY2s6OkNhbGxlZSkgewogICAgICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZSgpICYmIGlubGluZUNhbGxGcmFtZSgpLT5jYWxsZWUpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGNlbGxDb25zdGFudChpbmxpbmVDYWxsRnJhbWUoKS0+Y2FsbGVlLmdldCgpKTsKICAg
ICAgICAgICAgIApAQCAtMjI5LDEyICsyMjksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAg
ICAgIHJldHVybiBnZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJh
bmQpKTsKICAgICB9Ci0KKyAgICAKICAgICBlbnVtIFNldE1vZGUgeyBOb3JtYWxTZXQsIFNldE9u
RW50cnkgfTsKLSAgICB2b2lkIHNldERpcmVjdChpbnQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNl
dE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKyAgICB2b2lkIHNldERpcmVjdChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkK
ICAgICB7CiAgICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/Ci0gICAgICAgIGlmIChvcGVy
YW5kSXNBcmd1bWVudChvcGVyYW5kKSkgeworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpIHsKICAgICAgICAgICAgIHNldEFyZ3VtZW50KG9wZXJhbmQsIHZhbHVlLCBzZXRNb2RlKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjQzLDcgKzI0Myw3IEBAIHByaXZh
dGU6CiAgICAgICAgIHNldExvY2FsKG9wZXJhbmQsIHZhbHVlLCBzZXRNb2RlKTsKICAgICB9CiAK
LSAgICB2b2lkIHNldChpbnQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9
IE5vcm1hbFNldCkKKyAgICB2b2lkIHNldChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSog
dmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7CiAgICAgICAgIHNldERp
cmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCksIHZhbHVlLCBzZXRN
b2RlKTsKICAgICB9CkBAIC0yNjMsOSArMjYzLDkgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAv
LyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQg
aXMgYSBsb2NhbCB2YXJpYWJsZS4KLSAgICBOb2RlKiBnZXRMb2NhbChpbnQgb3BlcmFuZCkKKyAg
ICBOb2RlKiBnZXRMb2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZFRvTG9jYWwob3BlcmFuZCk7CisgICAgICAgIHVuc2ln
bmVkIGxvY2FsID0gb3BlcmFuZC50b0xvY2FsKCk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKICAgICAgICAgYm9vbCBp
c0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgaW5saW5lQ2FsbEZy
YW1lKCkpOwogICAgICAgICAKQEAgLTMwMSw5ICszMDEsOSBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gbm9kZTsKICAgICB9CiAKLSAgICB2b2lkIHNldExvY2FsKGludCBvcGVyYW5kLCBOb2Rl
KiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIHZvaWQgc2V0TG9jYWwo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBO
b3JtYWxTZXQpCiAgICAgewotICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmRUb0xvY2Fs
KG9wZXJhbmQpOworICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOwog
ICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5k
LCBpbmxpbmVDYWxsRnJhbWUoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoc2V0TW9kZSA9PSBO
b3JtYWxTZXQpIHsKQEAgLTMyMiw5ICszMjIsOSBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIC8v
IFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBp
cyBhbiBhcmd1bWVudC4KLSAgICBOb2RlKiBnZXRBcmd1bWVudCh1bnNpZ25lZCBvcGVyYW5kKQor
ICAgIE5vZGUqIGdldEFyZ3VtZW50KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAg
ICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKKyAg
ICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kLnRvQXJndW1lbnQoKTsKICAgICAgICAg
QVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogICAgICAgICAKICAgICAgICAgTm9k
ZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1l
bnQpOwpAQCAtMzUxLDkgKzM1MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKICAgICAgICAgcmV0
dXJuIG5vZGU7CiAgICAgfQotICAgIHZvaWQgc2V0QXJndW1lbnQoaW50IG9wZXJhbmQsIE5vZGUq
IHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgdm9pZCBzZXRBcmd1bWVu
dChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9
IE5vcm1hbFNldCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZFRv
QXJndW1lbnQob3BlcmFuZCk7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZC50
b0FyZ3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsK
ICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0NhcHR1
cmVkKG9wZXJhbmQpOwpAQCAtMzg0LDI4ICszODQsMjggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0
dXJuIHN0YWNrLT5tX2FyZ3VtZW50UG9zaXRpb25zW2FyZ3VtZW50XTsKICAgICB9CiAgICAgCi0g
ICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChpbnQgb3Bl
cmFuZCkKKyAgICBBcmd1bWVudFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2Fs
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgZm9yIChJbmxpbmVTdGFj
a0VudHJ5KiBzdGFjayA9IG1faW5saW5lU3RhY2tUb3A7IDsgc3RhY2sgPSBzdGFjay0+bV9jYWxs
ZXIpIHsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gc3Rh
Y2stPm1faW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUp
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAob3BlcmFuZCA8PSBzdGF0
aWNfY2FzdDxpbnQ+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplKSkKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLm9mZnNldCgpIDw9IHN0
YXRpY19jYXN0PGludD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNh
bGxGcmFtZUhlYWRlclNpemUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgaWYgKG9wZXJhbmQgPT0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpCisgICAgICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQo
KSA9PSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1l
bnRPZmZzZXQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChv
cGVyYW5kID4gc3RhdGljX2Nhc3Q8aW50PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSkpCisgICAgICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA+IHN0YXRpY19jYXN0
PGludD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemUgKyBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJn
dW1lbnQob3BlcmFuZCAtIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOworICAgICAgICAg
ICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZC5vZmZzZXQoKSAtIGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJuIHN0YWNrLT5t
X2FyZ3VtZW50UG9zaXRpb25zW2FyZ3VtZW50XTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAgICAgCi0gICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRp
b24oaW50IG9wZXJhbmQpCisgICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRp
b24oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZElz
QXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRp
b25Gb3JBcmd1bWVudChvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSk7CisgICAgICAgIGlmIChv
cGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3Np
dGlvbkZvckFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKICAgICAgICAgcmV0dXJuIGZp
bmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7CiAgICAgfQogCkBAIC00MjEsMjQg
KzQyMSwyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFsdWUpOwogICAgIH0KICAgICAKLSAg
ICB2b2lkIGZsdXNoKGludCBvcGVyYW5kKQorICAgIHZvaWQgZmx1c2goVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5y
ZW1hcE9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZsdXNoRGlyZWN0
KGludCBvcGVyYW5kKQorICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3Np
dGlvbihvcGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoaW50IG9w
ZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCisgICAgdm9pZCBmbHVz
aERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1l
bnRQb3NpdGlvbikKICAgICB7CiAgICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2Nr
LT5pc0NhcHR1cmVkKG9wZXJhbmQsIGlubGluZUNhbGxGcmFtZSgpKTsKICAgICAgICAgCi0gICAg
ICAgIEFTU0VSVChvcGVyYW5kIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAg
ICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIGlmICgh
b3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMu
c2V0KG9wZXJhbmRUb0xvY2FsKG9wZXJhbmQpKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2Nh
bCgpKQorICAgICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzLnNldChvcGVyYW5kLnRvTG9jYWwoKSk7
CiAgICAgICAgIAogICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKQEAgLTU0OCw2ICs1NDgsNyBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgcmV0dXJuIGdldChtX2lubGluZVN0YWNrVG9wLT5tX2Nv
ZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpOwogICAgIH0KKwogICAgIHZvaWQgc2V0VGhpcyhOb2Rl
KiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHNldChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9j
ay0+dGhpc1JlZ2lzdGVyKCksIHZhbHVlKTsKQEAgLTEwOTQsMTggKzEwOTUsMTggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3AgPSBtX2Nh
bGxlcjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW50IHJlbWFwT3BlcmFuZChpbnQg
b3BlcmFuZCkgY29uc3QKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlbWFwT3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFt
X2lubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZDsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKG9wZXJhbmQgPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXgpIHsKLSAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gbV9jb25zdGFudFJlbWFwW29w
ZXJhbmQgLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgICAgICBp
ZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVyKG1fY29uc3RhbnRSZW1hcFtvcGVyYW5kLnRvQ29u
c3RhbnRJbmRleCgpXSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC5pc0NvbnN0YW50
KCkpOwogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIEFTU0VSVChvcGVyYW5kICE9IEpTU3RhY2s6OkNhbGxlZSk7CisgICAgICAgICAg
ICBBU1NFUlQob3BlcmFuZC5vZmZzZXQoKSAhPSBKU1N0YWNrOjpDYWxsZWUpOwogCiAgICAgICAg
ICAgICByZXR1cm4gb3BlcmFuZCArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAg
ICAgICAgfQpAQCAtMTI5MSw3ICsxMjkyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW5saW5pbmcoTm9kZQogICAgIAogICAgIC8vIEZJWE1FOiBEb24ndCBmbHVzaCBjb25zdGFudHMh
CiAgICAgCi0gICAgaW50IGlubGluZUNhbGxGcmFtZVN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKHJlZ2lzdGVyT2Zmc2V0KSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNp
emU7CisgICAgaW50IGlubGluZUNhbGxGcmFtZVN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKHJlZ2lzdGVyT2Zmc2V0KS5vZmZzZXQoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemU7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFyZWEgdXNlZCBieSB0
aGUgY2FsbCBmcmFtZSBpcyByZXNlcnZlZC4KICAgICBmb3IgKGludCBhcmcgPSBvcGVyYW5kVG9M
b2NhbChpbmxpbmVDYWxsRnJhbWVTdGFydCkgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXpl
ICsgY29kZUJsb2NrLT5tX251bVZhcnM7IGFyZy0tID4gb3BlcmFuZFRvTG9jYWwoaW5saW5lQ2Fs
bEZyYW1lU3RhcnQpOykKQEAgLTEzMDksNyArMTMxMCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUlubGluaW5nKE5vZGUKIAogICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tF
bnRyeSgKICAgICAgICAgdGhpcywgY29kZUJsb2NrLCBjb2RlQmxvY2ssIG1fZ3JhcGgubGFzdEJs
b2NrKCksIGNhbGxMaW5rU3RhdHVzLmZ1bmN0aW9uKCksCi0gICAgICAgIChWaXJ0dWFsUmVnaXN0
ZXIpbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdE9wZXJhbmQpLAorICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0T3BlcmFuZCksCiAgICAgICAg
IChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCBraW5kKTsKICAgICAKICAgICAvLyBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwg
aW5saW5pbmcgcmVhbGx5IGhhcHBlbnMuCkBAIC0xODQ5LDcgKzE4NTAsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVu
dHMucmVzaXplKG1fbnVtQXJndW1lbnRzKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVu
dCA9IDA7IGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEo
Ci0gICAgICAgICAgICAgICAgYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpLCBtX2NvZGVCbG9j
ay0+aXNDYXB0dXJlZChhcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkpKTsKKyAgICAgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXI6OnZpcnR1YWxSZWdpc3RlckZyb21Bcmd1bWVudChhcmd1bWVu
dCksIG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSkp
OwogICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxl
ZCgKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4
aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpOwogICAgICAgICAgICAgdmFyaWFibGUt
Pm1lcmdlQ2hlY2tBcnJheUhvaXN0aW5nRmFpbGVkKApAQCAtMjkxNiw3ICsyOTE3LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3Jl
dDoKICAgICAgICAgICAgIGZsdXNoQXJndW1lbnRzQW5kQ2FwdHVyZWRWYXJpYWJsZXMoKTsKICAg
ICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZh
bHVlLmlzVmFsaWQoKSk7CiAgICAgICAgICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tU
b3AtPm1fcmV0dXJuVmFsdWUsIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7
CiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9kaWRSZXR1cm4gPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmlz
RW1wdHkoKSkgewpAQCAtMjk2OSw3ICsyOTcwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOiB7CiAgICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lKCkpOwotICAgICAgICAg
ICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQgPT0gbV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpOworICAgICAgICAgICAgQVNT
RVJUKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQgPT0gbV9pbmxpbmVTdGFja1RvcC0+
bV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOwogICAgICAgICAgICAg
QVNTRVJUKCFtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+c2xv
d0FyZ3VtZW50cygpKTsKICAgICAgICAgICAgIC8vIEl0IHdvdWxkIGJlIGNvb2wgdG8gZnVubmVs
IHRoaXMgaW50byBoYW5kbGVDYWxsKCkgc28gdGhhdCBpdCBjYW4gaGFuZGxlCiAgICAgICAgICAg
ICAvLyBpbmxpbmluZy4gQnV0IGN1cnJlbnRseSB0aGF0IHdvbid0IGJlIHByb2ZpdGFibGUgYW55
d2F5LCBzaW5jZSBub25lIG9mIHRoZQpAQCAtMzM3MCw3ICszMzcxLDcgQEAgQnl0ZUNvZGVQYXJz
ZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgIGlmIChtX2NhbGxlcikgewogICAgICAg
ICAvLyBJbmxpbmUgY2FzZS4KICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayAhPSBieXRlQ29kZVBh
cnNlci0+bV9jb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lU3RhcnQg
IT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJh
bWVTdGFydC5pc1ZhbGlkKCkpOwogICAgICAgICBBU1NFUlQoY2FsbHNpdGVCbG9ja0hlYWQpOwog
ICAgICAgICAKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lIGlubGluZUNhbGxGcmFtZTsKQEAgLTMz
ODEsNyArMzM4Miw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUK
ICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+aW5saW5lQ2FsbEZyYW1l
cygpLnNpemUoKSwKICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIAogICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSk7Ci0gICAgICAgIGlubGluZUNhbGxGcmFtZS5zdGFja09mZnNldCA9IGlubGluZUNhbGxGcmFt
ZVN0YXJ0IC0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lLnN0YWNrT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lU3RhcnQub2Zmc2V0KCkgLSBKU1N0
YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgICAgICBpZiAoY2FsbGVlKSB7CiAgICAgICAg
ICAgICBpbml0aWFsaXplTGF6eVdyaXRlQmFycmllckZvcklubGluZUNhbGxGcmFtZUNhbGxlZSgK
ICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5tX3BsYW4ud3JpdGVCYXJy
aWVycywKQEAgLTM0NzgsOCArMzQ3OSw4IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0Vu
dHJ5OjpJbmxpbmUKICAgICAgICAgLy8gTWFjaGluZSBjb2RlIGJsb2NrIGNhc2UuCiAgICAgICAg
IEFTU0VSVChjb2RlQmxvY2sgPT0gYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrKTsKICAgICAg
ICAgQVNTRVJUKCFjYWxsZWUpOwotICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWVWUiA9PSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZVN0YXJ0
ID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVl
VlIuaXNWYWxpZCgpKTsKKyAgICAgICAgQVNTRVJUKCFpbmxpbmVDYWxsRnJhbWVTdGFydC5pc1Zh
bGlkKCkpOwogICAgICAgICBBU1NFUlQoIWNhbGxzaXRlQmxvY2tIZWFkKTsKIAogICAgICAgICBt
X2lubGluZUNhbGxGcmFtZSA9IDA7CkBAIC0zNjMyLDcgKzM2MzMsNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZSgpCiAjZW5kaWYKICAgICAKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGlu
ZVN0YWNrRW50cnkoCi0gICAgICAgIHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxvY2ss
IDAsIDAsIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIsIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIsCisg
ICAgICAgIHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxvY2ssIDAsIDAsIFZpcnR1YWxS
ZWdpc3RlcigpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwKICAgICAgICAgbV9jb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSwgQ29kZUZvckNhbGwpOwogICAgIAogICAgIHBhcnNlQ29kZUJsb2NrKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRp
bmdQaGFzZS5jcHAJKHJldmlzaW9uIDE1NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNywxMCAr
MjE3LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5vbmljYWxpemVHZXRMb2NhbChOb2RlKiBu
b2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQodmFy
aWFibGUtPmxvY2FsKCkpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8QXJn
dW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgb3BlcmFuZFRvQXJndW1lbnQodmFyaWFibGUt
PmxvY2FsKCkpKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkK
KyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9k
ZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPExvY2FsT3BlcmFuZD4obm9k
ZSwgdmFyaWFibGUsIG9wZXJhbmRUb0xvY2FsKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAg
ICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxl
LCB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNh
bm9uaWNhbGl6ZVNldExvY2FsKE5vZGUqIG5vZGUpCkBAIC0yODUsMTcgKzI4NSwxNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbChOb2RlKiBub2Rl
KQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQodmFyaWFi
bGUtPmxvY2FsKCkpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2Nh
bEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgb3BlcmFuZFRv
QXJndW1lbnQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2Nh
bCgpLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9t
TG9jYWxGb3I8bm9kZVR5cGUsIEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlh
YmxlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNh
bm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIExvY2FsT3BlcmFuZD4o
bm9kZSwgdmFyaWFibGUsIG9wZXJhbmRUb0xvY2FsKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAg
ICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBMb2Nh
bE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZVNldEFyZ3VtZW50KE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBpbnQgbG9jYWwgPSBub2RlLT5sb2NhbCgpOwotICAgICAgICBBU1NF
UlQob3BlcmFuZElzQXJndW1lbnQobG9jYWwpKTsKLSAgICAgICAgaW50IGFyZ3VtZW50ID0gb3Bl
cmFuZFRvQXJndW1lbnQobG9jYWwpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBu
b2RlLT5sb2NhbCgpOworICAgICAgICBBU1NFUlQobG9jYWwuaXNBcmd1bWVudCgpKTsKKyAgICAg
ICAgaW50IGFyZ3VtZW50ID0gbG9jYWwudG9Bcmd1bWVudCgpOwogICAgICAgICBtX2Jsb2NrLT52
YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIG5vZGUpOwogICAg
ICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1l
bnQsIG5vZGUpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2Fw
YWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE1NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5
MCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICB9CiAK
ICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlc0Fy
Z3VtZW50cygpICYmIHBjWzRdLnUub3BlcmFuZCA9PSBjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lz
dGVyKCkpCisgICAgICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSAmJiBwY1s0XS51
Lm9wZXJhbmQgPT0gY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpKQogICAg
ICAgICAgICAgcmV0dXJuIENhbklubGluZTsKICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzg1LDcgKzM4NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICByZXR1cm4gY2hhbmdl
ZDsKICAgICB9Ci0gICAgCisKKyNpZiAwIC8vICYmJiYgICBEZWFkIGNvZGUKICNpZiAhQVNTRVJU
X0RJU0FCTEVECiAgICAgYm9vbCBpc0NhcHR1cmVkQXRPckFmdGVyKEJhc2ljQmxvY2sqIGJsb2Nr
LCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIGludCBvcGVyYW5kKQogICAgIHsKQEAgLTQwMSw2ICs0
MDIsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogI2VuZGlmIC8v
ICFBU1NFUlRfRElTQUJMRUQKKyNlbmRpZgogICAgIAogICAgIHZvaWQgYWRkU3RydWN0dXJlVHJh
bnNpdGlvbkNoZWNrKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2Nr
LCBKU0NlbGwqIGNlbGwpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHJldmlz
aW9uIDE1NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVz
c0FuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIHNldEZvck5vZGUoTm9kZSog
bm9kZSwgaW50IG9wZXJhbmQsIEZsdXNoRm9ybWF0IG5vZGVGb3JtYXQsIEZsdXNoRm9ybWF0IG5l
d0Zvcm1hdCkKKyAgICB2b2lkIHNldEZvck5vZGUoTm9kZSogbm9kZSwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIEZsdXNoRm9ybWF0IG5vZGVGb3JtYXQsIEZsdXNoRm9ybWF0IG5ld0Zvcm1hdCkK
ICAgICB7CiAgICAgICAgIEZsdXNoRm9ybWF0JiBjdXJyZW50Rm9ybWF0ID0gbV9saXZlLm9wZXJh
bmQob3BlcmFuZCk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHJldmlzaW9uIDE1NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksMTEgKzIzOSwxMSBAQCB2b2lkIEdy
YXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJsb2MiLCBvcGVyYW5kVG9Mb2NhbChvcGVyYW5kKSwgIigiLCBWYXJpYWJsZUFjY2Vz
c0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAgIH0KICAgICBp
ZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gbm9k
ZS0+dW5saW5rZWRMb2NhbCgpOwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFu
ZCkpCi0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJhcmciLCBvcGVyYW5kVG9Bcmd1bWVu
dChvcGVyYW5kKSk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+dW5s
aW5rZWRMb2NhbCgpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJhcmciLCBvcGVyYW5kLnRvQXJndW1lbnQoKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIsIG9wZXJhbmRUb0xv
Y2FsKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIsIG9wZXJh
bmQudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50QnVmZmVyKCkp
IHsKICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDI4LDcgKzQyOCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGhhc0V4aXRTaXRlKG5vZGUtPmNvZGVPcmlnaW4sIGV4aXRLaW5kKTsK
ICAgICB9CiAgICAgCi0gICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmln
aW4mIGNvZGVPcmlnaW4pCisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyRm9y
KGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBpZiAoIWNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5h
cmd1bWVudHNSZWdpc3RlcigpOwpAQCAtNDM4LDcgKzQzOCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICB9CiAgICAg
Ci0gICAgaW50IHVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmlnaW4m
IGNvZGVPcmlnaW4pCisgICAgVmlydHVhbFJlZ2lzdGVyIHVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lz
dGVyRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBpZiAo
IWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJs
b2NrLT51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlcigpOwpAQCAtNDQ2LDEzICs0NDYsMTMgQEAg
cHVibGljOgogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9ySW5saW5lQ2FsbEZyYW1lKAogICAgICAgICAgICAgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUpOwogICAgICAgICBpZiAoIWNvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKQotICAgICAgICAg
ICAgcmV0dXJuIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgICAgICAgICByZXR1cm4gVmly
dHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5hcmd1
bWVudHNSZWdpc3RlcigpICsKICAgICAgICAgICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldDsKICAgICB9CiAgICAgCi0gICAgaW50IHVuY2hlY2tlZEFjdGl2YXRpb25S
ZWdpc3RlckZvcihjb25zdCBDb2RlT3JpZ2luJikKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdW5jaGVj
a2VkQWN0aXZhdGlvblJlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmlnaW4mKQogICAgIHsKICAgICAg
ICAgLy8gVGhpcyB3aWxsIGlnbm9yZSBDb2RlT3JpZ2luIGJlY2F1c2Ugd2UgZG9uJ3QgaW5saW5l
IGNvZGUgdGhhdCB1c2VzIGFjdGl2YXRpb25zLgogICAgICAgICAvLyBIZW5jZSBmb3IgaW5saW5l
ZCBjYWxsIGZyYW1lcyBpdCB3aWxsIHJldHVybiB0aGUgb3V0ZXJtb3N0IGNvZGUgYmxvY2sncwpA
QCAtNDcxLDE0ICs0NzEsMTQgQEAgcHVibGljOgogICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldEFyZ3VtZW50KQotICAgICAgICAgICAgcmV0
dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KG9wZXJhbmRUb0FyZ3Vt
ZW50KG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52
YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAobm9kZS0+aGFzTG9jYWwoKnRoaXMpKSB7CiAgICAgICAgICAgICBp
ZiAobV9mb3JtID09IFNTQSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg
IGlmICghb3BlcmFuZElzQXJndW1lbnQobm9kZS0+bG9jYWwoKSkpCisgICAgICAgICAgICBpZiAo
IW5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS0+bG9jYWwo
KSk7CisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQo
KTsKICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSBtX2FyZ3Vt
ZW50c1thcmd1bWVudF0tPnZhcmlhYmxlQWNjZXNzRGF0YSgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZv
ckFyZ3VtZW50KGFyZ3VtZW50KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CShyZXZpc2lvbiAxNTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY29kZU9yaWdpbkZvckV4aXRU
YXJnZXQoY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihjaGlsZHJlbikKLSAgICAgICAg
LCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAsIG1f
dmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKQogICAgICAgICAsIG1fcmVmQ291bnQo
MSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgewpAQCAtMTc3LDcgKzE3
Nyw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAg
ICAgICAgICwgY29kZU9yaWdpbkZvckV4aXRUYXJnZXQoY29kZU9yaWdpbikKICAgICAgICAgLCBj
aGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKLSAg
ICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAg
ICAsIG1fdmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKQogICAgICAgICAsIG1fcmVm
Q291bnQoMSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgewpAQCAtMTkx
LDcgKzE5MSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmln
aW4pCiAgICAgICAgICwgY29kZU9yaWdpbkZvckV4aXRUYXJnZXQoY29kZU9yaWdpbikKICAgICAg
ICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxk
MykKLSAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQor
ICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKQogICAgICAgICAs
IG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgICAg
ICwgbV9vcEluZm8oaW1tLm1fdmFsdWUpCkBAIC0yMDYsNyArMjA2LDcgQEAgc3RydWN0IE5vZGUg
ewogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjb2RlT3JpZ2lu
Rm9yRXhpdFRhcmdldChjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxp
c3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQotICAgICAgICAsIG1fdmlydHVhbFJl
Z2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAs
IG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUp
CkBAIC0yMjIsNyArMjIyLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVPcmlnaW4o
Y29kZU9yaWdpbikKICAgICAgICAgLCBjb2RlT3JpZ2luRm9yRXhpdFRhcmdldChjb2RlT3JpZ2lu
KQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlLCBmaXJzdENoaWxk
LCBudW1DaGlsZHJlbikKLSAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyKQorICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcigp
KQogICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05v
bmUpCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQpAQCAtMzkwLDcgKzM5MCw3IEBA
IHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIG1fb3AgPSBHZXRMb2NhbFVubGlua2VkOwog
ICAgICAgICBtX2ZsYWdzICY9IH4oTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIg
fCBOb2RlQ2xvYmJlcnNXb3JsZCk7Ci0gICAgICAgIG1fb3BJbmZvID0gbG9jYWw7CisgICAgICAg
IG1fb3BJbmZvID0gbG9jYWwub2Zmc2V0KCk7CiAgICAgICAgIGNoaWxkcmVuLnJlc2V0KCk7CiAg
ICAgfQogICAgIApAQCAtMTA1NywyMCArMTA1NywyMCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAg
ICAgYm9vbCBoYXNWaXJ0dWFsUmVnaXN0ZXIoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmly
dHVhbFJlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgICAgIHJldHVybiBt
X3ZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCk7CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1Jlc3VsdCgp
KTsKLSAgICAgICAgQVNTRVJUKG1fdmlydHVhbFJlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIpOworICAgICAgICBBU1NFUlQobV92aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAg
ICAgICAgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyOwogICAgIH0KICAgICAKICAgICB2b2lkIHNl
dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLSAgICAgICAgQVNTRVJUKG1fdmlydHVhbFJl
Z2lzdGVyID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQoIW1fdmly
dHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIG1fdmlydHVhbFJlZ2lzdGVyID0gdmly
dHVhbFJlZ2lzdGVyOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBwcmV2
aW91c0hlYWQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgdmFyaWFibGUt
PnByZWRpY3Rpb24oKSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIGNvZGVPcmlnaW4sCi0gICAgICAg
ICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgT3BJ
bmZvKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICBuZXdSb290LT5h
cHBlbmROb2RlKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBTZXRMb2NhbCwg
Y29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgRWRnZShub2RlKSk7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMTU2
MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCB2b2lkIE9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQo
QmFzaWNCbG9jCiAgICAgCiAgICAgQVNTRVJUKGxhc3RNb3ZIaW50KTsKICAgICBBU1NFUlQobGFz
dE1vdkhpbnQtPmNoaWxkMSgpID09IGN1cnJlbnROb2RlKTsKLSAgICBtX2xhc3RTZXRPcGVyYW5k
ID0gbGFzdE1vdkhpbnQtPmxvY2FsKCk7CisgICAgbV9sYXN0U2V0T3BlcmFuZCA9IGxhc3RNb3ZI
aW50LT5sb2NhbCgpLm9mZnNldCgpOwogICAgIG1fdmFsdWVSZWNvdmVyeU92ZXJyaWRlID0gYWRv
cHRSZWYoCiAgICAgICAgIG5ldyBWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUobGFzdE1vdkhpbnQtPmxv
Y2FsKCksIHZhbHVlUmVjb3ZlcnkpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5oCShyZXZpc2lvbiAxNTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHN0cnVj
dCBPU1JFeGl0IDogcHVibGljIE9TUkV4aXRCYXNlIHsKICAgICB2b2lkIGNvbnZlcnRUb0Zvcndh
cmQoQmFzaWNCbG9jayosIE5vZGUqLCB1bnNpZ25lZCBub2RlSW5kZXgsIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmKTsKIAogICAgIHVuc2lnbmVkIG1fc3RyZWFtSW5kZXg7Ci0gICAgaW50IG1fbGFzdFNl
dE9wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fbGFzdFNldE9wZXJhbmQ7CiAgICAgCiAg
ICAgUmVmUHRyPFZhbHVlUmVjb3ZlcnlPdmVycmlkZT4gbV92YWx1ZVJlY292ZXJ5T3ZlcnJpZGU7
CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXIzMl82NC5jcHAJKHJldmlzaW9uIDE1NjEzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MDYsOSArNzA2LDkgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
IAogICAgIAogICAgIC8vIDE1KSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUg
b3BlcmF0aW9uIGludG8gcmVnVDAuCiAgICAgCi0gICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFu
ZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSB7Ci0gICAgICAgIG1faml0Lmxv
YWQzMihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1f
bGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7Ci0gICAgICAg
IG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4
aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7Cisg
ICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgbV9qaXQu
bG9hZDMyKEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihleGl0Lm1fbGFzdFNldE9wZXJhbmQp
LCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmxvYWQzMihB
c3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpj
YWNoZWRSZXN1bHRSZWdpc3RlcjIpOwogICAgIH0KICAgICAKICAgICAvLyAxNikgQW5kIGZpbmlz
aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyNjQuY3BwCShyZXZpc2lvbiAxNTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEs
OCBAQAogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiVmlydHVh
bFJlZ2lzdGVyLmgiCisKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CkBAIC0zOTQsNyArMzk2LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogCiAgICAgICAgICAgICBpZiAoIW1faml0LmJhc2VsaW5l
Q29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSktPnVzZXNBcmd1bWVudHMoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1f
aml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2ppdC5hcmd1bWVudHNSZWdpc3Rl
ckZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgaWYgKGRpZENyZWF0ZUFyZ3VtZW50
c09iamVjdC5hZGQoaW5saW5lQ2FsbEZyYW1lKS5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2Uga25vdyB0aGlzIGNhbGwgZnJhbWUgb3B0aW1pemVkIG91dCBhbiBhcmd1bWVudHMg
b2JqZWN0IHRoYXQKICAgICAgICAgICAgICAgICAvLyB0aGUgYmFzZWxpbmUgSklUIHdvdWxkIGhh
dmUgY3JlYXRlZC4gRG8gdGhhdCBjcmVhdGlvbiBub3cuCkBAIC00MjIsNyArNDI0LDcgQEAgdm9p
ZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIAogICAgIC8vIDEwKSBM
b2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAu
CiAgICAgCi0gICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpKQorICAgIGlmIChleGl0Lm1fbGFzdFNldE9wZXJhbmQuaXNWYWxpZCgp
KQogICAgICAgICBtX2ppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKGV4aXQu
bV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKICAgICAK
ICAgICAvLyAxMSkgQW5kIGZpbmlzaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVnaXN0ZXJCYW5rLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZWdpc3RlckJhbmsuaAkocmV2aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaAkod29ya2luZyBjb3B5KQpAQCAtODMsMTAgKzgz
LDEwIEBAIHB1YmxpYzoKICAgICAvLyByZXR1cm5zIC0xIChJbnZhbGlkR1BSUmVnIG9yIEludmFs
aWRGUFJSZWcpLgogICAgIFJlZ0lEIHRyeUFsbG9jYXRlKCkKICAgICB7Ci0gICAgICAgIFZpcnR1
YWxSZWdpc3RlciBpZ25vcmVkOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaWdub3JlZCA9IFZp
cnR1YWxSZWdpc3RlcigpOwogICAgICAgICAKICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IE5VTV9SRUdTOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghbV9kYXRhW2ldLmxvY2tDb3Vu
dCAmJiBtX2RhdGFbaV0ubmFtZSA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAg
ICAgaWYgKCFtX2RhdGFbaV0ubG9ja0NvdW50ICYmICFtX2RhdGFbaV0ubmFtZS5pc1ZhbGlkKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlSW50ZXJuYWwoaSwgaWdub3JlZCk7CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogCiAgICAgICAg
ICsrbV9kYXRhW2luZGV4XS5sb2NrQ291bnQ7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBuYW1l
ID0gbmFtZUF0SW5kZXgoaW5kZXgpOwotICAgICAgICBpZiAobmFtZSAhPSBJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyKQorICAgICAgICBpZiAobmFtZS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZWxl
YXNlQXRJbmRleChpbmRleCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbmFtZTsKQEAgLTE2
Myw4ICsxNjMsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChpbmRleCA8IE5VTV9SRUdTKTsK
ICAgICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0ubG9ja0NvdW50KTsKICAgICAgICAgLy8gJ2lu
ZGV4JyBzaG91bGQgbm90IGN1cnJlbnRseSBiZSBuYW1lZCwgdGhlIG5ldyBuYW1lIG11c3QgYmUg
dmFsaWQuCi0gICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLm5hbWUgPT0gSW52YWxpZFZpcnR1
YWxSZWdpc3Rlcik7Ci0gICAgICAgIEFTU0VSVChuYW1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpOworICAgICAgICBBU1NFUlQoIW1fZGF0YVtpbmRleF0ubmFtZS5pc1ZhbGlkKCkpOworICAg
ICAgICBBU1NFUlQobmFtZS5pc1ZhbGlkKCkpOwogICAgICAgICAvLyAnaW5kZXgnIHNob3VsZCBu
b3QgY3VycmVudGx5IGhhdmUgYSBzcGlsbE9yZGVyLgogICAgICAgICBBU1NFUlQobV9kYXRhW2lu
ZGV4XS5zcGlsbE9yZGVyID09IFNwaWxsSGludEludmFsaWQpOwogCkBAIC0xOTksNyArMTk5LDcg
QEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEdldCB0aGUgbmFtZSAoVmlydHVhbFJlZ2lzdGVy
KSBhc3NvY2lhdGVkIHdpdGggdGhlCi0gICAgLy8gZ2l2ZW4gcmVnaXN0ZXIgKG9yIEludmFsaWRW
aXJ0dWFsUmVnaXN0ZXIgZm9yIG5vbmUpLgorICAgIC8vIGdpdmVuIHJlZ2lzdGVyIChvciBkZWZh
dWx0IFZpcnR1YWxSZWdpc3RlcigpIGZvciBub25lKS4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFt
ZShSZWdJRCByZWcpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbmFtZUF0SW5kZXgoQmFu
a0luZm86OnRvSW5kZXgocmVnKSk7CkBAIC0yMDcsNyArMjA3LDcgQEAgcHVibGljOgogICAgIAog
ICAgIGJvb2wgaXNJblVzZShSZWdJRCByZWcpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
aXNMb2NrZWQocmVnKSB8fCBuYW1lKHJlZykgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKKyAg
ICAgICAgcmV0dXJuIGlzTG9ja2VkKHJlZykgfHwgbmFtZShyZWcpLmlzVmFsaWQoKTsKICAgICB9
CiAgICAgCiAjaWZuZGVmIE5ERUJVRwpAQCAtMjE1LDggKzIxNSw4IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIC8vIEZvciBlYWNoIHJlZ2lzdGVyLCBwcmludCB0aGUgVmlydHVhbFJlZ2lzdGVy
ICduYW1lJy4KICAgICAgICAgZm9yICh1aW50MzJfdCBpID0wOyBpIDwgTlVNX1JFR1M7ICsraSkg
ewotICAgICAgICAgICAgaWYgKG1fZGF0YVtpXS5uYW1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlslMDJkXSIsIG1fZGF0YVtpXS5uYW1lKTsK
KyAgICAgICAgICAgIGlmIChtX2RhdGFbaV0ubmFtZS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIlslMDJkXSIsIG1fZGF0YVtpXS5uYW1lLm9mZnNldCgpKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiWy0tXSIpOwogICAgICAgICB9CkBA
IC0zMTAsMTEgKzMxMCwxMSBAQCBwcml2YXRlOgogICAgICAgICAvLyAnaW5kZXgnIG11c3QgYmUg
YSB2YWxpZCByZWdpc3Rlci4KICAgICAgICAgQVNTRVJUKGluZGV4IDwgTlVNX1JFR1MpOwogICAg
ICAgICAvLyAnaW5kZXgnIHNob3VsZCBjdXJyZW50bHkgYmUgbmFtZWQuCi0gICAgICAgIEFTU0VS
VChtX2RhdGFbaW5kZXhdLm5hbWUgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAg
IEFTU0VSVChtX2RhdGFbaW5kZXhdLm5hbWUuaXNWYWxpZCgpKTsKICAgICAgICAgLy8gJ2luZGV4
JyBzaG91bGQgY3VycmVudGx5IGhhdmUgYSB2YWxpZCBzcGlsbCBvcmRlci4KICAgICAgICAgQVNT
RVJUKG1fZGF0YVtpbmRleF0uc3BpbGxPcmRlciAhPSBTcGlsbEhpbnRJbnZhbGlkKTsKIAotICAg
ICAgICBtX2RhdGFbaW5kZXhdLm5hbWUgPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyOworICAgICAg
ICBtX2RhdGFbaW5kZXhdLm5hbWUgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgbV9kYXRh
W2luZGV4XS5zcGlsbE9yZGVyID0gU3BpbGxIaW50SW52YWxpZDsKICAgICB9CiAKQEAgLTMyNSw3
ICszMjUsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQoaSA8IE5VTV9SRUdTICYmICFtX2Rh
dGFbaV0ubG9ja0NvdW50KTsKIAogICAgICAgICAvLyBSZXR1cm4gdGhlIFZpcnR1YWxSZWdpc3Rl
ciBvZiB0aGUgbmFtZWQgdmFsdWUgY3VycmVudGx5IHN0b3JlZCBpbgotICAgICAgICAvLyB0aGUg
cmVnaXN0ZXIgYmVpbmcgcmV0dXJuZWQgLSBvciBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyIGlmIG5v
bmUuCisgICAgICAgIC8vIHRoZSByZWdpc3RlciBiZWluZyByZXR1cm5lZCAtIG9yIGRlZmF1bHQg
VmlydHVhbFJlZ2lzdGVyKCkgaWYgbm9uZS4KICAgICAgICAgc3BpbGxNZSA9IG1fZGF0YVtpXS5u
YW1lOwogCiAgICAgICAgIC8vIENsZWFyIGFueSBuYW1lL3NwaWxsT3JkZXIgY3VycmVudGx5IGFz
c29jaWF0ZWQgd2l0aCB0aGUgcmVnaXN0ZXIsCkBAIC0zNDMsNyArMzQzLDcgQEAgcHJpdmF0ZToK
ICAgICAvLyBjb3VudCwgbmFtZSBhbmQgc3BpbGxPcmRlciBoaW50LgogICAgIHN0cnVjdCBNYXBF
bnRyeSB7CiAgICAgICAgIE1hcEVudHJ5KCkKLSAgICAgICAgICAgIDogbmFtZShJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgOiBuYW1lKFZpcnR1YWxSZWdpc3RlcigpKQogICAg
ICAgICAgICAgLCBzcGlsbE9yZGVyKFNwaWxsSGludEludmFsaWQpCiAgICAgICAgICAgICAsIGxv
Y2tDb3VudCgwKQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Njb3JlQm9hcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Njb3JlQm9hcmQuaAkocmV2aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTY29yZUJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gRmluZCB0aGUgdmlydHVh
bCByZWdpc3RlciBudW1iZXIgZm9yIHRoaXMgY2hpbGQsIGluY3JlbWVudCBpdHMgdXNlIGNvdW50
LgotICAgICAgICB1aW50MzJfdCBpbmRleCA9IG9wZXJhbmRUb0xvY2FsKGNoaWxkLT52aXJ0dWFs
UmVnaXN0ZXIoKSk7CisgICAgICAgIHVpbnQzMl90IGluZGV4ID0gY2hpbGQtPnZpcnR1YWxSZWdp
c3RlcigpLnRvTG9jYWwoKTsKICAgICAgICAgQVNTRVJUKG1fdXNlZFtpbmRleF0gIT0gbWF4KCkp
OwogICAgICAgICBpZiAoY2hpbGQtPnJlZkNvdW50KCkgPT0gKyttX3VzZWRbaW5kZXhdKSB7CiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAxNTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nzg0LDcgKzQ3ODQsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgIGNyZWF0ZWQsIHRo
aXMsIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aCwgcmVzdWx0R1BSLAotICAgICAgICAgICAg
ICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKSk7CisgICAg
ICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbiku
b2Zmc2V0KCkpKTsKICAgICAgICAgCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC00OTIzLDE0ICs0OTIzLDE0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAg
ICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkdldElubGluZWRBcmd1bWVudEJ5VmFsLCByZXN1
bHRHUFIsIAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihu
b2RlLT5jb2RlT3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVn
aXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikub2Zmc2V0KCksCiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLAogICAgICAgICAgICAgICAgICAgICBp
bmRleEdQUikpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uR2V0QXJndW1lbnRCeVZhbCwgcmVzdWx0R1BSLCAK
LSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29k
ZU9yaWdpbiksCisgICAgICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9y
KG5vZGUtPmNvZGVPcmlnaW4pLm9mZnNldCgpLAogICAgICAgICAgICAgICAgICAgICBpbmRleEdQ
UikpOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE1NjEzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw3ICs0OCw3IEBAIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChKSVRDb21w
aWwKICAgICAsIG1fZ2VuZXJhdGlvbkluZm8obV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVl
UmVnaXN0ZXJzKQogICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0
ZXJzKCkpCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKLSAgICAs
IG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAgICAs
IG1fbGFzdFNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgLCBtX3N0YXRlKG1faml0
LmdyYXBoKCkpCiAgICAgLCBtX2ludGVycHJldGVyKG1faml0LmdyYXBoKCksIG1fc3RhdGUpCiAg
ICAgLCBtX3N0cmVhbSgmaml0LmppdENvZGUoKS0+dmFyaWFibGVFdmVudFN0cmVhbSkKQEAgLTEx
ODMsNyArMTE4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQ29uc2lzdGVuY3koKQog
CiAgICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1f
Z3Bycy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBpdGVyLm5hbWUoKTsKLSAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlciA9PSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICBpZiAoIXZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlk
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwpA
QCAtMTIwOSw3ICsxMjA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tDb25zaXN0ZW5j
eSgpCiAKICAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IGl0ZXIubmFtZSgpOwotICAgICAgICBpZiAodmlydHVhbFJlZ2lzdGVyID09
IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgIGlmICghdmlydHVhbFJlZ2lzdGVyLmlz
VmFsaWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIEdlbmVyYXRpb25JbmZv
JiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rl
cik7CkBAIC0xNTM4LDcgKzE1MzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92
SGludChOb2RlCiAgICAgaWYgKGNoaWxkLT5vcCgpID09IFVJbnQzMlRvTnVtYmVyKQogICAgICAg
ICBub3RpY2VPU1JCaXJ0aChjaGlsZC0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAKLSAgICBtX3N0
cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGls
ZCksIG5vZGUtPmxvY2FsKCkpKTsKKyAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxl
RXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUtPmxvY2FsKCkub2Zmc2V0KCkp
KTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnRBbmRDaGVjayhOb2Rl
KiBub2RlKQpAQCAtMTY2Miw3ICsxNjYyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUN1cnJlbnRCbG9jawogICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZl
bnQ6OnNldExvY2FsKGxvY2FsVG9PcGVyYW5kKGkpLCB2YWx1ZVNvdXJjZS5kYXRhRm9ybWF0KCkp
KTsKICAgICB9CiAgICAgCi0gICAgbV9sYXN0U2V0T3BlcmFuZCA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCk7CisgICAgbV9sYXN0U2V0T3BlcmFuZCA9IFZpcnR1YWxSZWdpc3Rlcigp
OwogICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBDb2RlT3JpZ2luKCk7CiAgICAgbV9j
b2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUgPSBDb2RlT3JpZ2luKCk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAx
NTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJERkdWYWx1ZVNvdXJj
ZS5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3Zl
cnkuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCkBAIC0xODQsNyArMTg1LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lOwogICAgICAgICBHUFJSZWcgZ3ByID0gbV9ncHJz
LmFsbG9jYXRlKHNwaWxsTWUpOwotICAgICAgICBpZiAoc3BpbGxNZSAhPSBJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyKSB7CisgICAgICAgIGlmIChzcGlsbE1lLmlzVmFsaWQoKSkgewogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRp
b25JbmZvRnJvbVZpcnR1YWxSZWdpc3RlcihzcGlsbE1lKTsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNEb3VibGUpOwpAQCAt
MjAxLDcgKzIwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuYWRkUmVnaXN0ZXJBbGxvY2F0
aW9uQXRPZmZzZXQobV9qaXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHNwaWxsTWUgPSBtX2dwcnMuYWxsb2NhdGVTcGVjaWZpYyhzcGVjaWZpYyk7Ci0g
ICAgICAgIGlmIChzcGlsbE1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAg
aWYgKHNwaWxsTWUuaXNWYWxpZCgpKSB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAg
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lz
dGVyKHNwaWxsTWUpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5mby5yZWdpc3RlckZv
cm1hdCgpICE9IERhdGFGb3JtYXRKU0RvdWJsZSk7CkBAIC0yMjMsNyArMjI0LDcgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lOwogICAgICAgICBGUFJS
ZWcgZnByID0gbV9mcHJzLmFsbG9jYXRlKHNwaWxsTWUpOwotICAgICAgICBpZiAoc3BpbGxNZSAh
PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICBpZiAoc3BpbGxNZS5pc1ZhbGlkKCkp
CiAgICAgICAgICAgICBzcGlsbChzcGlsbE1lKTsKICAgICAgICAgcmV0dXJuIGZwcjsKICAgICB9
CkBAIC0zNjAsNyArMzYxLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQocGxhbnMuaXNFbXB0
eSgpKTsKICAgICAgICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBp
dGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0g
aXRlci5yZWdJRCgpOwotICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIgJiYgZ3ByICE9IGV4Y2x1ZGUgJiYgZ3ByICE9IGV4Y2x1ZGUyKSB7CisgICAg
ICAgICAgICBpZiAoaXRlci5uYW1lKCkuaXNWYWxpZCgpICYmIGdwciAhPSBleGNsdWRlICYmIGdw
ciAhPSBleGNsdWRlMikgewogICAgICAgICAgICAgICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4g
cGxhbiA9IHNpbGVudFNhdmVQbGFuRm9yR1BSKGl0ZXIubmFtZSgpLCBncHIpOwogICAgICAgICAg
ICAgICAgIGlmIChkb1NwaWxsKQogICAgICAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbChwbGFu
KTsKQEAgLTM2OCw3ICszNjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgZm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9
IG1fZnBycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0g
SW52YWxpZFZpcnR1YWxSZWdpc3RlciAmJiBpdGVyLnJlZ0lEKCkgIT0gZnByRXhjbHVkZSkgewor
ICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpLmlzVmFsaWQoKSAmJiBpdGVyLnJlZ0lEKCkgIT0g
ZnByRXhjbHVkZSkgewogICAgICAgICAgICAgICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gcGxh
biA9IHNpbGVudFNhdmVQbGFuRm9yRlBSKGl0ZXIubmFtZSgpLCBpdGVyLnJlZ0lEKCkpOwogICAg
ICAgICAgICAgICAgIGlmIChkb1NwaWxsKQogICAgICAgICAgICAgICAgICAgICBzaWxlbnRTcGls
bChwbGFuKTsKQEAgLTU5NCwxMyArNTk1LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGZsdXNoUmVn
aXN0ZXJzKCkKICAgICB7CiAgICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMu
YmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgaWYg
KGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgIGlm
IChpdGVyLm5hbWUoKS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgICAgICBzcGlsbChpdGVyLm5h
bWUoKSk7CiAgICAgICAgICAgICAgICAgaXRlci5yZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgZm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigp
OyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5u
YW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIu
bmFtZSgpLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgICAgIHNwaWxsKGl0ZXIubmFtZSgpKTsK
ICAgICAgICAgICAgICAgICBpdGVyLnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KQEAgLTYxMywx
MSArNjE0LDExIEBAIHB1YmxpYzoKICAgICBib29sIGlzRmx1c2hlZCgpCiAgICAgewogICAgICAg
ICBmb3IgKGdwcl9pdGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJz
LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlk
VmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpLmlzVmFsaWQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChm
cHJfaXRlcmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsg
KytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcikKKyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKS5pc1ZhbGlkKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMjE4MSwxMiArMjE4MiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gVHJhY2tpbmcgZm9yIHdoaWNo
IG5vZGVzIGFyZSBjdXJyZW50bHkgaG9sZGluZyB0aGUgdmFsdWVzIG9mIGFyZ3VtZW50cyBhbmQg
Ynl0ZWNvZGUKICAgICAvLyBvcGVyYW5kLWluZGV4ZWQgdmFyaWFibGVzLgogICAgIAotICAgIFZh
bHVlU291cmNlIHZhbHVlU291cmNlRm9yT3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICBWYWx1ZVNv
dXJjZSB2YWx1ZVNvdXJjZUZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAg
ewogICAgICAgICByZXR1cm4gdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldE5vZGVGb3JPcGVyYW5kKE5vZGUqIG5vZGUsIGlu
dCBvcGVyYW5kKQorICAgIHZvaWQgc2V0Tm9kZUZvck9wZXJhbmQoTm9kZSogbm9kZSwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZv
ck9wZXJhbmQob3BlcmFuZCkgPSBWYWx1ZVNvdXJjZShNaW5pZmllZElEKG5vZGUpKTsKICAgICB9
CkBAIC0yMTk1LDIxICsyMTk2LDIxIEBAIHB1YmxpYzoKICAgICAvLyBhbmQgcG90ZW50aWFsbHkg
cmVzaXplcyB0aGUgYXJyYXkuIFNvIGl0IHdvdWxkIG5vdCBiZSByaWdodCB0byBjYWxsIHRoaXMK
ICAgICAvLyB0d2ljZSBhbmQgdGhlbiBwZXJmb3JtIG9wZXJhbmRzIG9uIGJvdGggcmVmZXJlbmNl
cywgc2luY2UgdGhlIG9uZSBmcm9tCiAgICAgLy8gdGhlIGZpcnN0IGNhbGwgbWF5IG5vIGxvbmdl
ciBiZSB2YWxpZC4KLSAgICBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVy
YW5kKGludCBvcGVyYW5kKQorICAgIFZhbHVlU291cmNlJiB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZv
ck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3Bl
cmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKLSAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9w
ZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpIHsKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOwog
ICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50XTsKICAgICAgICAgfQogCi0g
ICAgICAgIGludCBsb2NhbCA9IG9wZXJhbmRUb0xvY2FsKG9wZXJhbmQpOworICAgICAgICBpbnQg
bG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKICAgICAgICAgaWYgKCh1bnNpZ25lZClsb2NhbCA+
PSBtX3ZhcmlhYmxlcy5zaXplKCkpCiAgICAgICAgICAgICBtX3ZhcmlhYmxlcy5yZXNpemUobG9j
YWwgKyAxKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tsb2NhbF07CiAg
ICAgfQogICAgIAotICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoaW50IG9wZXJhbmQsIFZhbHVlU291
cmNlIHZhbHVlU291cmNlKQorICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIFZhbHVlU291cmNlIHZhbHVlU291cmNlKQogICAgIHsKICAgICAgICAgdmFsdWVT
b3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpID0gdmFsdWVTb3VyY2U7CiAgICAgICAg
IG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwob3BlcmFuZCwg
dmFsdWVTb3VyY2UuZGF0YUZvcm1hdCgpKSk7CkBAIC0yMjE3LDcgKzIyMTgsNyBAQCBwdWJsaWM6
CiAKICAgICBHZW5lcmF0aW9uSW5mbyYgZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewotICAgICAgICByZXR1cm4g
bV9nZW5lcmF0aW9uSW5mb1tvcGVyYW5kVG9Mb2NhbCh2aXJ0dWFsUmVnaXN0ZXIpXTsKKyAgICAg
ICAgcmV0dXJuIG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyLnRvTG9jYWwoKV07CiAg
ICAgfQogICAgIAogICAgIEdlbmVyYXRpb25JbmZvJiBnZW5lcmF0aW9uSW5mbyhOb2RlKiBub2Rl
KQpAQCAtMjI2MCw3ICsyMjYxLDcgQEAgcHVibGljOgogCiAgICAgVmVjdG9yPFZhbHVlU291cmNl
LCAwPiBtX2FyZ3VtZW50czsKICAgICBWZWN0b3I8VmFsdWVTb3VyY2UsIDA+IG1fdmFyaWFibGVz
OwotICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBtX2xhc3RT
ZXRPcGVyYW5kOwogICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldDsKICAg
ICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE1NjEzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MzIsMjMgKzQzMiwyMyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVwb3J0VmFsaWRh
dGlvbkNvbnRleHQoVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBibG9jaykKICAg
ICB7CiAgICAgICAgIGlmICghYmxvY2spIHsKLSAgICAgICAgICAgIGRhdGFMb2coInIiLCBzdGF0
aWNfY2FzdDxpbnQ+KGxvY2FsKSwgIiBpbiBudWxsIEJsb2NrICIpOworICAgICAgICAgICAgZGF0
YUxvZygiciIsIGxvY2FsLCAiIGluIG51bGwgQmxvY2sgIik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAotICAgICAgICBkYXRhTG9nKCJyIiwgc3RhdGljX2Nhc3Q8aW50Pihsb2Nh
bCksICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKKyAgICAgICAgZGF0YUxvZygiciIsIGxvY2FsLCAi
IGluIEJsb2NrICIsICpibG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRh
dGlvbkNvbnRleHQoCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayog
c291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2spCiAgICAgewotICAgICAg
ICBkYXRhTG9nKCJyIiwgc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCksICIgaW4gQmxvY2sgIiwgKnNv
dXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsKKyAgICAgICAgZGF0YUxvZygi
ciIsIGxvY2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRp
b25CbG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ss
IE5vZGUqIHByZXZOb2RlKQogICAgIHsKLSAgICAgICAgZGF0YUxvZyhwcmV2Tm9kZSwgIiBmb3Ig
ciIsIHN0YXRpY19jYXN0PGludD4obG9jYWwpLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7
CisgICAgICAgIGRhdGFMb2cocHJldk5vZGUsICIgZm9yIHIiLCBsb2NhbCwgIiBpbiBCbG9jayAi
LCAqc291cmNlQmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25D
b250ZXh0KE5vZGUqIG5vZGUsIEJhc2ljQmxvY2sqIGJsb2NrKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oCShyZXZp
c2lvbiAxNTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVjb3Zl
cnlPdmVycmlkZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMyArMzksMTMgQEAgY2xhc3MgVmFs
dWVSZWNvdmVyeU92ZXJyaWRlIDogcHVibGljIFJlZgogcHVibGljOgogICAgIFZhbHVlUmVjb3Zl
cnlPdmVycmlkZSgpIHsgfQogICAgIAotICAgIFZhbHVlUmVjb3ZlcnlPdmVycmlkZShpbnQgb3Bl
cmFuZCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkpCisgICAgVmFsdWVSZWNvdmVyeU92
ZXJyaWRlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSkKICAgICAgICAgOiBvcGVyYW5kKG9wZXJhbmQpCiAgICAgICAgICwgcmVjb3ZlcnkocmVj
b3ZlcnkpCiAgICAgewogICAgIH0KICAgICAKLSAgICBpbnQgb3BlcmFuZDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZDsKICAgICBWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5OwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oCShyZXZpc2lvbiAxNTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw5ICs4MSw5IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fbG9jYWw7CiAgICAgfQogICAgIAotICAgIGludCBvcGVyYW5k
KCkKKyAgICBpbnQgb3BlcmFuZCgpICAvLyAmJiYmICAgUmVtb3ZlCiAgICAgewotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4obG9jYWwoKS5vZmZzZXQoKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgbWVyZ2VJ
c0NhcHR1cmVkKGJvb2wgaXNDYXB0dXJlZCkKQEAgLTI3OCw3ICsyNzgsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBBU1NFUlQoaXNSb290KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG9w
ZXJhbmRJc0FyZ3VtZW50KGxvY2FsKCkpIHx8IHNob3VsZE5ldmVyVW5ib3goKSkKKyAgICAgICAg
aWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVyVW5ib3goKSkKICAgICAgICAg
ICAgIHJldHVybiBERkc6Om1lcmdlRG91YmxlRm9ybWF0U3RhdGUobV9kb3VibGVGb3JtYXRTdGF0
ZSwgTm90VXNpbmdEb3VibGVGb3JtYXQpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fZG91Ymxl
Rm9ybWF0U3RhdGUgPT0gQ2FudFVzZURvdWJsZUZvcm1hdCkKQEAgLTMzMyw3ICszMzMsNyBAQCBw
dWJsaWM6CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAg
ICAgICAgICByZXR1cm4gRmx1c2hlZEludDMyOwogICAgICAgICAKLSAgICAgICAgaWYgKGVuYWJs
ZUludDUyKCkgJiYgIW9wZXJhbmRJc0FyZ3VtZW50KG1fbG9jYWwpICYmIGlzTWFjaGluZUludFNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICBpZiAoZW5hYmxlSW50NTIoKSAmJiAhbV9s
b2NhbC5pc0FyZ3VtZW50KCkgJiYgaXNNYWNoaW5lSW50U3BlY3VsYXRpb24ocHJlZGljdGlvbikp
CiAgICAgICAgICAgICByZXR1cm4gRmx1c2hlZEludDUyOwogICAgICAgICAKICAgICAgICAgaWYg
KGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgJKHJldmlzaW9uIDE1NjEzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDEsNyArMTQxLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoa2luZCA9PSBCaXJ0aFRv
U3BpbGwgfHwga2luZCA9PSBTcGlsbCk7CiAgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CiAg
ICAgICAgIGV2ZW50Lm1faWQgPSBpZDsKLSAgICAgICAgZXZlbnQudS52aXJ0dWFsUmVnID0gdmly
dHVhbFJlZ2lzdGVyOworICAgICAgICBldmVudC51LnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVnaXN0
ZXIub2Zmc2V0KCk7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IGtpbmQ7CiAgICAgICAgIGV2ZW50
Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAgcmV0dXJuIGV2ZW50OwpAQCAtMTU1LDEw
ICsxNTUsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXZlbnQ7CiAgICAgfQogICAgIAot
ICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IHNldExvY2FsKGludCBvcGVyYW5kLCBEYXRhRm9ybWF0
IGZvcm1hdCkKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBzZXRMb2NhbChWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyLCBEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7CiAgICAgICAgIFZh
cmlhYmxlRXZlbnQgZXZlbnQ7Ci0gICAgICAgIGV2ZW50LnUudmlydHVhbFJlZyA9IG9wZXJhbmQ7
CisgICAgICAgIGV2ZW50LnUudmlydHVhbFJlZyA9IHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsK
ICAgICAgICAgZXZlbnQubV9raW5kID0gU2V0TG9jYWxFdmVudDsKICAgICAgICAgZXZlbnQubV9k
YXRhRm9ybWF0ID0gZm9ybWF0OwogICAgICAgICByZXR1cm4gZXZlbnQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQu
aAkocmV2aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0
QXJndW1lbnRGb3JPcGVyYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogY2xhc3MgRXhpdEFyZ3VtZW50Rm9yT3BlcmFu
ZCB7CiBwdWJsaWM6CiAgICAgRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZCgpCi0gICAgICAgIDogbV9v
cGVyYW5kKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgIDogbV9vcGVyYW5kKFZpcnR1
YWxSZWdpc3RlcigpKQogICAgIHsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU2MTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5j
bHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1
ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorCiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CkBAIC02OSw3ICs3MSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgLCBtX2hlYXBzKHN0YXRlLmNvbnRleHQpCiAgICAgICAgICwgbV9vdXQoc3RhdGUu
Y29udGV4dCkKICAgICAgICAgLCBtX3ZhbHVlU291cmNlcyhPcGVyYW5kc0xpa2UsIHN0YXRlLmdy
YXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCi0gICAgICAgICwgbV9sYXN0U2V0T3BlcmFu
ZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgICAgICAsIG1fbGFzdFNldE9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgICwgbV9leGl0VGh1bmtHZW5lcmF0b3Io
c3RhdGUpCiAgICAgICAgICwgbV9zdGF0ZShzdGF0ZS5ncmFwaCkKICAgICAgICAgLCBtX2ludGVy
cHJldGVyKHN0YXRlLmdyYXBoLCBtX3N0YXRlKQpAQCAtMzc4MSw3ICszNzgzLDcgQEAgcHJpdmF0
ZToKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fcGhpczsKICAgICAKICAgICBPcGVyYW5k
czxWYWx1ZVNvdXJjZT4gbV92YWx1ZVNvdXJjZXM7Ci0gICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fbGFzdFNldE9wZXJhbmQ7CiAgICAgRXhpdFRodW5rR2Vu
ZXJhdG9yIG1fZXhpdFRodW5rR2VuZXJhdG9yOwogICAgIAogICAgIEluUGxhY2VBYnN0cmFjdFN0
YXRlIG1fc3RhdGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5j
cHAJKHJldmlzaW9uIDE1NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBPU1JFeGl0Ojpj
b252ZXJ0VG9Gb3J3YXJkKAogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBpbnQgb3ZlcnJpZGRlbk9wZXJhbmQgPSBsYXN0TW92SGludC0+bG9jYWwoKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3ZlcnJpZGRlbk9wZXJhbmQgPSBsYXN0TW92SGludC0+bG9jYWwoKTsK
ICAgICBtX2xhc3RTZXRPcGVyYW5kID0gb3ZlcnJpZGRlbk9wZXJhbmQ7CiAgICAgCiAgICAgLy8g
SXMgdGhlIHZhbHVlIGZvciB0aGlzIG9wZXJhbmQgYmVpbmcgcGFzc2VkIGFzIGFuIGFyZ3VtZW50
IHRvIHRoZSBleGl0LCBvciBpcwpAQCAtOTQsNyArOTQsNyBAQCB2b2lkIE9TUkV4aXQ6OmNvbnZl
cnRUb0ZvcndhcmQoCiAgICAgCiAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBhcmd1bWVudHMuc2l6
ZSgpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUudmFsdWUoKSk7Ci0gICAgbV92YWx1ZXNb
bV9sYXN0U2V0T3BlcmFuZF0gPSBFeGl0VmFsdWU6OmV4aXRBcmd1bWVudCgKKyAgICBtX3ZhbHVl
c1ttX2xhc3RTZXRPcGVyYW5kLm9mZnNldCgpXSA9IEV4aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KAog
ICAgICAgICBFeGl0QXJndW1lbnQodmFsdWUuZm9ybWF0KCksIGFyZ3VtZW50KSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAxNTYxMzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIk1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgor
I2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiAKQEAgLTE2MCw3ICsxNjEsNyBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBERkc6
Ok9TUkV4aXRCYXNlCiAgICAgLy8gT2Zmc2V0IHdpdGhpbiB0aGUgZXhpdCBzdHVicyBvZiB0aGUg
c3R1YiBmb3IgdGhpcyBleGl0LgogICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsK
ICAgICAKLSAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9s
YXN0U2V0T3BlcmFuZDsKICAgICAKICAgICBPcGVyYW5kczxFeGl0VmFsdWU+IG1fdmFsdWVzOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENv
bXBpbGVyLmNwcAkocmV2aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcg
QEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgaml0LnBvcChNYWNyb0Fzc2VtYmxlcjo6
ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgIGppdC5wb3AoR1BSSW5mbzo6bm9uQXJnR1BSMCk7
IC8vIGlnbm9yZSB0aGUgcmVzdWx0LgogICAgIAotICAgIGlmIChleGl0Lm1fbGFzdFNldE9wZXJh
bmQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkgeworICAgIGlmIChleGl0Lm1f
bGFzdFNldE9wZXJhbmQuaXNWYWxpZCgpKSB7CiAgICAgICAgIGppdC5sb2FkNjQoCiAgICAgICAg
ICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoZXhpdC5tX2xhc3RTZXRPcGVyYW5kKSwg
R1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE1NjEzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI2LDcgKzIyNiw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKIAogICAgICAgICAv
LyBSZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUgY29kZWZyYW1lIChvciBjb25zdGFudCBmcm9tIHRo
ZSBDb2RlQmxvY2spLgogICAgICAgICBSZWdpc3RlciYgcihpbnQpOwotICAgICAgICAvLyBSZWFk
IGEgcmVnaXN0ZXIgZm9yIGEgbm9uLWNvbnN0YW50IAorICAgICAgICAvLyBSZWFkIGEgcmVnaXN0
ZXIgZm9yIGEgbm9uLWNvbnN0YW50CiAgICAgICAgIFJlZ2lzdGVyJiB1bmNoZWNrZWRSKGludCk7
CiAKICAgICAgICAgLy8gQWNjZXNzIHRvIGFyZ3VtZW50cyBhcyBwYXNzZWQuIChBZnRlciBjYXB0
dXJlLCBhcmd1bWVudHMgbWF5IG1vdmUgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CShyZXZpc2lvbiAxNTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBACiAjaW5jbHVk
ZSAiU3RhY2tWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU3RyaWN0RXZhbEFjdGl2YXRpb24uaCIKICNp
bmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAj
aW5jbHVkZSAiVk1TdGFja0JvdW5kcy5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUg
PHN0ZGlvLmg+CkBAIC0zMTgsNyArMzE5LDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6ZHVtcFJlZ2lz
dGVycyhDYWxsRnJhbQogICAgIHdoaWxlIChpdCA+IGVuZCkgewogICAgICAgICBKU1ZhbHVlIHYg
PSBpdC0+anNWYWx1ZSgpOwogICAgICAgICBpbnQgcmVnaXN0ZXJOdW1iZXIgPSBpdCAtIGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKCk7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gY29kZUJsb2NrLT5uYW1l
Rm9yUmVnaXN0ZXIocmVnaXN0ZXJOdW1iZXIpOworICAgICAgICBTdHJpbmcgbmFtZSA9IGNvZGVC
bG9jay0+bmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck51bWJlcikpOwog
ICAgICAgICBkYXRhTG9nRigiW3IlIDNkICUxNHNdICAgICAgfCAlMTBwIHwgJS0xNnMgMHglbGxk
IFxuIiwgcmVnaXN0ZXJOdW1iZXIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGl0LCB0b0NTdHJpbmco
dikuZGF0YSgpLCAobG9uZyBsb25nKUpTVmFsdWU6OmVuY29kZSh2KSk7CiAgICAgICAgIGl0Kys7
CiAgICAgfQpAQCAtMzUyLDcgKzM1Myw3IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmR1bXBSZWdpc3Rl
cnMoQ2FsbEZyYW0KICAgICAgICAgZG8gewogICAgICAgICAgICAgSlNWYWx1ZSB2ID0gaXQtPmpz
VmFsdWUoKTsKICAgICAgICAgICAgIGludCByZWdpc3Rlck51bWJlciA9IGl0IC0gY2FsbEZyYW1l
LT5yZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gY29kZUJsb2NrLT5uYW1l
Rm9yUmVnaXN0ZXIocmVnaXN0ZXJOdW1iZXIpOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBj
b2RlQmxvY2stPm5hbWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJOdW1iZXIp
KTsKICAgICAgICAgICAgIGRhdGFMb2dGKCJbciUgM2QgJTE0c10gICAgICB8ICUxMHAgfCAlLTE2
cyAweCVsbGQgXG4iLCByZWdpc3Rlck51bWJlciwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgaXQsIHRv
Q1N0cmluZyh2KS5kYXRhKCksIChsb25nIGxvbmcpSlNWYWx1ZTo6ZW5jb2RlKHYpKTsKICAgICAg
ICAgICAgIC0taXQ7CiAgICAgICAgICAgICAtLXJlZ2lzdGVyQ291bnQ7CkBAIC00MDcsMTMgKzQw
OCwxMyBAQCBzdGF0aWMgYm9vbCB1bndpbmRDYWxsRnJhbWUoU3RhY2tWaXNpdG9yCiAKICAgICBK
U1ZhbHVlIGFjdGl2YXRpb247CiAgICAgaWYgKG9sZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUgJiYgb2xkQ29kZUJsb2NrLT5uZWVkc0FjdGl2YXRpb24oKSkgewotICAgICAg
ICBhY3RpdmF0aW9uID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9sZENvZGVCbG9jay0+YWN0aXZh
dGlvblJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKKyAgICAgICAgYWN0aXZhdGlvbiA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihvbGRDb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgp
KS5qc1ZhbHVlKCk7CiAgICAgICAgIGlmIChhY3RpdmF0aW9uKQogICAgICAgICAgICAganNDYXN0
PEpTQWN0aXZhdGlvbio+KGFjdGl2YXRpb24pLT50ZWFyT2ZmKCpzY29wZS0+dm0oKSk7CiAgICAg
fQogCiAgICAgaWYgKG9sZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYg
b2xkQ29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAgaWYgKEpTVmFsdWUgYXJn
dW1lbnRzID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rl
cihvbGRDb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpKS5qc1ZhbHVlKCkpIHsKKyAgICAg
ICAgaWYgKEpTVmFsdWUgYXJndW1lbnRzID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHVubW9kaWZp
ZWRBcmd1bWVudHNSZWdpc3RlcihvbGRDb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpLm9m
ZnNldCgpKS5qc1ZhbHVlKCkpIHsKICAgICAgICAgICAgIGlmIChhY3RpdmF0aW9uKQogICAgICAg
ICAgICAgICAgIGpzQ2FzdDxBcmd1bWVudHMqPihhcmd1bWVudHMpLT5kaWRUZWFyT2ZmQWN0aXZh
dGlvbihjYWxsRnJhbWUsIGpzQ2FzdDxKU0FjdGl2YXRpb24qPihhY3RpdmF0aW9uKSk7CiAgICAg
ICAgICAgICBlbHNlCkBAIC02ODUsNyArNjg2LDcgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZv
KiBJbnRlcnByZXRlcjo6dQogCiAgICAgLy8gVW53aW5kIHRoZSBzY29wZSBjaGFpbiB3aXRoaW4g
dGhlIGV4Y2VwdGlvbiBoYW5kbGVyJ3MgY2FsbCBmcmFtZS4KICAgICBpbnQgdGFyZ2V0U2NvcGVE
ZXB0aCA9IGhhbmRsZXItPnNjb3BlRGVwdGg7Ci0gICAgaWYgKGNvZGVCbG9jay0+bmVlZHNBY3Rp
dmF0aW9uKCkgJiYgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGNvZGVCbG9jay0+YWN0aXZhdGlvblJl
Z2lzdGVyKCkpLmpzVmFsdWUoKSkKKyAgICBpZiAoY29kZUJsb2NrLT5uZWVkc0FjdGl2YXRpb24o
KSAmJiBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIo
KS5vZmZzZXQoKSkuanNWYWx1ZSgpKQogICAgICAgICArK3RhcmdldFNjb3BlRGVwdGg7CiAKICAg
ICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgzLDggKzU4MywxMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0R2V0SklUU3R1YkFyZyhpbnQgYXJndW1lbnROdW1iZXIsIFJl
Z2lzdGVySUQgZHN0KTsKIAogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50
IHNyYywgUmVnaXN0ZXJJRCBkc3QpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMy
LCBSZWdpc3RlcklEIGRzdDIpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBz
cmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOworICAgICAgICB2b2lkIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0g
cmVnVDApOwogICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGRzdCwgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKICAg
ICAgICAgewogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHBheWxvYWQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxNTYx
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1
Y3Rpb24KICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKICAgICBKdW1wTGlzdCBlbmQ7CiAgICAgYm9v
bCBjYW5PcHRpbWl6ZSA9IG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkKLSAgICAgICAgJiYg
YXJndW1lbnRzID09IG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpCisgICAgICAgICYm
IGFyZ3VtZW50cyA9PSBtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKQog
ICAgICAgICAmJiAhbV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKTsK
IAogICAgIGlmIChjYW5PcHRpbWl6ZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgJKHJldmlzaW9uIDE1NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NzAsNiArNzcwLDExIEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBraWxsTGFzdFJlc3VsdFJl
Z2lzdGVyKCk7CiB9CiAKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCit7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMub2Zmc2V0KCksIGRzdCk7Cit9CisKIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRz
dDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCiB7CiAgICAgaWYgKHNyYzIgPT0gbV9sYXN0
UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlcikgewpAQCAtNzgxLDYgKzc4NiwxMSBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgfQogfQogCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwg
UmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQor
eworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEub2Zmc2V0KCksIGRzdDEsIHNyYzIu
b2Zmc2V0KCksIGRzdDIpOworfQorCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRDb25z
dGFudE9wZXJhbmRJbW1lZGlhdGVJbnQoaW50IHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwpAQCAtNzk3LDYgKzgwNywxMSBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlCiAgICAgbV9sYXN0UmVzdWx0Qnl0ZWNvZGVS
ZWdpc3RlciA9IChmcm9tID09IGNhY2hlZFJlc3VsdFJlZ2lzdGVyKSA/IGRzdCA6IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CiB9CiAKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9t
KQoreworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0Lm9mZnNldCgpLCBmcm9tKTsKK30K
KwogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KQogewog
ICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSks
IEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTU2
MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjU3LDkgKzI1Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX3RlYXJfb2ZmX2Fy
Z3VtZW50cyhJbnMKICAgICBpbnQgYXJndW1lbnRzID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKICAgICBpbnQgYWN0aXZhdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CiAKLSAgICBKdW1wIGFyZ3NOb3RDcmVhdGVkID0gYnJhbmNoVGVzdDY0KFplcm8sIEFk
ZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAodW5tb2RpZmllZEFy
Z3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50cykpKSk7CisgICAgSnVtcCBhcmdzTm90Q3JlYXRlZCA9
IGJyYW5jaFRlc3Q2NChaZXJvLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBzaXplb2YoUmVn
aXN0ZXIpICogKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHMpLm9mZnNldCgp
KSkpOwogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90ZWFyX29mZl9hcmd1
bWVudHMpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHVubW9kaWZpZWRBcmd1bWVudHNSZWdp
c3Rlcihhcmd1bWVudHMpLCByZWdUMik7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQodW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50cykub2Zmc2V0KCksIHJlZ1QyKTsKICAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChhY3RpdmF0aW9uLCByZWdUMik7CiAgICAgc3R1YkNhbGwuY2Fs
bCgpOwogICAgIGFyZ3NOb3RDcmVhdGVkLmxpbmsodGhpcyk7CkBAIC01MDcsNyArNTA3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BuYW1lcyhJbnN0cnVjdGlvbgogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25O
b3RJbW1lZGlhdGUoYmFzZSkpCiAgICAgICAgIGlzTm90T2JqZWN0LmFwcGVuZChlbWl0SnVtcElm
Tm90SlNDZWxsKHJlZ1QwKSk7Ci0gICAgaWYgKGJhc2UgIT0gbV9jb2RlQmxvY2stPnRoaXNSZWdp
c3RlcigpIHx8IG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgeworICAgIGlmIChiYXNlICE9
IG1fY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKS5vZmZzZXQoKSB8fCBtX2NvZGVCbG9jay0+aXNT
dHJpY3RNb2RlKCkpIHsKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwogICAgICAgICBpc05vdE9iamVjdC5hcHBlbmQoZW1p
dEp1bXBJZk5vdE9iamVjdChyZWdUMikpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxNTYxMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1NCw3ICsxMTU0LDcg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9uZXdfZgogewogICAgIFNUVUJf
SU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKICAgICAKLSAgICBBU1NFUlQoc3RhY2tGcmFt
ZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSB8fCAh
c3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkg
fHwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3RhY2tGcmFtZS5jYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsKKyAgICBBU1NF
UlQoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5jb2RlVHlwZSgpICE9IEZ1bmN0
aW9uQ29kZSB8fCAhc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxT
Y29wZUNoYWluKCkgfHwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3RhY2tGcmFt
ZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKS5vZmZzZXQoKSku
anNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKHN0YWNrRnJhbWUuY2Fs
bEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uZnVuY3Rpb24oKSwgc3RhY2tGcmFtZS5jYWxsRnJh
bWUtPnNjb3BlKCkpOwogfQogCkBAIC0xOTMxLDcgKzE5MzEsNyBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTihKU09iamVjdCosIG9wX25ld19mCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uID0gc3RhY2tGcmFtZS5hcmdzWzBdLmZ1bmN0aW9uKCk7CiAgICAgSlNGdW5jdGlvbiogZnVu
YyA9IEpTRnVuY3Rpb246OmNyZWF0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLCBjYWxsRnJhbWUtPnNj
b3BlKCkpOwotICAgIEFTU0VSVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5jb2RlVHlwZSgpICE9
IEZ1bmN0aW9uQ29kZSB8fCAhY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVD
aGFpbigpIHx8IGNhbGxGcmFtZS0+dW5jaGVja2VkUihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5h
Y3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsKKyAgICBBU1NFUlQoY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUgfHwgIWNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSB8fCBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpz
VmFsdWUoKSk7CiAKICAgICByZXR1cm4gZnVuYzsKIH0KQEAgLTE5NTksNyArMTk1OSw3IEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBDYWxsRnJhbWUqIGNh
bGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIEFTU0VSVChjYWxsRnJh
bWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29k
ZQogICAgICAgICB8fCAhY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+bmVl
ZHNGdWxsU2NvcGVDaGFpbigpCi0gICAgICAgIHx8IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+
dW5jaGVja2VkUihjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5hY3RpdmF0
aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsKKyAgICAgICAgfHwgY2FsbEZyYW1lLT5jYWxsZXJG
cmFtZSgpLT51bmNoZWNrZWRSKGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCkt
PmFjdGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCkpOwogCiAgICAgY2FsbEZy
YW1lLT5zZXRTY29wZShjYWxsZXJGcmFtZS0+c2NvcGUoKSk7CiAgICAgY2FsbEZyYW1lLT5zZXRS
ZXR1cm5QQyhzdGF0aWNfY2FzdDxJbnN0cnVjdGlvbio+KChTVFVCX1JFVFVSTl9BRERSRVNTKS52
YWx1ZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAJKHJldmlzaW9uIDE1NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwMSw3ICs3MDEsNyBA
QCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2FyZ3VtCiAgICAgICAgIGFyZ3Vt
ZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKHZtLCBleGVjKTsKICAgICAgICAgTExJTlRfQ0hFQ0tf
RVhDRVBUSU9OKCk7CiAgICAgICAgIExMSU5UX09QKDIpID0gYXJndW1lbnRzOwotICAgICAgICBl
eGVjLT51bmNoZWNrZWRSKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihwY1syXS51Lm9wZXJh
bmQpKSA9IGFyZ3VtZW50czsKKyAgICAgICAgZXhlYy0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIocGNbMl0udS5vcGVyYW5kKS5vZmZzZXQoKSkgPSBhcmd1bWVudHM7CiAg
ICAgfQogICAgIAogICAgIExMSU5UX1JFVFVSTl9QUk9GSUxFRChvcF9nZXRfYXJndW1lbnRfYnlf
dmFsLCBnZXRCeVZhbChleGVjLCBhcmd1bWVudHMsIExMSU5UX09QX0MoMykuanNWYWx1ZSgpKSk7
CkBAIC05MjEsNyArOTIxLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19m
dW5jKQogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUKICAgICAgICAgICAg
fHwgIWNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpCi0gICAgICAgICAgIHx8IGV4ZWMt
PnVuY2hlY2tlZFIoY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsK
KyAgICAgICAgICAgfHwgZXhlYy0+dW5jaGVja2VkUihjb2RlQmxvY2stPmFjdGl2YXRpb25SZWdp
c3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCkpOwogI2lmIExMSU5UX1NMT1dfUEFUSF9UUkFDSU5H
CiAgICAgZGF0YUxvZ0YoIkNyZWF0aW5nIGZ1bmN0aW9uIVxuIik7CiAjZW5kaWYKQEAgLTExMzIs
NyArMTEzMiw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90ZWFyX29mZl8KIHsK
ICAgICBMTElOVF9CRUdJTigpOwogICAgIEFTU0VSVChleGVjLT5jb2RlQmxvY2soKS0+dXNlc0Fy
Z3VtZW50cygpKTsKLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzQ2FzdDxBcmd1bWVudHMq
PihleGVjLT51bmNoZWNrZWRSKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihwY1sxXS51Lm9w
ZXJhbmQpKS5qc1ZhbHVlKCkpOworICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0ganNDYXN0PEFy
Z3VtZW50cyo+KGV4ZWMtPnVuY2hlY2tlZFIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKHBj
WzFdLnUub3BlcmFuZCkub2Zmc2V0KCkpLmpzVmFsdWUoKSk7CiAgICAgaWYgKEpTVmFsdWUgYWN0
aXZhdGlvblZhbHVlID0gTExJTlRfT1BfQygyKS5qc1ZhbHVlKCkpCiAgICAgICAgIGFyZ3VtZW50
cy0+ZGlkVGVhck9mZkFjdGl2YXRpb24oZXhlYywganNDYXN0PEpTQWN0aXZhdGlvbio+KGFjdGl2
YXRpb25WYWx1ZSkpOwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTU2MTM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVf
YXJndW1lbnQKICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWUoQXJndW1lbnRzOjpjcmVh
dGUodm0sIGV4ZWMpKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICBleGVjLT51bmNoZWNr
ZWRSKHBjWzFdLnUub3BlcmFuZCkgPSBhcmd1bWVudHM7Ci0gICAgZXhlYy0+dW5jaGVja2VkUih1
bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIocGNbMV0udS5vcGVyYW5kKSkgPSBhcmd1bWVudHM7
CisgICAgZXhlYy0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIocGNbMV0u
dS5vcGVyYW5kKS5vZmZzZXQoKSkgPSBhcmd1bWVudHM7CiAgICAgRU5EKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkocmV2
aXNpb24gMTU2MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDEwICsyMTgsMTAgQEAgSlNWYWx1ZSBKU0Fj
dGl2YXRpb246OmFyZ3VtZW50c0dldHRlcihFeAogICAgIGlmIChhY3RpdmF0aW9uLT5pc1Rvcm5P
ZmYoKSB8fCAhKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnVzZXNBcmd1bWVudHMoKSB8fCBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLT51c2VzRXZhbCgpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKLSAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5hcmd1bWVudHNSZWdpc3RlcigpOworICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAg
aWYgKEpTVmFsdWUgYXJndW1lbnRzID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFyZ3VtZW50c1Jl
Z2lzdGVyKS5qc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBhcmd1bWVudHM7Ci0gICAgaW50IHJl
YWxBcmd1bWVudHNSZWdpc3RlciA9IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVu
dHNSZWdpc3Rlcik7CisgICAgaW50IHJlYWxBcmd1bWVudHNSZWdpc3RlciA9IHVubW9kaWZpZWRB
cmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcikub2Zmc2V0KCk7CiAKICAgICBKU1Zh
bHVlIGFyZ3VtZW50cyA9IEpTVmFsdWUoQXJndW1lbnRzOjpjcmVhdGUoY2FsbEZyYW1lLT52bSgp
LCBjYWxsRnJhbWUpKTsKICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0
ZXIpID0gYXJndW1lbnRzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212520</attachid>
            <date>2013-09-24 16:41:38 -0700</date>
            <delta_ts>2013-09-25 22:30:15 -0700</delta_ts>
            <desc>Patch for Review</desc>
            <filename>121732.patch</filename>
            <type>text/plain</type>
            <size>191634</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2MzcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5MSBA
QAorMjAxMy0wOS0yNCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2hvdWxkIGJlIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTczMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSByZWZhY3RvcmluZyBjaGFu
Z2UuICBDaGFuZ2VkIFZpcnR1YWxSZWdpc3RlciBmcm9tIGFuIGVudW0gdG8gYSBjbGFzcy4KKyAg
ICAgICAgTW92ZWQgT3BlcmFuZHM6Om9wZXJhbmRJc0FyZ3VtZW50KCksIG9wZXJhbmRUb0FyZ3Vt
ZW50KCksIGFyZ3VtZW50VG9PcGVyYW5kKCkKKyAgICAgICAgYW5kIHRoZSBzaW1pbGFyIGZ1bmN0
aW9ucyBmb3IgbG9jYWxzIHRvIFZpcnR1YWxSZWdpc3RlciBjbGFzcy4KKworICAgICAgICBUaGlz
IGlzIGluIHByZXBhcmF0aW9uIGZvciBjaGFuZ2luZyB0aGUgb2Zmc2V0IGZvciB0aGUgZmlyc3Qg
bG9jYWwgcmVnaXN0ZXIgZnJvbQorICAgICAgICAwIHRvIC0xLiAgVGhpcyBpcyBuZWVkZWQgc2lu
Y2UgbW9zdCBuYXRpdmUgY2FsbGluZyBjb252ZW50aW9ucyBoYXZlIHRoZSBhcmNoaXRlY3RlZAor
ICAgICAgICBmcmFtZSBwb2ludGVyIChlLmcuICVyYnAgZm9yIFg4NikgcG9pbnQgYXQgdGhlIHNs
b3QgdGhhdCBzdG9yZXMgdGhlIHByZXZpb3VzIGZyYW1lCisgICAgICAgIHBvaW50ZXIuICBMb2Nh
bCB2YWx1ZXMgc3RhcnQgYmVsb3cgdGhhdCBhZGRyZXNzLgorCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZWdpc3Rlck5hbWUpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpuYW1lRm9yUmVn
aXN0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjp1
bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omlz
S25vd25Ob3RJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldFRoaXNSZWdp
c3Rlcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dGhpc1JlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzZXRBcmd1bWVudHNSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6YXJndW1lbnRzUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVu
Y2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRB
Y3RpdmF0aW9uUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFjdGl2YXRpb25S
ZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5jaGVja2VkQWN0aXZhdGlvblJl
Z2lzdGVyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1c2VzQXJndW1lbnRzKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjppc0NhcHR1cmVkKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0
cnVjdGlvbi5oOgorICAgICAgICAqIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmg6
CisgICAgICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZUtleSk6CisgICAgICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5
OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleTo6
aGFzaCk6CisgICAgICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5OjpvcGVyYW5k
KToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXk6OmlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGU6Okxh
enlPcGVyYW5kVmFsdWVQcm9maWxlKToKKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKToKKyAgICAgICAgKiBieXRlY29kZS9PcGVyYW5kcy5o
OgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9wZXJh
bmRzOjpoYXNPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNldE9wZXJhbmQpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmFuZEZvckluZGV4KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6OnNldE9wZXJhbmRGaXJzdFRpbWUpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlu
a2VkQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dXNlc0FyZ3VtZW50cyk6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphcmd1bWVudHNSZWdpc3Rlcik6CisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjp1c2VzR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6Omdsb2JhbE9iamVjdFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OnRoaXNSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrOjphY3RpdmF0aW9uUmVnaXN0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVl
UmVjb3ZlcnkuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0
YWNrKToKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6dmlydHVhbFJlZ2lzdGVyKToKKyAg
ICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgICogYnl0
ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAgICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6
VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjppc1ZhbGlk
KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjppc0xvY2FsKToKKyAgICAgICAgKEpT
Qzo6VmlydHVhbFJlZ2lzdGVyOjppc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJl
Z2lzdGVyOjppc0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjp0b0xv
Y2FsKToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjp0b0FyZ3VtZW50KToKKyAgICAg
ICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjp0b0NvbnN0YW50SW5kZXgpOgorICAgICAgICAoSlND
OjpWaXJ0dWFsUmVnaXN0ZXI6Om9mZnNldCk6CisgICAgICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rl
cjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6b3BlcmF0b3IrKToKKyAgICAgICAg
KEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpsb2NhbFRvT3BlcmFuZCk6CisgICAgICAgIChKU0M6OlZp
cnR1YWxSZWdpc3Rlcjo6b3BlcmFuZElzTG9jYWwpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVn
aXN0ZXI6Om9wZXJhbmRUb0xvY2FsKToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpv
cGVyYW5kSXNBcmd1bWVudCk6CisgICAgICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6b3BlcmFu
ZFRvQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9P
cGVyYW5kKToKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjp2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbCk6CisgICAgICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6dmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6Om9wZXJhdG9yIGlu
dCk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjphZGRWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlTGF6eVJlZ2lz
dGVySWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6bmV3UmVn
aXN0ZXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEFyZ3VtZW50
c0xlbmd0aCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QXJndW1l
bnRCeVZhbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBcmd1bWVu
dHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmV0
dXJuKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlZ2lzdGVyRm9yKToKKyAgICAgICAgKiBieXRl
Y29tcGlsZXIvUmVnaXN0ZXJJRC5oOgorICAgICAgICAoSlNDOjpSZWdpc3RlcklEOjpSZWdpc3Rl
cklEKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJJRDo6c2V0SW5kZXgpOgorICAgICAgICAoSlND
OjpSZWdpc3RlcklEOjppbmRleCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVySUQ6OnZpcnR1YWxS
ZWdpc3Rlcik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SGVhcC5oOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6UGF5bG9hZCk6CisgICAgICAgICogZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVj
dXRlRWZmZWN0cyk6CisgICAgICAgIChKU0M6OkRGRzo6OjpjbG9iYmVyQ2FwdHVyZWRWYXJzKToK
KyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oOgorICAgICAgICAoSlNDOjpERkc6
OkFyZ3VtZW50UG9zaXRpb246OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlm
aWNhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uUGhhc2U6Om9ic2VydmVCYWRBcmd1bWVudHNVc2UpOgorICAgICAgICAoSlNDOjpERkc6
OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OmlzT0tUb09wdGltaXplKToKKyAgICAgICAg
KiBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmguCisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBl
cnM6OnRhZ0Zvcik6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2Fk
Rm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpuZXdWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpzZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXQp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpmaW5kQXJndW1lbnRQb3NpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Zmx1c2hEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRD
YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRy
eTo6cmVtYXBPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZW1p
dEZ1bmN0aW9uQ2hlY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZW1p
dEFyZ3VtZW50UGhhbnRvbXMpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZU1pbk1heCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpYyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVR5cGVkQXJy
YXlDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJ
bmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplR2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6
ZUZsdXNoT3JQaGFudG9tTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5n
UGhhc2U6OmNhbm9uaWNhbGl6ZVNldEFyZ3VtZW50KToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJp
bGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAg
ICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0Zs
dXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExp
dmVuZXNzQW5hbHlzaXNQaGFzZTo6c2V0Rm9yTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFyZ3VtZW50c1JlZ2lzdGVyRm9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJG
b3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp1bmNoZWNrZWRBY3RpdmF0aW9uUmVnaXN0
ZXJGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZVByb2ZpbGVGb3IpOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpy
ZWNvbnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9HZXRMb2Nh
bFVubGlua2VkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNWaXJ0dWFsUmVnaXN0ZXIp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6c2V0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKiBkZmcvREZHT1NS
RW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAg
ICogZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZH
T1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29udmVydFRvRm9yd2Fy
ZCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhp
dENvbXBpbGVyMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6
Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdCk6CisgICAgICAg
ICogZGZnL0RGR1JlZ2lzdGVyQmFuay5oOgorICAgICAgICAoSlNDOjpERkc6OlJlZ2lzdGVyQmFu
azo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlJlZ2lzdGVyQmFuazo6YWxsb2Nh
dGVTcGVjaWZpYyk6CisgICAgICAgIChKU0M6OkRGRzo6UmVnaXN0ZXJCYW5rOjpyZXRhaW4pOgor
ICAgICAgICAoSlNDOjpERkc6OlJlZ2lzdGVyQmFuazo6aXNJblVzZSk6CisgICAgICAgIChKU0M6
OkRGRzo6UmVnaXN0ZXJCYW5rOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpSZWdpc3RlckJh
bms6OnJlbGVhc2VBdEluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpSZWdpc3RlckJhbms6OmFs
bG9jYXRlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlJlZ2lzdGVyQmFuazo6TWFwRW50
cnk6Ok1hcEVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHU2NvcmVCb2FyZC5oOgorICAgICAgICAo
SlNDOjpERkc6OlNjb3JlQm9hcmQ6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpTY29y
ZUJvYXJkOjp1c2UpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tDb25zaXN0ZW5jeSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlubGluZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZnByQWxsb2Nh
dGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRTcGlsbEFsbFJl
Z2lzdGVyc0ltcGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmbHVzaFJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmlzRmx1c2hlZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFyZ3VtZW50U2xvdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFyZ3VtZW50VGFnU2xvdCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFyZ3VtZW50UGF5bG9hZFNsb3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZVNvdXJjZUZvck9wZXJhbmQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzZXROb2RlRm9yT3BlcmFuZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnJlY29yZFNldExvY2Fs
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Z2VuZXJhdGlvbkluZm9Gcm9t
VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAq
IGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlk
YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6dmFsaWRhdGVDUFMpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhbGlkYXRlOjpjaGVja09wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6
OlZhbGlkYXRlOjpyZXBvcnRWYWxpZGF0aW9uQ29udGV4dCk6CisgICAgICAgICogZGZnL0RGR1Zh
bHVlUmVjb3ZlcnlPdmVycmlkZS5oOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3ZlcnlP
dmVycmlkZTo6VmFsdWVSZWNvdmVyeU92ZXJyaWRlKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpz
aG91bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlQWNjZXNzRGF0YTo6dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1hdCk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpmbHVzaEZvcm1hdCk6Cisg
ICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJp
YWJsZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0
TG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCk6CisgICAgICAg
ICogZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAq
IGZ0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmg6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dEFyZ3VtZW50Rm9yT3BlcmFuZDo6RXhpdEFyZ3VtZW50Rm9yT3BlcmFuZCk6CisgICAgICAgIChK
U0M6OkZUTDo6RXhpdEFyZ3VtZW50Rm9yT3BlcmFuZDo6b3BlcmFuZCk6CisgICAgICAgICogZnRs
L0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
Okxvd2VyREZHVG9MTFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZUdldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZUV4dHJhY3RPU1JFbnRyeUxvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpvYnNlcnZlTW92SGludCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OmFkZHJlc3NGb3IpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpwYXlsb2Fk
Rm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6dGFnRm9yKToKKyAgICAg
ICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JF
bnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
Ok9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6
CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAg
ICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OmR1bXBSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjp1bndpbmRDYWxsRnJhbWUpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5kKToKKyAgICAgICAgKiBqaXQvQXNzZW1i
bHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcik6
CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6dGFnRm9yKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjphcmd1bWVudHNSZWdpc3RlckZvcik6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAg
ICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlTG9hZFZhcmFy
Z3MpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIpOgor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RlYXJfb2ZmX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcG5h
bWVzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKiBqaXQv
SklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToK
KyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9G
VU5DVElPTik6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAo
SlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHByb2ZpbGVyL1By
b2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpCeXRl
Y29kZVNlcXVlbmNlOjpCeXRlY29kZVNlcXVlbmNlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAg
KiBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6
YXJndW1lbnRzR2V0dGVyKToKKwogMjAxMy0wOS0yNCAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUu
Y29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNDk3MTUxOD4gV2ViS2l0IHNob3VsZCBi
dWlsZCBhZ2FpbnN0IHRoZSBYY29kZSBkZWZhdWx0IHRvb2xjaGFpbiB3aGVuIHRhcmdldGluZyBP
UyBYIDEwLjgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDEzICsxNjcsMTMgQEAgQ1N0
cmluZyBDb2RlQmxvY2s6OnJlZ2lzdGVyTmFtZShpbnQgcikgYwogICAgIGlmIChpc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChyKSkKICAgICAgICAgcmV0dXJuIGNvbnN0YW50TmFtZShyLCBnZXRDb25z
dGFudChyKSk7CiAKLSAgICBpZiAob3BlcmFuZElzQXJndW1lbnQocikpIHsKLSAgICAgICAgaWYg
KCFvcGVyYW5kVG9Bcmd1bWVudChyKSkKKyAgICBpZiAoVmlydHVhbFJlZ2lzdGVyOjpvcGVyYW5k
SXNBcmd1bWVudChyKSkgeworICAgICAgICBpZiAoIVZpcnR1YWxSZWdpc3Rlcjo6b3BlcmFuZFRv
QXJndW1lbnQocikpCiAgICAgICAgICAgICByZXR1cm4gInRoaXMiOwotICAgICAgICByZXR1cm4g
dG9DU3RyaW5nKCJhcmciLCBvcGVyYW5kVG9Bcmd1bWVudChyKSk7CisgICAgICAgIHJldHVybiB0
b0NTdHJpbmcoImFyZyIsIFZpcnR1YWxSZWdpc3Rlcjo6b3BlcmFuZFRvQXJndW1lbnQocikpOwog
ICAgIH0KIAotICAgIHJldHVybiB0b0NTdHJpbmcoImxvYyIsIG9wZXJhbmRUb0xvY2FsKHIpKTsK
KyAgICByZXR1cm4gdG9DU3RyaW5nKCJsb2MiLCBWaXJ0dWFsUmVnaXN0ZXI6Om9wZXJhbmRUb0xv
Y2FsKHIpKTsKIH0KIAogc3RhdGljIENTdHJpbmcgcmVnZXhwVG9Tb3VyY2VTdHJpbmcoUmVnRXhw
KiByZWdFeHApCkBAIC01MTQsMTEgKzUxNCwxMSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKFByaW50U3RyZWFtCiAgICAgaWYgKHVzZXNBcmd1bWVudHMoKSkgewogICAgICAgICBvdXQu
cHJpbnRmKAogICAgICAgICAgICAgIjsgdXNlcyBhcmd1bWVudHMsIGluIHIlZCwgciVkIiwKLSAg
ICAgICAgICAgIGFyZ3VtZW50c1JlZ2lzdGVyKCksCi0gICAgICAgICAgICB1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIoKSkpOworICAgICAgICAgICAgYXJndW1l
bnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSwKKyAgICAgICAgICAgIHVubW9kaWZpZWRBcmd1bWVudHNS
ZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcigpKS5vZmZzZXQoKSk7CiAgICAgfQogICAgIGlmIChu
ZWVkc0Z1bGxTY29wZUNoYWluKCkgJiYgY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCi0gICAg
ICAgIG91dC5wcmludGYoIjsgYWN0aXZhdGlvbiBpbiByJWQiLCBhY3RpdmF0aW9uUmVnaXN0ZXIo
KSk7CisgICAgICAgIG91dC5wcmludGYoIjsgYWN0aXZhdGlvbiBpbiByJWQiLCBhY3RpdmF0aW9u
UmVnaXN0ZXIoKS5vZmZzZXQoKSk7CiAgICAgb3V0LnByaW50ZigiXG4iKTsKICAgICAKICAgICBj
b25zdCBJbnN0cnVjdGlvbiogYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpOwpAQCAtMTYy
Miw3ICsxNjIyLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwog
CiAgICAgc2V0Q29uc3RhbnRSZWdpc3RlcnModW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXJzKCkpOwogICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+dXNlc0dsb2JhbE9iamVjdCgp
KQotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3VubGlua2VkQ29kZUJsb2NrLT5nbG9iYWxP
YmplY3RSZWdpc3RlcigpXS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0YWJsZSwgbV9nbG9iYWxPYmpl
Y3QuZ2V0KCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3VubGlua2VkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3RSZWdpc3RlcigpLm9mZnNldCgpXS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0
YWJsZSwgbV9nbG9iYWxPYmplY3QuZ2V0KCkpOwogICAgIG1fZnVuY3Rpb25EZWNscy5ncm93KHVu
bGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSk7CiAgICAgZm9yIChzaXpl
X3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCksIGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSogdW5saW5rZWRFeGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChp
KTsKQEAgLTMzMjQsMzIgKzMzMjQsMzAgQEAgYm9vbCBDb2RlQmxvY2s6OnVzZXNPcGNvZGUoT3Bj
b2RlSUQgb3BjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotU3RyaW5nIENvZGVCbG9jazo6bmFt
ZUZvclJlZ2lzdGVyKGludCByZWdpc3Rlck51bWJlcikKK1N0cmluZyBDb2RlQmxvY2s6Om5hbWVG
b3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogewogICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlKCktPm1fbG9jayk7CiAgICAgU3ltYm9s
VGFibGU6Ok1hcDo6aXRlcmF0b3IgZW5kID0gc3ltYm9sVGFibGUoKS0+ZW5kKGxvY2tlcik7CiAg
ICAgZm9yIChTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBwdHIgPSBzeW1ib2xUYWJsZSgpLT5i
ZWdpbihsb2NrZXIpOyBwdHIgIT0gZW5kOyArK3B0cikgewotICAgICAgICBpZiAocHRyLT52YWx1
ZS5nZXRJbmRleCgpID09IHJlZ2lzdGVyTnVtYmVyKSB7CisgICAgICAgIGlmIChwdHItPnZhbHVl
LmdldEluZGV4KCkgPT0gdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKSB7CiAgICAgICAgICAgICAv
LyBGSVhNRTogVGhpcyB3b24ndCB3b3JrIGZyb20gdGhlIGNvbXBpbGF0aW9uIHRocmVhZC4KICAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUz
MDAKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcocHRyLT5rZXkpOwogICAgICAgICB9CiAgICAg
fQotICAgIGlmIChuZWVkc0FjdGl2YXRpb24oKSAmJiByZWdpc3Rlck51bWJlciA9PSBhY3RpdmF0
aW9uUmVnaXN0ZXIoKSkKKyAgICBpZiAobmVlZHNBY3RpdmF0aW9uKCkgJiYgdmlydHVhbFJlZ2lz
dGVyID09IGFjdGl2YXRpb25SZWdpc3RlcigpKQogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJhY3RpdmF0aW9uIik7Ci0gICAgaWYgKHJlZ2lzdGVyTnVtYmVyID09IHRoaXNSZWdpc3Rlcigp
KQorICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gdGhpc1JlZ2lzdGVyKCkpCiAgICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoInRoaXMiKTsKICAgICBpZiAodXNlc0FyZ3VtZW50cygpKSB7Ci0g
ICAgICAgIGlmIChyZWdpc3Rlck51bWJlciA9PSBhcmd1bWVudHNSZWdpc3RlcigpKQorICAgICAg
ICBpZiAodmlydHVhbFJlZ2lzdGVyID09IGFyZ3VtZW50c1JlZ2lzdGVyKCkpCiAgICAgICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJhcmd1bWVudHMiKTsKLSAgICAgICAgaWYgKHVubW9kaWZp
ZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcigpKSA9PSByZWdpc3Rlck51bWJl
cikKKyAgICAgICAgaWYgKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdp
c3RlcigpKSA9PSB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJyZWFsIGFyZ3VtZW50cyIpOwogICAgIH0KLSAgICBpZiAocmVnaXN0ZXJOdW1iZXIgPCAw
KSB7Ci0gICAgICAgIGludCBhcmd1bWVudFBvc2l0aW9uID0gLXJlZ2lzdGVyTnVtYmVyOwotICAg
ICAgICBhcmd1bWVudFBvc2l0aW9uIC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyAx
OwotICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoImFyZ3VtZW50c1slM2RdIiwgYXJndW1l
bnRQb3NpdGlvbiAtIDEpLmltcGwoKTsKLSAgICB9CisgICAgaWYgKHZpcnR1YWxSZWdpc3Rlci5p
c0FyZ3VtZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiYXJndW1lbnRzWyUz
ZF0iLCB2aXJ0dWFsUmVnaXN0ZXIudG9Bcmd1bWVudCgpKS5pbXBsKCk7CisKICAgICByZXR1cm4g
IiI7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQAogI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgog
I2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgog
I2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC04Niw3ICs4Nyw3IEBAIGNsYXNzIEV4ZWNTdGF0
ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CiAK
LWlubGluZSBpbnQgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGludCBhcmd1bWVudHNSZWdp
c3RlcikgeyByZXR1cm4gYXJndW1lbnRzUmVnaXN0ZXIgKyAxOyB9CitpbmxpbmUgVmlydHVhbFJl
Z2lzdGVyIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRzUmVnaXN0ZXIpIHsgcmV0dXJuIGFyZ3VtZW50c1JlZ2lzdGVyICsgMTsgfQogCiBzdGF0aWMg
QUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1RoaXNPYmplY3RNYXJrZXIoKSB7IHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOyB9CiAKQEAgLTE0OCw3ICsxNDksNyBAQCBwdWJs
aWM6CiAKICAgICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKGludCBpbmRleCkKICAg
ICB7Ci0gICAgICAgIGlmIChpbmRleCA9PSBtX3RoaXNSZWdpc3RlciAmJiAhbV9pc1N0cmljdE1v
ZGUpCisgICAgICAgIGlmIChpbmRleCA9PSBtX3RoaXNSZWdpc3Rlci5vZmZzZXQoKSAmJiAhbV9p
c1N0cmljdE1vZGUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBpZiAoaXND
b25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQpAQCAtMjk4LDU4ICsyOTksNjEgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0Vk0oVk0qIHZtKSB7IG1fdm0gPSB2bTsgfQogICAgIFZNKiB2bSgpIHsg
cmV0dXJuIG1fdm07IH0KIAotICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKGludCB0aGlzUmVnaXN0
ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KLSAgICBpbnQgdGhpc1JlZ2lz
dGVyKCkgY29uc3QgeyByZXR1cm4gbV90aGlzUmVnaXN0ZXI7IH0KKyAgICB2b2lkIHNldFRoaXNS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0g
dGhpc1JlZ2lzdGVyOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlcigpIGNvbnN0
IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9CiAKICAgICBib29sIG5lZWRzRnVsbFNjb3BlQ2hh
aW4oKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bmVlZHNGdWxsU2NvcGVDaGFpbigp
OyB9CiAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51
c2VzRXZhbCgpOyB9CiAKLSAgICB2b2lkIHNldEFyZ3VtZW50c1JlZ2lzdGVyKGludCBhcmd1bWVu
dHNSZWdpc3RlcikKKyAgICB2b2lkIHNldEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudHNSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChhcmd1bWVudHNSZWdp
c3RlciAhPSAoaW50KUludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQoYXJn
dW1lbnRzUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgbV9hcmd1bWVudHNSZWdpc3RlciA9
IGFyZ3VtZW50c1JlZ2lzdGVyOwogICAgICAgICBBU1NFUlQodXNlc0FyZ3VtZW50cygpKTsKICAg
ICB9Ci0gICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyKCkgY29uc3QKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRzUmVnaXN0ZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKHVzZXNB
cmd1bWVudHMoKSk7CiAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyOwogICAgIH0K
LSAgICBpbnQgdW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXIoKQorICAgIFZpcnR1YWxSZWdpc3Rl
ciB1bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlcigpCiAgICAgewogICAgICAgICBpZiAoIXVzZXNB
cmd1bWVudHMoKSkKLSAgICAgICAgICAgIHJldHVybiBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyOwor
ICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICByZXR1cm4gYXJn
dW1lbnRzUmVnaXN0ZXIoKTsKICAgICB9Ci0gICAgdm9pZCBzZXRBY3RpdmF0aW9uUmVnaXN0ZXIo
aW50IGFjdGl2YXRpb25SZWdpc3RlcikKKyAgICB2b2lkIHNldEFjdGl2YXRpb25SZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXIgYWN0aXZhdGlvblJlZ2lzdGVyKQogICAgIHsKICAgICAgICAgbV9hY3Rp
dmF0aW9uUmVnaXN0ZXIgPSBhY3RpdmF0aW9uUmVnaXN0ZXI7CiAgICAgfQotICAgIGludCBhY3Rp
dmF0aW9uUmVnaXN0ZXIoKSBjb25zdAorCisgICAgVmlydHVhbFJlZ2lzdGVyIGFjdGl2YXRpb25S
ZWdpc3RlcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobmVlZHNGdWxsU2NvcGVDaGFp
bigpKTsKICAgICAgICAgcmV0dXJuIG1fYWN0aXZhdGlvblJlZ2lzdGVyOwogICAgIH0KLSAgICBp
bnQgdW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyKCkKKworICAgIFZpcnR1YWxSZWdpc3RlciB1
bmNoZWNrZWRBY3RpdmF0aW9uUmVnaXN0ZXIoKQogICAgIHsKICAgICAgICAgaWYgKCFuZWVkc0Z1
bGxTY29wZUNoYWluKCkpCi0gICAgICAgICAgICByZXR1cm4gSW52YWxpZFZpcnR1YWxSZWdpc3Rl
cjsKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgcmV0dXJu
IGFjdGl2YXRpb25SZWdpc3RlcigpOwogICAgIH0KLSAgICBib29sIHVzZXNBcmd1bWVudHMoKSBj
b25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyICE9IChpbnQpSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcjsgfQorCisgICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9h
cmd1bWVudHNSZWdpc3Rlci5pc1ZhbGlkKCk7IH0KIAogICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9u
KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX25lZWRzQWN0aXZhdGlvbjsKICAgICB9
CiAKLSAgICBib29sIGlzQ2FwdHVyZWQoaW50IG9wZXJhbmQsIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gMCkgY29uc3QKKyAgICBib29sIGlzQ2FwdHVyZWQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gMCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAg
ICAgIHJldHVybiBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSAmJiB1c2VzQXJndW1lbnRzKCk7
CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBv
cGVyYW5kLnRvQXJndW1lbnQoKSAmJiB1c2VzQXJndW1lbnRzKCk7CiAKICAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmNhcHR1
cmVkVmFycy5nZXQob3BlcmFuZFRvTG9jYWwob3BlcmFuZCkpOworICAgICAgICAgICAgcmV0dXJu
IGlubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzLmdldChvcGVyYW5kLnRvTG9jYWwoKSk7CiAK
ICAgICAgICAgLy8gVGhlIGFjdGl2YXRpb24gb2JqZWN0IGlzbid0IGluIHRoZSBjYXB0dXJlZCBy
ZWdpb24sIGJ1dCBpdCdzICJjYXB0dXJlZCIKICAgICAgICAgLy8gaW4gdGhlIHNlbnNlIHRoYXQg
c3RvcmVzIHRvIGl0cyBsb2NhdGlvbiBjYW4gYmUgb2JzZXJ2ZWQgaW5kaXJlY3RseS4KQEAgLTM2
OCw4ICszNzIsOCBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghc3ltYm9sVGFibGUoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICByZXR1cm4gb3BlcmFuZCA8PSBzeW1ib2xU
YWJsZSgpLT5jYXB0dXJlU3RhcnQoKQotICAgICAgICAgICAgJiYgb3BlcmFuZCA+IHN5bWJvbFRh
YmxlKCktPmNhcHR1cmVFbmQoKTsKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQub2Zmc2V0KCkgPD0g
c3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCkKKyAgICAgICAgICAgICYmIG9wZXJhbmQub2Zm
c2V0KCkgPiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7CiAgICAgfQogCiAgICAgQ29kZVR5
cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29kZVR5cGUoKTsg
fQpAQCAtMzkxLDcgKzM5NSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXJFdmFsQ2FjaGUo
KTsKIAotICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoaW50IHJlZ2lzdGVyTnVtYmVyKTsKKyAg
ICBTdHJpbmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKICNpZiBFTkFCTEUo
SklUKQogICAgIHZvaWQgc2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3Moc2l6ZV90IHNpemUp
IHsgbV9zdHJ1Y3R1cmVTdHViSW5mb3MuZ3JvdyhzaXplKTsgfQpAQCAtMTAyNyw5ICsxMDMxLDkg
QEAgcHJpdmF0ZToKICAgICBWTSogbV92bTsKIAogICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVj
dGlvbj4gbV9pbnN0cnVjdGlvbnM7Ci0gICAgaW50IG1fdGhpc1JlZ2lzdGVyOwotICAgIGludCBt
X2FyZ3VtZW50c1JlZ2lzdGVyOwotICAgIGludCBtX2FjdGl2YXRpb25SZWdpc3RlcjsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fYXJn
dW1lbnRzUmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fYWN0aXZhdGlvblJlZ2lzdGVy
OwogCiAgICAgYm9vbCBtX2lzU3RyaWN0TW9kZTsKICAgICBib29sIG1fbmVlZHNBY3RpdmF0aW9u
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJ
KHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiU3Bl
Y2lhbFBvaW50ZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1
cmVDaGFpbi5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3JUcmFpdHMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAko
cmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlP
cGVyYW5kVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDI2ICs0NiwyNiBAQCBj
bGFzcyBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSB7CiBwdWJsaWM6CiAgICAgTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVLZXkoKQogICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoMCkgLy8gMCA9
IGVtcHR5IHZhbHVlCi0gICAgICAgICwgbV9vcGVyYW5kKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
IC8vIG5vdCBhIHZhbGlkIG9wZXJhbmQgaW5kZXggaW4gb3VyIGN1cnJlbnQgc2NoZW1lCisgICAg
ICAgICwgbV9vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigpKSAvLyBub3QgYSB2YWxpZCBvcGVyYW5k
IGluZGV4IGluIG91ciBjdXJyZW50IHNjaGVtZQogICAgIHsKICAgICB9CiAgICAgCiAgICAgTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQog
ICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoMSkgLy8gMSA9IGRlbGV0ZWQgdmFsdWUKLSAgICAg
ICAgLCBtX29wZXJhbmQoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgLy8gbm90IGEgdmFsaWQgb3Bl
cmFuZCBpbmRleCBpbiBvdXIgY3VycmVudCBzY2hlbWUKKyAgICAgICAgLCBtX29wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKCkpIC8vIG5vdCBhIHZhbGlkIG9wZXJhbmQgaW5kZXggaW4gb3VyIGN1cnJl
bnQgc2NoZW1lCiAgICAgewogICAgIH0KICAgICAKLSAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZUtleSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50IG9wZXJhbmQpCisgICAgTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVLZXkodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQogICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCiAg
ICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NFUlQob3BlcmFu
ZCAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgQVNTRVJUKG1fb3BlcmFuZC5p
c1ZhbGlkKCkpOwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gbV9vcGVyYW5kID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXI7Cisg
ICAgICAgIHJldHVybiAhbV9vcGVyYW5kLmlzVmFsaWQoKTsKICAgICB9CiAgICAgCiAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5JiBvdGhlcikgY29u
c3QKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVjb2RlT2Zmc2V0
KSArIG1fb3BlcmFuZDsKKyAgICAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVjb2RlT2Zm
c2V0KSArIG1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQoKSBjb25zdApAQCAtODQsNyArODQsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFT
U0VSVCghISp0aGlzKTsKICAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgfQot
ICAgIGludCBvcGVyYW5kKCkgY29uc3QKKworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCghISp0aGlzKTsKICAgICAgICAgcmV0dXJuIG1f
b3BlcmFuZDsKQEAgLTkyLDExICs5MywxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9vcGVy
YW5kID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgbV9ieXRlY29kZU9mZnNldDsKKyAgICAg
ICAgcmV0dXJuICFtX29wZXJhbmQuaXNWYWxpZCgpICYmIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAg
fQogcHJpdmF0ZTogCiAgICAgdW5zaWduZWQgbV9ieXRlY29kZU9mZnNldDsKLSAgICBpbnQgbV9v
cGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CiB9OwogCiBzdHJ1Y3QgTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXlIYXNoIHsKQEAgLTEyOSw3ICsxMzAsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIHN0cnVjdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSA6IHB1YmxpYyBNaW5pbWFs
VmFsdWVQcm9maWxlIHsKICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSgpCiAgICAgICAgIDog
TWluaW1hbFZhbHVlUHJvZmlsZSgpCi0gICAgICAgICwgbV9vcGVyYW5kKEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpCisgICAgICAgICwgbV9vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigpKQogICAgIHsK
ICAgICB9CiAgICAgCkBAIC0xNDQsNyArMTQ1LDcgQEAgc3RydWN0IExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlIDogcHVibGljIAogICAgICAgICByZXR1cm4gTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVL
ZXkobV9ieXRlY29kZU9mZnNldCwgbV9vcGVyYW5kKTsKICAgICB9CiAgICAgCi0gICAgaW50IG1f
b3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwogICAgIAogICAgIHR5cGVk
ZWYgU2VnbWVudGVkVmVjdG9yPExhenlPcGVyYW5kVmFsdWVQcm9maWxlLCA4PiBMaXN0OwogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDE1NjM2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlIE1ldGhvZE9mR2V0CiAgICAgcmVzdWx0Lm1fa2luZCA9IExhenlPcGVyYW5k
OwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmNvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICBy
ZXN1bHQudS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCA9IGtleS5ieXRlY29kZU9mZnNldCgp
OwotICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpOworICAg
IHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpLm9mZnNldCgpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjAgKzI4LDEzIEBA
CiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1
ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorCiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGludCBs
b2NhbFRvT3BlcmFuZChpbnQgbG9jYWwpIHsgcmV0dXJuIC1sb2NhbDsgfQotaW5saW5lIGJvb2wg
b3BlcmFuZElzTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPD0gMDsgfQotaW5s
aW5lIGludCBvcGVyYW5kVG9Mb2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLW9wZXJhbmQ7IH0K
LQotLy8gYXJndW1lbnQgMCBpcyAndGhpcycuCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNBcmd1bWVu
dChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCA+IDA7IH0KLWlubGluZSBpbnQgb3BlcmFu
ZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRo
aXNBcmd1bWVudE9mZnNldCgpOyB9Ci1pbmxpbmUgaW50IGFyZ3VtZW50VG9PcGVyYW5kKGludCBh
cmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNl
dCgpOyB9Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBPcGVyYW5kVmFsdWVUcmFpdHM7
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xNDIsMzQgKzEzNSw0NCBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVy
YW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3Bl
cmFuZFRvQXJndW1lbnQob3BlcmFuZCk7CisgICAgICAgIGlmIChWaXJ0dWFsUmVnaXN0ZXI6Om9w
ZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBW
aXJ0dWFsUmVnaXN0ZXI6Om9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOwogICAgICAgICAgICAg
cmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50XTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIG1fbG9jYWxzW29wZXJhbmRUb0xvY2FsKG9wZXJhbmQpXTsKKworICAgICAgICBy
ZXR1cm4gbV9sb2NhbHNbVmlydHVhbFJlZ2lzdGVyOjpvcGVyYW5kVG9Mb2NhbChvcGVyYW5kKV07
CiAgICAgfQotICAgIAorCisgICAgVCYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQodmlydHVhbFJlZ2lzdGVyLm9m
ZnNldCgpKTsKKyAgICB9CisKICAgICBjb25zdCBUJiBvcGVyYW5kKGludCBvcGVyYW5kKSBjb25z
dCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhp
cyktPm9wZXJhbmQob3BlcmFuZCkpOyB9CiAgICAgCiAgICAgYm9vbCBoYXNPcGVyYW5kKGludCBv
cGVyYW5kKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJh
bmQpKQorICAgICAgICBpZiAoVmlydHVhbFJlZ2lzdGVyOjpvcGVyYW5kSXNBcmd1bWVudChvcGVy
YW5kKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8c2l6ZV90PihvcGVyYW5kVG9Mb2NhbChvcGVyYW5kKSkgPCBudW1iZXJPZkxvY2FscygpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihWaXJ0dWFsUmVnaXN0ZXI6Om9wZXJh
bmRUb0xvY2FsKG9wZXJhbmQpKSA8IG51bWJlck9mTG9jYWxzKCk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgc2V0T3BlcmFuZChpbnQgb3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCiAgICAgewotICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKLSAgICAgICAgICAgIGludCBh
cmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOworICAgICAgICBpZiAoVmlydHVh
bFJlZ2lzdGVyOjpvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgeworICAgICAgICAgICAgaW50
IGFyZ3VtZW50ID0gVmlydHVhbFJlZ2lzdGVyOjpvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsK
ICAgICAgICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IHZhbHVlOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzZXRMb2NhbChvcGVyYW5kVG9M
b2NhbChvcGVyYW5kKSwgdmFsdWUpOworICAgICAgICBzZXRMb2NhbChWaXJ0dWFsUmVnaXN0ZXI6
Om9wZXJhbmRUb0xvY2FsKG9wZXJhbmQpLCB2YWx1ZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQg
c2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBjb25zdCBUJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHNldE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCB2
YWx1ZSk7CisgICAgfQorCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBudW1iZXJP
ZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsgfQogICAgIGNvbnN0IFQmIGF0KHNpemVf
dCBpbmRleCkgY29uc3QKICAgICB7CkBAIC0xOTksMTggKzIwMiwxOCBAQCBwdWJsaWM6CiAgICAg
aW50IG9wZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiAgICAgewogICAgICAgICBp
ZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQotICAgICAgICAgICAgcmV0dXJuIGFyZ3Vt
ZW50VG9PcGVyYW5kKGluZGV4KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsVG9PcGVyYW5kKGluZGV4
IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7CisgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lz
dGVyOjphcmd1bWVudFRvT3BlcmFuZChpbmRleCk7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVn
aXN0ZXI6OmxvY2FsVG9PcGVyYW5kKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgc2V0T3BlcmFuZEZpcnN0VGltZShpbnQgb3BlcmFuZCwgY29uc3Qg
VCYgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkp
IHsKLSAgICAgICAgICAgIHNldEFyZ3VtZW50Rmlyc3RUaW1lKG9wZXJhbmRUb0FyZ3VtZW50KG9w
ZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgIGlmIChWaXJ0dWFsUmVnaXN0ZXI6Om9wZXJhbmRJc0Fy
Z3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBzZXRBcmd1bWVudEZpcnN0VGltZShWaXJ0
dWFsUmVnaXN0ZXI6Om9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpLCB2YWx1ZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHNldExvY2FsRmlyc3RU
aW1lKG9wZXJhbmRUb0xvY2FsKG9wZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgIHNldExvY2FsRmly
c3RUaW1lKFZpcnR1YWxSZWdpc3Rlcjo6b3BlcmFuZFRvTG9jYWwob3BlcmFuZCksIHZhbHVlKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw4ICsxOTQsOCBAQCBVbmxpbmtlZENv
ZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0qCiAgICAgLCBtX251bUNhbGxlZVJlZ2lzdGVy
cygwKQogICAgICwgbV9udW1QYXJhbWV0ZXJzKDApCiAgICAgLCBtX3ZtKHZtKQotICAgICwgbV9h
cmd1bWVudHNSZWdpc3RlcigoaW50KUludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgLCBtX2ds
b2JhbE9iamVjdFJlZ2lzdGVyKChpbnQpSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAsIG1f
YXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCisgICAgLCBtX2dsb2JhbE9iamVj
dFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKQogICAgICwgbV9uZWVkc0Z1bGxTY29wZUNoYWlu
KGluZm8ubV9uZWVkc0FjdGl2YXRpb24pCiAgICAgLCBtX3VzZXNFdmFsKGluZm8ubV91c2VzRXZh
bCkKICAgICAsIG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKGZhbHNlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsMTMgKzI1OCwxMyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRBY3RpdmF0aW9uUmVnaXN0ZXIoaW50IGFjdGl2YXRpb25SZWdpc3Rlcikg
eyBtX2FjdGl2YXRpb25SZWdpc3RlciA9IGFjdGl2YXRpb25SZWdpc3RlcjsgfQogCiAgICAgdm9p
ZCBzZXRBcmd1bWVudHNSZWdpc3RlcihpbnQgYXJndW1lbnRzUmVnaXN0ZXIpIHsgbV9hcmd1bWVu
dHNSZWdpc3RlciA9IGFyZ3VtZW50c1JlZ2lzdGVyOyB9Ci0gICAgYm9vbCB1c2VzQXJndW1lbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHNSZWdpc3RlciAhPSAoaW50KUludmFsaWRWaXJ0
dWFsUmVnaXN0ZXI7IH0KLSAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVy
biBtX2FyZ3VtZW50c1JlZ2lzdGVyOyB9CisgICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9hcmd1bWVudHNSZWdpc3Rlci5pc1ZhbGlkKCk7IH0KKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lz
dGVyOyB9CiAKIAotICAgIGJvb2wgdXNlc0dsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Z2xvYmFsT2JqZWN0UmVnaXN0ZXIgIT0gKGludClJbnZhbGlkVmlydHVhbFJlZ2lzdGVyOyB9Cisg
ICAgYm9vbCB1c2VzR2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3RS
ZWdpc3Rlci5pc1ZhbGlkKCk7IH0KICAgICB2b2lkIHNldEdsb2JhbE9iamVjdFJlZ2lzdGVyKGlu
dCBnbG9iYWxPYmplY3RSZWdpc3RlcikgeyBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyID0gZ2xvYmFs
T2JqZWN0UmVnaXN0ZXI7IH0KLSAgICBpbnQgZ2xvYmFsT2JqZWN0UmVnaXN0ZXIoKSBjb25zdCB7
IHJldHVybiBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIGds
b2JhbE9iamVjdFJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdpc3Rl
cjsgfQogCiAgICAgLy8gUGFyYW1ldGVyIGluZm9ybWF0aW9uCiAgICAgdm9pZCBzZXROdW1QYXJh
bWV0ZXJzKGludCBuZXdWYWx1ZSkgeyBtX251bVBhcmFtZXRlcnMgPSBuZXdWYWx1ZTsgfQpAQCAt
Mzk5LDggKzM5OSw4IEBAIHB1YmxpYzoKIAogICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlVHlwZTsgfQogCi0gICAgaW50IHRoaXNSZWdpc3RlcigpIGNvbnN0IHsg
cmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9Ci0gICAgaW50IGFjdGl2YXRpb25SZWdpc3RlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYWN0aXZhdGlvblJlZ2lzdGVyOyB9CisgICAgVmlydHVhbFJlZ2lzdGVy
IHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9CisgICAgVmly
dHVhbFJlZ2lzdGVyIGFjdGl2YXRpb25SZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZh
dGlvblJlZ2lzdGVyOyB9CiAKIAogICAgIHZvaWQgYWRkUHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bih1bnNpZ25lZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKQpAQCAtNDc5LDEwICs0NzksMTAg
QEAgcHJpdmF0ZToKICAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOwogICAgIFZNKiBtX3ZtOwogCi0g
ICAgaW50IG1fdGhpc1JlZ2lzdGVyOwotICAgIGludCBtX2FyZ3VtZW50c1JlZ2lzdGVyOwotICAg
IGludCBtX2FjdGl2YXRpb25SZWdpc3RlcjsKLSAgICBpbnQgbV9nbG9iYWxPYmplY3RSZWdpc3Rl
cjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lz
dGVyIG1fYXJndW1lbnRzUmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fYWN0aXZhdGlv
blJlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3RlciBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyOwog
CiAgICAgYm9vbCBtX25lZWRzRnVsbFNjb3BlQ2hhaW4gOiAxOwogICAgIGJvb2wgbV91c2VzRXZh
bCA6IDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVy
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJl
Y292ZXJ5LmgJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9WYWx1ZVJlY292ZXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBEaXNwbGFjZWRJbkpTU3Rh
Y2s7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICByZXN1bHQubV9zb3Vy
Y2UudmlydHVhbFJlZyA9IHZpcnR1YWxSZWc7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS52aXJ0
dWFsUmVnID0gdmlydHVhbFJlZy5vZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAgICAgCkBAIC0yOTQsNyArMjk0LDcgQEAgcHVibGljOgogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdGVjaG5p
cXVlID09IERpc3BsYWNlZEluSlNTdGFjayB8fCBtX3RlY2huaXF1ZSA9PSBJbnQzMkRpc3BsYWNl
ZEluSlNTdGFjayB8fCBtX3RlY2huaXF1ZSA9PSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2sgfHwg
bV90ZWNobmlxdWUgPT0gQ2VsbERpc3BsYWNlZEluSlNTdGFjayB8fCBtX3RlY2huaXF1ZSA9PSBC
b29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrIHx8IG1fdGVjaG5pcXVlID09IEludDUyRGlzcGxhY2Vk
SW5KU1N0YWNrIHx8IG1fdGVjaG5pcXVlID09IFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNr
KTsKLSAgICAgICAgcmV0dXJuIG1fc291cmNlLnZpcnR1YWxSZWc7CisgICAgICAgIHJldHVybiBW
aXJ0dWFsUmVnaXN0ZXIobV9zb3VyY2UudmlydHVhbFJlZyk7CiAgICAgfQogICAgIAogICAgIEpT
VmFsdWUgY29uc3RhbnQoKSBjb25zdApAQCAtMzUxLDI1ICszNTEsMjUgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNr
OgotICAgICAgICAgICAgb3V0LnByaW50ZigiKiVkIiwgdmlydHVhbFJlZ2lzdGVyKCkpOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiKiVkIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNr
OgotICAgICAgICAgICAgb3V0LnByaW50ZigiKmludDMyKCVkKSIsIHZpcnR1YWxSZWdpc3Rlcigp
KTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIippbnQzMiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIo
KS5vZmZzZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgSW50NTJEaXNw
bGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIqaW50NTIoJWQpIiwgdmly
dHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgb3V0LnByaW50ZigiKmludDUyKCVkKSIsIHZp
cnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Y2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIipzdHJpY3RJbnQ1MiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBv
dXQucHJpbnRmKCIqc3RyaWN0SW50NTIoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNT
dGFjazoKLSAgICAgICAgICAgIG91dC5wcmludGYoIipkb3VibGUoJWQpIiwgdmlydHVhbFJlZ2lz
dGVyKCkpOworICAgICAgICAgICAgb3V0LnByaW50ZigiKmRvdWJsZSglZCkiLCB2aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgQ2Vs
bERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIG91dC5wcmludGYoIipjZWxsKCVkKSIs
IHZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIipjZWxsKCVkKSIs
IHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgb3V0LnByaW50
ZigiKmJvb2woJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgb3V0LnByaW50
ZigiKmJvb2woJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBjYXNlIEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKICAgICAg
ICAgICAgIG91dC5wcmludGYoImFyZ3VtZW50cyIpOwpAQCAtNDAwLDcgKzQwMCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSOwog
ICAgICAgICB9IHBhaXI7CiAjZW5kaWYKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWc7CisgICAgICAgIGludCB2aXJ0dWFsUmVnOwogICAgICAgICBFbmNvZGVkSlNWYWx1ZSBjb25z
dGFudDsKICAgICB9IG1fc291cmNlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBWaXJ0dWFsUmVnaXN0ZXJfaAogI2RlZmlu
ZSBWaXJ0dWFsUmVnaXN0ZXJfaAogCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisKICNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIApAQCAtMzMs
NyArMzUsNjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIC8vIFR5cGUgZm9yIGEgdmlydHVhbCByZWdp
c3RlciBudW1iZXIgKHNwaWxsIGxvY2F0aW9uKS4KIC8vIFVzaW5nIGFuIGVudW0gdG8gbWFrZSB0
aGlzIHR5cGUtY2hlY2tlZCBhdCBjb21waWxlIHRpbWUsIHRvIGF2ZXJ0IHByb2dyYW1tZXIgZXJy
b3JzLgotZW51bSBWaXJ0dWFsUmVnaXN0ZXIgeyBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgz
ZmZmZmZmZiB9OworLy8gZW51bSBWaXJ0dWFsUmVnaXN0ZXIgeyBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyID0gMHgzZmZmZmZmZiB9OworCitjbGFzcyBWaXJ0dWFsUmVnaXN0ZXIgeworcHVibGljOgor
ICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIERlYnVnZ2VyQ2Fs
bEZyYW1lOworICAgIGZyaWVuZCBjbGFzcyBERkdCeXRlQ29kZVBhcnNlcjsKKworICAgIFZpcnR1
YWxSZWdpc3RlcigpCisgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc19pbnZhbGlkVmlydHVh
bFJlZ2lzdGVyKQorICAgIHsgfQorCisgICAgVmlydHVhbFJlZ2lzdGVyKGludCB2aXJ0dWFsUmVn
aXN0ZXIpCisgICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKQorICAg
IHsgfQorCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lz
dGVyICE9IHNfaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzTG9jYWwoKSBj
b25zdCB7IHJldHVybiBvcGVyYW5kSXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBi
b29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBvcGVyYW5kSXNBcmd1bWVudChtX3ZpcnR1
YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3Zp
cnR1YWxSZWdpc3RlciA+PSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CisgICAgaW50
IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9j
YWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgaW50IHRvQXJndW1lbnQoKSBjb25zdCB7IEFT
U0VSVChpc0FyZ3VtZW50KCkpOyByZXR1cm4gb3BlcmFuZFRvQXJndW1lbnQobV92aXJ0dWFsUmVn
aXN0ZXIpOyB9CisgICAgaW50IHRvQ29uc3RhbnRJbmRleCgpIGNvbnN0IHsgQVNTRVJUKGlzQ29u
c3RhbnQoKSk7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAtIHNfZmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXg7IH0KKyAgICBpbnQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVn
aXN0ZXI7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWaXJ0dWFsUmVnaXN0ZXIgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID09IG90aGVyLm1fdmlydHVhbFJl
Z2lzdGVyOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZpcnR1YWxSZWdpc3RlciBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgIT0gb3RoZXIubV92aXJ0dWFsUmVn
aXN0ZXI7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmF0b3IrKGludCBvZmZzZXQpIHsgcmV0
dXJuIFZpcnR1YWxSZWdpc3RlcihtX3ZpcnR1YWxSZWdpc3RlciArIG9mZnNldCk7IH0KKworICAg
IHN0YXRpYyBpbnQgbG9jYWxUb09wZXJhbmQoaW50IGxvY2FsKSB7IHJldHVybiAtbG9jYWw7IH0K
KyAgICBzdGF0aWMgYm9vbCBvcGVyYW5kSXNMb2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3Bl
cmFuZCA8PSAwOyB9CisgICAgc3RhdGljIGludCBvcGVyYW5kVG9Mb2NhbChpbnQgb3BlcmFuZCkg
eyByZXR1cm4gLW9wZXJhbmQ7IH0KKworICAgIHN0YXRpYyBib29sIG9wZXJhbmRJc0FyZ3VtZW50
KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kID4gMDsgfQorICAgIHN0YXRpYyBpbnQgb3Bl
cmFuZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6
OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9CisgICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFu
ZChpbnQgYXJndW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1l
bnRPZmZzZXQoKTsgfQorCisgICAgc3RhdGljIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChpbnQgbG9jYWwpCisgICAgeworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lz
dGVyKGxvY2FsVG9PcGVyYW5kKGxvY2FsKSk7CisgICAgfQorCisgICAgc3RhdGljIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbnQgYXJndW1lbnQpCisgICAgewor
ICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50
KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBpbnQgc19pbnZhbGlkVmly
dHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZjsKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfZmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXggPSAweDQwMDAwMDAwOworCisgICAgb3BlcmF0b3IgaW50KCkg
eyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXI7IH0KKworICAgIGludCBtX3ZpcnR1YWxSZWdpc3Rl
cjsKK307CisKIENPTVBJTEVfQVNTRVJUKHNpemVvZihWaXJ0dWFsUmVnaXN0ZXIpID09IHNpemVv
ZihpbnQpLCBWaXJ0dWFsUmVnaXN0ZXJfaXNfMzJiaXQpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
QEAgLTQyLDcgKzk5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIGlubGluZSB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUpCiB7Ci0g
ICAgb3V0LnByaW50KHN0YXRpY19jYXN0PGludD4odmFsdWUpKTsKKyAgICBvdXQucHJpbnQodmFs
dWUub2Zmc2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3
IEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgKIGJvb2wgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmFkZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCBpc0NvbnN0
YW50LCBSZWdpc3RlcklEKiYgcjApCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
c3ltYm9sVGFibGUoKS5tX2xvY2spOwotICAgIGludCBpbmRleCA9IGxvY2FsVG9PcGVyYW5kKG1f
Y2FsbGVlUmVnaXN0ZXJzLnNpemUoKSk7CisgICAgaW50IGluZGV4ID0gVmlydHVhbFJlZ2lzdGVy
Ojpsb2NhbFRvT3BlcmFuZChtX2NhbGxlZVJlZ2lzdGVycy5zaXplKCkpOwogICAgIFN5bWJvbFRh
YmxlRW50cnkgbmV3RW50cnkoaW5kZXgsIGlzQ29uc3RhbnQgPyBSZWFkT25seSA6IDApOwogICAg
IFN5bWJvbFRhYmxlOjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZSgpLmFkZChs
b2NrZXIsIGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogCkBAIC0yMjQsNyArMjI0LDcgQEAgQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICBtX2NvZGVCbG9j
ay0+c2V0QWN0aXZhdGlvblJlZ2lzdGVyKG1fYWN0aXZhdGlvblJlZ2lzdGVyLT5pbmRleCgpKTsK
ICAgICB9CiAKLSAgICBtX3N5bWJvbFRhYmxlLT5zZXRDYXB0dXJlU3RhcnQobG9jYWxUb09wZXJh
bmQobV9jb2RlQmxvY2stPm1fbnVtVmFycykpOworICAgIG1fc3ltYm9sVGFibGUtPnNldENhcHR1
cmVTdGFydChWaXJ0dWFsUmVnaXN0ZXI6OmxvY2FsVG9PcGVyYW5kKG1fY29kZUJsb2NrLT5tX251
bVZhcnMpKTsKIAogICAgIGlmIChmdW5jdGlvbkJvZHktPnVzZXNBcmd1bWVudHMoKSB8fCBjb2Rl
QmxvY2stPnVzZXNFdmFsKCkpIHsgLy8gTWF5IHJlaWZ5IGFyZ3VtZW50cyBvYmplY3QuCiAgICAg
ICAgIFJlZ2lzdGVySUQqIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlciA9IGFkZFZhcigpOyAv
LyBBbm9ueW1vdXMsIHNvIGl0IGNhbid0IGJlIG1vZGlmaWVkIGJ5IHVzZXIgY29kZS4KQEAgLTIz
NCw3ICsyMzQsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAg
ICAgICAgIC8vICdhcmd1bWVudHMnIHZhbHVlcyBhcmUgc3RvcmVkIGluIGNvbnNlY3V0aXZlIHJl
Z2lzdGVycywgYW5kIHN0b3JpbmcKICAgICAgICAgLy8gb25seSB0aGUgaW5kZXggb2YgdGhlIGFz
c2lnbmFibGUgb25lLgogICAgICAgICBjb2RlQmxvY2stPnNldEFyZ3VtZW50c1JlZ2lzdGVyKGFy
Z3VtZW50c1JlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRCh1bm1vZGlm
aWVkQXJndW1lbnRzUmVnaXN0ZXIsIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlci0+aW5kZXgo
KSA9PSBKU0M6OnVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihjb2RlQmxvY2stPmFyZ3VtZW50
c1JlZ2lzdGVyKCkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRCh1bm1vZGlmaWVkQXJndW1lbnRz
UmVnaXN0ZXIsIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlci0+dmlydHVhbFJlZ2lzdGVyKCkg
PT0gSlNDOjp1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoY29kZUJsb2NrLT5hcmd1bWVudHNS
ZWdpc3RlcigpKSk7CiAKICAgICAgICAgZW1pdEluaXRMYXp5UmVnaXN0ZXIoYXJndW1lbnRzUmVn
aXN0ZXIpOwogICAgICAgICBlbWl0SW5pdExhenlSZWdpc3Rlcih1bm1vZGlmaWVkQXJndW1lbnRz
UmVnaXN0ZXIpOwpAQCAtMzExLDcgKzMxMSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihWTSYKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZhdGlv
blJlZ2lzdGVyLT5pbmRleCgpKTsKICAgICB9CiAKLSAgICBtX3N5bWJvbFRhYmxlLT5zZXRDYXB0
dXJlRW5kKGxvY2FsVG9PcGVyYW5kKGNvZGVCbG9jay0+bV9udW1WYXJzKSk7CisgICAgbV9zeW1i
b2xUYWJsZS0+c2V0Q2FwdHVyZUVuZChWaXJ0dWFsUmVnaXN0ZXI6OmxvY2FsVG9PcGVyYW5kKGNv
ZGVCbG9jay0+bV9udW1WYXJzKSk7CiAKICAgICBtX2ZpcnN0TGF6eUZ1bmN0aW9uID0gY29kZUJs
b2NrLT5tX251bVZhcnM7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNr
LnNpemUoKTsgKytpKSB7CkBAIC0zMjYsNyArMzI2LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAgICAgICAgIGVtaXROZXdGdW5jdGlvbihyZWcu
Z2V0KCksIGZ1bmN0aW9uKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGVt
aXRJbml0TGF6eVJlZ2lzdGVyKHJlZy5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgbV9sYXp5RnVu
Y3Rpb25zLnNldChsb2NhbFRvT3BlcmFuZChyZWctPmluZGV4KCkpLCBmdW5jdGlvbik7CisgICAg
ICAgICAgICAgICAgbV9sYXp5RnVuY3Rpb25zLnNldChyZWctPnZpcnR1YWxSZWdpc3RlcigpLnRv
TG9jYWwoKSwgZnVuY3Rpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAt
MzM4LDcgKzMzOCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYK
ICAgICB9CiAKICAgICBpZiAoc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykKLSAgICAgICAgbV9z
eW1ib2xUYWJsZS0+c2V0Q2FwdHVyZUVuZChsb2NhbFRvT3BlcmFuZChjb2RlQmxvY2stPm1fbnVt
VmFycykpOworICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXRDYXB0dXJlRW5kKFZpcnR1YWxSZWdp
c3Rlcjo6bG9jYWxUb09wZXJhbmQoY29kZUJsb2NrLT5tX251bVZhcnMpKTsKIAogICAgIEZ1bmN0
aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpmdW5jdGlvbkJvZHktPnBhcmFtZXRlcnMoKTsK
ICAgICBtX3BhcmFtZXRlcnMuZ3JvdyhwYXJhbWV0ZXJzLnNpemUoKSArIDEpOyAvLyByZXNlcnZl
IHNwYWNlIGZvciAidGhpcyIKQEAgLTUwNiw4ICs1MDYsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6dW5jaGVja2VkCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpj
cmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKiByZWcpCiB7Ci0gICAgaW50
IGxvY2FsVmFyaWFibGVOdW1iZXIgPSBvcGVyYW5kVG9Mb2NhbChyZWctPmluZGV4KCkpOwotICAg
IAorICAgIGludCBsb2NhbFZhcmlhYmxlTnVtYmVyID0gVmlydHVhbFJlZ2lzdGVyOjpvcGVyYW5k
VG9Mb2NhbChyZWctPmluZGV4KCkpOworCiAgICAgaWYgKG1fbGFzdExhenlGdW5jdGlvbiA8PSBs
b2NhbFZhcmlhYmxlTnVtYmVyIHx8IGxvY2FsVmFyaWFibGVOdW1iZXIgPCBtX2ZpcnN0TGF6eUZ1
bmN0aW9uKQogICAgICAgICByZXR1cm4gcmVnOwogICAgIGVtaXRMYXp5TmV3RnVuY3Rpb24ocmVn
LCBtX2xhenlGdW5jdGlvbnMuZ2V0KGxvY2FsVmFyaWFibGVOdW1iZXIpKTsKQEAgLTUxNiw3ICs1
MTYsMTEgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUxhegogCiBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6bmV3UmVnaXN0ZXIoKQogewotICAgIG1fY2FsbGVl
UmVnaXN0ZXJzLmFwcGVuZChsb2NhbFRvT3BlcmFuZChtX2NhbGxlZVJlZ2lzdGVycy5zaXplKCkp
KTsKKyAgICBpbnQgb2xkT2Zmc2V0ID0gVmlydHVhbFJlZ2lzdGVyOjpsb2NhbFRvT3BlcmFuZCht
X2NhbGxlZVJlZ2lzdGVycy5zaXplKCkpOworICAgIGludCBuZXdPZmZzZXQgPSBWaXJ0dWFsUmVn
aXN0ZXI6OnZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSku
b2Zmc2V0KCk7CisgICAgQVNTRVJUKG9sZE9mZnNldCA9PSBuZXdPZmZzZXQpOworCisgICAgbV9j
YWxsZWVSZWdpc3RlcnMuYXBwZW5kKFZpcnR1YWxSZWdpc3Rlcjo6dmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKSk7CiAgICAgbV9jb2RlQmxvY2stPm1fbnVt
Q2FsbGVlUmVnaXN0ZXJzID0gbWF4PGludD4obV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzLCBtX2NhbGxlZVJlZ2lzdGVycy5zaXplKCkpOwogICAgIHJldHVybiAmbV9jYWxsZWVSZWdp
c3RlcnMubGFzdCgpOwogfQpAQCAtMTI2Myw3ICsxMjY3LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRHZXRBcgogewogICAgIGVtaXRPcGNvZGUob3BfZ2V0X2FyZ3VtZW50
c19sZW5ndGgpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAg
IEFTU0VSVChiYXNlLT5pbmRleCgpID09IG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3Rlcigp
KTsKKyAgICBBU1NFUlQoYmFzZS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gbV9jb2RlQmxvY2stPmFy
Z3VtZW50c1JlZ2lzdGVyKCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRl
eCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHlOYW1l
cygpLmxlbmd0aCkpOwogICAgIHJldHVybiBkc3Q7CkBAIC0xMzM4LDcgKzEzNDIsNyBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEFyCiAgICAgVW5saW5rZWRBcnJheVBy
b2ZpbGUgYXJyYXlQcm9maWxlID0gbmV3QXJyYXlQcm9maWxlKCk7CiAgICAgVW5saW5rZWRWYWx1
ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfYXJndW1lbnRfYnlf
dmFsKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICBBU1NFUlQo
YmFzZS0+aW5kZXgoKSA9PSBtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CisgICAg
QVNTRVJUKGJhc2UtPnZpcnR1YWxSZWdpc3RlcigpID09IG1fY29kZUJsb2NrLT5hcmd1bWVudHNS
ZWdpc3RlcigpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5LT5pbmRleCgpKTsKICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoYXJyYXlQcm9maWxlKTsKQEAgLTE1NTgsNyArMTU2Miw3IEBAIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUFyZ3VtZW50c0kKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgZW1pdE9wY29kZShvcF9jcmVhdGVfYXJndW1lbnRzKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQobV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpOworICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CiB9
CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgp
CkBAIC0xNzQzLDcgKzE3NDcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFJldHVyCiAKICAgICBpZiAobV9jb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSAmJiBtX2NvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpICE9IDEgJiYgIWlzU3RyaWN0TW9kZSgpKSB7CiAgICAgICAg
IGVtaXRPcGNvZGUob3BfdGVhcl9vZmZfYXJndW1lbnRzKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNl
dCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZhdGlvblJlZ2lzdGVy
ID8gbV9hY3RpdmF0aW9uUmVnaXN0ZXItPmluZGV4KCkgOiBlbWl0TG9hZCgwLCBKU1ZhbHVlKCkp
LT5pbmRleCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE1NjM2OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNDk4LDE0ICs0OTgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgUmVnaXN0ZXJJRCYgcmVnaXN0ZXJGb3IoaW50IGluZGV4KQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAob3BlcmFuZElzTG9jYWwoaW5kZXgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBtX2NhbGxlZVJlZ2lzdGVyc1tvcGVyYW5kVG9Mb2NhbChpbmRleCldOworICAgICAgICAg
ICAgaWYgKFZpcnR1YWxSZWdpc3Rlcjo6b3BlcmFuZElzTG9jYWwoaW5kZXgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBtX2NhbGxlZVJlZ2lzdGVyc1tWaXJ0dWFsUmVnaXN0ZXI6Om9wZXJhbmRU
b0xvY2FsKGluZGV4KV07CiAKICAgICAgICAgICAgIGlmIChpbmRleCA9PSBKU1N0YWNrOjpDYWxs
ZWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FsbGVlUmVnaXN0ZXI7CiAKICAgICAgICAg
ICAgIEFTU0VSVChtX3BhcmFtZXRlcnMuc2l6ZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3Bh
cmFtZXRlcnNbb3BlcmFuZFRvQXJndW1lbnQoaW5kZXgpXTsKKyAgICAgICAgICAgIHJldHVybiBt
X3BhcmFtZXRlcnNbVmlydHVhbFJlZ2lzdGVyOjpvcGVyYW5kVG9Bcmd1bWVudChpbmRleCldOwog
ICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoY29uc3QgSWRlbnRpZmll
ciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklE
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdp
c3RlcklELmgJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvUmVnaXN0ZXJJRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAj
aWZuZGVmIFJlZ2lzdGVySURfaAogI2RlZmluZSBSZWdpc3RlcklEX2gKIAorI2luY2x1ZGUgIlZp
cnR1YWxSZWdpc3Rlci5oIgorCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yVHJhaXRzLmg+CiAKQEAgLTQ2LDkgKzQ4LDE5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICBSZWdpc3RlcklEKFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICA6IG1fcmVmQ291bnQoMCkKKyAgICAg
ICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAg
LCBtX2lzVGVtcG9yYXJ5KGZhbHNlKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICwgbV9k
aWRTZXRJbmRleCh0cnVlKQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgZXhwbGljaXQgUmVnaXN0ZXJJRChpbnQgaW5kZXgpCiAgICAgICAgICAgICA6IG1f
cmVmQ291bnQoMCkKLSAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgICwg
bV92aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGluZGV4KSkKICAgICAgICAgICAgICwg
bV9pc1RlbXBvcmFyeShmYWxzZSkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAgICAsIG1fZGlk
U2V0SW5kZXgodHJ1ZSkKQEAgLTYyLDcgKzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWZuZGVm
IE5ERUJVRwogICAgICAgICAgICAgbV9kaWRTZXRJbmRleCA9IHRydWU7CiAjZW5kaWYKLSAgICAg
ICAgICAgIG1faW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIG1fdmlydHVhbFJlZ2lzdGVyID0g
VmlydHVhbFJlZ2lzdGVyKGluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgc2V0VGVt
cG9yYXJ5KCkKQEAgLTczLDcgKzg1LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQg
aW5kZXgoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQobV9kaWRTZXRJbmRl
eCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAgICAgICAgICAgIHJldHVybiBtX3Zp
cnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQobV92aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Zp
cnR1YWxSZWdpc3RlcjsKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgaXNUZW1wb3JhcnkoKQpA
QCAtMTAwLDcgKzExOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAKICAgICAg
ICAgaW50IG1fcmVmQ291bnQ7Ci0gICAgICAgIGludCBtX2luZGV4OworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV92aXJ0dWFsUmVnaXN0ZXI7CiAgICAgICAgIGJvb2wgbV9pc1RlbXBvcmFyeTsK
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIGJvb2wgbV9kaWRTZXRJbmRleDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMTU2MzY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIFBh
eWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgICAgICAgICA6IG1faXNUb3AoZmFs
c2UpCi0gICAgICAgICAgICAsIG1fdmFsdWUoc3RhdGljX2Nhc3Q8aW50PihvcGVyYW5kKSkKKyAg
ICAgICAgICAgICwgbV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQogICAgICAgICB7CiAgICAgICAg
IH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNTYzNjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBHZXRBcmd1bWVudDogewogICAgICAgICBB
U1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMo
KS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKTsKICAgICAgICAgQVNTRVJUKHZh
bHVlLmlzSGVhcFRvcCgpKTsKICAgICAgICAgRmlsdHJhdGlvblJlc3VsdCByZXN1bHQgPQogICAg
ICAgICAgICAgdmFsdWUuZmlsdGVyKHR5cGVGaWx0ZXJGb3IodXNlS2luZEZvcih2YXJpYWJsZS0+
Zmx1c2hGb3JtYXQoKSkpKTsKQEAgLTE1Miw4ICsxNTIsOCBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEV4dHJhY3RP
U1JFbnRyeUxvY2FsOiB7Ci0gICAgICAgIGlmICghb3BlcmFuZElzQXJndW1lbnQobm9kZS0+dW5s
aW5rZWRMb2NhbCgpKQotICAgICAgICAgICAgJiYgbV9ncmFwaC5tX2xhenlWYXJzLmdldChvcGVy
YW5kVG9Mb2NhbChub2RlLT51bmxpbmtlZExvY2FsKCkpKSkgeworICAgICAgICBpZiAoIShub2Rl
LT51bmxpbmtlZExvY2FsKCkuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgJiYgbV9ncmFwaC5t
X2xhenlWYXJzLmdldChub2RlLT51bmxpbmtlZExvY2FsKCkudG9Mb2NhbCgpKSkgewogICAgICAg
ICAgICAgLy8gVGhpcyBpcyBraW5kIG9mIHBlc3NpbWlzdGljIC0gd2UgY291bGQga25vdyBpbiBz
b21lIGNhc2VzIHRoYXQgdGhlCiAgICAgICAgICAgICAvLyBERkcgY29kZSBhdCB0aGUgcG9pbnQg
b2YgdGhlIE9TUiBoYWQgYWxyZWFkeSBpbml0aWFsaXplZCB0aGUgbGF6eQogICAgICAgICAgICAg
Ly8gdmFyaWFibGUuIEJ1dCBtYXliZSB0aGlzIGlzIGZpbmUsIHNpbmNlIHdlJ3JlIGluc2VydGlu
ZyBPU1IKQEAgLTE3MSw3ICsxNzEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1f
c3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5k
KHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKS5vZmZzZXQoKSk7CiAgICAgICAgIGlmICghdmFy
aWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgIGlmICh2YWx1ZS5p
c0NsZWFyKCkpCiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKQEAgLTE4
Myw3ICsxODMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKLSAgICAgICAgQWJz
dHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2RlLT51bmxp
bmtlZExvY2FsKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS52YXJp
YWJsZXMoKS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKS5vZmZzZXQoKSk7CiAgICAgICAg
IGlmICh2YWx1ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50
cyh0cnVlKTsKICAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOwpAQCAtMTkxLDcgKzE5MSw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2RlLT5sb2NhbCgpLm9mZnNldCgpKSA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApA
QCAtMTEzMyw3ICsxMTMzLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgogICAgICAgICBpZiAoaXNF
bXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3Bl
cmFuZCgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihu
b2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5h
cmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKS5vZmZzZXQoKSkubV90eXBlKSkK
ICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CkBAIC0xNjA3LDEzICsxNjA3
LDEzIEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
fQogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX2NvZGVCbG9jay0+bV9u
dW1WYXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQo
bG9jYWxUb09wZXJhbmQoaSkpKQorICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NhcHR1
cmVkKFZpcnR1YWxSZWdpc3Rlcjo6dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpKQogICAgICAg
ICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkubG9jYWwoaSkubWFrZUhlYXBUb3AoKTsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX3N0YXRlLnZhcmlhYmxlcygp
Lm51bWJlck9mQXJndW1lbnRzKCk7IGktLTspIHsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5p
c0NhcHR1cmVkKGFyZ3VtZW50VG9PcGVyYW5kKGkpKSkKKyAgICAgICAgaWYgKG1fY29kZUJsb2Nr
LT5pc0NhcHR1cmVkKFZpcnR1YWxSZWdpc3Rlcjo6dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aSkpKQogICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1bWVudChpKS5tYWtlSGVh
cFRvcCgpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRQb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJndW1lbnRQb3NpdGlvbi5oCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTE4
LDE1ICsxMTgsMTUgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZXNbaV0tPmZpbmQoKTsKLSAgICAgICAgICAg
IGludCBvcGVyYW5kID0gdmFyaWFibGUtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kID0gdmFyaWFibGUtPmxvY2FsKCk7CiAKICAgICAgICAgICAgIGlmIChp
KQogICAgICAgICAgICAgICAgIG91dC5wcmludCgiICIpOwogCi0gICAgICAgICAgICBpZiAob3Bl
cmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICAgICAgb3V0LnByaW50KCJhcmci
LCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1w
KCpncmFwaCwgdmFyaWFibGUpLCAiKSIpOworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1
bWVudCgpKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiYXJnIiwgb3BlcmFuZC50b0FyZ3Vt
ZW50KCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqZ3JhcGgsIHZhcmlhYmxlKSwgIiki
KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoInIiLCBvcGVy
YW5kLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKmdyYXBoLCB2YXJpYWJsZSksICIpIik7
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJyIiwgb3BlcmFuZC50b0xvY2FsKCksICIoIiwg
VmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqZ3JhcGgsIHZhcmlhYmxlKSwgIikiKTsKICAgICAgICAg
fQogICAgICAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODgsNyArMTg4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsK
ICAgICAgICAgICAgICAgICAgICAgTm9kZSogc291cmNlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgp
OwogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBp
bnQgYXJndW1lbnRzUmVnaXN0ZXIgPQorICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPQogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC51
bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNvdXJjZS0+b3AoKSAhPSBDcmVhdGVBcmd1bWVudHMgJiYgc291cmNl
LT5vcCgpICE9IFBoYW50b21Bcmd1bWVudHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IHRoZSBzb3VyY2Ugb2YgdGhlIFNldExvY2FsIGtub3dzIHRoYXQgaWYg
aXQncwpAQCAtMjE2LDcgKzIxNiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghbV9pc0xpdmUuY29udGFpbnModmFyaWFibGVBY2Nlc3NEYXRhKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3Rlci5p
c1ZhbGlkKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodmFyaWFibGVBY2Nlc3NE
YXRhLT5sb2NhbCgpID09IGFyZ3VtZW50c1JlZ2lzdGVyCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSB1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpOwpAQCAtMjM0LDcgKzIzNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgIT0gSW52YWxp
ZFZpcnR1YWxSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0
ZXIuaXNWYWxpZCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodmFyaWFibGVBY2Nlc3NE
YXRhLT5sb2NhbCgpID09IGFyZ3VtZW50c1JlZ2lzdGVyCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09IHVubW9kaWZpZWRBcmd1bWVu
dHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcikpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPT0gc291cmNlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSkKQEAgLTYxOSw3ICs2MTksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBub2RlLT5jaGlsZHJlbjsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dl
dExvY2FsVW5saW5rZWQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KAorICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5i
YXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJndW1lbnRJbmRleEFmdGVy
Q2FwdHVyZShpbmRleCkpKTsKIApAQCAtNzExLDggKzcxMSw4IEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICBp
bnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pOwotICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVy
ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBh
cmd1bWVudHNSZWdpc3RlciA9IG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Io
bm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIuaXNW
YWxpZCgpCiAgICAgICAgICAgICAgICAgJiYgKG5vZGUtPmxvY2FsKCkgPT0gYXJndW1lbnRzUmVn
aXN0ZXIKICAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS0+bG9jYWwoKSA9PSB1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSkgewogICAgICAgICAgICAgICAg
IG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
OwpAQCAtNzgzLDggKzc4Myw4IEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAoc291cmNlLT5v
cCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gc291cmNlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKLSAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1fZ3JhcGgudW5jaGVja2Vk
QXJndW1lbnRzUmVnaXN0ZXJGb3Ioc291cmNlLT5jb2RlT3JpZ2luKTsKLSAgICAgICAgICAgIGlm
IChhcmd1bWVudHNSZWdpc3RlciA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0gbV9ncmFwaC51bmNoZWNrZWRB
cmd1bWVudHNSZWdpc3RlckZvcihzb3VyY2UtPmNvZGVPcmlnaW4pOworICAgICAgICAgICAgaWYg
KCFhcmd1bWVudHNSZWdpc3Rlci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5s
b2NhbCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxNTYxMzYp
CShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmg6MTU2
MTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Fzc2VtYmx5SGVscGVyc19o
CisjZGVmaW5lIERGR0Fzc2VtYmx5SGVscGVyc19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5j
bHVkZSAiREZHRlBSSW5mby5oIgorI2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKKyNpbmNsdWRlICJE
RkdKSVRDb2RlLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIlZNLmgiCisjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCit0eXBlZGVmIHZvaWQgKCpWX0RGR0RlYnVnT3BlcmF0aW9uX0VQUCkoRXhlY1N0YXRlKiwg
dm9pZCosIHZvaWQqKTsKKworY2xhc3MgQXNzZW1ibHlIZWxwZXJzIDogcHVibGljIE1hY3JvQXNz
ZW1ibGVyIHsKK3B1YmxpYzoKKyAgICBBc3NlbWJseUhlbHBlcnMoVk0qIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaykKKyAgICAgICAgOiBtX3ZtKHZtKQorICAgICAgICAsIG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKKyAgICAgICAgLCBtX2Jhc2VsaW5lQ29kZUJsb2NrKGNvZGVCbG9jayA/IGNvZGVC
bG9jay0+YmFzZWxpbmVWZXJzaW9uKCkgOiAwKQorICAgIHsKKyAgICAgICAgaWYgKG1fY29kZUJs
b2NrKSB7CisgICAgICAgICAgICBBU1NFUlQobV9iYXNlbGluZUNvZGVCbG9jayk7CisgICAgICAg
ICAgICBBU1NFUlQoIW1fYmFzZWxpbmVDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgICAg
ICAgICAgQVNTRVJUKG1fYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpC
YXNlbGluZUpJVCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsgfQorICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1f
dm07IH0KKyAgICBBc3NlbWJsZXJUeXBlX1QmIGFzc2VtYmxlcigpIHsgcmV0dXJuIG1fYXNzZW1i
bGVyOyB9CisgICAgCisjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKKyAgICB2b2lkIHByZXNl
cnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgcG9w
KHJlZyk7CisgICAgfQorCisgICAgdm9pZCByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihHUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgcHVzaChyZWcpOworICAgIH0KKworICAgIHZv
aWQgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgcHVzaChhZGRyZXNzKTsKKyAgICB9CisjZW5kaWYgLy8gQ1BVKFg4Nl82NCkg
fHwgQ1BVKFg4NikKKworI2lmIENQVShBUk0pCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHByZXNl
cnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAg
IG1vdmUobGlua1JlZ2lzdGVyLCByZWcpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKKyAgICB7
CisgICAgICAgIG1vdmUocmVnLCBsaW5rUmVnaXN0ZXIpOworICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgdm9pZCByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3MsIGxpbmtSZWdpc3Rlcik7CisgICAg
fQorI2VuZGlmCisKKyNpZiBDUFUoTUlQUykKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcHJlc2Vy
dmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAg
bW92ZShyZXR1cm5BZGRyZXNzUmVnaXN0ZXIsIHJlZyk7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSB2b2lkIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVn
KQorICAgIHsKKyAgICAgICAgbW92ZShyZWcsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7CisgICAg
fQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0
dXJuKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzcywgcmV0
dXJuQWRkcmVzc1JlZ2lzdGVyKTsKKyAgICB9CisjZW5kaWYKKworI2lmIENQVShTSDQpCisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3Rl
cklEIHJlZykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0c3ByKHJlZyk7CisgICAgfQor
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRzcHIocmVnKTsK
KyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZv
cmVSZXR1cm4oQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZFB0ckxpbmtSZWco
YWRkcmVzcyk7CisgICAgfQorI2VuZGlmCisKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5LCBHUFJSZWcgdG8p
CisgICAgeworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICB9CisgICAgdm9pZCBlbWl0
UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSUmVnIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
ckVudHJ5IGVudHJ5KQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdG9yZTY0
KGZyb20sIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9m
KFJlZ2lzdGVyKSkpOworI2Vsc2UKKyAgICAgICAgc3RvcmUzMihmcm9tLCBBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyNlbmRp
ZgorICAgIH0KKworICAgIHZvaWQgZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKHZv
aWQqIHZhbHVlLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkKKyAgICB7Cisg
ICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaElmTm90Q2VsbChHUFJSZWcgcmVnKQorICAgIHsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCByZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisjZWxzZQorICAgICAgICByZXR1cm4g
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZWcsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSk7CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgc3RhdGljIEFkZHJlc3Mg
YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdp
c3RlciAqIHNpemVvZihSZWdpc3RlcikpOworICAgIH0KKyAgICBzdGF0aWMgQWRkcmVzcyBhZGRy
ZXNzRm9yKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Ioc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgfQorCisgICAgc3RhdGlj
IEFkZHJlc3MgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVh
bFJlZ2lzdGVyICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7CisgICAgfQorICAgIHN0YXRpYyBBZGRyZXNzIHRh
Z0ZvcihpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiB0YWdGb3Ioc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgfQorCisgICAgc3RhdGljIEFkZHJl
c3MgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxS
ZWdpc3RlciAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICB9CisgICAgc3RhdGljIEFkZHJlc3Mg
cGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBwYXlsb2FkRm9y
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgIH0KKworICAgIEp1
bXAgYnJhbmNoSWZOb3RPYmplY3QoR1BSUmVnIHN0cnVjdHVyZVJlZykKKyAgICB7CisgICAgICAg
IHJldHVybiBicmFuY2g4KEJlbG93LCBBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSk7CisgICAgfQor
CisgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJlZyBwcmVzZXJ2ZTEgPSBJ
bnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHBy
ZXNlcnZlMyA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTQgPSBJbnZhbGlkR1BSUmVn
KQorICAgIHsKKyAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMCAmJiBwcmVz
ZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDAgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1QwICYm
IHByZXNlcnZlNCAhPSBHUFJJbmZvOjpyZWdUMCkKKyAgICAgICAgICAgIHJldHVybiBHUFJJbmZv
OjpyZWdUMDsKKworICAgICAgICBpZiAocHJlc2VydmUxICE9IEdQUkluZm86OnJlZ1QxICYmIHBy
ZXNlcnZlMiAhPSBHUFJJbmZvOjpyZWdUMSAmJiBwcmVzZXJ2ZTMgIT0gR1BSSW5mbzo6cmVnVDEg
JiYgcHJlc2VydmU0ICE9IEdQUkluZm86OnJlZ1QxKQorICAgICAgICAgICAgcmV0dXJuIEdQUklu
Zm86OnJlZ1QxOworCisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDIgJiYg
cHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QyICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdU
MiAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDIpCisgICAgICAgICAgICByZXR1cm4gR1BS
SW5mbzo6cmVnVDI7CisKKyAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMyAm
JiBwcmVzZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDMgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJl
Z1QzICYmIHByZXNlcnZlNCAhPSBHUFJJbmZvOjpyZWdUMykKKyAgICAgICAgICAgIHJldHVybiBH
UFJJbmZvOjpyZWdUMzsKKworICAgICAgICByZXR1cm4gR1BSSW5mbzo6cmVnVDQ7CisgICAgfQor
CisgICAgLy8gQWRkIGEgZGVidWcgY2FsbC4gVGhpcyBjYWxsIGhhcyBubyBlZmZlY3Qgb24gSklU
IGNvZGUgZXhlY3V0aW9uIHN0YXRlLgorICAgIHZvaWQgZGVidWdDYWxsKFZfREZHRGVidWdPcGVy
YXRpb25fRVBQIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCkKKyAgICB7CisgICAgICAgIHNpemVf
dCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAoR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7CisgICAgICAgIFNjcmF0
Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX3ZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3Jh
dGNoU2l6ZSk7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxF
bmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7CisKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kp
IHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgc3RvcmU2NChHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpLCBidWZmZXIgKyBpKTsKKyNlbHNlCisgICAgICAgICAgICBzdG9yZTMyKEdQUklu
Zm86OnRvUmVnaXN0ZXIoaSksIGJ1ZmZlciArIGkpOworI2VuZGlmCisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7
ICsraSkgeworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIHN0
b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFRlbGwgR0MgbWFyayBwaGFzZSBob3cgbXVjaCBvZiB0aGUgc2Ny
YXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxsLgorICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBHUFJJbmZvOjpy
ZWdUMCk7CisKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8fCBDUFUoTUlQUykgfHwgQ1BV
KFNINCkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ1ZmZlciksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhcmd1bWVudCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gc2VsZWN0
U2NyYXRjaEdQUihHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyNlbGlmIENQVShYODYpCisgICAgICAgIHBva2UoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIDApOworICAgICAgICBwb2tlKFRydXN0ZWRJbW1QdHIo
YXJndW1lbnQpLCAxKTsKKyAgICAgICAgcG9rZShUcnVzdGVkSW1tUHRyKGJ1ZmZlciksIDIpOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QwOworI2Vsc2UKKyNlcnJvciAi
REZHIEpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgorI2VuZGlmCisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbikpLCBz
Y3JhdGNoKTsKKyAgICAgICAgY2FsbChzY3JhdGNoKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEdQUkluZm86OnJlZ1QwKTsKKwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnM7ICsraSkgeworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
IGxvYWREb3VibGUoR1BSSW5mbzo6cmVnVDAsIEZQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAg
ICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgKytpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGxvYWQ2
NChidWZmZXIgKyBpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNlbHNlCisgICAgICAgICAg
ICBsb2FkMzIoYnVmZmVyICsgaSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisjZW5kaWYKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgSklUIGdlbmVyYXRlIGR5bmFt
aWMsIGRlYnVnLW9ubHkgY2hlY2tzIC0gYWtpbiB0byBBU1NFUlRzLgorI2lmIERGR19FTkFCTEUo
SklUX0FTU0VSVCkKKyAgICB2b2lkIGppdEFzc2VydElzSW50MzIoR1BSUmVnKTsKKyAgICB2b2lk
IGppdEFzc2VydElzSlNJbnQzMihHUFJSZWcpOworICAgIHZvaWQgaml0QXNzZXJ0SXNKU051bWJl
cihHUFJSZWcpOworICAgIHZvaWQgaml0QXNzZXJ0SXNKU0RvdWJsZShHUFJSZWcpOworICAgIHZv
aWQgaml0QXNzZXJ0SXNDZWxsKEdQUlJlZyk7CisgICAgdm9pZCBqaXRBc3NlcnRIYXNWYWxpZENh
bGxGcmFtZSgpOworI2Vsc2UKKyAgICB2b2lkIGppdEFzc2VydElzSW50MzIoR1BSUmVnKSB7IH0K
KyAgICB2b2lkIGppdEFzc2VydElzSlNJbnQzMihHUFJSZWcpIHsgfQorICAgIHZvaWQgaml0QXNz
ZXJ0SXNKU051bWJlcihHUFJSZWcpIHsgfQorICAgIHZvaWQgaml0QXNzZXJ0SXNKU0RvdWJsZShH
UFJSZWcpIHsgfQorICAgIHZvaWQgaml0QXNzZXJ0SXNDZWxsKEdQUlJlZykgeyB9CisgICAgdm9p
ZCBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpIHsgfQorI2VuZGlmCisKKyAgICAvLyBUaGVz
ZSBtZXRob2RzIGNvbnZlcnQgYmV0d2VlbiBkb3VibGVzLCBhbmQgZG91YmxlcyBib3hlZCBhbmQg
SlNWYWx1ZXMuCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBHUFJSZWcgYm94RG91YmxlKEZQUlJl
ZyBmcHIsIEdQUlJlZyBncHIpCisgICAgeworICAgICAgICBtb3ZlRG91YmxlVG82NChmcHIsIGdw
cik7CisgICAgICAgIHN1YjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsK
KyAgICAgICAgaml0QXNzZXJ0SXNKU0RvdWJsZShncHIpOworICAgICAgICByZXR1cm4gZ3ByOwor
ICAgIH0KKyAgICBGUFJSZWcgdW5ib3hEb3VibGUoR1BSUmVnIGdwciwgRlBSUmVnIGZwcikKKyAg
ICB7CisgICAgICAgIGppdEFzc2VydElzSlNEb3VibGUoZ3ByKTsKKyAgICAgICAgYWRkNjQoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOworICAgICAgICBtb3ZlNjRUb0RvdWJs
ZShncHIsIGZwcik7CisgICAgICAgIHJldHVybiBmcHI7CisgICAgfQorICAgIAorICAgIHZvaWQg
Ym94SW50NTIoR1BSUmVnIHNvdXJjZSwgR1BSUmVnIHRhcmdldCwgR1BSUmVnIHNjcmF0Y2gsIEZQ
UlJlZyBmcFNjcmF0Y2gpCisgICAgeworICAgICAgICAvLyBJcyBpdCBhbiBpbnQzMj8KKyAgICAg
ICAgc2lnbkV4dGVuZDMyVG9QdHIoc291cmNlLCBzY3JhdGNoKTsKKyAgICAgICAgSnVtcCBpc0lu
dDMyID0gYnJhbmNoNjQoRXF1YWwsIHNvdXJjZSwgc2NyYXRjaCk7CisgICAgICAgIAorICAgICAg
ICAvLyBOb3BlLCBpdCdzIG5vdCwgYnV0IHJlZ1QwIGNvbnRhaW5zIHRoZSBpbnQ2NCB2YWx1ZS4K
KyAgICAgICAgY29udmVydEludDY0VG9Eb3VibGUoc291cmNlLCBmcFNjcmF0Y2gpOworICAgICAg
ICBib3hEb3VibGUoZnBTY3JhdGNoLCB0YXJnZXQpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisgICAgICAgIAorICAgICAgICBpc0ludDMyLmxpbmsodGhpcyk7CisgICAgICAgIHplcm9F
eHRlbmQzMlRvUHRyKHNvdXJjZSwgdGFyZ2V0KTsKKyAgICAgICAgb3I2NChHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHRhcmdldCk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgfQorI2VuZGlmCisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHZvaWQg
Ym94RG91YmxlKEZQUlJlZyBmcHIsIEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSKQor
ICAgIHsKKyAgICAgICAgbW92ZURvdWJsZVRvSW50cyhmcHIsIHBheWxvYWRHUFIsIHRhZ0dQUik7
CisgICAgfQorICAgIHZvaWQgdW5ib3hEb3VibGUoR1BSUmVnIHRhZ0dQUiwgR1BSUmVnIHBheWxv
YWRHUFIsIEZQUlJlZyBmcHIsIEZQUlJlZyBzY3JhdGNoRlBSKQorICAgIHsKKyAgICAgICAgbW92
ZUludHNUb0RvdWJsZShwYXlsb2FkR1BSLCB0YWdHUFIsIGZwciwgc2NyYXRjaEZQUik7CisgICAg
fQorI2VuZGlmCisgICAgCisgICAgZW51bSBFeGNlcHRpb25DaGVja0tpbmQgeyBOb3JtYWxFeGNl
cHRpb25DaGVjaywgSW52ZXJ0ZWRFeGNlcHRpb25DaGVjayB9OworICAgIEp1bXAgZW1pdEV4Y2Vw
dGlvbkNoZWNrKEV4Y2VwdGlvbkNoZWNrS2luZCBraW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sp
CisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChraW5k
ID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRlQWRkcmVz
cyh2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICByZXR1cm4gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVx
dWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPih2bSgp
LT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisjZW5kaWYK
KyAgICB9CisKKyNpZiBFTkFCTEUoU0FNUExJTkdfQ09VTlRFUlMpCisgICAgc3RhdGljIHZvaWQg
ZW1pdENvdW50KE1hY3JvQXNzZW1ibGVyJiBqaXQsIEFic3RyYWN0U2FtcGxpbmdDb3VudGVyJiBj
b3VudGVyLCBpbnQzMl90IGluY3JlbWVudCA9IDEpCisgICAgeworICAgICAgICBqaXQuYWRkNjQo
VHJ1c3RlZEltbTMyKGluY3JlbWVudCksIEFic29sdXRlQWRkcmVzcyhjb3VudGVyLmFkZHJlc3NP
ZkNvdW50ZXIoKSkpOworICAgIH0KKyAgICB2b2lkIGVtaXRDb3VudChBYnN0cmFjdFNhbXBsaW5n
Q291bnRlciYgY291bnRlciwgaW50MzJfdCBpbmNyZW1lbnQgPSAxKQorICAgIHsKKyAgICAgICAg
YWRkNjQoVHJ1c3RlZEltbTMyKGluY3JlbWVudCksIEFic29sdXRlQWRkcmVzcyhjb3VudGVyLmFk
ZHJlc3NPZkNvdW50ZXIoKSkpOworICAgIH0KKyNlbmRpZgorCisjaWYgRU5BQkxFKFNBTVBMSU5H
X0ZMQUdTKQorICAgIHZvaWQgc2V0U2FtcGxpbmdGbGFnKGludDMyX3QpOworICAgIHZvaWQgY2xl
YXJTYW1wbGluZ0ZsYWcoaW50MzJfdCBmbGFnKTsKKyNlbmRpZgorCisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAgeworICAgICAg
ICByZXR1cm4gY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBzdHJpY3RNb2RlRm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKKyAg
ICB7CisgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAg
ICByZXR1cm4gY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpOworICAgICAgICByZXR1cm4ganND
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVj
dXRhYmxlLmdldCgpKS0+aXNTdHJpY3RNb2RlKCk7CisgICAgfQorICAgIAorICAgIEV4ZWN1dGFi
bGVCYXNlKiBleGVjdXRhYmxlRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pOworICAg
IAorICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29uc3QgQ29kZU9yaWdpbiYg
Y29kZU9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zvck9y
aWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKCkp
OworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCFpbmxpbmVD
YWxsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2soKTsKKyAgICAg
ICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxG
cmFtZSk7CisgICAgfQorICAgIAorICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2soKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFzZWxpbmVDb2RlQmxvY2s7CisgICAgfQorICAgIAor
ICAgIGludCBhcmd1bWVudHNSZWdpc3RlckZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSkKKyAgICB7CisgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAg
cmV0dXJuIGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKAorICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSArIGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQ7CisgICAgfQorICAgIAorICAgIGludCBhcmd1bWVudHNSZWdpc3RlckZv
cihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFy
Z3VtZW50c1JlZ2lzdGVyRm9yKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICB9Cisg
ICAgCisgICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlRm9yKGNvbnN0IENvZGVPcmln
aW4mIGNvZGVPcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tG
b3IoY29kZU9yaWdpbiktPnN5bWJvbFRhYmxlKCk7CisgICAgfQorCisgICAgaW50IG9mZnNldE9m
TG9jYWxzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAgeworICAgICAgICBpZiAo
IWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXpl
b2YoUmVnaXN0ZXIpOworICAgIH0KKworICAgIGludCBvZmZzZXRPZkFyZ3VtZW50c0luY2x1ZGlu
Z1RoaXMoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKKyAgICB7CisgICAgICAgIGlmICgh
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4gQ2FsbEZyYW1l
Ojphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkgKiBzaXplb2YoUmVnaXN0ZXIpOworICAg
ICAgICByZXR1cm4gKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApKSAqIHNpemVvZihSZWdpc3Rl
cik7CisgICAgfQorCisgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29k
ZWRDb2RlTWFwRm9yKENvZGVCbG9jayopOworICAgIAorcHJvdGVjdGVkOgorICAgIFZNKiBtX3Zt
OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX2Jhc2VsaW5l
Q29kZUJsb2NrOworCisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0PiA+IG1fZGVjb2RlZENvZGVNYXBzOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdB
c3NlbWJseUhlbHBlcnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fz
c2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NSwzMSAr
MTU1LDM0IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKKyAgICBzdGF0aWMgQWRkcmVz
cyBhZGRyZXNzRm9yKGludCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gQWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSk7Cisg
ICAgfQorCiAgICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3RlcikpOworICAg
ICAgICByZXR1cm4gYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOwogICAgIH0K
LSAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKGludCBvcGVyYW5kKQorCisgICAgc3RhdGlj
IEFkZHJlc3MgdGFnRm9yKGludCBvZmZzZXQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRkcmVz
c0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgcmV0
dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCAqIHNpemVvZihS
ZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnRhZykpOwogICAgIH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3Rlcikg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwor
ICAgICAgICByZXR1cm4gdGFnRm9yKHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSk7CiAgICAgfQot
ICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihpbnQgb3BlcmFuZCkKKworICAgIHN0YXRpYyBBZGRy
ZXNzIHBheWxvYWRGb3IoaW50IG9mZnNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0YWdGb3Io
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgIHJldHVybiBB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKiBzaXplb2YoUmVnaXN0
ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3Rl
cikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKTsKLSAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBwYXlsb2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4ob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gcGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0
ZXIub2Zmc2V0KCkpOwogICAgIH0KIAogICAgIEp1bXAgYnJhbmNoSWZOb3RPYmplY3QoR1BSUmVn
IHN0cnVjdHVyZVJlZykKQEAgLTM4MSw3ICszODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBtX2Jhc2VsaW5lQ29kZUJsb2NrOwogICAgIH0KICAgICAKLSAgICBpbnQgYXJndW1lbnRzUmVn
aXN0ZXJGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lKQogICAgIHsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICBy
ZXR1cm4gY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCk7CkBAIC0zOTAsNyArMzkzLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lKS0+YXJndW1lbnRzUmVnaXN0
ZXIoKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAgICAgfQogICAgIAotICAgIGlu
dCBhcmd1bWVudHNSZWdpc3RlckZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlckZvcihjb25zdCBDb2RlT3JpZ2luJiBj
b2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTU2MzY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5MSwzNyArMTkxLDM3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBsaW5rQmxv
Y2soQmFzaWNCbG9jayosIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAg
ICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3Ms
IFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgCi0gICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoaW50IG9wZXJhbmQsIGJvb2wgaXND
YXB0dXJlZCkKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgYm9vbCBpc0NhcHR1cmVkKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKG9wZXJhbmQgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIEFT
U0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5t
X3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQoVmFyaWFibGVBY2Nlc3NEYXRhKHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCksIGlzQ2FwdHVyZWQpKTsKKyAgICAgICAgbV9ncmFw
aC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5hcHBlbmQoVmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQs
IGlzQ2FwdHVyZWQpKTsKICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NE
YXRhLmxhc3QoKTsKICAgICB9CiAgICAgCiAgICAgLy8gR2V0L1NldCB0aGUgb3BlcmFuZHMvcmVz
dWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCi0gICAgTm9kZSogZ2V0RGlyZWN0KGludCBv
cGVyYW5kKQorICAgIE5vZGUqIGdldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAg
ICB7CiAgICAgICAgIC8vIElzIHRoaXMgYSBjb25zdGFudD8KLSAgICAgICAgaWYgKG9wZXJhbmQg
Pj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNv
bnN0YW50ID0gb3BlcmFuZCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OworICAgICAgICBp
ZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0YW50
ID0gb3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKTsKICAgICAgICAgICAgIEFTU0VSVChjb25zdGFu
dCA8IG1fY29uc3RhbnRzLnNpemUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFu
dChjb25zdGFudCk7CiAgICAgICAgIH0KIAotICAgICAgICBBU1NFUlQob3BlcmFuZCAhPSBKU1N0
YWNrOjpDYWxsZWUpOworICAgICAgICBBU1NFUlQob3BlcmFuZC5vZmZzZXQoKSAhPSBKU1N0YWNr
OjpDYWxsZWUpOwogICAgICAgICAKICAgICAgICAgLy8gSXMgdGhpcyBhbiBhcmd1bWVudD8KLSAg
ICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICBpZiAob3BlcmFu
ZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnQob3BlcmFuZCk7
CiAKICAgICAgICAgLy8gTXVzdCBiZSBhIGxvY2FsLgogICAgICAgICByZXR1cm4gZ2V0TG9jYWwo
b3BlcmFuZCk7CiAgICAgfQogCi0gICAgTm9kZSogZ2V0KGludCBvcGVyYW5kKQorICAgIE5vZGUq
IGdldChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5k
ID09IEpTU3RhY2s6OkNhbGxlZSkgeworICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA9PSBK
U1N0YWNrOjpDYWxsZWUpIHsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSAmJiBp
bmxpbmVDYWxsRnJhbWUoKS0+Y2FsbGVlKQogICAgICAgICAgICAgICAgIHJldHVybiBjZWxsQ29u
c3RhbnQoaW5saW5lQ2FsbEZyYW1lKCktPmNhbGxlZS5nZXQoKSk7CiAgICAgICAgICAgICAKQEAg
LTIzMCwxMiArMjMwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICByZXR1cm4gZ2V0
RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CiAgICAgfQot
CisgICAgCiAgICAgZW51bSBTZXRNb2RlIHsgTm9ybWFsU2V0LCBTZXRPbkVudHJ5IH07Ci0gICAg
dm9pZCBzZXREaXJlY3QoaW50IG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUg
PSBOb3JtYWxTZXQpCisgICAgdm9pZCBzZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQs
IE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewogICAgICAg
ICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQo
b3BlcmFuZCkpIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CiAgICAgICAg
ICAgICBzZXRBcmd1bWVudChvcGVyYW5kLCB2YWx1ZSwgc2V0TW9kZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KQEAgLTI0NCw3ICsyNDQsNyBAQCBwcml2YXRlOgogICAgICAgICBz
ZXRMb2NhbChvcGVyYW5kLCB2YWx1ZSwgc2V0TW9kZSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXQo
aW50IG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisg
ICAgdm9pZCBzZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2Rl
IHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewogICAgICAgICBzZXREaXJlY3QobV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpLCB2YWx1ZSwgc2V0TW9kZSk7CiAgICAgfQpA
QCAtMjY0LDkgKzI2NCw5IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgLy8gVXNlZCBpbiBpbXBs
ZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGEgbG9jYWwgdmFy
aWFibGUuCi0gICAgTm9kZSogZ2V0TG9jYWwoaW50IG9wZXJhbmQpCisgICAgTm9kZSogZ2V0TG9j
YWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICB1bnNpZ25lZCBsb2Nh
bCA9IG9wZXJhbmRUb0xvY2FsKG9wZXJhbmQpOworICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9w
ZXJhbmQudG9Mb2NhbCgpOwogICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCk7CiAgICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1f
Y29kZUJsb2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQsIGlubGluZUNhbGxGcmFtZSgpKTsKICAgICAg
ICAgCkBAIC0zMDIsOSArMzAyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG5vZGU7CiAg
ICAgfQogCi0gICAgdm9pZCBzZXRMb2NhbChpbnQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1v
ZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKyAgICB2b2lkIHNldExvY2FsKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAg
IHsKLSAgICAgICAgdW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kVG9Mb2NhbChvcGVyYW5kKTsKKyAg
ICAgICAgdW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKICAgICAgICAgYm9vbCBp
c0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgaW5saW5lQ2FsbEZy
YW1lKCkpOwogICAgICAgICAKICAgICAgICAgaWYgKHNldE1vZGUgPT0gTm9ybWFsU2V0KSB7CkBA
IC0zMjMsOSArMzIzLDkgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxl
bWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYW4gYXJndW1lbnQu
Ci0gICAgTm9kZSogZ2V0QXJndW1lbnQodW5zaWduZWQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRB
cmd1bWVudChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVk
IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCk7CisgICAgICAgIHVuc2lnbmVk
IGFyZ3VtZW50ID0gb3BlcmFuZC50b0FyZ3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVu
dCA8IG1fbnVtQXJndW1lbnRzKTsKICAgICAgICAgCiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKQEAgLTM1Miw5
ICszNTIsOSBAQCBwcml2YXRlOgogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAg
IH0KLSAgICB2b2lkIHNldEFyZ3VtZW50KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9k
ZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIHZvaWQgc2V0QXJndW1lbnQoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAg
ICAgewotICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJh
bmQpOworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOwog
ICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50cyk7CiAgICAgICAgIAogICAg
ICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kKTsK
QEAgLTM4NSwyOCArMzg1LDI4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzdGFjay0+bV9h
cmd1bWVudFBvc2l0aW9uc1thcmd1bWVudF07CiAgICAgfQogICAgIAotICAgIEFyZ3VtZW50UG9z
aXRpb24qIGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwoaW50IG9wZXJhbmQpCisgICAgQXJn
dW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZvciAoSW5saW5lU3RhY2tFbnRyeSogc3RhY2sg
PSBtX2lubGluZVN0YWNrVG9wOyA7IHN0YWNrID0gc3RhY2stPm1fY2FsbGVyKSB7CiAgICAgICAg
ICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHN0YWNrLT5tX2lubGluZUNh
bGxGcmFtZTsKICAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKG9wZXJhbmQgPD0gc3RhdGljX2Nhc3Q8aW50Pihp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSkpCisgICAgICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA8PSBzdGF0aWNfY2FzdDxpbnQ+
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJT
aXplKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChvcGVyYW5k
ID09IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVu
dE9mZnNldCgpKQorICAgICAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPT0gaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAob3BlcmFuZCA+IHN0YXRp
Y19jYXN0PGludD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxG
cmFtZUhlYWRlclNpemUgKyBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpKQorICAg
ICAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPiBzdGF0aWNfY2FzdDxpbnQ+KGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQg
LSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIGludCBhcmd1bWVu
dCA9IFZpcnR1YWxSZWdpc3Rlcjo6b3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZC5vZmZzZXQoKSAt
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJuIHN0YWNr
LT5tX2FyZ3VtZW50UG9zaXRpb25zW2FyZ3VtZW50XTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAgICAgCi0gICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9z
aXRpb24oaW50IG9wZXJhbmQpCisgICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9z
aXRpb24oVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9z
aXRpb25Gb3JBcmd1bWVudChvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSk7CisgICAgICAgIGlm
IChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQ
b3NpdGlvbkZvckFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKICAgICAgICAgcmV0dXJu
IGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwob3BlcmFuZCk7CiAgICAgfQogCkBAIC00MjIs
MjQgKzQyMiwyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFsdWUpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIGZsdXNoKGludCBvcGVyYW5kKQorICAgIHZvaWQgZmx1c2goVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChtX2lubGluZVN0YWNrVG9w
LT5yZW1hcE9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZsdXNoRGly
ZWN0KGludCBvcGVyYW5kKQorICAgIHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChvcGVyYW5kLCBmaW5kQXJndW1lbnRQ
b3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoaW50
IG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCisgICAgdm9pZCBm
bHVzaERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJn
dW1lbnRQb3NpdGlvbikKICAgICB7CiAgICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJs
b2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQsIGlubGluZUNhbGxGcmFtZSgpKTsKICAgICAgICAgCi0g
ICAgICAgIEFTU0VSVChvcGVyYW5kIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAg
ICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIGlm
ICghb3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICBtX3ByZXNlcnZlZFZh
cnMuc2V0KG9wZXJhbmRUb0xvY2FsKG9wZXJhbmQpKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNM
b2NhbCgpKQorICAgICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzLnNldChvcGVyYW5kLnRvTG9jYWwo
KSk7CiAgICAgICAgIAogICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKQEAgLTQ2NSwxMSArNDY1LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9IGlu
bGluZVN0YWNrRW50cnktPm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgYXJndW1lbnQgPSBudW1Bcmd1bWVudHM7IGFyZ3VtZW50LS0gPiAxOykKLSAg
ICAgICAgICAgIGZsdXNoRGlyZWN0KGlubGluZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChhcmd1
bWVudFRvT3BlcmFuZChhcmd1bWVudCkpKTsKKyAgICAgICAgICAgIGZsdXNoRGlyZWN0KGlubGlu
ZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXI6OnZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGFyZ3VtZW50KSkpOwogICAgICAgICBmb3IgKGludCBsb2NhbCA9IDA7IGxv
Y2FsIDwgaW5saW5lU3RhY2tFbnRyeS0+bV9jb2RlQmxvY2stPm1fbnVtVmFyczsgKytsb2NhbCkg
ewotICAgICAgICAgICAgaWYgKCFpbmxpbmVTdGFja0VudHJ5LT5tX2NvZGVCbG9jay0+aXNDYXB0
dXJlZChsb2NhbFRvT3BlcmFuZChsb2NhbCkpKQorICAgICAgICAgICAgaWYgKCFpbmxpbmVTdGFj
a0VudHJ5LT5tX2NvZGVCbG9jay0+aXNDYXB0dXJlZChWaXJ0dWFsUmVnaXN0ZXI6OnZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGxvY2FsKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVTdGFja0VudHJ5LT5yZW1hcE9wZXJhbmQobG9jYWxU
b09wZXJhbmQobG9jYWwpKSk7CisgICAgICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVTdGFja0Vu
dHJ5LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyOjp2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChsb2NhbCkpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTQ5LDYgKzU0OSw3IEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICByZXR1cm4gZ2V0KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrLT50aGlzUmVnaXN0ZXIoKSk7CiAgICAgfQorCiAgICAgdm9pZCBzZXRUaGlzKE5vZGUqIHZh
bHVlKQogICAgIHsKICAgICAgICAgc2V0KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT50
aGlzUmVnaXN0ZXIoKSwgdmFsdWUpOwpAQCAtNzc4LDcgKzc3OSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1jdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
OwogICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBvcCA9PSBDYWxsID8gMCA6IDE7CiAg
ICAgICAgIGZvciAoaW50IGkgPSAwICsgZHVtbXlUaGlzQXJndW1lbnQ7IGkgPCBhcmdDb3VudDsg
KytpKQotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJn
dW1lbnRUb09wZXJhbmQoaSkpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChyZWdp
c3Rlck9mZnNldCArIFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoaSkpKTsKIAog
ICAgICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG9wLCBPcEluZm8o
MCksIE9wSW5mbyhwcmVkaWN0aW9uKSk7CiAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCBjYWxsKTsKQEAgLTEwOTUsMTggKzEwOTYsMTggQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3AgPSBtX2NhbGxlcjsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW50IHJlbWFwT3BlcmFuZChpbnQgb3BlcmFu
ZCkgY29uc3QKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlbWFwT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2lubGlu
ZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZDsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKG9wZXJhbmQgPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgp
IHsKLSAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gbV9jb25zdGFudFJlbWFwW29wZXJhbmQg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgICAgICBpZiAob3Bl
cmFuZC5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0ID0gVmlydHVhbFJlZ2lzdGVyKG1fY29uc3RhbnRSZW1hcFtvcGVyYW5kLnRvQ29uc3RhbnRJ
bmRleCgpXSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC5pc0NvbnN0YW50KCkpOwog
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIEFTU0VSVChvcGVyYW5kICE9IEpTU3RhY2s6OkNhbGxlZSk7CisgICAgICAgICAgICBBU1NF
UlQob3BlcmFuZC5vZmZzZXQoKSAhPSBKU1N0YWNrOjpDYWxsZWUpOwogCiAgICAgICAgICAgICBy
ZXR1cm4gb3BlcmFuZCArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAg
fQpAQCAtMTIxMyw3ICsxMjE0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9u
Q2hlY2tzKAogewogICAgIE5vZGUqIHRoaXNBcmd1bWVudDsKICAgICBpZiAoa2luZCA9PSBDb2Rl
Rm9yQ2FsbCkKLSAgICAgICAgdGhpc0FyZ3VtZW50ID0gZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJn
dW1lbnRUb09wZXJhbmQoMCkpOworICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQocmVnaXN0ZXJP
ZmZzZXQgKyBWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKDApKTsKICAgICBlbHNl
CiAgICAgICAgIHRoaXNBcmd1bWVudCA9IDA7CiAKQEAgLTEyMzgsNyArMTIzOSw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcygKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmVtaXRBcmd1bWVudFBoYW50b21zKGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgZm9y
IChpbnQgaSA9IGtpbmQgPT0gQ29kZUZvckNhbGwgPyAwIDogMTsgaSA8IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzOyArK2kpCi0gICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KHJlZ2lz
dGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoaSkpKTsKKyAgICAgICAgYWRkVG9HcmFwaChQ
aGFudG9tLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9P
cGVyYW5kKGkpKSk7CiB9CiAKIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5v
ZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0
dXMmIGNhbGxMaW5rU3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQpAQCAtMTI5MiwxNCArMTI5MywxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbmxpbmluZyhOb2RlCiAgICAgCiAgICAgLy8gRklYTUU6IERvbid0IGZsdXNoIGNvbnN0YW50
cyEKICAgICAKLSAgICBpbnQgaW5saW5lQ2FsbEZyYW1lU3RhcnQgPSBtX2lubGluZVN0YWNrVG9w
LT5yZW1hcE9wZXJhbmQocmVnaXN0ZXJPZmZzZXQpICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZTsKKyAgICBpbnQgaW5saW5lQ2FsbEZyYW1lU3RhcnQgPSBtX2lubGluZVN0YWNrVG9wLT5y
ZW1hcE9wZXJhbmQocmVnaXN0ZXJPZmZzZXQpLm9mZnNldCgpICsgSlNTdGFjazo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYXJlYSB1c2VkIGJ5
IHRoZSBjYWxsIGZyYW1lIGlzIHJlc2VydmVkLgotICAgIGZvciAoaW50IGFyZyA9IG9wZXJhbmRU
b0xvY2FsKGlubGluZUNhbGxGcmFtZVN0YXJ0KSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNp
emUgKyBjb2RlQmxvY2stPm1fbnVtVmFyczsgYXJnLS0gPiBvcGVyYW5kVG9Mb2NhbChpbmxpbmVD
YWxsRnJhbWVTdGFydCk7KQorICAgIGZvciAoaW50IGFyZyA9IFZpcnR1YWxSZWdpc3Rlcjo6b3Bl
cmFuZFRvTG9jYWwoaW5saW5lQ2FsbEZyYW1lU3RhcnQpICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZSArIGNvZGVCbG9jay0+bV9udW1WYXJzOyBhcmctLSA+IFZpcnR1YWxSZWdpc3Rlcjo6
b3BlcmFuZFRvTG9jYWwoaW5saW5lQ2FsbEZyYW1lU3RhcnQpOykKICAgICAgICAgbV9wcmVzZXJ2
ZWRWYXJzLnNldChhcmcpOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZW5v
dWdoIGxvY2Fscy4KLSAgICB1bnNpZ25lZCBuZXdOdW1Mb2NhbHMgPSBvcGVyYW5kVG9Mb2NhbChp
bmxpbmVDYWxsRnJhbWVTdGFydCkgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgY29k
ZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKKyAgICB1bnNpZ25lZCBuZXdOdW1Mb2NhbHMg
PSBWaXJ0dWFsUmVnaXN0ZXI6Om9wZXJhbmRUb0xvY2FsKGlubGluZUNhbGxGcmFtZVN0YXJ0KSAr
IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVn
aXN0ZXJzOwogICAgIGlmIChuZXdOdW1Mb2NhbHMgPiBtX251bUxvY2FscykgewogICAgICAgICBt
X251bUxvY2FscyA9IG5ld051bUxvY2FsczsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2kpCkBAIC0xMzEwLDcgKzEzMTEsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAKICAgICBJbmxpbmVTdGFja0VudHJ5
IGlubGluZVN0YWNrRW50cnkoCiAgICAgICAgIHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2NrLCBt
X2dyYXBoLmxhc3RCbG9jaygpLCBjYWxsTGlua1N0YXR1cy5mdW5jdGlvbigpLAotICAgICAgICAo
VmlydHVhbFJlZ2lzdGVyKW1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChyZXN1bHRPcGVy
YW5kKSwKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdE9wZXJh
bmQpLAogICAgICAgICAoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCk7CiAgICAgCiAgICAgLy8gVGhpcyBpcyB3aGVy
ZSB0aGUgYWN0dWFsIGlubGluaW5nIHJlYWxseSBoYXBwZW5zLgpAQCAtMTQzMiwxNCArMTQzMywx
NCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoaW50IHJlCiAgICAgfQogICAg
ICAKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMikgeyAvLyBNYXRoLm1p
bih4KQotICAgICAgICBOb2RlKiByZXN1bHQgPSBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVu
dFRvT3BlcmFuZCgxKSk7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdldChyZWdpc3Rlck9mZnNl
dCArIFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoMSkpOwogICAgICAgICBhZGRU
b0dyYXBoKFBoYW50b20sIEVkZ2UocmVzdWx0LCBOdW1iZXJVc2UpKTsKICAgICAgICAgc2V0KHJl
c3VsdE9wZXJhbmQsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAK
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMykgeyAvLyBNYXRoLm1pbih4
LCB5KQotICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChvcCwgZ2V0KHJlZ2lz
dGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBh
cmd1bWVudFRvT3BlcmFuZCgyKSkpKTsKKyAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFkZFRv
R3JhcGgob3AsIGdldChyZWdpc3Rlck9mZnNldCArIFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRU
b09wZXJhbmQoMSkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3Vt
ZW50VG9PcGVyYW5kKDIpKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBA
IC0xNDYxLDcgKzE0NjIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMo
aW50CiAgICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzRmxvYXRpbmdQb2ludEFi
cygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIE5vZGUqIG5vZGUgPSBh
ZGRUb0dyYXBoKEFyaXRoQWJzLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFu
ZCgxKSkpOworICAgICAgICBOb2RlKiBub2RlID0gYWRkVG9HcmFwaChBcml0aEFicywgZ2V0KHJl
Z2lzdGVyT2Zmc2V0ICsgVmlydHVhbFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFuZCgxKSkpOwog
ICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZSht
X2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpKQogICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhO
b2RlTWF5T3ZlcmZsb3cpOwogICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgbm9kZSk7CkBAIC0x
NDgzLDcgKzE0ODQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50
CiAgICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzRmxvYXRpbmdQb2ludFNxcnQo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBzZXQocmVzdWx0T3BlcmFu
ZCwgYWRkVG9HcmFwaChBcml0aFNxcnQsIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9P
cGVyYW5kKDEpKSkpOworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChBcml0
aFNxcnQsIGdldChyZWdpc3Rlck9mZnNldCArIFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09w
ZXJhbmQoMSkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCkBAIC0x
NTAwLDcgKzE1MDEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50
CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGln
dW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBO
b2RlKiBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFycmF5UHVzaCwgT3BJbmZvKGFycmF5TW9kZS5h
c1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1l
bnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgx
KSkpOworICAgICAgICAgICAgTm9kZSogYXJyYXlQdXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gs
IE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdp
c3Rlck9mZnNldCArIFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQo
cmVnaXN0ZXJPZmZzZXQgKyBWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7
CiAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQdXNoKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNTIzLDcgKzE1MjQsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBOb2RlKiBhcnJheVBvcCA9IGFkZFRvR3Jh
cGgoQXJyYXlQb3AsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlv
biksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSk7CisgICAgICAg
ICAgICBOb2RlKiBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9wSW5mbyhhcnJheU1v
ZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIFZp
cnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoMCkpKTsKICAgICAgICAgICAgIHNldChy
ZXN1bHRPcGVyYW5kLCBhcnJheVBvcCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQpAQCAtMTUzNyw4ICsxNTM4LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50
cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpbnQgdGhpc09wZXJhbmQgPSBy
ZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApOwotICAgICAgICBpbnQgaW5kZXhP
cGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKTsKKyAgICAgICAg
aW50IHRoaXNPcGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3Vt
ZW50VG9PcGVyYW5kKDApOworICAgICAgICBpbnQgaW5kZXhPcGVyYW5kID0gcmVnaXN0ZXJPZmZz
ZXQgKyBWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKDEpOwogICAgICAgICBOb2Rl
KiBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckNvZGVBdCwgT3BJbmZvKEFycmF5TW9k
ZShBcnJheTo6U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIo
aW5kZXhPcGVyYW5kKSk7CiAKICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsK
QEAgLTE1NDksOCArMTU1MCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNp
YyhpbnQKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaW50IHRoaXNPcGVyYW5kID0gcmVnaXN0
ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKTsKLSAgICAgICAgaW50IGluZGV4T3BlcmFu
ZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSk7CisgICAgICAgIGludCB0
aGlzT3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgVmlydHVhbFJlZ2lzdGVyOjphcmd1bWVudFRv
T3BlcmFuZCgwKTsKKyAgICAgICAgaW50IGluZGV4T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsg
VmlydHVhbFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFuZCgxKTsKICAgICAgICAgTm9kZSogY2hh
ckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJBdCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6
U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVy
YW5kKSk7CiAKICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKQEAgLTE1NjAs
NyArMTU2MSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAg
ICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaW50IGluZGV4T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0
ICsgYXJndW1lbnRUb09wZXJhbmQoMSk7CisgICAgICAgIGludCBpbmRleE9wZXJhbmQgPSByZWdp
c3Rlck9mZnNldCArIFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoMSk7CiAgICAg
ICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdGcm9tQ2hhckNvZGUsIGdldFRv
SW50MzIoaW5kZXhPcGVyYW5kKSk7CiAKICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJD
b2RlKTsKQEAgLTE1NzIsNyArMTU3Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
dHJpbnNpYyhpbnQKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBOb2RlKiByZWdF
eHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBFeGVjLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVn
aXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOworICAgICAgICBOb2RlKiByZWdF
eHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBFeGVjLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgVmlydHVhbFJlZ2lzdGVyOjphcmd1bWVudFRvT3Bl
cmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNldCArIFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRU
b09wZXJhbmQoMSkpKTsKICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIHJlZ0V4cEV4ZWMpOwog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNTgyLDcgKzE1ODMsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAKLSAgICAgICAgTm9kZSogcmVnRXhwRXhlYyA9IGFkZFRvR3JhcGgoUmVnRXhwVGVzdCwg
T3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3Vt
ZW50VG9PcGVyYW5kKDApKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQo
MSkpKTsKKyAgICAgICAgTm9kZSogcmVnRXhwRXhlYyA9IGFkZFRvR3JhcGgoUmVnRXhwVGVzdCwg
T3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIFZpcnR1
YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBW
aXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CiAgICAgICAgIHNldChyZXN1
bHRPcGVyYW5kLCByZWdFeHBFeGVjKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMTU5MSw4ICsxNTkyLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
KGludAogICAgIGNhc2UgSU11bEludHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgIT0gMykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aW50IGxlZnRPcGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKTsK
LSAgICAgICAgaW50IHJpZ2h0T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09w
ZXJhbmQoMik7CisgICAgICAgIGludCBsZWZ0T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgVmly
dHVhbFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFuZCgxKTsKKyAgICAgICAgaW50IHJpZ2h0T3Bl
cmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgVmlydHVhbFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFu
ZCgyKTsKICAgICAgICAgTm9kZSogbGVmdCA9IGdldFRvSW50MzIobGVmdE9wZXJhbmQpOwogICAg
ICAgICBOb2RlKiByaWdodCA9IGdldFRvSW50MzIocmlnaHRPcGVyYW5kKTsKICAgICAgICAgc2V0
KHJlc3VsdE9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhJTXVsLCBsZWZ0LCByaWdodCkpOwpAQCAt
MTY1Miw3ICsxNjUzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVHlwZWRBcnJheUNv
bgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgc2V0KHJlc3VsdE9wZXJhbmQsCi0g
ICAgICAgIGFkZFRvR3JhcGgoTmV3VHlwZWRBcnJheSwgT3BJbmZvKHR5cGUpLCBnZXQocmVnaXN0
ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpKTsKKyAgICAgICAgYWRkVG9HcmFwaChO
ZXdUeXBlZEFycmF5LCBPcEluZm8odHlwZSksIGdldChyZWdpc3Rlck9mZnNldCArIFZpcnR1YWxS
ZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoMSkpKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTE2NzUsMTIgKzE2NzYsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3Rh
bnRJbnRlcgogICAgICAgICAKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID09IDIpIHsKICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLAotICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoTmV3QXJyYXlXaXRoU2l6ZSwgT3BJbmZvKEFycmF5V2l0aFVuZGVjaWRlZCks
IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSkpOworICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoTmV3QXJyYXlXaXRoU2l6ZSwgT3BJbmZvKEFycmF5V2l0aFVuZGVj
aWRlZCksIGdldChyZWdpc3Rlck9mZnNldCArIFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09w
ZXJhbmQoMSkpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsgKytpKQotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsg
YXJndW1lbnRUb09wZXJhbmQoaSkpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChy
ZWdpc3Rlck9mZnNldCArIFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoaSkpKTsK
ICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsCiAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6
OlZhckFyZywgTmV3QXJyYXksIE9wSW5mbyhBcnJheVdpdGhVbmRlY2lkZWQpLCBPcEluZm8oMCkp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjkyLDcgKzE2OTMsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgICAgIGlmIChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA8PSAxKQogICAgICAgICAgICAgcmVzdWx0ID0gY2VsbENvbnN0YW50KG1f
dm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmVzdWx0ID0gYWRkVG9HcmFwaChUb1N0cmluZywgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJn
dW1lbnRUb09wZXJhbmQoMSkpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGFkZFRvR3JhcGgoVG9T
dHJpbmcsIGdldChyZWdpc3Rlck9mZnNldCArIFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09w
ZXJhbmQoMSkpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDb25zdHJ1
Y3QpCiAgICAgICAgICAgICByZXN1bHQgPSBhZGRUb0dyYXBoKE5ld1N0cmluZ09iamVjdCwgT3BJ
bmZvKGZ1bmN0aW9uLT5nbG9iYWxPYmplY3QoKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpLCBy
ZXN1bHQpOwpAQCAtMTg1MCw3ICsxODUxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLnJlc2l6ZShtX251bUFy
Z3VtZW50cyk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8
IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKAotICAgICAgICAgICAgICAg
IGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSwgbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQoYXJn
dW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyOjp2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCksIG1fY29kZUJsb2NrLT5p
c0NhcHR1cmVkKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKSk7
CiAgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVk
KAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7CiAgICAgICAgICAgICB2YXJpYWJsZS0+
bWVyZ2VDaGVja0FycmF5SG9pc3RpbmdGYWlsZWQoCkBAIC0xODk5LDcgKzE5MDAsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfZW50
ZXI6CiAgICAgICAgICAgICAvLyBJbml0aWFsaXplIGFsbCBsb2NhbHMgdG8gdW5kZWZpbmVkLgog
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jay0+bV9udW1WYXJzOyArK2kpCi0gICAgICAgICAgICAgICAgc2V0KGxvY2FsVG9PcGVyYW5k
KGkpLCBjb25zdGFudFVuZGVmaW5lZCgpLCBTZXRPbkVudHJ5KTsKKyAgICAgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyOjp2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgY29uc3RhbnRV
bmRlZmluZWQoKSwgU2V0T25FbnRyeSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnRl
cik7CiAKICAgICAgICAgY2FzZSBvcF90b190aGlzOiB7CkBAIC0yOTE3LDcgKzI5MTgsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3Bf
cmV0OgogICAgICAgICAgICAgZmx1c2hBcmd1bWVudHNBbmRDYXB0dXJlZFZhcmlhYmxlcygpOwog
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUgIT0gSW52YWxpZFZpcnR1YWxSZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJu
VmFsdWUuaXNWYWxpZCgpKTsKICAgICAgICAgICAgICAgICBzZXREaXJlY3QobV9pbmxpbmVTdGFj
a1RvcC0+bV9yZXR1cm5WYWx1ZSwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
KTsKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2RpZFJldHVybiA9IHRydWU7
CiAgICAgICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3Mu
aXNFbXB0eSgpKSB7CkBAIC0yOTcwLDcgKzI5NzEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jYWxsX3Zh
cmFyZ3M6IHsKICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUoKSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCA9PSBtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBB
U1NFUlQoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCA9PSBtX2lubGluZVN0YWNrVG9w
LT5tX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CiAgICAgICAgICAg
ICBBU1NFUlQoIW1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5z
bG93QXJndW1lbnRzKCkpOwogICAgICAgICAgICAgLy8gSXQgd291bGQgYmUgY29vbCB0byBmdW5u
ZWwgdGhpcyBpbnRvIGhhbmRsZUNhbGwoKSBzbyB0aGF0IGl0IGNhbiBoYW5kbGUKICAgICAgICAg
ICAgIC8vIGlubGluaW5nLiBCdXQgY3VycmVudGx5IHRoYXQgd29uJ3QgYmUgcHJvZml0YWJsZSBh
bnl3YXksIHNpbmNlIG5vbmUgb2YgdGhlCkBAIC0yOTg4LDcgKzI5ODksNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOyAvLyBjYWxsZWUKICAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KSk7IC8vIHRoaXMKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1
bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQotICAgICAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKGdldChhcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkpKTsKKyAgICAgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChnZXQoVmlydHVhbFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFuZChhcmd1
bWVudCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcs
IENhbGwsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CkBAIC0zMTcwLDggKzMxNzEs
OCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOiB7CiAgICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFs
dWUoKSkpOwotICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRJc0xvY2FsKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9sYXp5VmFycy5zZXQo
b3BlcmFuZFRvTG9jYWwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAg
ICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3Rlcjo6b3BlcmFuZElzTG9jYWwoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgbV9ncmFwaC5tX2xhenlWYXJzLnNl
dChWaXJ0dWFsUmVnaXN0ZXI6Om9wZXJhbmRUb0xvY2FsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luaXRfbGF6eV9yZWcpOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTMzNzEsNyArMzM3Miw3IEBAIEJ5dGVDb2RlUGFy
c2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICBpZiAobV9jYWxsZXIpIHsKICAgICAg
ICAgLy8gSW5saW5lIGNhc2UuCiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgIT0gYnl0ZUNvZGVQ
YXJzZXItPm1fY29kZUJsb2NrKTsKLSAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZVN0YXJ0
ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZy
YW1lU3RhcnQuaXNWYWxpZCgpKTsKICAgICAgICAgQVNTRVJUKGNhbGxzaXRlQmxvY2tIZWFkKTsK
ICAgICAgICAgCiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gYnl0ZUNvZGVQYXJzZXItPm1f
Z3JhcGgubV9pbmxpbmVDYWxsRnJhbWVzLT5hZGQoKTsKQEAgLTMzODIsNyArMzM4Myw3IEBAIEJ5
dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgICAgIG1faW5s
aW5lQ2FsbEZyYW1lLAogICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgCiAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpKTsKLSAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ID0gaW5saW5lQ2Fs
bEZyYW1lU3RhcnQgLSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWVTdGFydC5vZmZzZXQo
KSAtIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIGlmIChjYWxsZWUpIHsK
ICAgICAgICAgICAgIGluaXRpYWxpemVMYXp5V3JpdGVCYXJyaWVyRm9ySW5saW5lQ2FsbEZyYW1l
Q2FsbGVlKAogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLm1fcGxhbi53
cml0ZUJhcnJpZXJzLApAQCAtMzQwMCwxOSArMzQwMSwyMCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5s
aW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2Fw
dHVyZWRWYXJzID0gbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPmNh
cHR1cmVkVmFyczsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gYnl0
ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5tX251bVZhcnM7IGktLTspIHsKLSAgICAgICAgICAg
ICAgICBpZiAoYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKGxvY2FsVG9P
cGVyYW5kKGkpKSkKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJs
b2NrLT5pc0NhcHR1cmVkKFZpcnR1YWxSZWdpc3Rlcjo6dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
aSkpKQogICAgICAgICAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJz
LnNldChpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGZvciAoaW50IGkg
PSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgaS0tOykgewotICAgICAgICAgICAgaWYgKGNv
ZGVCbG9jay0+aXNDYXB0dXJlZChhcmd1bWVudFRvT3BlcmFuZChpKSkpCi0gICAgICAgICAgICAg
ICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5zZXQob3BlcmFuZFRvTG9jYWwoYXJn
dW1lbnRUb09wZXJhbmQoaSkgKyBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpKTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudCA9IFZpcnR1YWxSZWdpc3Rlcjo6dmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSk7CisgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5p
c0NhcHR1cmVkKGFyZ3VtZW50KSkKKyAgICAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+
Y2FwdHVyZWRWYXJzLnNldChWaXJ0dWFsUmVnaXN0ZXI6Om9wZXJhbmRUb0xvY2FsKGFyZ3VtZW50
Lm9mZnNldCgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CiAgICAgICAgIH0K
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IGNvZGVCbG9jay0+bV9udW1WYXJzOyBpLS07KSB7Ci0g
ICAgICAgICAgICBpbnQgbG9jYWxPcGVyYW5kID0gbG9jYWxUb09wZXJhbmQoaSk7Ci0gICAgICAg
ICAgICBpZiAoY29kZUJsb2NrLT5pc0NhcHR1cmVkKGxvY2FsT3BlcmFuZCkpCi0gICAgICAgICAg
ICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5zZXQob3BlcmFuZFRvTG9jYWwo
bG9jYWxPcGVyYW5kICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBWaXJ0dWFsUmVnaXN0ZXI6OnZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGkpOworICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aXNDYXB0dXJlZChs
b2NhbCkpCisgICAgICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5z
ZXQoVmlydHVhbFJlZ2lzdGVyOjpvcGVyYW5kVG9Mb2NhbChsb2NhbC5vZmZzZXQoKSArIG1faW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkpOwogICAgICAgICB9CiAKICNpZiBERkdfRU5BQkxF
KERFQlVHX1ZFUkJPU0UpCkBAIC0zNDc2LDggKzM0NzgsOCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5s
aW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgIC8vIE1hY2hpbmUgY29kZSBibG9jayBjYXNl
LgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrID09IGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9j
ayk7CiAgICAgICAgIEFTU0VSVCghY2FsbGVlKTsKLSAgICAgICAgQVNTRVJUKHJldHVyblZhbHVl
VlIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIEFTU0VSVChpbmxpbmVDYWxs
RnJhbWVTdGFydCA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgQVNTRVJUKCFy
ZXR1cm5WYWx1ZVZSLmlzVmFsaWQoKSk7CisgICAgICAgIEFTU0VSVCghaW5saW5lQ2FsbEZyYW1l
U3RhcnQuaXNWYWxpZCgpKTsKICAgICAgICAgQVNTRVJUKCFjYWxsc2l0ZUJsb2NrSGVhZCk7CiAK
ICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSAwOwpAQCAtMzYzMCw3ICszNjMyLDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogI2VuZGlmCiAgICAgCiAgICAgSW5saW5lU3RhY2tF
bnRyeSBpbmxpbmVTdGFja0VudHJ5KAotICAgICAgICB0aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9m
aWxlZEJsb2NrLCAwLCAwLCBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyLCBJbnZhbGlkVmlydHVhbFJl
Z2lzdGVyLAorICAgICAgICB0aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9maWxlZEJsb2NrLCAwLCAw
LCBWaXJ0dWFsUmVnaXN0ZXIoKSwgVmlydHVhbFJlZ2lzdGVyKCksCiAgICAgICAgIG1fY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCksIENvZGVGb3JDYWxsKTsKICAgICAKICAgICBwYXJzZUNvZGVC
bG9jaygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTEsNyArMzExLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHZvaWQga2VlcE9wZXJhbmRBbGl2ZShCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayog
amV0dGlzb25lZEJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGludCBvcGVyYW5kKQorICAg
IHZvaWQga2VlcE9wZXJhbmRBbGl2ZShCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogamV0
dGlzb25lZEJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgTm9kZSogbGl2ZW5lc3NOb2RlID0gamV0dGlzb25lZEJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgaWYgKCFsaXZlbmVz
c05vZGUpCkBAIC0zMjYsOSArMzI2LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGpldHRpc29uQmxv
Y2soQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jaywgQ29kZU9y
aWdpbiBib3VuZGFyeUNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCk7ICsraSkKLSAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoYmxvY2ssIGpldHRpc29uZWRC
bG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBhcmd1bWVudFRvT3BlcmFuZChpKSk7CisgICAgICAg
ICAgICBrZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5Q29k
ZU9yaWdpbiwgVmlydHVhbFJlZ2lzdGVyOjp2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQotICAgICAgICAgICAga2VlcE9wZXJhbmRB
bGl2ZShibG9jaywgamV0dGlzb25lZEJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGxvY2FsVG9P
cGVyYW5kKGkpKTsKKyAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoYmxvY2ssIGpldHRpc29u
ZWRCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBWaXJ0dWFsUmVnaXN0ZXI6OnZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGkpKTsKICAgICAgICAgCiAgICAgICAgIGZpeEpldHRpc29uZWRQcmVkZWNl
c3NvcnMoYmxvY2ssIGpldHRpc29uZWRCbG9jayk7CiAgICAgfQpAQCAtMzgwLDkgKzM4MCw5IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAvLyBkaWZmZXJlbnQgcGF0aCB0aGFuIHNlY29uZEJsb2Nr
LgogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRp
c29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKLSAg
ICAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGZpcnN0QmxvY2ssIGpldHRpc29uZWRCbG9j
aywgYm91bmRhcnlDb2RlT3JpZ2luLCBhcmd1bWVudFRvT3BlcmFuZChpKSk7CisgICAgICAgICAg
ICAgICAga2VlcE9wZXJhbmRBbGl2ZShmaXJzdEJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5k
YXJ5Q29kZU9yaWdpbiwgVmlydHVhbFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFuZChpKSk7CiAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkKLSAgICAgICAgICAgICAgICBrZWVwT3Bl
cmFuZEFsaXZlKGZpcnN0QmxvY2ssIGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2lu
LCBsb2NhbFRvT3BlcmFuZChpKSk7CisgICAgICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2ZShm
aXJzdEJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbiwgVmlydHVhbFJl
Z2lzdGVyOjpsb2NhbFRvT3BlcmFuZChpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRp
bmdQaGFzZS5jcHAJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNywxMCAr
MjE3LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5vbmljYWxpemVHZXRMb2NhbChOb2RlKiBu
b2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQodmFy
aWFibGUtPmxvY2FsKCkpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8QXJn
dW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgb3BlcmFuZFRvQXJndW1lbnQodmFyaWFibGUt
PmxvY2FsKCkpKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkK
KyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9k
ZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPExvY2FsT3BlcmFuZD4obm9k
ZSwgdmFyaWFibGUsIG9wZXJhbmRUb0xvY2FsKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAg
ICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxl
LCB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNh
bm9uaWNhbGl6ZVNldExvY2FsKE5vZGUqIG5vZGUpCkBAIC0yODUsMTcgKzI4NSwxNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbChOb2RlKiBub2Rl
KQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQodmFyaWFi
bGUtPmxvY2FsKCkpKQotICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2Nh
bEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgb3BlcmFuZFRv
QXJndW1lbnQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2Nh
bCgpLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9t
TG9jYWxGb3I8bm9kZVR5cGUsIEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlh
YmxlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNh
bm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIExvY2FsT3BlcmFuZD4o
bm9kZSwgdmFyaWFibGUsIG9wZXJhbmRUb0xvY2FsKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAg
ICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBMb2Nh
bE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZVNldEFyZ3VtZW50KE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBpbnQgbG9jYWwgPSBub2RlLT5sb2NhbCgpOwotICAgICAgICBBU1NF
UlQob3BlcmFuZElzQXJndW1lbnQobG9jYWwpKTsKLSAgICAgICAgaW50IGFyZ3VtZW50ID0gb3Bl
cmFuZFRvQXJndW1lbnQobG9jYWwpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBu
b2RlLT5sb2NhbCgpOworICAgICAgICBBU1NFUlQobG9jYWwuaXNBcmd1bWVudCgpKTsKKyAgICAg
ICAgaW50IGFyZ3VtZW50ID0gbG9jYWwudG9Bcmd1bWVudCgpOwogICAgICAgICBtX2Jsb2NrLT52
YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIG5vZGUpOwogICAg
ICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1l
bnQsIG5vZGUpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2Fw
YWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5
MCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICB9CiAK
ICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlc0Fy
Z3VtZW50cygpICYmIHBjWzRdLnUub3BlcmFuZCA9PSBjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lz
dGVyKCkpCisgICAgICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSAmJiBwY1s0XS51
Lm9wZXJhbmQgPT0gY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpKQogICAg
ICAgICAgICAgcmV0dXJuIENhbklubGluZTsKICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzg1LDIzICszODUsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIGNoYW5n
ZWQ7CiAgICAgfQotICAgIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBib29sIGlzQ2FwdHVy
ZWRBdE9yQWZ0ZXIoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgaW50
IG9wZXJhbmQpCi0gICAgewotICAgICAgICBmb3IgKDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNp
emUoKTsgKytpbmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGlmICghbm9kZS0+aGFzTG9jYWwobV9ncmFw
aCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAobm9kZS0+bG9j
YWwoKSAhPSBvcGVyYW5kKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECi0gICAgCisKICAgICB2b2lkIGFkZFN0cnVj
dHVyZVRyYW5zaXRpb25DaGVjayhDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVkIGluZGV4
SW5CbG9jaywgSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgTm9kZSogd2Vha0NvbnN0YW50
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNo
TGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDcgKzE2Nyw3
IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRGb3JOb2Rl
KE5vZGUqIG5vZGUsIGludCBvcGVyYW5kLCBGbHVzaEZvcm1hdCBub2RlRm9ybWF0LCBGbHVzaEZv
cm1hdCBuZXdGb3JtYXQpCisgICAgdm9pZCBzZXRGb3JOb2RlKE5vZGUqIG5vZGUsIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBGbHVzaEZvcm1hdCBub2RlRm9ybWF0LCBGbHVzaEZvcm1hdCBuZXdG
b3JtYXQpCiAgICAgewogICAgICAgICBGbHVzaEZvcm1hdCYgY3VycmVudEZvcm1hdCA9IG1fbGl2
ZS5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDE4ICsyMzQsMTggQEAg
dm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIEFTU0VSVChub2Rl
LT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpID09IG5vZGUtPmhhc0xvY2FsKCp0aGlzKSk7
CiAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhpcykpIHsKICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9w
ZXJhbmQoKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiYXJnIiwgb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCks
ICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwg
IikiKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmxvY2FsKCk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAg
ICAgIG91dC5wcmludChjb21tYSwgImFyZyIsIG9wZXJhbmQudG9Bcmd1bWVudCgpLCAiKCIsIFZh
cmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIsIG9wZXJhbmRU
b0xvY2FsKG9wZXJhbmQpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlh
YmxlQWNjZXNzRGF0YSksICIpIik7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2Mi
LCBvcGVyYW5kLnRvTG9jYWwoKSwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2
YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAgIH0KICAgICBpZiAobm9kZS0+aGFzVW5saW5r
ZWRMb2NhbCgpKSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gbm9kZS0+dW5saW5rZWRMb2NhbCgp
OwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJhcmciLCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSk7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+dW5saW5rZWRMb2NhbCgpOworICAg
ICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJhcmciLCBvcGVyYW5kLnRvQXJndW1lbnQoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG91dC5wcmludChjb21tYSwgImxvYyIsIG9wZXJhbmRUb0xvY2FsKG9wZXJhbmQpKTsKKyAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIsIG9wZXJhbmQudG9Mb2NhbCgpKTsKICAg
ICB9CiAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50QnVmZmVyKCkpIHsKICAgICAgICAgb3V0LnBy
aW50KGNvbW1hKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlz
aW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29y
a2luZyBjb3B5KQpAQCAtNDI5LDcgKzQyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGhh
c0V4aXRTaXRlKG5vZGUtPmNvZGVPcmlnaW4sIGV4aXRLaW5kKTsKICAgICB9CiAgICAgCi0gICAg
aW50IGFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisg
ICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmlnaW4m
IGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKQogICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3Rlcigp
OwpAQCAtNDM5LDcgKzQzOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICB9CiAgICAgCi0gICAgaW50IHVuY2hlY2tl
ZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAg
VmlydHVhbFJlZ2lzdGVyIHVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVP
cmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT51bmNoZWNrZWRBcmd1
bWVudHNSZWdpc3RlcigpOwpAQCAtNDQ3LDEzICs0NDcsMTMgQEAgcHVibGljOgogICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1l
KAogICAgICAgICAgICAgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICBpZiAo
IWNvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKQotICAgICAgICAgICAgcmV0dXJuIEludmFsaWRW
aXJ0dWFsUmVnaXN0ZXI7CisgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7CiAg
ICAgICAgIAogICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpICsK
ICAgICAgICAgICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAg
ICB9CiAgICAgCi0gICAgaW50IHVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlckZvcihjb25zdCBD
b2RlT3JpZ2luJikKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdW5jaGVja2VkQWN0aXZhdGlvblJlZ2lz
dGVyRm9yKGNvbnN0IENvZGVPcmlnaW4mKQogICAgIHsKICAgICAgICAgLy8gVGhpcyB3aWxsIGln
bm9yZSBDb2RlT3JpZ2luIGJlY2F1c2Ugd2UgZG9uJ3QgaW5saW5lIGNvZGUgdGhhdCB1c2VzIGFj
dGl2YXRpb25zLgogICAgICAgICAvLyBIZW5jZSBmb3IgaW5saW5lZCBjYWxsIGZyYW1lcyBpdCB3
aWxsIHJldHVybiB0aGUgb3V0ZXJtb3N0IGNvZGUgYmxvY2sncwpAQCAtNDcyLDE0ICs0NzIsMTQg
QEAgcHVibGljOgogICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNv
ZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgCiAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IEdldEFyZ3VtZW50KQotICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2st
PnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KG9wZXJhbmRUb0FyZ3VtZW50KG5vZGUtPmxvY2FsKCkp
KTsKKyAgICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1
bWVudChub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
bm9kZS0+aGFzTG9jYWwoKnRoaXMpKSB7CiAgICAgICAgICAgICBpZiAobV9mb3JtID09IFNTQSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGlmICghb3BlcmFuZElzQXJn
dW1lbnQobm9kZS0+bG9jYWwoKSkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPmxvY2FsKCkuaXNB
cmd1bWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaW50IGFy
Z3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgICAgICBp
bnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQoKTsKICAgICAgICAgICAgIGlm
IChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSBtX2FyZ3VtZW50c1thcmd1bWVudF0tPnZh
cmlhYmxlQWNjZXNzRGF0YSgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNp
b24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODAsOCArODAsOCBAQCB2b2lkIEpJVENvZGU6OnJlY29uc3RydWN0
KAogICAgIGZvciAoc2l6ZV90IGkgPSByZXN1bHQuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIGlu
dCBvcGVyYW5kID0gcmVzdWx0Lm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgCi0gICAgICAg
IGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKQotICAgICAgICAgICAgJiYgIW9wZXJhbmRU
b0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgIGlmIChWaXJ0dWFsUmVnaXN0ZXI6Om9wZXJhbmRJ
c0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAmJiAhVmlydHVhbFJlZ2lzdGVyOjpvcGVy
YW5kVG9Bcmd1bWVudChvcGVyYW5kKQogICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZQogICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXph
dGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7CiAgICAgICAgICAgICAvLyBVZ2guIElm
IHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1lbnQgbWF5IGhvbGQgZ2Fy
YmFnZS4gSXQgd2lsbApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlz
aW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNv
ZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjb2RlT3JpZ2luRm9yRXhpdFRhcmdldChj
b2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKGNoaWxkcmVuKQotICAgICAgICAsIG1fdmly
dHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICwgbV92aXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAg
ICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICB7CkBAIC0xNzcsNyArMTc3LDcgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAg
LCBjb2RlT3JpZ2luRm9yRXhpdFRhcmdldChjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVu
KEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQotICAgICAgICAs
IG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICwgbV92
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgICwgbV9yZWZDb3VudCgx
KQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICB7CkBAIC0xOTEsNyArMTkx
LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAg
ICAgICAgLCBjb2RlT3JpZ2luRm9yRXhpdFRhcmdldChjb2RlT3JpZ2luKQogICAgICAgICAsIGNo
aWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQotICAg
ICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAg
ICwgbV92aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgICwgbV9yZWZD
b3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAgICAgLCBtX29w
SW5mbyhpbW0ubV92YWx1ZSkKQEAgLTIwNiw3ICsyMDYsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNvZGVPcmlnaW5Gb3JFeGl0
VGFyZ2V0KGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4
ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCi0gICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIo
SW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIoKSkKICAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9wcmVk
aWN0aW9uKFNwZWNOb25lKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKQEAgLTIy
Miw3ICsyMjIsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3Jp
Z2luKQogICAgICAgICAsIGNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0KGNvZGVPcmlnaW4pCiAgICAg
ICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUsIGZpcnN0Q2hpbGQsIG51bUNo
aWxkcmVuKQotICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpCisgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAg
ICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAg
ICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCkBAIC0zOTAsNyArMzkwLDcgQEAgc3RydWN0
IE5vZGUgewogICAgIHsKICAgICAgICAgbV9vcCA9IEdldExvY2FsVW5saW5rZWQ7CiAgICAgICAg
IG1fZmxhZ3MgJj0gfihOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlciB8IE5vZGVD
bG9iYmVyc1dvcmxkKTsKLSAgICAgICAgbV9vcEluZm8gPSBsb2NhbDsKKyAgICAgICAgbV9vcElu
Zm8gPSBsb2NhbC5vZmZzZXQoKTsKICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKICAgICB9CiAg
ICAgCkBAIC0xMDU3LDIwICsxMDU3LDIwIEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBib29s
IGhhc1ZpcnR1YWxSZWdpc3RlcigpCiAgICAgewotICAgICAgICByZXR1cm4gbV92aXJ0dWFsUmVn
aXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKKyAgICAgICAgcmV0dXJuIG1fdmlydHVh
bFJlZ2lzdGVyLmlzVmFsaWQoKTsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcigpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotICAg
ICAgICBBU1NFUlQobV92aXJ0dWFsUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7
CisgICAgICAgIEFTU0VSVChtX3ZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICBy
ZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXI7CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0VmlydHVh
bFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewogICAgICAg
ICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotICAgICAgICBBU1NFUlQobV92aXJ0dWFsUmVnaXN0ZXIg
PT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVCghbV92aXJ0dWFsUmVn
aXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgbV92aXJ0dWFsUmVnaXN0ZXIgPSB2aXJ0dWFsUmVn
aXN0ZXI7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMzMgKzEzOSwzMyBAQCB2
b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAgICAgZm9yIChz
aXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLm51bWJlck9m
TG9jYWxzKCk7ICsrbG9jYWwpIHsKICAgICAgICAgaWYgKGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZERv
dWJsZS5nZXQobG9jYWwpKSB7Ci0gICAgICAgICAgICBpZiAoIWV4ZWMtPnJlZ2lzdGVycygpW2xv
Y2FsVG9PcGVyYW5kKGxvY2FsKV0uanNWYWx1ZSgpLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAg
IGlmICghZXhlYy0+cmVnaXN0ZXJzKClbVmlydHVhbFJlZ2lzdGVyOjpsb2NhbFRvT3BlcmFuZChs
b2NhbCldLmpzVmFsdWUoKS5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAotICAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgIiwgbG9j
YWxUb09wZXJhbmQobG9jYWwpLCAiIGlzICIsCi0gICAgICAgICAgICAgICAgICAgICAgICBleGVj
LT5yZWdpc3RlcnMoKVtsb2NhbFRvT3BlcmFuZChsb2NhbCldLmpzVmFsdWUoKSwgIiwgZXhwZWN0
ZWQgbnVtYmVyLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiICAgIE9TUiBmYWlsZWQg
YmVjYXVzZSB2YXJpYWJsZSAiLCBWaXJ0dWFsUmVnaXN0ZXI6OmxvY2FsVG9PcGVyYW5kKGxvY2Fs
KSwgIiBpcyAiLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+cmVnaXN0ZXJzKClbVmly
dHVhbFJlZ2lzdGVyOjpsb2NhbFRvT3BlcmFuZChsb2NhbCldLmpzVmFsdWUoKSwgIiwgZXhwZWN0
ZWQgbnVtYmVyLlxuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZE1hY2hpbmVJbnQuZ2V0KGxvY2FsKSkgewot
ICAgICAgICAgICAgaWYgKCFleGVjLT5yZWdpc3RlcnMoKVtsb2NhbFRvT3BlcmFuZChsb2NhbCld
LmpzVmFsdWUoKS5pc01hY2hpbmVJbnQoKSkgeworICAgICAgICAgICAgaWYgKCFleGVjLT5yZWdp
c3RlcnMoKVtWaXJ0dWFsUmVnaXN0ZXI6OmxvY2FsVG9PcGVyYW5kKGxvY2FsKV0uanNWYWx1ZSgp
LmlzTWFjaGluZUludCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgIiwgbG9jYWxUb09wZXJhbmQo
bG9jYWwpLCAiIGlzICIsCi0gICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5yZWdpc3RlcnMo
KVtsb2NhbFRvT3BlcmFuZChsb2NhbCldLmpzVmFsdWUoKSwgIiwgZXhwZWN0ZWQgIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICIsIFZp
cnR1YWxSZWdpc3Rlcjo6bG9jYWxUb09wZXJhbmQobG9jYWwpLCAiIGlzICIsCisgICAgICAgICAg
ICAgICAgICAgICAgICBleGVjLT5yZWdpc3RlcnMoKVtWaXJ0dWFsUmVnaXN0ZXI6OmxvY2FsVG9P
cGVyYW5kKGxvY2FsKV0uanNWYWx1ZSgpLCAiLCBleHBlY3RlZCAiLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIm1hY2hpbmUgaW50LlxuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKCFlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2Nh
bCkudmFsaWRhdGUoZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxUb09wZXJhbmQobG9jYWwpXS5qc1Zh
bHVlKCkpKSB7CisgICAgICAgIGlmICghZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9j
YWwpLnZhbGlkYXRlKGV4ZWMtPnJlZ2lzdGVycygpW1ZpcnR1YWxSZWdpc3Rlcjo6bG9jYWxUb09w
ZXJhbmQobG9jYWwpXS5qc1ZhbHVlKCkpKSB7CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAg
ICAgIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgIiwgbG9jYWxUb09wZXJhbmQobG9j
YWwpLCAiIGlzICIsCi0gICAgICAgICAgICAgICAgICAgIGV4ZWMtPnJlZ2lzdGVycygpW2xvY2Fs
VG9PcGVyYW5kKGxvY2FsKV0uanNWYWx1ZSgpLCAiLCBleHBlY3RlZCAiLAorICAgICAgICAgICAg
ICAgICAgICAiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAiLCBWaXJ0dWFsUmVnaXN0
ZXI6OmxvY2FsVG9PcGVyYW5kKGxvY2FsKSwgIiBpcyAiLAorICAgICAgICAgICAgICAgICAgICBl
eGVjLT5yZWdpc3RlcnMoKVtWaXJ0dWFsUmVnaXN0ZXI6OmxvY2FsVG9PcGVyYW5kKGxvY2FsKV0u
anNWYWx1ZSgpLCAiLCBleHBlY3RlZCAiLAogICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9l
eHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCksICIuXG4iKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJldHVybiAwOwpAQCAtMTc5LDcgKzE3OSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRy
eShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAvLyAgICBpdCBzZWVtcyBzaWxseTogeW91J2QgYmUg
ZGl2ZXJ0aW5nIHRoZSBwcm9ncmFtIHRvIGVycm9yIGhhbmRsaW5nIHdoZW4gaXQKICAgICAvLyAg
ICB3b3VsZCBoYXZlIG90aGVyd2lzZSBqdXN0IGtlcHQgcnVubmluZyBhbGJlaXQgbGVzcyBxdWlj
a2x5LgogICAgIAotICAgIGlmICghdm0tPmludGVycHJldGVyLT5zdGFjaygpLmdyb3coJmV4ZWMt
PnJlZ2lzdGVycygpW2xvY2FsVG9PcGVyYW5kKGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3Rl
cnMpXSkpIHsKKyAgICBpZiAoIXZtLT5pbnRlcnByZXRlci0+c3RhY2soKS5ncm93KCZleGVjLT5y
ZWdpc3RlcnMoKVtWaXJ0dWFsUmVnaXN0ZXI6OmxvY2FsVG9PcGVyYW5kKGNvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnMpXSkpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHN0YWNrIGdy
b3d0aCBmYWlsZWQuXG4iKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTEsOSArMTkxLDkgQEAg
dm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIC8vIDMpIFBlcmZv
cm0gZGF0YSBmb3JtYXQgY29udmVyc2lvbnMuCiAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBs
b2NhbCA8IGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwp
IHsKICAgICAgICAgaWYgKGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZERvdWJsZS5nZXQobG9jYWwpKQot
ICAgICAgICAgICAgKmJpdHdpc2VfY2FzdDxkb3VibGUqPihleGVjLT5yZWdpc3RlcnMoKSArIGxv
Y2FsVG9PcGVyYW5kKGxvY2FsKSkgPSBleGVjLT5yZWdpc3RlcnMoKVtsb2NhbFRvT3BlcmFuZChs
b2NhbCldLmpzVmFsdWUoKS5hc051bWJlcigpOworICAgICAgICAgICAgKmJpdHdpc2VfY2FzdDxk
b3VibGUqPihleGVjLT5yZWdpc3RlcnMoKSArIFZpcnR1YWxSZWdpc3Rlcjo6bG9jYWxUb09wZXJh
bmQobG9jYWwpKSA9IGV4ZWMtPnJlZ2lzdGVycygpW1ZpcnR1YWxSZWdpc3Rlcjo6bG9jYWxUb09w
ZXJhbmQobG9jYWwpXS5qc1ZhbHVlKCkuYXNOdW1iZXIoKTsKICAgICAgICAgaWYgKGVudHJ5LT5t
X2xvY2Fsc0ZvcmNlZE1hY2hpbmVJbnQuZ2V0KGxvY2FsKSkKLSAgICAgICAgICAgICpiaXR3aXNl
X2Nhc3Q8aW50NjRfdCo+KGV4ZWMtPnJlZ2lzdGVycygpICsgbG9jYWxUb09wZXJhbmQobG9jYWwp
KSA9IGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsVG9PcGVyYW5kKGxvY2FsKV0uanNWYWx1ZSgpLmFz
TWFjaGluZUludCgpIDw8IEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQ7CisgICAgICAgICAgICAq
Yml0d2lzZV9jYXN0PGludDY0X3QqPihleGVjLT5yZWdpc3RlcnMoKSArIFZpcnR1YWxSZWdpc3Rl
cjo6bG9jYWxUb09wZXJhbmQobG9jYWwpKSA9IGV4ZWMtPnJlZ2lzdGVycygpW1ZpcnR1YWxSZWdp
c3Rlcjo6bG9jYWxUb09wZXJhbmQobG9jYWwpXS5qc1ZhbHVlKCkuYXNNYWNoaW5lSW50KCkgPDwg
SlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudDsKICAgICB9CiAgICAgCiAgICAgLy8gNCkgRml4IHRo
ZSBjYWxsIGZyYW1lLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1NjM2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHByZXZpb3VzSGVhZC0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gbmV3Um9vdC0+YXBw
ZW5kTm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCB2YXJpYWJsZS0+cHJlZGljdGlvbigp
LCBFeHRyYWN0T1NSRW50cnlMb2NhbCwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICBPcElu
Zm8odmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUt
PmxvY2FsKCkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCiAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldExvY2FsLCBjb2RlT3JpZ2luLCBP
cEluZm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Niw3ICs4Niw3IEBAIHZvaWQgT1NSRXhpdDo6Y29udmVydFRvRm9yd2FyZChCYXNpY0Jsb2MKICAg
ICAKICAgICBBU1NFUlQobGFzdE1vdkhpbnQpOwogICAgIEFTU0VSVChsYXN0TW92SGludC0+Y2hp
bGQxKCkgPT0gY3VycmVudE5vZGUpOwotICAgIG1fbGFzdFNldE9wZXJhbmQgPSBsYXN0TW92SGlu
dC0+bG9jYWwoKTsKKyAgICBtX2xhc3RTZXRPcGVyYW5kID0gbGFzdE1vdkhpbnQtPmxvY2FsKCku
b2Zmc2V0KCk7CiAgICAgbV92YWx1ZVJlY292ZXJ5T3ZlcnJpZGUgPSBhZG9wdFJlZigKICAgICAg
ICAgbmV3IFZhbHVlUmVjb3ZlcnlPdmVycmlkZShsYXN0TW92SGludC0+bG9jYWwoKSwgdmFsdWVS
ZWNvdmVyeSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJ
KHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgc3RydWN0IE9TUkV4aXQgOiBw
dWJsaWMgT1NSRXhpdEJhc2UgewogICAgIHZvaWQgY29udmVydFRvRm9yd2FyZChCYXNpY0Jsb2Nr
KiwgTm9kZSosIHVuc2lnbmVkIG5vZGVJbmRleCwgY29uc3QgVmFsdWVSZWNvdmVyeSYpOwogCiAg
ICAgdW5zaWduZWQgbV9zdHJlYW1JbmRleDsKLSAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbV9sYXN0U2V0T3BlcmFuZDsKICAgICAKICAgICBSZWZQdHI8VmFs
dWVSZWNvdmVyeU92ZXJyaWRlPiBtX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZTsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMy
XzY0LmNwcAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw3ICsyMDEs
NyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgIGNh
c2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKICAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2Vk
SW5KU1N0YWNrOiB7CiAgICAgICAgICAgICBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3Rl
cnMrKzsKLSAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kSXNMb2NhbChyZWNvdmVyeS52aXJ0dWFs
UmVnaXN0ZXIoKSkpOworICAgICAgICAgICAgQVNTRVJUKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rl
cigpLmlzTG9jYWwoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBt
aWdodCBsaWtlIHRvIHN0b3JlIHRvIHRoaXMgdmlydHVhbCByZWdpc3RlciBiZWZvcmUgZG9pbmcK
ICAgICAgICAgICAgIC8vIHZpcnR1YWwgcmVnaXN0ZXIgc2h1ZmZsaW5nLiBJZiBzbywgd2Ugc2F5
IHRoYXQgdGhlIHZpcnR1YWwgcmVnaXN0ZXIKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIE9TUkV4
aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAvLyB0byBlbnN1cmUg
dGhpcyBoYXBwZW5zIGVmZmljaWVudGx5LiBOb3RlIHRoYXQgd2UgZXhwZWN0IHRoaXMgY2FzZQog
ICAgICAgICAgICAgLy8gdG8gYmUgcmFyZSwgc28gdGhlIGhhbmRsaW5nIG9mIGl0IGlzIG9wdGlt
aXplZCBmb3IgdGhlIGNhc2VzIGluCiAgICAgICAgICAgICAvLyB3aGljaCBpdCBkb2VzIG5vdCBo
YXBwZW4uCi0gICAgICAgICAgICBpbnQgbG9jYWwgPSBvcGVyYW5kVG9Mb2NhbChyZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBpbnQgbG9jYWwgPSByZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCk7CiAgICAgICAgICAgICBpZiAobG9jYWwgPCAoaW50KW9w
ZXJhbmRzLm51bWJlck9mTG9jYWxzKCkpIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wZXJh
bmRzLmxvY2FsKGxvY2FsKS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgSW5H
UFI6CkBAIC01MzUsMTcgKzUzNSwxOSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4
aXQoY29uc3QgCiAgICAgLy8gOSkgRHVtcCBhbGwgcG9pc29uZWQgdmlydHVhbCByZWdpc3RlcnMu
CiAgICAgCiAgICAgaWYgKG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7Ci0gICAg
ICAgIGZvciAoaW50IHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IChpbnQp
b3BlcmFuZHMubnVtYmVyT2ZMb2NhbHMoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKLSAgICAgICAg
ICAgIGlmICghcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW3ZpcnR1YWxSZWdpc3Rlcl0pCisgICAg
ICAgIGZvciAoaW50IGxvY2FsSW5kZXggPSAwOyBsb2NhbEluZGV4IDwgKGludClvcGVyYW5kcy5u
dW1iZXJPZkxvY2FscygpOyArK2xvY2FsSW5kZXgpIHsKKyAgICAgICAgICAgIGlmICghcG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzW2xvY2FsSW5kZXhdKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IG9wZXJhbmRzLmxvY2FsKHZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyOjp2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChsb2NhbEluZGV4KTsKKworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBvcGVyYW5kcy5sb2NhbChsb2NhbEluZGV4KTsKICAgICAgICAgICAgIHN3
aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgIGNhc2UgSW5HUFI6CiAg
ICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAgICAgICAgY2FzZSBVbmJv
eGVkQm9vbGVhbkluR1BSOiB7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVyICsgcG9pc29uSW5kZXgodmlydHVhbFJl
Z2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpbG9jYWxUb09wZXJhbmQodmlydHVhbFJlZ2lzdGVyKSkpOworICAgICAgICAgICAgICAg
IG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoRGF0YUJ1ZmZlciAr
IHBvaXNvbkluZGV4KGxvY2FsSW5kZXgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OnBheWxv
YWRGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgICAgICAgICAgdWludDMyX3QgdGFnID0g
SlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZzsKICAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVj
aG5pcXVlKCkgPT0gSW5HUFIpCiAgICAgICAgICAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkNl
bGxUYWc7CkBAIC01NTMsMTcgKzU1NSwxNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGls
ZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkludDMyVGFn
OwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgdGFnID0gSlNWYWx1
ZTo6Qm9vbGVhblRhZzsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKHRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpbG9jYWxUb09wZXJhbmQodmlydHVhbFJlZ2lzdGVyKSkpOworICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIodGFnKSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhc2UgSW5GUFI6CiAgICAgICAg
ICAgICBjYXNlIEluUGFpcjoKICAgICAgICAgICAgIGNhc2UgVUludDMySW5HUFI6Ci0gICAgICAg
ICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRh
QnVmZmVyICsgcG9pc29uSW5kZXgodmlydHVhbFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7
Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNj
cmF0Y2hEYXRhQnVmZmVyICsgcG9pc29uSW5kZXgodmlydHVhbFJlZ2lzdGVyKSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZyksIEdQUkluZm86OnJl
Z1QxKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3Nl
bWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rlcilsb2NhbFRvT3BlcmFuZCh2
aXJ0dWFsUmVnaXN0ZXIpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZv
OjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rlcilsb2NhbFRv
T3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMy
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVyICsgcG9pc29uSW5kZXgo
bG9jYWxJbmRleCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIG1faml0Lmxv
YWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoRGF0YUJ1ZmZlciArIHBvaXNvbklu
ZGV4KGxvY2FsSW5kZXgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcih2aXJ0dWFs
UmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1Qx
LCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC03
MDYsOSArNzA4LDkgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAog
ICAgIAogICAgIC8vIDE1KSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3Bl
cmF0aW9uIGludG8gcmVnVDAuCiAgICAgCi0gICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAh
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSB7Ci0gICAgICAgIG1faml0LmxvYWQz
MihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFz
dFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7Ci0gICAgICAgIG1f
aml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQu
bV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7CisgICAg
aWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgbV9qaXQubG9h
ZDMyKEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBH
UFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmxvYWQzMihBc3Nl
bWJseUhlbHBlcnM6OnRhZ0ZvcihleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNo
ZWRSZXN1bHRSZWdpc3RlcjIpOwogICAgIH0KICAgICAKICAgICAvLyAxNikgQW5kIGZpbmlzaC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyNjQuY3BwCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBA
QAogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiVmlydHVhbFJl
Z2lzdGVyLmgiCisKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CkBAIC0zOTQsNyArMzk2LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6
OmNvbXBpbGVFeGl0KGNvbnN0IAogCiAgICAgICAgICAgICBpZiAoIW1faml0LmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSktPnVzZXNBcmd1bWVudHMoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1faml0
LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZv
cihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgaWYgKGRpZENyZWF0ZUFyZ3VtZW50c09i
amVjdC5hZGQoaW5saW5lQ2FsbEZyYW1lKS5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAgICAg
Ly8gV2Uga25vdyB0aGlzIGNhbGwgZnJhbWUgb3B0aW1pemVkIG91dCBhbiBhcmd1bWVudHMgb2Jq
ZWN0IHRoYXQKICAgICAgICAgICAgICAgICAvLyB0aGUgYmFzZWxpbmUgSklUIHdvdWxkIGhhdmUg
Y3JlYXRlZC4gRG8gdGhhdCBjcmVhdGlvbiBub3cuCkBAIC00MjIsNyArNDI0LDcgQEAgdm9pZCBP
U1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIAogICAgIC8vIDEwKSBMb2Fk
IHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCiAg
ICAgCi0gICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKQorICAgIGlmIChleGl0Lm1fbGFzdFNldE9wZXJhbmQuaXNWYWxpZCgpKQog
ICAgICAgICBtX2ppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKGV4aXQubV9s
YXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKICAgICAKICAg
ICAvLyAxMSkgQW5kIGZpbmlzaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVnaXN0ZXJCYW5rLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdSZWdpc3RlckJhbmsuaAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaAkod29ya2luZyBjb3B5KQpAQCAtODUsMTAgKzg1LDEw
IEBAIHB1YmxpYzoKICAgICAvLyByZXR1cm5zIC0xIChJbnZhbGlkR1BSUmVnIG9yIEludmFsaWRG
UFJSZWcpLgogICAgIFJlZ0lEIHRyeUFsbG9jYXRlKCkKICAgICB7Ci0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBpZ25vcmVkOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaWdub3JlZCA9IFZpcnR1
YWxSZWdpc3RlcigpOwogICAgICAgICAKICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IE5VTV9SRUdTOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghbV9kYXRhW2ldLmxvY2tDb3VudCAm
JiBtX2RhdGFbaV0ubmFtZSA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAg
aWYgKCFtX2RhdGFbaV0ubG9ja0NvdW50ICYmICFtX2RhdGFbaV0ubmFtZS5pc1ZhbGlkKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlSW50ZXJuYWwoaSwgaWdub3JlZCk7CiAgICAg
ICAgIH0KICAgICAgICAgCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogCiAgICAgICAgICsr
bV9kYXRhW2luZGV4XS5sb2NrQ291bnQ7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lID0g
bmFtZUF0SW5kZXgoaW5kZXgpOwotICAgICAgICBpZiAobmFtZSAhPSBJbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKQorICAgICAgICBpZiAobmFtZS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZWxlYXNl
QXRJbmRleChpbmRleCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbmFtZTsKQEAgLTE2NSw4
ICsxNjUsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChpbmRleCA8IE5VTV9SRUdTKTsKICAg
ICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0ubG9ja0NvdW50KTsKICAgICAgICAgLy8gJ2luZGV4
JyBzaG91bGQgbm90IGN1cnJlbnRseSBiZSBuYW1lZCwgdGhlIG5ldyBuYW1lIG11c3QgYmUgdmFs
aWQuCi0gICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLm5hbWUgPT0gSW52YWxpZFZpcnR1YWxS
ZWdpc3Rlcik7Ci0gICAgICAgIEFTU0VSVChuYW1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
OworICAgICAgICBBU1NFUlQoIW1fZGF0YVtpbmRleF0ubmFtZS5pc1ZhbGlkKCkpOworICAgICAg
ICBBU1NFUlQobmFtZS5pc1ZhbGlkKCkpOwogICAgICAgICAvLyAnaW5kZXgnIHNob3VsZCBub3Qg
Y3VycmVudGx5IGhhdmUgYSBzcGlsbE9yZGVyLgogICAgICAgICBBU1NFUlQobV9kYXRhW2luZGV4
XS5zcGlsbE9yZGVyID09IFNwaWxsSGludEludmFsaWQpOwogCkBAIC0yMDEsNyArMjAxLDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIC8vIEdldCB0aGUgbmFtZSAoVmlydHVhbFJlZ2lzdGVyKSBh
c3NvY2lhdGVkIHdpdGggdGhlCi0gICAgLy8gZ2l2ZW4gcmVnaXN0ZXIgKG9yIEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIgZm9yIG5vbmUpLgorICAgIC8vIGdpdmVuIHJlZ2lzdGVyIChvciBkZWZhdWx0
IFZpcnR1YWxSZWdpc3RlcigpIGZvciBub25lKS4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZShS
ZWdJRCByZWcpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbmFtZUF0SW5kZXgoQmFua0lu
Zm86OnRvSW5kZXgocmVnKSk7CkBAIC0yMDksNyArMjA5LDcgQEAgcHVibGljOgogICAgIAogICAg
IGJvb2wgaXNJblVzZShSZWdJRCByZWcpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaXNM
b2NrZWQocmVnKSB8fCBuYW1lKHJlZykgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKKyAgICAg
ICAgcmV0dXJuIGlzTG9ja2VkKHJlZykgfHwgbmFtZShyZWcpLmlzVmFsaWQoKTsKICAgICB9CiAg
ICAgCiAjaWZuZGVmIE5ERUJVRwpAQCAtMjE3LDggKzIxNyw4IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIC8vIEZvciBlYWNoIHJlZ2lzdGVyLCBwcmludCB0aGUgVmlydHVhbFJlZ2lzdGVyICdu
YW1lJy4KICAgICAgICAgZm9yICh1aW50MzJfdCBpID0wOyBpIDwgTlVNX1JFR1M7ICsraSkgewot
ICAgICAgICAgICAgaWYgKG1fZGF0YVtpXS5uYW1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlslMDJkXSIsIG1fZGF0YVtpXS5uYW1lKTsKKyAg
ICAgICAgICAgIGlmIChtX2RhdGFbaV0ubmFtZS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIlslMDJkXSIsIG1fZGF0YVtpXS5uYW1lLm9mZnNldCgpKTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiWy0tXSIpOwogICAgICAgICB9CkBAIC0z
MTIsMTEgKzMxMiwxMSBAQCBwcml2YXRlOgogICAgICAgICAvLyAnaW5kZXgnIG11c3QgYmUgYSB2
YWxpZCByZWdpc3Rlci4KICAgICAgICAgQVNTRVJUKGluZGV4IDwgTlVNX1JFR1MpOwogICAgICAg
ICAvLyAnaW5kZXgnIHNob3VsZCBjdXJyZW50bHkgYmUgbmFtZWQuCi0gICAgICAgIEFTU0VSVCht
X2RhdGFbaW5kZXhdLm5hbWUgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIEFT
U0VSVChtX2RhdGFbaW5kZXhdLm5hbWUuaXNWYWxpZCgpKTsKICAgICAgICAgLy8gJ2luZGV4JyBz
aG91bGQgY3VycmVudGx5IGhhdmUgYSB2YWxpZCBzcGlsbCBvcmRlci4KICAgICAgICAgQVNTRVJU
KG1fZGF0YVtpbmRleF0uc3BpbGxPcmRlciAhPSBTcGlsbEhpbnRJbnZhbGlkKTsKIAotICAgICAg
ICBtX2RhdGFbaW5kZXhdLm5hbWUgPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyOworICAgICAgICBt
X2RhdGFbaW5kZXhdLm5hbWUgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgbV9kYXRhW2lu
ZGV4XS5zcGlsbE9yZGVyID0gU3BpbGxIaW50SW52YWxpZDsKICAgICB9CiAKQEAgLTMyNyw3ICsz
MjcsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQoaSA8IE5VTV9SRUdTICYmICFtX2RhdGFb
aV0ubG9ja0NvdW50KTsKIAogICAgICAgICAvLyBSZXR1cm4gdGhlIFZpcnR1YWxSZWdpc3RlciBv
ZiB0aGUgbmFtZWQgdmFsdWUgY3VycmVudGx5IHN0b3JlZCBpbgotICAgICAgICAvLyB0aGUgcmVn
aXN0ZXIgYmVpbmcgcmV0dXJuZWQgLSBvciBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyIGlmIG5vbmUu
CisgICAgICAgIC8vIHRoZSByZWdpc3RlciBiZWluZyByZXR1cm5lZCAtIG9yIGRlZmF1bHQgVmly
dHVhbFJlZ2lzdGVyKCkgaWYgbm9uZS4KICAgICAgICAgc3BpbGxNZSA9IG1fZGF0YVtpXS5uYW1l
OwogCiAgICAgICAgIC8vIENsZWFyIGFueSBuYW1lL3NwaWxsT3JkZXIgY3VycmVudGx5IGFzc29j
aWF0ZWQgd2l0aCB0aGUgcmVnaXN0ZXIsCkBAIC0zNDUsNyArMzQ1LDcgQEAgcHJpdmF0ZToKICAg
ICAvLyBjb3VudCwgbmFtZSBhbmQgc3BpbGxPcmRlciBoaW50LgogICAgIHN0cnVjdCBNYXBFbnRy
eSB7CiAgICAgICAgIE1hcEVudHJ5KCkKLSAgICAgICAgICAgIDogbmFtZShJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyKQorICAgICAgICAgICAgOiBuYW1lKFZpcnR1YWxSZWdpc3RlcigpKQogICAgICAg
ICAgICAgLCBzcGlsbE9yZGVyKFNwaWxsSGludEludmFsaWQpCiAgICAgICAgICAgICAsIGxvY2tD
b3VudCgwKQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nj
b3JlQm9hcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nj
b3JlQm9hcmQuaAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTY29yZUJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDE0ICs4OSwxNCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAvLyBVc2UgY291bnQgbXVzdCBoYXZlIGhpdCB6ZXJvIGZvciBpdCB0
byBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGZyZWUgbGlzdCEKICAgICAgICAgICAgIEFTU0VSVCgh
bV91c2VkW2luZGV4XSk7CiAgICAgICAgICAgICBtX2hpZ2hXYXRlcm1hcmsgPSBzdGQ6Om1heCht
X2hpZ2hXYXRlcm1hcmssIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgKyAxKTsKLSAgICAg
ICAgICAgIHJldHVybiAoVmlydHVhbFJlZ2lzdGVyKWxvY2FsVG9PcGVyYW5kKGluZGV4KTsKKyAg
ICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXI6OnZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFsbG9jYXRlIGEgbmV3IFZpcnR1YWxS
ZWdpc3RlciwgYW5kIGFkZCBhIGNvcnJlc3BvbmRpbmcgZW50cnkgdG8gbV91c2VkLgogICAgICAg
ICBzaXplX3QgbmV4dCA9IG1fdXNlZC5zaXplKCk7CiAgICAgICAgIG1fdXNlZC5hcHBlbmQoMCk7
CiAgICAgICAgIG1faGlnaFdhdGVybWFyayA9IHN0ZDo6bWF4KG1faGlnaFdhdGVybWFyaywgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG5leHQpICsgMSk7Ci0gICAgICAgIHJldHVybiAoVmlydHVhbFJl
Z2lzdGVyKWxvY2FsVG9PcGVyYW5kKG5leHQpOworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lz
dGVyOjp2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChuZXh0KTsKICAgICB9CiAKICAgICAvLyBJbmNy
ZW1lbnQgdGhlIHVzZWNvdW50IGZvciB0aGUgVmlydHVhbFJlZ2lzdGVyIGFzc29jaWF0ZWQgd2l0
aCAnY2hpbGQnLApAQCAtMTA3LDcgKzEwNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICAvLyBGaW5kIHRoZSB2aXJ0dWFsIHJlZ2lzdGVyIG51bWJlciBmb3IgdGhp
cyBjaGlsZCwgaW5jcmVtZW50IGl0cyB1c2UgY291bnQuCi0gICAgICAgIHVpbnQzMl90IGluZGV4
ID0gb3BlcmFuZFRvTG9jYWwoY2hpbGQtPnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgdWlu
dDMyX3QgaW5kZXggPSBjaGlsZC0+dmlydHVhbFJlZ2lzdGVyKCkudG9Mb2NhbCgpOwogICAgICAg
ICBBU1NFUlQobV91c2VkW2luZGV4XSAhPSBtYXgoKSk7CiAgICAgICAgIGlmIChjaGlsZC0+cmVm
Q291bnQoKSA9PSArK21fdXNlZFtpbmRleF0pIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3NzksNyArNDc3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCiAgICAgICAgICAgICAgICAgY3JlYXRlZCwgdGhpcywgb3BlcmF0aW9uR2V0QXJndW1lbnRz
TGVuZ3RoLCByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVu
dHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKS5vZmZzZXQoKSkpOwogICAgICAgICAKICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKQEAg
LTQ5MTgsMTQgKzQ5MTgsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAg
c2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0
aW9uR2V0SW5saW5lZEFyZ3VtZW50QnlWYWwsIHJlc3VsdEdQUiwgCi0gICAgICAgICAgICAgICAg
ICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pLAorICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2lu
KS5vZmZzZXQoKSwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgIGluZGV4R1BSKSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBz
bG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRp
b25HZXRBcmd1bWVudEJ5VmFsLCByZXN1bHRHUFIsIAotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSwKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikub2Zmc2V0
KCksCiAgICAgICAgICAgICAgICAgICAgIGluZGV4R1BSKSk7CiAgICAgICAgIH0KICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgU3BlY3Vs
YXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbAogICAgICwgbV9nZW5lcmF0aW9uSW5m
byhtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCiAgICAgLCBtX2FyZ3Vt
ZW50cyhqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkKICAgICAsIG1fdmFyaWFibGVz
KGppdC5ncmFwaCgpLm1fbG9jYWxWYXJzKQotICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgICwgbV9sYXN0U2V0T3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIoKSkKICAgICAsIG1fc3RhdGUobV9qaXQuZ3JhcGgoKSkKICAgICAsIG1faW50ZXJw
cmV0ZXIobV9qaXQuZ3JhcGgoKSwgbV9zdGF0ZSkKICAgICAsIG1fc3RyZWFtKCZqaXQuaml0Q29k
ZSgpLT52YXJpYWJsZUV2ZW50U3RyZWFtKQpAQCAtMTE4Myw3ICsxMTgzLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y2hlY2tDb25zaXN0ZW5jeSgpCiAKICAgICBmb3IgKGdwcl9pdGVyYXRvciBp
dGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsKICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGl0ZXIubmFtZSgpOwotICAg
ICAgICBpZiAodmlydHVhbFJlZ2lzdGVyID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAg
ICAgIGlmICghdmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmly
dHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CkBAIC0xMjA5LDcgKzEyMDksNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjaGVja0NvbnNpc3RlbmN5KCkKIAogICAgIGZvciAoZnByX2l0ZXJh
dG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikg
ewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gaXRlci5uYW1lKCk7
Ci0gICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikK
KyAgICAgICAgaWYgKCF2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zy
b21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKQEAgLTE1MzgsNyArMTUzOCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUKICAgICBpZiAoY2hpbGQt
Pm9wKCkgPT0gVUludDMyVG9OdW1iZXIpCiAgICAgICAgIG5vdGljZU9TUkJpcnRoKGNoaWxkLT5j
aGlsZDEoKS5ub2RlKCkpOwogICAgIAotICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFi
bGVFdmVudDo6bW92SGludChNaW5pZmllZElEKGNoaWxkKSwgbm9kZS0+bG9jYWwoKSkpOworICAg
IG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6bW92SGludChNaW5pZmllZElE
KGNoaWxkKSwgbm9kZS0+bG9jYWwoKS5vZmZzZXQoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTW92SGludEFuZENoZWNrKE5vZGUqIG5vZGUpCkBAIC0xNTU2LDcgKzE1NTYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5saW5lU3RhcnQoCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxp
bmVDYWxsRnJhbWUpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXM7ICsraSkgewogICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5OwotICAgICAg
ICBpZiAoY29kZUJsb2NrLT5pc0NhcHR1cmVkKGFyZ3VtZW50VG9PcGVyYW5kKGkpKSkKKyAgICAg
ICAgaWYgKGNvZGVCbG9jay0+aXNDYXB0dXJlZChWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9P
cGVyYW5kKGkpKSkKICAgICAgICAgICAgIHJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6YWxyZWFk
eUluSlNTdGFjaygpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRp
b24mIGFyZ3VtZW50UG9zaXRpb24gPQpAQCAtMTYzOSw3ICsxNjM5LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3Vy
Y2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgIG1fYXJndW1lbnRzW2ld
ID0gdmFsdWVTb3VyY2U7Ci0gICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVF
dmVudDo6c2V0TG9jYWwoYXJndW1lbnRUb09wZXJhbmQoaSksIHZhbHVlU291cmNlLmRhdGFGb3Jt
YXQoKSkpOworICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNl
dExvY2FsKFZpcnR1YWxSZWdpc3Rlcjo6dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIHZh
bHVlU291cmNlLmRhdGFGb3JtYXQoKSkpOwogICAgIH0KICAgICAKICAgICBtX3N0YXRlLnJlc2V0
KCk7CkBAIC0xNjU5LDEwICsxNjU5LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
dXJyZW50QmxvY2sKICAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2U6OmZvckZs
dXNoRm9ybWF0KG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpKTsKICAg
ICAgICAgbV92YXJpYWJsZXNbaV0gPSB2YWx1ZVNvdXJjZTsKICAgICAgICAgLy8gRklYTUU6IERv
bid0IGVtaXQgU2V0TG9jYWwoRGVhZCkuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDgwMTkKLSAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2
ZW50OjpzZXRMb2NhbChsb2NhbFRvT3BlcmFuZChpKSwgdmFsdWVTb3VyY2UuZGF0YUZvcm1hdCgp
KSk7CisgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9j
YWwoVmlydHVhbFJlZ2lzdGVyOjp2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgdmFsdWVTb3Vy
Y2UuZGF0YUZvcm1hdCgpKSk7CiAgICAgfQogICAgIAotICAgIG1fbGFzdFNldE9wZXJhbmQgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgIG1fbGFzdFNldE9wZXJhbmQgPSBW
aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gQ29kZU9y
aWdpbigpOwogICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlID0gQ29kZU9yaWdpbigpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVk
ZSAiREZHVmFsdWVTb3VyY2UuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJWYWx1ZVJlY292ZXJ5LmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMTg0LDcgKzE4NSw3IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZTsKICAgICAgICAgR1BS
UmVnIGdwciA9IG1fZ3Bycy5hbGxvY2F0ZShzcGlsbE1lKTsKLSAgICAgICAgaWYgKHNwaWxsTWUg
IT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICBpZiAoc3BpbGxNZS5pc1ZhbGlk
KCkpIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3BpbGxNZSk7CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1h
dEpTRG91YmxlKTsKQEAgLTIwMSw3ICsyMDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LmFk
ZFJlZ2lzdGVyQWxsb2NhdGlvbkF0T2Zmc2V0KG1faml0LmRlYnVnT2Zmc2V0KCkpOwogI2VuZGlm
CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lID0gbV9ncHJzLmFsbG9jYXRlU3BlY2lm
aWMoc3BlY2lmaWMpOwotICAgICAgICBpZiAoc3BpbGxNZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKSB7CisgICAgICAgIGlmIChzcGlsbE1lLmlzVmFsaWQoKSkgewogI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCiAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZv
RnJvbVZpcnR1YWxSZWdpc3RlcihzcGlsbE1lKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNEb3VibGUpOwpAQCAtMjIzLDcg
KzIyNCw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxN
ZTsKICAgICAgICAgRlBSUmVnIGZwciA9IG1fZnBycy5hbGxvY2F0ZShzcGlsbE1lKTsKLSAgICAg
ICAgaWYgKHNwaWxsTWUgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgaWYgKHNw
aWxsTWUuaXNWYWxpZCgpKQogICAgICAgICAgICAgc3BpbGwoc3BpbGxNZSk7CiAgICAgICAgIHJl
dHVybiBmcHI7CiAgICAgfQpAQCAtMzYwLDcgKzM2MSw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNT
RVJUKHBsYW5zLmlzRW1wdHkoKSk7CiAgICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBt
X2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAg
ICAgR1BSUmVnIGdwciA9IGl0ZXIucmVnSUQoKTsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUo
KSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGdwciAhPSBleGNsdWRlICYmIGdwciAhPSBl
eGNsdWRlMikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpLmlzVmFsaWQoKSAmJiBncHIg
IT0gZXhjbHVkZSAmJiBncHIgIT0gZXhjbHVkZTIpIHsKICAgICAgICAgICAgICAgICBTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuIHBsYW4gPSBzaWxlbnRTYXZlUGxhbkZvckdQUihpdGVyLm5hbWUoKSwg
Z3ByKTsKICAgICAgICAgICAgICAgICBpZiAoZG9TcGlsbCkKICAgICAgICAgICAgICAgICAgICAg
c2lsZW50U3BpbGwocGxhbik7CkBAIC0zNjgsNyArMzY5LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMu
YmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgaWYg
KGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgaXRlci5yZWdJRCgpICE9
IGZwckV4Y2x1ZGUpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKS5pc1ZhbGlkKCkgJiYg
aXRlci5yZWdJRCgpICE9IGZwckV4Y2x1ZGUpIHsKICAgICAgICAgICAgICAgICBTaWxlbnRSZWdp
c3RlclNhdmVQbGFuIHBsYW4gPSBzaWxlbnRTYXZlUGxhbkZvckZQUihpdGVyLm5hbWUoKSwgaXRl
ci5yZWdJRCgpKTsKICAgICAgICAgICAgICAgICBpZiAoZG9TcGlsbCkKICAgICAgICAgICAgICAg
ICAgICAgc2lsZW50U3BpbGwocGxhbik7CkBAIC01OTQsMTMgKzU5NSwxMyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBmbHVzaFJlZ2lzdGVycygpCiAgICAgewogICAgICAgICBmb3IgKGdwcl9pdGVyYXRv
ciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSB7
CisgICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICAg
ICAgc3BpbGwoaXRlci5uYW1lKCkpOwogICAgICAgICAgICAgICAgIGl0ZXIucmVsZWFzZSgpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIg
PSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAg
ICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAg
ICAgICAgIGlmIChpdGVyLm5hbWUoKS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgICAgICBzcGls
bChpdGVyLm5hbWUoKSk7CiAgICAgICAgICAgICAgICAgaXRlci5yZWxlYXNlKCk7CiAgICAgICAg
ICAgICB9CkBAIC02MTMsMTEgKzYxNCwxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ZsdXNoZWQo
KQogICAgIHsKICAgICAgICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigp
OyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5u
YW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgIGlmIChpdGVyLm5h
bWUoKS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAh
PSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9
IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkuaXNW
YWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTc1Miw3ICs3NTMsNyBAQCBwdWJsaWM6CiAgICAgLy8gQWNjZXNz
IHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgogICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzIGFyZ3VtZW50U2xvdChpbnQgYXJndW1lbnQpCiAgICAgewotICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICgtbV9qaXQu
Y29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICsgYXJndW1lbnRUb09wZXJhbmQoYXJn
dW1lbnQpKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
ICgtbV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICsgVmlydHVhbFJlZ2lz
dGVyOjphcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkpICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgY2Fs
bEZyYW1lVGFnU2xvdChpbnQgc2xvdCkKQEAgLTc2NywxMiArNzY4LDEyIEBAIHB1YmxpYzoKIAog
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFyZ3VtZW50VGFnU2xvdChpbnQgYXJndW1lbnQp
CiAgICAgewotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsICgtbV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzICsgYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICgtbV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVl
UmVnaXN0ZXJzICsgVmlydHVhbFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkp
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7CiAgICAgfQogCiAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MgYXJndW1lbnRQYXlsb2FkU2xvdChpbnQgYXJndW1lbnQpCiAgICAg
ewotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsICgtbV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICsg
YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAoLW1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJl
Z2lzdGVycyArIFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKSAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKICAgICB9CiAKICAgICB2b2lk
IGVtaXRDYWxsKE5vZGUqKTsKQEAgLTIxODEsMTIgKzIxODIsMTIgQEAgcHVibGljOgogICAgIC8v
IFRyYWNraW5nIGZvciB3aGljaCBub2RlcyBhcmUgY3VycmVudGx5IGhvbGRpbmcgdGhlIHZhbHVl
cyBvZiBhcmd1bWVudHMgYW5kIGJ5dGVjb2RlCiAgICAgLy8gb3BlcmFuZC1pbmRleGVkIHZhcmlh
Ymxlcy4KICAgICAKLSAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZUZvck9wZXJhbmQoaW50IG9w
ZXJhbmQpCisgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2VGb3JPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZhbHVlU291cmNlUmVmZXJlbmNl
Rm9yT3BlcmFuZChvcGVyYW5kKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXROb2RlRm9yT3Bl
cmFuZChOb2RlKiBub2RlLCBpbnQgb3BlcmFuZCkKKyAgICB2b2lkIHNldE5vZGVGb3JPcGVyYW5k
KE5vZGUqIG5vZGUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgdmFs
dWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpID0gVmFsdWVTb3VyY2UoTWluaWZp
ZWRJRChub2RlKSk7CiAgICAgfQpAQCAtMjE5NSwyMSArMjE5NiwyMSBAQCBwdWJsaWM6CiAgICAg
Ly8gYW5kIHBvdGVudGlhbGx5IHJlc2l6ZXMgdGhlIGFycmF5LiBTbyBpdCB3b3VsZCBub3QgYmUg
cmlnaHQgdG8gY2FsbCB0aGlzCiAgICAgLy8gdHdpY2UgYW5kIHRoZW4gcGVyZm9ybSBvcGVyYW5k
cyBvbiBib3RoIHJlZmVyZW5jZXMsIHNpbmNlIHRoZSBvbmUgZnJvbQogICAgIC8vIHRoZSBmaXJz
dCBjYWxsIG1heSBubyBsb25nZXIgYmUgdmFsaWQuCi0gICAgVmFsdWVTb3VyY2UmIHZhbHVlU291
cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICBWYWx1ZVNvdXJjZSYgdmFs
dWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAg
IHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAg
ICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKKyAgICAgICAgaWYg
KG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVy
YW5kLnRvQXJndW1lbnQoKTsKICAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1thcmd1bWVu
dF07CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgbG9jYWwgPSBvcGVyYW5kVG9Mb2NhbChvcGVy
YW5kKTsKKyAgICAgICAgaW50IGxvY2FsID0gb3BlcmFuZC50b0xvY2FsKCk7CiAgICAgICAgIGlm
ICgodW5zaWduZWQpbG9jYWwgPj0gbV92YXJpYWJsZXMuc2l6ZSgpKQogICAgICAgICAgICAgbV92
YXJpYWJsZXMucmVzaXplKGxvY2FsICsgMSk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbV92
YXJpYWJsZXNbbG9jYWxdOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlY29yZFNldExvY2FsKGlu
dCBvcGVyYW5kLCBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSkKKyAgICB2b2lkIHJlY29yZFNldExv
Y2FsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSkKICAg
ICB7CiAgICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChvcGVyYW5kKSA9IHZh
bHVlU291cmNlOwogICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6
OnNldExvY2FsKG9wZXJhbmQsIHZhbHVlU291cmNlLmRhdGFGb3JtYXQoKSkpOwpAQCAtMjIxNyw3
ICsyMjE4LDcgQEAgcHVibGljOgogCiAgICAgR2VuZXJhdGlvbkluZm8mIGdlbmVyYXRpb25JbmZv
RnJvbVZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fZ2VuZXJhdGlvbkluZm9bb3BlcmFuZFRvTG9jYWwodmlydHVh
bFJlZ2lzdGVyKV07CisgICAgICAgIHJldHVybiBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdp
c3Rlci50b0xvY2FsKCldOwogICAgIH0KICAgICAKICAgICBHZW5lcmF0aW9uSW5mbyYgZ2VuZXJh
dGlvbkluZm8oTm9kZSogbm9kZSkKQEAgLTIyNjAsNyArMjI2MSw3IEBAIHB1YmxpYzoKIAogICAg
IFZlY3RvcjxWYWx1ZVNvdXJjZSwgMD4gbV9hcmd1bWVudHM7CiAgICAgVmVjdG9yPFZhbHVlU291
cmNlLCAwPiBtX3ZhcmlhYmxlczsKLSAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9sYXN0U2V0T3BlcmFuZDsKICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdp
bkZvckV4aXRUYXJnZXQ7CiAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmls
ZTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
CShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgICAg
IC8vIFZhbGlkYXRlIHRoYXQgYWxsIGxvY2FsIHZhcmlhYmxlcyBhdCB0aGUgaGVhZCBvZiB0aGUg
cm9vdCBibG9jayBhcmUgZGVhZC4KICAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGgu
YmxvY2soMCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByb290LT52YXJpYWJs
ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQotICAgICAgICAgICAgVl9FUVVBTCgoc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihsb2NhbFRvT3BlcmFuZChpKSksIDApLCBzdGF0aWNf
Y2FzdDxOb2RlKj4oMCksIHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKSk7CisgICAgICAg
ICAgICBWX0VRVUFMKChWaXJ0dWFsUmVnaXN0ZXI6OnZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkp
LCAwKSwgc3RhdGljX2Nhc3Q8Tm9kZSo+KDApLCByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwo
aSkpOwogICAgICAgICAKICAgICAgICAgLy8gVmFsaWRhdGUgcmVmIGNvdW50cyBhbmQgdXNlcy4K
ICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CkBAIC0zMTcsMTcgKzMxNywxNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihhcmd1
bWVudFRvT3BlcmFuZChpKSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1l
bnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKS0+aGFzVmFyaWFibGVB
Y2Nlc3NEYXRhKG1fZ3JhcGgpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgoVmlydHVhbFJl
Z2lzdGVyOjp2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgYmxvY2spLCAhYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3Vt
ZW50KGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEobV9ncmFwaCkpOwogICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykKLSAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oYXJndW1lbnRUb09wZXJhbmQo
aSkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGkpIHx8IGJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dy
YXBoKSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChWaXJ0dWFsUmVnaXN0ZXI6OnZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRU
YWlsLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaSktPmhh
c1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMuYXJndW1lbnQoaSkgPSBub3RTZXQ7CiAgICAgICAg
ICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMuYXJndW1lbnQoaSkgPSBub3RTZXQ7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVkFMSURB
VEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obG9jYWxUb09wZXJhbmQoaSkpLCBibG9j
ayksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpIHx8IGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKFZpcnR1YWxSZWdpc3Rlcjo6dmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoaSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkgfHwgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgp
KTsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpCi0g
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KGxvY2FsVG9PcGVyYW5kKGkpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2Nh
bChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGkpLT5oYXNWYXJpYWJsZUFjY2Vz
c0RhdGEobV9ncmFwaCkpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoVmlydHVhbFJl
Z2lzdGVyOjp2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5sb2NhbChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGkpLT5o
YXNWYXJpYWJsZUFjY2Vzc0RhdGEobV9ncmFwaCkpOwogCiAgICAgICAgICAgICAgICAgZ2V0TG9j
YWxQb3NpdGlvbnMubG9jYWwoaSkgPSBub3RTZXQ7CiAgICAgICAgICAgICAgICAgc2V0TG9jYWxQ
b3NpdGlvbnMubG9jYWwoaSkgPSBub3RTZXQ7CkBAIC0zODksMTggKzM4OSwxOCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAgICAgICAgICAg
ICAgICAgY2hlY2tPcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBibG9jaywgZ2V0TG9jYWxQ
b3NpdGlvbnMsIHNldExvY2FsUG9zaXRpb25zLCBhcmd1bWVudFRvT3BlcmFuZChpKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJsb2NrLCBnZXRMb2NhbFBvc2l0aW9ucywgc2V0TG9jYWxQb3NpdGlv
bnMsIFZpcnR1YWxSZWdpc3Rlcjo6dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFy
aWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGNo
ZWNrT3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgYmxvY2ssIGdldExvY2FsUG9zaXRpb25z
LCBzZXRMb2NhbFBvc2l0aW9ucywgbG9jYWxUb09wZXJhbmQoaSkpOworICAgICAgICAgICAgICAg
ICAgICBibG9jaywgZ2V0TG9jYWxQb3NpdGlvbnMsIHNldExvY2FsUG9zaXRpb25zLCBWaXJ0dWFs
UmVnaXN0ZXI6OnZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNoZWNrT3BlcmFuZCgKICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2ssIE9wZXJhbmRzPHNpemVfdD4mIGdldExvY2FsUG9zaXRpb25zLAotICAg
ICAgICBPcGVyYW5kczxzaXplX3Q+JiBzZXRMb2NhbFBvc2l0aW9ucywgaW50IG9wZXJhbmQpCisg
ICAgICAgIE9wZXJhbmRzPHNpemVfdD4mIHNldExvY2FsUG9zaXRpb25zLCBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGlmIChnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5k
KG9wZXJhbmQpID09IG5vdFNldCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQzMiwyMyArNDMy
LDIzIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChWaXJ0dWFs
UmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKICAgICAgICAgaWYgKCFi
bG9jaykgewotICAgICAgICAgICAgZGF0YUxvZygiciIsIHN0YXRpY19jYXN0PGludD4obG9jYWwp
LCAiIGluIG51bGwgQmxvY2sgIik7CisgICAgICAgICAgICBkYXRhTG9nKCJyIiwgbG9jYWwsICIg
aW4gbnVsbCBCbG9jayAiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIGRhdGFMb2coInIiLCBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsKSwgIiBpbiBCbG9jayAiLCAq
YmxvY2spOworICAgICAgICBkYXRhTG9nKCJyIiwgbG9jYWwsICIgaW4gQmxvY2sgIiwgKmJsb2Nr
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNC
bG9jayogZGVzdGluYXRpb25CbG9jaykKICAgICB7Ci0gICAgICAgIGRhdGFMb2coInIiLCBzdGF0
aWNfY2FzdDxpbnQ+KGxvY2FsKSwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2ssICIgLT4gIiwg
KmRlc3RpbmF0aW9uQmxvY2spOworICAgICAgICBkYXRhTG9nKCJyIiwgbG9jYWwsICIgaW4gQmxv
Y2sgIiwgKnNvdXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgTm9kZSogcHJldk5vZGUpCiAg
ICAgewotICAgICAgICBkYXRhTG9nKHByZXZOb2RlLCAiIGZvciByIiwgc3RhdGljX2Nhc3Q8aW50
Pihsb2NhbCksICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrKTsKKyAgICAgICAgZGF0YUxvZyhw
cmV2Tm9kZSwgIiBmb3IgciIsIGxvY2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwg
QmFzaWNCbG9jayogYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bHVlUmVjb3ZlcnlPdmVycmlkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmgJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDEzICszOSwxMyBAQCBjbGFzcyBWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUg
OiBwdWJsaWMgUmVmCiBwdWJsaWM6CiAgICAgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKCkgeyB9CiAg
ICAgCi0gICAgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKGludCBvcGVyYW5kLCBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSkKKyAgICBWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5KQogICAgICAgICA6IG9w
ZXJhbmQob3BlcmFuZCkKICAgICAgICAgLCByZWNvdmVyeShyZWNvdmVyeSkKICAgICB7CiAgICAg
fQogICAgIAotICAgIGludCBvcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kOwog
ICAgIFZhbHVlUmVjb3ZlcnkgcmVjb3Zlcnk7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDE1NjM2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDEyICs4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJU
KG1fbG9jYWwgPT0gZmluZCgpLT5tX2xvY2FsKTsKICAgICAgICAgcmV0dXJuIG1fbG9jYWw7CiAg
ICAgfQotICAgIAotICAgIGludCBvcGVyYW5kKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KGxvY2FsKCkpOwotICAgIH0KLSAgICAKKwogICAgIGJvb2wgbWVyZ2VJc0Nh
cHR1cmVkKGJvb2wgaXNDYXB0dXJlZCkKICAgICB7CiAgICAgICAgIHJldHVybiBjaGVja0FuZFNl
dChtX3Nob3VsZE5ldmVyVW5ib3gsIG1fc2hvdWxkTmV2ZXJVbmJveCB8IGlzQ2FwdHVyZWQpCkBA
IC0yMzAsNyArMjI1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgLy8gV2UgZG9uJ3Qgc3Vw
cG9ydCB0aGlzIGZhY2lsaXR5IGZvciBhcmd1bWVudHMsIHlldC4KICAgICAgICAgLy8gRklYTUU6
IG1ha2UgdGhpcyB3b3JrIGZvciBhcmd1bWVudHMuCi0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1
bWVudChvcGVyYW5kKCkpKQorICAgICAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgdmFyaWFi
bGUgaXMgbm90IGEgbnVtYmVyIHByZWRpY3Rpb24sIHRoZW4gdGhpcyBkb2Vzbid0CkBAIC0yNzgs
NyArMjczLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKGlzUm9vdCgpKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChsb2NhbCgpKSB8fCBzaG91bGRO
ZXZlclVuYm94KCkpCisgICAgICAgIGlmIChsb2NhbCgpLmlzQXJndW1lbnQoKSB8fCBzaG91bGRO
ZXZlclVuYm94KCkpCiAgICAgICAgICAgICByZXR1cm4gREZHOjptZXJnZURvdWJsZUZvcm1hdFN0
YXRlKG1fZG91YmxlRm9ybWF0U3RhdGUsIE5vdFVzaW5nRG91YmxlRm9ybWF0KTsKICAgICAgICAg
CiAgICAgICAgIGlmIChtX2RvdWJsZUZvcm1hdFN0YXRlID09IENhbnRVc2VEb3VibGVGb3JtYXQp
CkBAIC0zMzMsNyArMzI4LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0
aW9uKHByZWRpY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRJbnQzMjsKICAgICAg
ICAgCi0gICAgICAgIGlmIChlbmFibGVJbnQ1MigpICYmICFvcGVyYW5kSXNBcmd1bWVudChtX2xv
Y2FsKSAmJiBpc01hY2hpbmVJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgaWYg
KGVuYWJsZUludDUyKCkgJiYgIW1fbG9jYWwuaXNBcmd1bWVudCgpICYmIGlzTWFjaGluZUludFNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRJbnQ1MjsK
ICAgICAgICAgCiAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCShyZXZp
c2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZl
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
QVNTRVJUKGtpbmQgPT0gQmlydGhUb1NwaWxsIHx8IGtpbmQgPT0gU3BpbGwpOwogICAgICAgICBW
YXJpYWJsZUV2ZW50IGV2ZW50OwogICAgICAgICBldmVudC5tX2lkID0gaWQ7Ci0gICAgICAgIGV2
ZW50LnUudmlydHVhbFJlZyA9IHZpcnR1YWxSZWdpc3RlcjsKKyAgICAgICAgZXZlbnQudS52aXJ0
dWFsUmVnID0gdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOwogICAgICAgICBldmVudC5tX2tpbmQg
PSBraW5kOwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIHJl
dHVybiBldmVudDsKQEAgLTE1NSwxMCArMTU1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGV2ZW50OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBzZXRMb2NhbChp
bnQgb3BlcmFuZCwgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQg
c2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRGF0YUZvcm1hdCBmb3Jt
YXQpCiAgICAgewogICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OwotICAgICAgICBldmVudC51
LnZpcnR1YWxSZWcgPSBvcGVyYW5kOworICAgICAgICBldmVudC51LnZpcnR1YWxSZWcgPSB2aXJ0
dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IFNldExvY2FsRXZl
bnQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAgcmV0dXJu
IGV2ZW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlRXZlbnRTdHJlYW0uY3BwCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTUsNyArMTE1LDcgQEAgdm9pZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgK
ICAgICAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXM7CiAgICAgaWYgKGNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQotICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9ja0Zv
cklubGluZUNhbGxGcmFtZShjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSktPm1fbnVtQ2FsbGVl
UmVnaXN0ZXJzICsgb3BlcmFuZFRvTG9jYWwoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0KTsKKyAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJ
bmxpbmVDYWxsRnJhbWUoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpLT5tX251bUNhbGxlZVJl
Z2lzdGVycyArIFZpcnR1YWxSZWdpc3Rlcjo6b3BlcmFuZFRvTG9jYWwoY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKICAgICBlbHNlCiAgICAgICAgIG51bVZhcmlhYmxl
cyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKICAgICAKQEAgLTI4
Myw3ICsyODMsNyBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAg
IC8vIHRoYXQgdGhvc2UgdmFsdWVzIGRvbid0IGhhdmUgdG8gYmUgcmVjb3ZlcmVkLiBTaWduYWwg
dGhpcyBieSB1c2luZyBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5KU1N0YWNrKCkKICAgICBmb3Ig
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWU7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEpT
U3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7IGktLTspCi0gICAgICAgICAgICB2YWx1ZVJlY292
ZXJpZXMuc2V0TG9jYWwob3BlcmFuZFRvTG9jYWwoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCkgLSBpIC0gMSwgVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluSlNTdGFjaygpKTsKKyAgICAgICAg
ICAgIHZhbHVlUmVjb3Zlcmllcy5zZXRMb2NhbChWaXJ0dWFsUmVnaXN0ZXI6Om9wZXJhbmRUb0xv
Y2FsKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpIC0gaSAtIDEsIFZhbHVlUmVjb3Zlcnk6
OmFscmVhZHlJbkpTU3RhY2soKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyNiw3ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaW5saW5lQ2FsbEZyYW1lQ291bnQ7IGkrKykgewogICAgICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBtX2dyYXBoLm1faW5saW5lQ2FsbEZyYW1lcy0+YXQoaSk7
CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
SW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBy
ZXF1aXJlZENhbGxlZVJlZ2lzdGVycyA9IG9wZXJhbmRUb0xvY2FsKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQpICsgY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIHJlcXVpcmVkQ2FsbGVlUmVnaXN0ZXJzID0gVmlydHVhbFJlZ2lzdGVyOjpv
cGVyYW5kVG9Mb2NhbChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSArIGNvZGVCbG9jay0+
bV9udW1DYWxsZWVSZWdpc3RlcnM7CiAgICAgICAgICAgICBpZiAocmVxdWlyZWRDYWxsZWVSZWdp
c3RlcnMgPiBjYWxsZWVSZWdpc3RlcnMpCiAgICAgICAgICAgICAgICAgY2FsbGVlUmVnaXN0ZXJz
ID0gcmVxdWlyZWRDYWxsZWVSZWdpc3RlcnM7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oCShy
ZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1
bWVudEZvck9wZXJhbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDExIEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIGNsYXNzIEV4aXRBcmd1bWVudEZvck9wZXJhbmQg
ewogcHVibGljOgogICAgIEV4aXRBcmd1bWVudEZvck9wZXJhbmQoKQotICAgICAgICA6IG1fb3Bl
cmFuZChJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICA6IG1fb3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIoKSkKICAgICB7CiAgICAgfQogICAgIAotICAgIEV4aXRBcmd1bWVudEZvck9wZXJh
bmQoRXhpdEFyZ3VtZW50IGV4aXRBcmd1bWVudCwgaW50IG9wZXJhbmQpCisgICAgRXhpdEFyZ3Vt
ZW50Rm9yT3BlcmFuZChFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50LCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKICAgICAgICAgOiBtX2V4aXRBcmd1bWVudChleGl0QXJndW1lbnQpCiAgICAgICAg
ICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgewpAQCAtNTEsMTMgKzUxLDEzIEBAIHB1YmxpYzoK
ICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2V4aXRBcmd1bWVudDsgfQog
ICAgIAogICAgIGNvbnN0IEV4aXRBcmd1bWVudCYgZXhpdEFyZ3VtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9leGl0QXJndW1lbnQ7IH0KLSAgICBpbnQgb3BlcmFuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
b3BlcmFuZDsgfQorICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKCkgY29uc3QgeyByZXR1cm4g
bV9vcGVyYW5kOyB9CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAg
ICAgCiBwcml2YXRlOgogICAgIEV4aXRBcmd1bWVudCBtX2V4aXRBcmd1bWVudDsKLSAgICBpbnQg
bV9vcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CiB9OwogCiBpbmxpbmUg
Ym9vbCBsZXNzZXJBcmd1bWVudEluZGV4KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExpbmsuY3BwCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
RlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9MTFZNSGVh
ZGVycy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CkBAIC03NSw3ICs3Niw3
IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIC8vIFBsYW50IGEgY2hlY2sgdGhh
dCBzdWZmaWNpZW50IHNwYWNlIGlzIGF2YWlsYWJsZSBpbiB0aGUgSlNTdGFjay4KICAgICAgICAg
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjI5MQog
ICAgICAgICBqaXQuYWRkUHRyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIobG9jYWxUb09wZXJhbmQoY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFZp
cnR1YWxSZWdpc3Rlcjo6bG9jYWxUb09wZXJhbmQoY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lz
dGVycykgKiBzaXplb2YoUmVnaXN0ZXIpKSwKICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBz
dGFja0NoZWNrID0gaml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJv
dmUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAKICNp
bmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorCiAjaW5j
bHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CkBAIC02OSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2hlYXBzKHN0YXRlLmNvbnRl
eHQpCiAgICAgICAgICwgbV9vdXQoc3RhdGUuY29udGV4dCkKICAgICAgICAgLCBtX3ZhbHVlU291
cmNlcyhPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQp
Ci0gICAgICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKQorICAgICAgICAsIG1fbGFzdFNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAg
ICAgICwgbV9leGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpCiAgICAgICAgICwgbV9zdGF0ZShzdGF0
ZS5ncmFwaCkKICAgICAgICAgLCBtX2ludGVycHJldGVyKHN0YXRlLmdyYXBoLCBtX3N0YXRlKQpA
QCAtNTI0LDcgKzUyNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlR2V0QXJndW1lbnQo
KQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIGludCBvcGVyYW5kID0gdmFyaWFibGUtPm9w
ZXJhbmQoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9j
YWwoKTsKIAogICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9y
KG9wZXJhbmQpKTsKIApAQCAtNTU0LDcgKzU1Niw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigK
ICAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlC
dWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQo
bV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgb3BlcmFuZFRvTG9jYWwobV9ub2RlLT51bmxpbmtlZExv
Y2FsKCkpKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0
ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkTG9jYWwoKS50b0xvY2FsKCkpKSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgY29tcGlsZUdldExvY2FsKCkKQEAgLTIwMDMsNyArMjAwNSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgY2FsbGVlRnJhbWUgPSBtX291dC5hZGQo
CiAgICAgICAgICAgICBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRy
KHNpemVvZihSZWdpc3RlcikgKiBsb2NhbFRvT3BlcmFuZChjb2RlQmxvY2soKS0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMpKSk7CisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplb2YoUmVn
aXN0ZXIpICogVmlydHVhbFJlZ2lzdGVyOjpsb2NhbFRvT3BlcmFuZChjb2RlQmxvY2soKS0+bV9u
dW1DYWxsZWVSZWdpc3RlcnMpKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5zdG9yZTMyKAog
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJn
dW1lbnQpLApAQCAtMjAxNiw3ICsyMDE4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAgICAgIG1fb3V0LnN0b3Jl
NjQoCiAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMSArIGkpKSwKLSAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKGNhbGxlZUZyYW1lLCBhcmd1
bWVudFRvT3BlcmFuZChpICsgZHVtbXlUaGlzQXJndW1lbnQpKSk7CisgICAgICAgICAgICAgICAg
YWRkcmVzc0ZvcihjYWxsZWVGcmFtZSwgVmlydHVhbFJlZ2lzdGVyOjphcmd1bWVudFRvT3BlcmFu
ZChpICsgZHVtbXlUaGlzQXJndW1lbnQpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IHNldEpTVmFsdWUodm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihmdW5jdGlvbiksIGNhbGxlZUZyYW1l
KSk7CkBAIC0zMzUxLDcgKzMzNTMsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgbV9m
dGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAga2lu
ZCwgbG93VmFsdWUuZm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZUZvcihoaWdoVmFsdWUpLAotICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwg
bV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIG1fbGFzdFNldE9wZXJhbmQsCisgICAgICAgICAg
ICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwg
bV9sYXN0U2V0T3BlcmFuZC5vZmZzZXQoKSwKICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm51
bWJlck9mQXJndW1lbnRzKCksIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mTG9jYWxzKCkpKTsKICAg
ICAgICAgbV9mdGxTdGF0ZS5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkp
OwogICAgICAgICAKQEAgLTM2MjYsNyArMzYyOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VS
VChub2RlLT5jb250YWluc01vdkhpbnQoKSk7CiAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpICE9
IFpvbWJpZUhpbnQpOwogICAgICAgICAKLSAgICAgICAgaW50IG9wZXJhbmQgPSBub2RlLT5sb2Nh
bCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPmxvY2FsKCk7CiAg
ICAgICAgIAogICAgICAgICBtX2xhc3RTZXRPcGVyYW5kID0gb3BlcmFuZDsKICAgICAgICAgbV92
YWx1ZVNvdXJjZXMub3BlcmFuZChvcGVyYW5kKSA9IFZhbHVlU291cmNlKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSk7CkBAIC0zNzQ0LDE0ICszNzQ2LDI2IEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZCk7CiAgICAgfQorICAgIFR5
cGVkUG9pbnRlciBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQub2Zmc2V0KCkpOwor
ICAgIH0KICAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBwYXlsb2FkRm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kKTsKICAgICB9Cisg
ICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAg
eworICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZC5vZmZzZXQo
KSk7CisgICAgfQogICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoaW50IG9wZXJhbmQpCiAgICAgewog
ICAgICAgICByZXR1cm4gdGFnRm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kKTsKICAgICB9CisgICAg
VHlwZWRQb2ludGVyIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0YWdGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQub2Zmc2V0KCkpOworICAgIH0K
ICAgICAKICAgICBWTSYgdm0oKSB7IHJldHVybiBtX2dyYXBoLm1fdm07IH0KICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fZ3JhcGgubV9jb2RlQmxvY2s7IH0KQEAgLTM3ODEs
NyArMzc5NSw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3BoaXM7
CiAgICAgCiAgICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG1fdmFsdWVTb3VyY2VzOwotICAgIGlu
dCBtX2xhc3RTZXRPcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBtX2xhc3RTZXRPcGVyYW5k
OwogICAgIEV4aXRUaHVua0dlbmVyYXRvciBtX2V4aXRUaHVua0dlbmVyYXRvcjsKICAgICAKICAg
ICBJblBsYWNlQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2
NSw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAKICAgICBmb3IgKGludCBhcmd1bWVu
dCA9IHZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykgewogICAgICAgICBS
RUxFQVNFX0FTU0VSVCgKLSAgICAgICAgICAgIGV4ZWMtPnIoYXJndW1lbnRUb09wZXJhbmQoYXJn
dW1lbnQpKS5qc1ZhbHVlKCkgPT0gdmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAg
ICAgICBleGVjLT5yKFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQp
KS5qc1ZhbHVlKCkgPT0gdmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KSk7CiAgICAgfQogICAgIAog
ICAgIFJFTEVBU0VfQVNTRVJUKApAQCAtNzgsNyArNzgsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoCiAgICAgICAgIHNjcmF0Y2hbbG9jYWxdID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlcy5sb2Nh
bChsb2NhbCkpOwogICAgIAogICAgIGludCBzdGFja0ZyYW1lU2l6ZSA9IGVudHJ5Q29kZUJsb2Nr
LT5tX251bUNhbGxlZVJlZ2lzdGVyczsKLSAgICBpZiAoIXZtLmludGVycHJldGVyLT5zdGFjaygp
Lmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsVG9PcGVyYW5kKHN0YWNrRnJhbWVTaXplKV0p
KSB7CisgICAgaWYgKCF2bS5pbnRlcnByZXRlci0+c3RhY2soKS5ncm93KCZleGVjLT5yZWdpc3Rl
cnMoKVtWaXJ0dWFsUmVnaXN0ZXI6OmxvY2FsVG9PcGVyYW5kKHN0YWNrRnJhbWVTaXplKV0pKSB7
CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgT1NSIGZhaWxlZCBiY2F1c2Ugc3RhY2sgZ3Jvd3RoIGZhaWxlZC5cbiIpOwogICAgICAg
ICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNw
cAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsMjMgKzc4LDIzIEBAIHZvaWQgT1NSRXhpdDo6
Y29udmVydFRvRm9yd2FyZCgKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgaW50IG92ZXJyaWRkZW5PcGVyYW5kID0gbGFzdE1vdkhpbnQtPmxvY2FsKCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIG92ZXJyaWRkZW5PcGVyYW5kID0gbGFzdE1vdkhpbnQtPmxvY2FsKCk7
CiAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG92ZXJyaWRkZW5PcGVyYW5kOwogICAgIAogICAgIC8v
IElzIHRoZSB2YWx1ZSBmb3IgdGhpcyBvcGVyYW5kIGJlaW5nIHBhc3NlZCBhcyBhbiBhcmd1bWVu
dCB0byB0aGUgZXhpdCwgb3IgaXMKICAgICAvLyBpdCBzb21ldGhpbmcgZWxzZT8gSWYgaXQncyBh
biBhcmd1bWVudCBhbHJlYWR5LCB0aGVuIHJlcGxhY2UgdGhhdCBhcmd1bWVudDsKICAgICAvLyBv
dGhlcndpc2UgYWRkIGFub3RoZXIgYXJndW1lbnQuCi0gICAgaWYgKG1fdmFsdWVzW292ZXJyaWRk
ZW5PcGVyYW5kXS5pc0FyZ3VtZW50KCkpIHsKLSAgICAgICAgRXhpdEFyZ3VtZW50IGV4aXRBcmd1
bWVudCA9IG1fdmFsdWVzW292ZXJyaWRkZW5PcGVyYW5kXS5leGl0QXJndW1lbnQoKTsKKyAgICBp
ZiAobV92YWx1ZXNbb3ZlcnJpZGRlbk9wZXJhbmQub2Zmc2V0KCldLmlzQXJndW1lbnQoKSkgewor
ICAgICAgICBFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50ID0gbV92YWx1ZXNbb3ZlcnJpZGRlbk9w
ZXJhbmQub2Zmc2V0KCldLmV4aXRBcmd1bWVudCgpOwogICAgICAgICBhcmd1bWVudHNbZXhpdEFy
Z3VtZW50LmFyZ3VtZW50KCldID0gdmFsdWUudmFsdWUoKTsKLSAgICAgICAgbV92YWx1ZXNbb3Zl
cnJpZGRlbk9wZXJhbmRdID0gRXhpdFZhbHVlOjpleGl0QXJndW1lbnQoCisgICAgICAgIG1fdmFs
dWVzW292ZXJyaWRkZW5PcGVyYW5kLm9mZnNldCgpXSA9IEV4aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50
KAogICAgICAgICAgICAgZXhpdEFyZ3VtZW50LndpdGhGb3JtYXQodmFsdWUuZm9ybWF0KCkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IGFy
Z3VtZW50cy5zaXplKCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZS52YWx1ZSgpKTsKLSAg
ICBtX3ZhbHVlc1ttX2xhc3RTZXRPcGVyYW5kXSA9IEV4aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KAor
ICAgIG1fdmFsdWVzW21fbGFzdFNldE9wZXJhbmQub2Zmc2V0KCldID0gRXhpdFZhbHVlOjpleGl0
QXJndW1lbnQoCiAgICAgICAgIEV4aXRBcmd1bWVudCh2YWx1ZS5mb3JtYXQoKSwgYXJndW1lbnQp
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlz
aW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiVmFsdWVQ
cm9maWxlLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtMTYwLDcgKzE2MSw3IEBAIHN0cnVjdCBPU1JFeGl0IDog
cHVibGljIERGRzo6T1NSRXhpdEJhc2UKICAgICAvLyBPZmZzZXQgd2l0aGluIHRoZSBleGl0IHN0
dWJzIG9mIHRoZSBzdHViIGZvciB0aGlzIGV4aXQuCiAgICAgdW5zaWduZWQgbV9wYXRjaGFibGVD
b2RlT2Zmc2V0OwogICAgIAotICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworICAgIFZpcnR1YWxS
ZWdpc3RlciBtX2xhc3RTZXRPcGVyYW5kOwogICAgIAogICAgIE9wZXJhbmRzPEV4aXRWYWx1ZT4g
bV92YWx1ZXM7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
OCw3ICsxNTgsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICBqaXQucG9wKE1hY3Jv
QXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CiAgICAgaml0LnBvcChHUFJJbmZvOjpu
b25BcmdHUFIwKTsgLy8gaWdub3JlIHRoZSByZXN1bHQuCiAgICAgCi0gICAgaWYgKGV4aXQubV9s
YXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSB7CisgICAg
aWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZC5pc1ZhbGlkKCkpIHsKICAgICAgICAgaml0LmxvYWQ2
NCgKICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihleGl0Lm1fbGFzdFNl
dE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNp
b24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTgsNyArMjE4LDcgQEAgbmFtZXNwYWNlIEpTQyAgewog
CiAgICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBmcm9tIHRoZSBjb2RlZnJhbWUgKG9yIGNvbnN0
YW50IGZyb20gdGhlIENvZGVCbG9jaykuCiAgICAgICAgIFJlZ2lzdGVyJiByKGludCk7Ci0gICAg
ICAgIC8vIFJlYWQgYSByZWdpc3RlciBmb3IgYSBub24tY29uc3RhbnQgCisgICAgICAgIC8vIFJl
YWQgYSByZWdpc3RlciBmb3IgYSBub24tY29uc3RhbnQKICAgICAgICAgUmVnaXN0ZXImIHVuY2hl
Y2tlZFIoaW50KTsKIAogICAgICAgICAvLyBBY2Nlc3MgdG8gYXJndW1lbnRzIGFzIHBhc3NlZC4g
KEFmdGVyIGNhcHR1cmUsIGFyZ3VtZW50cyBtYXkgbW92ZSB0byBhIGRpZmZlcmVudCBsb2NhdGlv
bi4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDgg
QEAKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIlN0cm9uZ0lu
bGluZXMuaCIKICNpbmNsdWRlICJWTVN0YWNrQm91bmRzLmgiCisjaW5jbHVkZSAiVmlydHVhbFJl
Z2lzdGVyLmgiCisKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CkBAIC0zMTgsNyArMzIwLDcgQEAgdm9pZCBJbnRlcnBy
ZXRlcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgIHdoaWxlIChpdCA+IGVuZCkgewogICAg
ICAgICBKU1ZhbHVlIHYgPSBpdC0+anNWYWx1ZSgpOwogICAgICAgICBpbnQgcmVnaXN0ZXJOdW1i
ZXIgPSBpdCAtIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCk7Ci0gICAgICAgIFN0cmluZyBuYW1lID0g
Y29kZUJsb2NrLT5uYW1lRm9yUmVnaXN0ZXIocmVnaXN0ZXJOdW1iZXIpOworICAgICAgICBTdHJp
bmcgbmFtZSA9IGNvZGVCbG9jay0+bmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihyZWdp
c3Rlck51bWJlcikpOwogICAgICAgICBkYXRhTG9nRigiW3IlIDNkICUxNHNdICAgICAgfCAlMTBw
IHwgJS0xNnMgMHglbGxkIFxuIiwgcmVnaXN0ZXJOdW1iZXIsIG5hbWUuYXNjaWkoKS5kYXRhKCks
IGl0LCB0b0NTdHJpbmcodikuZGF0YSgpLCAobG9uZyBsb25nKUpTVmFsdWU6OmVuY29kZSh2KSk7
CiAgICAgICAgIGl0Kys7CiAgICAgfQpAQCAtMzUyLDcgKzM1NCw3IEBAIHZvaWQgSW50ZXJwcmV0
ZXI6OmR1bXBSZWdpc3RlcnMoQ2FsbEZyYW0KICAgICAgICAgZG8gewogICAgICAgICAgICAgSlNW
YWx1ZSB2ID0gaXQtPmpzVmFsdWUoKTsKICAgICAgICAgICAgIGludCByZWdpc3Rlck51bWJlciA9
IGl0IC0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0g
Y29kZUJsb2NrLT5uYW1lRm9yUmVnaXN0ZXIocmVnaXN0ZXJOdW1iZXIpOworICAgICAgICAgICAg
U3RyaW5nIG5hbWUgPSBjb2RlQmxvY2stPm5hbWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIo
cmVnaXN0ZXJOdW1iZXIpKTsKICAgICAgICAgICAgIGRhdGFMb2dGKCJbciUgM2QgJTE0c10gICAg
ICB8ICUxMHAgfCAlLTE2cyAweCVsbGQgXG4iLCByZWdpc3Rlck51bWJlciwgbmFtZS5hc2NpaSgp
LmRhdGEoKSwgaXQsIHRvQ1N0cmluZyh2KS5kYXRhKCksIChsb25nIGxvbmcpSlNWYWx1ZTo6ZW5j
b2RlKHYpKTsKICAgICAgICAgICAgIC0taXQ7CiAgICAgICAgICAgICAtLXJlZ2lzdGVyQ291bnQ7
CkBAIC00MTAsMTMgKzQxMiwxMyBAQCBzdGF0aWMgYm9vbCB1bndpbmRDYWxsRnJhbWUoU3RhY2tW
aXNpdG9yCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2aXNp
dG9yLT5pc0lubGluZWRGcmFtZSgpKTsKICNlbmRpZgotICAgICAgICBhY3RpdmF0aW9uID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKG9sZENvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpLmpz
VmFsdWUoKTsKKyAgICAgICAgYWN0aXZhdGlvbiA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvbGRD
b2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCk7CiAgICAg
ICAgIGlmIChhY3RpdmF0aW9uKQogICAgICAgICAgICAganNDYXN0PEpTQWN0aXZhdGlvbio+KGFj
dGl2YXRpb24pLT50ZWFyT2ZmKCpzY29wZS0+dm0oKSk7CiAgICAgfQogCiAgICAgaWYgKG9sZENv
ZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgb2xkQ29kZUJsb2NrLT51c2Vz
QXJndW1lbnRzKCkpIHsKLSAgICAgICAgaWYgKEpTVmFsdWUgYXJndW1lbnRzID0gdmlzaXRvci0+
cih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIob2xkQ29kZUJsb2NrLT5hcmd1bWVudHNSZWdp
c3RlcigpKSkuanNWYWx1ZSgpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIGFyZ3VtZW50cyA9IHZp
c2l0b3ItPnIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKG9sZENvZGVCbG9jay0+YXJndW1l
bnRzUmVnaXN0ZXIoKSkub2Zmc2V0KCkpLmpzVmFsdWUoKSkgewogICAgICAgICAgICAgaWYgKGFj
dGl2YXRpb24pCiAgICAgICAgICAgICAgICAganNDYXN0PEFyZ3VtZW50cyo+KGFyZ3VtZW50cykt
PmRpZFRlYXJPZmZBY3RpdmF0aW9uKGNhbGxGcmFtZSwganNDYXN0PEpTQWN0aXZhdGlvbio+KGFj
dGl2YXRpb24pKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTY5Nyw3ICs2OTksNyBAQCBORVZF
Ul9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1CiAKICAgICAvLyBVbndpbmQgdGhl
IHNjb3BlIGNoYWluIHdpdGhpbiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIncyBjYWxsIGZyYW1lLgog
ICAgIGludCB0YXJnZXRTY29wZURlcHRoID0gaGFuZGxlci0+c2NvcGVEZXB0aDsKLSAgICBpZiAo
Y29kZUJsb2NrLT5uZWVkc0FjdGl2YXRpb24oKSAmJiBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoY29k
ZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKQorICAgIGlmIChjb2RlQmxv
Y2stPm5lZWRzQWN0aXZhdGlvbigpICYmIGNhbGxGcmFtZS0+dW5jaGVja2VkUihjb2RlQmxvY2st
PmFjdGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCkpCiAgICAgICAgICsrdGFy
Z2V0U2NvcGVEZXB0aDsKIAogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShy
ZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgcHVibGljOgogICAgIAog
ICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgcmV0
dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KICAgICBzdGF0aWMgQWRkcmVzcyBh
ZGRyZXNzRm9yKGludCBvcGVyYW5kKQogICAgIHsKQEAgLTE2NSw3ICsxNjUsNyBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAgICAgcmV0dXJu
IEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpOwogICAgIH0KICAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3Io
aW50IG9wZXJhbmQpCiAgICAgewpAQCAtMTc0LDcgKzE3NCw3IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikK
ICAgICB7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCB2aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgICAgIHJldHVybiBB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0
KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiAgICAgfQogICAgIHN0YXRpYyBBZGRyZXNzIHBheWxv
YWRGb3IoaW50IG9wZXJhbmQpCiAgICAgewpAQCAtMzgwLDcgKzM4MCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fYmFzZWxpbmVDb2RlQmxvY2s7CiAgICAgfQogICAgIAotICAgIGludCBh
cmd1bWVudHNSZWdpc3RlckZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXJGb3IoSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAg
ICAgICAgICAgIHJldHVybiBjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKTsKQEAgLTM4
OSw3ICszODksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUpLT5hcmd1
bWVudHNSZWdpc3RlcigpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICB9CiAg
ICAgCi0gICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVP
cmlnaW4pCisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENv
ZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICByZXR1cm4gYXJndW1lbnRzUmVn
aXN0ZXJGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgzLDggKzU4MywxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0R2V0SklUU3R1YkFyZyhpbnQgYXJndW1lbnROdW1i
ZXIsIFJlZ2lzdGVySUQgZHN0KTsKIAogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2
b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGlu
dCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdp
c3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOworICAgICAgICB2b2lk
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBm
cm9tID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGRzdCwgUmVnaXN0
ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxz
ZSkKICAgICAgICAgewogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHBh
eWxvYWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lv
biAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgSklUOjpjb21waWxlTG9hZFZhcmFyZ3Mo
SW5zdHJ1Y3Rpb24KICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKICAgICBKdW1wTGlzdCBlbmQ7CiAg
ICAgYm9vbCBjYW5PcHRpbWl6ZSA9IG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkKLSAgICAg
ICAgJiYgYXJndW1lbnRzID09IG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpCisgICAg
ICAgICYmIGFyZ3VtZW50cyA9PSBtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZz
ZXQoKQogICAgICAgICAmJiAhbV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVu
dHMoKTsKIAogICAgIGlmIChjYW5PcHRpbWl6ZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTgsNyArNzU4LDcgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKHNyYyA9PSBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyICYm
IG1fY29kZUJsb2NrLT5pc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgob3BlcmFuZFRvTG9jYWwoc3Jj
KSkgJiYgIWF0SnVtcFRhcmdldCgpKSB7CisgICAgaWYgKHNyYyA9PSBtX2xhc3RSZXN1bHRCeXRl
Y29kZVJlZ2lzdGVyICYmIG1fY29kZUJsb2NrLT5pc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgoVmly
dHVhbFJlZ2lzdGVyOjpvcGVyYW5kVG9Mb2NhbChzcmMpKSAmJiAhYXRKdW1wVGFyZ2V0KCkpIHsK
ICAgICAgICAgLy8gVGhlIGFyZ3VtZW50IHdlIHdhbnQgaXMgYWxyZWFkeSBzdG9yZWQgaW4gZWF4
CiAgICAgICAgIGlmIChkc3QgIT0gY2FjaGVkUmVzdWx0UmVnaXN0ZXIpCiAgICAgICAgICAgICBt
b3ZlKGNhY2hlZFJlc3VsdFJlZ2lzdGVyLCBkc3QpOwpAQCAtNzcwLDYgKzc3MCwxMSBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAga2lsbExhc3RSZXN1bHRS
ZWdpc3RlcigpOwogfQogCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQoreworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLm9mZnNldCgpLCBkc3QpOworfQorCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBk
c3QxLCBpbnQgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQogewogICAgIGlmIChzcmMyID09IG1fbGFz
dFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIpIHsKQEAgLTc4MSw2ICs3ODYsMTEgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIH0KIH0KIAorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEs
IFJlZ2lzdGVySUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0MikK
K3sKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLm9mZnNldCgpLCBkc3QxLCBzcmMy
Lm9mZnNldCgpLCBkc3QyKTsKK30KKwogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0Q29u
c3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KGludCBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKQEAgLTc5Nyw2ICs4MDcsMTEgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZQogICAgIG1fbGFzdFJlc3VsdEJ5dGVjb2Rl
UmVnaXN0ZXIgPSAoZnJvbSA9PSBjYWNoZWRSZXN1bHRSZWdpc3RlcikgPyBkc3QgOiBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpOwogfQogCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJv
bSkKK3sKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdC5vZmZzZXQoKSwgZnJvbSk7Cit9
CisKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCkKIHsK
ICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkp
LCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShy
ZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJKU1Zh
cmlhYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlNsb3dQ
YXRoQ2FsbC5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIApAQCAtMTA5OSw3ICsxMTAwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoSW5zdHJ1
Y3Rpb24qKQogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lk
IHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5j
cmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fY29kZUJsb2Nr
LT5tX251bVZhcnM7ICsraSkKLSAgICAgICAgZW1pdFN0b3JlKGxvY2FsVG9PcGVyYW5kKGkpLCBq
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3Rlcjo6bG9jYWxU
b09wZXJhbmQoaSksIGpzVW5kZWZpbmVkKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVh
dGVfYWN0aXZhdGlvbihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNTYzNjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKKyNpbmNs
dWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTI1Nyw5ICsy
NTgsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9hcmd1bWVudHMoSW5zCiAgICAgaW50
IGFyZ3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IGFj
dGl2YXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCi0gICAgSnVtcCBh
cmdzTm90Q3JlYXRlZCA9IGJyYW5jaFRlc3Q2NChaZXJvLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lz
dGVyLCBzaXplb2YoUmVnaXN0ZXIpICogKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1
bWVudHMpKSkpOworICAgIEp1bXAgYXJnc05vdENyZWF0ZWQgPSBicmFuY2hUZXN0NjQoWmVybywg
QWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqICh1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzKS5vZmZzZXQoKSkpKTsKICAgICBKSVRTdHViQ2Fs
bCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRzKTsKLSAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudCh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzKSwgcmVn
VDIpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rl
cihhcmd1bWVudHMpLm9mZnNldCgpLCByZWdUMik7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
YWN0aXZhdGlvbiwgcmVnVDIpOwogICAgIHN0dWJDYWxsLmNhbGwoKTsKICAgICBhcmdzTm90Q3Jl
YXRlZC5saW5rKHRoaXMpOwpAQCAtNTA3LDcgKzUwOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9wbmFtZXMoSW5zdHJ1Y3Rpb24KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKGJhc2UpKQog
ICAgICAgICBpc05vdE9iamVjdC5hcHBlbmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMCkpOwot
ICAgIGlmIChiYXNlICE9IG1fY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSB8fCBtX2NvZGVCbG9j
ay0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICBpZiAoYmFzZSAhPSBtX2NvZGVCbG9jay0+dGhpc1Jl
Z2lzdGVyKCkub2Zmc2V0KCkgfHwgbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CiAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJl
Z1QyKTsKICAgICAgICAgaXNOb3RPYmplY3QuYXBwZW5kKGVtaXRKdW1wSWZOb3RPYmplY3QocmVn
VDIpKTsKICAgICB9CkBAIC04MzYsNyArODM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIo
SW5zdHJ1Y3Rpb24qKQogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBw
cmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bV9udW1WYXJzOwogICAg
IGZvciAoc2l6ZV90IGogPSAwOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdp
c3Rlcihsb2NhbFRvT3BlcmFuZChqKSk7CisgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyOjpsb2NhbFRvT3BlcmFuZChqKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Ny
ZWF0ZV9hY3RpdmF0aW9uKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTU2MzY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNDYsOCArMTA0Niw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQog
ICAgICAgICAgICAgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVz
KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3Bl
cmFuZEZvckluZGV4KGkpOwotICAgICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJh
bmQpCi0gICAgICAgICAgICAgICAgJiYgIW9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpCisgICAg
ICAgICAgICBpZiAoVmlydHVhbFJlZ2lzdGVyOjpvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKQor
ICAgICAgICAgICAgICAgICYmICFWaXJ0dWFsUmVnaXN0ZXI6Om9wZXJhbmRUb0FyZ3VtZW50KG9w
ZXJhbmQpCiAgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0
aW9uQ29kZQogICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5k
KCkgPT0gQ29kZUZvckNvbnN0cnVjdCkgewogICAgICAgICAgICAgICAgIC8vIFVnaC4gSWYgd2Un
cmUgaW4gYSBjb25zdHJ1Y3RvciwgdGhlICd0aGlzJyBhcmd1bWVudCBtYXkgaG9sZCBnYXJiYWdl
LiBJdCB3aWxsCkBAIC0xMTU0LDcgKzExNTQsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09i
amVjdCosIG9wX25ld19mCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUp
OwogICAgIAotICAgIEFTU0VSVChzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmNv
ZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2RlIHx8ICFzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSB8fCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+dW5j
aGVja2VkUihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdp
c3RlcigpKS5qc1ZhbHVlKCkpOworICAgIEFTU0VSVChzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2RlIHx8ICFzdGFja0ZyYW1lLmNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSB8fCBzdGFja0ZyYW1lLmNh
bGxGcmFtZS0+dW5jaGVja2VkUihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmFj
dGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCkpOwogICAgIHJldHVybiBKU0Z1
bmN0aW9uOjpjcmVhdGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5m
dW5jdGlvbigpLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+c2NvcGUoKSk7CiB9CiAKQEAgLTE5MzEs
NyArMTkzMSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfbmV3X2YKIAog
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBzdGFja0ZyYW1lLmFyZ3NbMF0uZnVu
Y3Rpb24oKTsKICAgICBKU0Z1bmN0aW9uKiBmdW5jID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGNhbGxG
cmFtZSwgZnVuY3Rpb24sIGNhbGxGcmFtZS0+c2NvcGUoKSk7Ci0gICAgQVNTRVJUKGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCktPmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2RlIHx8ICFjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkgfHwgY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVl
KCkpOworICAgIEFTU0VSVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5jb2RlVHlwZSgpICE9IEZ1
bmN0aW9uQ29kZSB8fCAhY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFp
bigpIHx8IGNhbGxGcmFtZS0+dW5jaGVja2VkUihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5hY3Rp
dmF0aW9uUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpKTsKIAogICAgIHJldHVybiBmdW5j
OwogfQpAQCAtMTk1OSw3ICsxOTU5LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpT
VmFsdWUsIG9wXwogICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxl
ckZyYW1lKCk7CiAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2Nr
KCktPmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2RlCiAgICAgICAgIHx8ICFjYWxsRnJhbWUtPmNh
bGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkKLSAgICAgICAg
fHwgY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT51bmNoZWNrZWRSKGNhbGxGcmFtZS0+Y2FsbGVy
RnJhbWUoKS0+Y29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpOwor
ICAgICAgICB8fCBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPnVuY2hlY2tlZFIoY2FsbEZyYW1l
LT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0
KCkpLmpzVmFsdWUoKSk7CiAKICAgICBjYWxsRnJhbWUtPnNldFNjb3BlKGNhbGxlckZyYW1lLT5z
Y29wZSgpKTsKICAgICBjYWxsRnJhbWUtPnNldFJldHVyblBDKHN0YXRpY19jYXN0PEluc3RydWN0
aW9uKj4oKFNUVUJfUkVUVVJOX0FERFJFU1MpLnZhbHVlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTU2MzY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjk3LDcgKzY5Nyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9nZXRfYXJndW0KICAgICAgICAgYXJndW1lbnRzID0gQXJndW1lbnRzOjpjcmVhdGUodm0s
IGV4ZWMpOwogICAgICAgICBMTElOVF9DSEVDS19FWENFUFRJT04oKTsKICAgICAgICAgTExJTlRf
T1AoMikgPSBhcmd1bWVudHM7Ci0gICAgICAgIGV4ZWMtPnVuY2hlY2tlZFIodW5tb2RpZmllZEFy
Z3VtZW50c1JlZ2lzdGVyKHBjWzJdLnUub3BlcmFuZCkpID0gYXJndW1lbnRzOworICAgICAgICBl
eGVjLT51bmNoZWNrZWRSKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihwY1syXS51Lm9wZXJh
bmQpLm9mZnNldCgpKSA9IGFyZ3VtZW50czsKICAgICB9CiAgICAgCiAgICAgTExJTlRfUkVUVVJO
X1BST0ZJTEVEKG9wX2dldF9hcmd1bWVudF9ieV92YWwsIGdldEJ5VmFsKGV4ZWMsIGFyZ3VtZW50
cywgTExJTlRfT1BfQygzKS5qc1ZhbHVlKCkpKTsKQEAgLTkxNyw3ICs5MTcsNyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2Z1bmMpCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5jb2RlVHlwZSgp
ICE9IEZ1bmN0aW9uQ29kZQogICAgICAgICAgICB8fCAhY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29w
ZUNoYWluKCkKLSAgICAgICAgICAgfHwgZXhlYy0+dW5jaGVja2VkUihjb2RlQmxvY2stPmFjdGl2
YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpOworICAgICAgICAgICB8fCBleGVjLT51bmNoZWNr
ZWRSKGNvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKSk7
CiAjaWYgTExJTlRfU0xPV19QQVRIX1RSQUNJTkcKICAgICBkYXRhTG9nRigiQ3JlYXRpbmcgZnVu
Y3Rpb24hXG4iKTsKICNlbmRpZgpAQCAtMTEyOCw3ICsxMTI4LDcgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3RlYXJfb2ZmXwogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgQVNT
RVJUKGV4ZWMtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkpOwotICAgIEFyZ3VtZW50cyog
YXJndW1lbnRzID0ganNDYXN0PEFyZ3VtZW50cyo+KGV4ZWMtPnVuY2hlY2tlZFIodW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCkpLmpzVmFsdWUoKSk7CisgICAgQXJn
dW1lbnRzKiBhcmd1bWVudHMgPSBqc0Nhc3Q8QXJndW1lbnRzKj4oZXhlYy0+dW5jaGVja2VkUih1
bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIocGNbMV0udS5vcGVyYW5kKS5vZmZzZXQoKSkuanNW
YWx1ZSgpKTsKICAgICBpZiAoSlNWYWx1ZSBhY3RpdmF0aW9uVmFsdWUgPSBMTElOVF9PUF9DKDIp
LmpzVmFsdWUoKSkKICAgICAgICAgYXJndW1lbnRzLT5kaWRUZWFyT2ZmQWN0aXZhdGlvbihleGVj
LCBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlvblZhbHVlKSk7CiAgICAgZWxzZQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5j
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIEJ5dGVjb2RlU2VxdWVuY2U6OkJ5dGVjb2RlU2VxdWVu
Y2UoQ29kZUIKICAgICAgICAgaWYgKCFkZXNjcmlwdGlvbi5sZW5ndGgoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBvdXQucmVzZXQoKTsKLSAgICAgICAgb3V0LnByaW50KCJhcmci
LCBpLCAiIChyIiwgYXJndW1lbnRUb09wZXJhbmQoaSksICIpOiAiLCBkZXNjcmlwdGlvbik7Cisg
ICAgICAgIG91dC5wcmludCgiYXJnIiwgaSwgIiAociIsIFZpcnR1YWxSZWdpc3Rlcjo6YXJndW1l
bnRUb09wZXJhbmQoaSksICIpOiAiLCBkZXNjcmlwdGlvbik7CiAgICAgICAgIG1faGVhZGVyLmFw
cGVuZChvdXQudG9DU3RyaW5nKCkpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoVkFMVUVfUFJP
RklMRVIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsx
OTksNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX2FyZ3VtZW50CiAgICAgSlNW
YWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlKEFyZ3VtZW50czo6Y3JlYXRlKHZtLCBleGVjKSk7CiAg
ICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgZXhlYy0+dW5jaGVja2VkUihwY1sxXS51Lm9wZXJh
bmQpID0gYXJndW1lbnRzOwotICAgIGV4ZWMtPnVuY2hlY2tlZFIodW5tb2RpZmllZEFyZ3VtZW50
c1JlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCkpID0gYXJndW1lbnRzOworICAgIGV4ZWMtPnVuY2hl
Y2tlZFIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCkub2Zmc2V0
KCkpID0gYXJndW1lbnRzOwogICAgIEVORCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHJldmlzaW9uIDE1NjM2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxOCwxMCArMjE4LDEwIEBAIEpTVmFsdWUgSlNBY3RpdmF0aW9uOjphcmd1bWVu
dHNHZXR0ZXIoRXgKICAgICBpZiAoYWN0aXZhdGlvbi0+aXNUb3JuT2ZmKCkgfHwgIShjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkgfHwgY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+dXNlc0V2YWwoKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW50
IGFyZ3VtZW50c1JlZ2lzdGVyID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+YXJndW1lbnRzUmVn
aXN0ZXIoKTsKKyAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpOwogICAgIGlmIChKU1ZhbHVlIGFyZ3Vt
ZW50cyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihhcmd1bWVudHNSZWdpc3RlcikuanNWYWx1ZSgp
KQogICAgICAgICByZXR1cm4gYXJndW1lbnRzOwotICAgIGludCByZWFsQXJndW1lbnRzUmVnaXN0
ZXIgPSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOworICAg
IGludCByZWFsQXJndW1lbnRzUmVnaXN0ZXIgPSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIo
YXJndW1lbnRzUmVnaXN0ZXIpLm9mZnNldCgpOwogCiAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBK
U1ZhbHVlKEFyZ3VtZW50czo6Y3JlYXRlKGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lKSk7CiAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFyZ3VtZW50c1JlZ2lzdGVyKSA9IGFyZ3VtZW50czsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212668</attachid>
            <date>2013-09-25 22:30:15 -0700</date>
            <delta_ts>2013-09-26 10:48:23 -0700</delta_ts>
            <desc>Patch with updates from initial review</desc>
            <filename>121732-2.patch</filename>
            <type>text/plain</type>
            <size>242522</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2NDQ4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBA
CisyMDEzLTA5LTI1ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBzaG91bGQgYmUgYSBjbGFzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzMyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlZmFjdG9yaW5nIGNoYW5n
ZS4gIENoYW5nZWQgVmlydHVhbFJlZ2lzdGVyIGZyb20gYW4gZW51bSB0byBhIGNsYXNzLgorICAg
ICAgICBNb3ZlZCBPcGVyYW5kczo6b3BlcmFuZElzQXJndW1lbnQoKSwgb3BlcmFuZFRvQXJndW1l
bnQoKSwgYXJndW1lbnRUb09wZXJhbmQoKQorICAgICAgICBhbmQgdGhlIHNpbWlsYXIgZnVuY3Rp
b25zIGZvciBsb2NhbHMgdG8gVmlydHVhbFJlZ2lzdGVyIGNsYXNzLgorCisgICAgICAgIFRoaXMg
aXMgaW4gcHJlcGFyYXRpb24gZm9yIGNoYW5naW5nIHRoZSBvZmZzZXQgZm9yIHRoZSBmaXJzdCBs
b2NhbCByZWdpc3RlciBmcm9tCisgICAgICAgIDAgdG8gLTEuICBUaGlzIGlzIG5lZWRlZCBzaW5j
ZSBtb3N0IG5hdGl2ZSBjYWxsaW5nIGNvbnZlbnRpb25zIGhhdmUgdGhlIGFyY2hpdGVjdGVkCisg
ICAgICAgIGZyYW1lIHBvaW50ZXIgKGUuZy4gJXJicCBmb3IgWDg2KSBwb2ludCBhdCB0aGUgc2xv
dCB0aGF0IHN0b3JlcyB0aGUgcHJldmlvdXMgZnJhbWUKKyAgICAgICAgcG9pbnRlci4gIExvY2Fs
IHZhbHVlcyBzdGFydCBiZWxvdyB0aGF0IGFkZHJlc3MuCisKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAq
IGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLmNwcDoKKyAgICAgICAgKiBieXRlY29kZS9PcGVyYW5kcy5oOgorICAgICAgICAqIGJ5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKiBieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaDoKKyAgICAg
ICAgKiBieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9SZWdpc3RlcklELmg6CisgICAgICAg
ICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwOgorICAgICAgICAqIGRmZy9ERkdBYnN0
cmFjdEhlYXAuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oOgorICAgICAgICAqIGRmZy9E
RkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQXNz
ZW1ibHlIZWxwZXJzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXNzZW1ibHlIZWxwZXJzLmguCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgICog
ZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6Cisg
ICAgICAgICogZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAq
IGRmZy9ERkdKSVRDb2RlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAq
IGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHA6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlcjY0LmNwcDoKKyAgICAgICAgKiBkZmcvREZHUmVnaXN0ZXJCYW5rLmg6CisgICAgICAg
ICogZGZnL0RGR1Njb3JlQm9hcmQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaDoKKyAgICAgICAgKiBkZmcv
REZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQu
aDoKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHA6CisgICAgICAgICog
ZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZnRs
L0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaDoKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKiBmdGwvRlRM
T1NSRW50cnkuY3BwOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0LmNwcDoKKyAgICAgICAgKiBm
dGwvRlRMT1NSRXhpdC5oOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwOgor
ICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAqIGludGVycHJldGVy
L0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAg
ICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKiBq
aXQvSklUSW5saW5lcy5oOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAg
KiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgor
ICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKiBwcm9maWxlci9Q
cm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHA6CisKIDIwMTMt
MDktMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEVuYWJs
ZSB0aGUgSW5kZXhlZERCIGJ1aWxkIG9uIE1hYywgYnV0IGxlYXZlIHRoZSBmZWF0dXJlIG5vbi1m
dW5jdGlvbmFsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCwxMiArMTY4LDEyIEBAIENT
dHJpbmcgQ29kZUJsb2NrOjpyZWdpc3Rlck5hbWUoaW50IHIpIGMKICAgICAgICAgcmV0dXJuIGNv
bnN0YW50TmFtZShyLCBnZXRDb25zdGFudChyKSk7CiAKICAgICBpZiAob3BlcmFuZElzQXJndW1l
bnQocikpIHsKLSAgICAgICAgaWYgKCFvcGVyYW5kVG9Bcmd1bWVudChyKSkKKyAgICAgICAgaWYg
KCFWaXJ0dWFsUmVnaXN0ZXIocikudG9Bcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuICJ0
aGlzIjsKLSAgICAgICAgcmV0dXJuIHRvQ1N0cmluZygiYXJnIiwgb3BlcmFuZFRvQXJndW1lbnQo
cikpOworICAgICAgICByZXR1cm4gdG9DU3RyaW5nKCJhcmciLCBWaXJ0dWFsUmVnaXN0ZXIociku
dG9Bcmd1bWVudCgpKTsKICAgICB9CiAKLSAgICByZXR1cm4gdG9DU3RyaW5nKCJsb2MiLCBvcGVy
YW5kVG9Mb2NhbChyKSk7CisgICAgcmV0dXJuIHRvQ1N0cmluZygibG9jIiwgVmlydHVhbFJlZ2lz
dGVyKHIpLnRvTG9jYWwoKSk7CiB9CiAKIHN0YXRpYyBDU3RyaW5nIHJlZ2V4cFRvU291cmNlU3Ry
aW5nKFJlZ0V4cCogcmVnRXhwKQpAQCAtNTE0LDExICs1MTQsMTEgQEAgdm9pZCBDb2RlQmxvY2s6
OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIGlmICh1c2VzQXJndW1lbnRzKCkpIHsKICAg
ICAgICAgb3V0LnByaW50ZigKICAgICAgICAgICAgICI7IHVzZXMgYXJndW1lbnRzLCBpbiByJWQs
IHIlZCIsCi0gICAgICAgICAgICBhcmd1bWVudHNSZWdpc3RlcigpLAotICAgICAgICAgICAgdW5t
b2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKCkpKTsKKyAgICAgICAg
ICAgIGFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCksCisgICAgICAgICAgICB1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIoKSkub2Zmc2V0KCkpOwogICAgIH0K
ICAgICBpZiAobmVlZHNGdWxsU2NvcGVDaGFpbigpICYmIGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlKQotICAgICAgICBvdXQucHJpbnRmKCI7IGFjdGl2YXRpb24gaW4gciVkIiwgYWN0aXZhdGlv
blJlZ2lzdGVyKCkpOworICAgICAgICBvdXQucHJpbnRmKCI7IGFjdGl2YXRpb24gaW4gciVkIiwg
YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpOwogICAgIG91dC5wcmludGYoIlxuIik7CiAg
ICAgCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4o
KTsKQEAgLTE2MjIsNyArMTYyMiw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KIAogICAgIHNldENvbnN0YW50UmVnaXN0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVycygpKTsKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPnVzZXNHbG9i
YWxPYmplY3QoKSkKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxpbmtlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIG1f
Z2xvYmFsT2JqZWN0LmdldCgpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxpbmtl
ZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKS5vZmZzZXQoKV0uc2V0KCptX3ZtLCBv
d25lckV4ZWN1dGFibGUsIG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKICAgICBtX2Z1bmN0aW9uRGVj
bHMuZ3Jvdyh1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkpOwogICAg
IGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25E
ZWNscygpLCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5j
dGlvbkRlY2woaSk7CkBAIC0yNTUzLDkgKzI1NTMsOSBAQCB2b2lkIENvZGVCbG9jazo6Y3JlYXRl
QWN0aXZhdGlvbihDYWxsRnJhCiB7CiAgICAgQVNTRVJUKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlKTsKICAgICBBU1NFUlQobmVlZHNGdWxsU2NvcGVDaGFpbigpKTsKLSAgICBBU1NFUlQoIWNh
bGxGcmFtZS0+dW5jaGVja2VkUihhY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsKKyAg
ICBBU1NFUlQoIWNhbGxGcmFtZS0+dW5jaGVja2VkUihhY3RpdmF0aW9uUmVnaXN0ZXIoKS5vZmZz
ZXQoKSkuanNWYWx1ZSgpKTsKICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2
YXRpb246OmNyZWF0ZShjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZSwgdGhpcyk7Ci0gICAgY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRpb25SZWdpc3RlcigpKSA9IEpTVmFsdWUoYWN0aXZh
dGlvbik7CisgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRpb25SZWdpc3RlcigpLm9m
ZnNldCgpKSA9IEpTVmFsdWUoYWN0aXZhdGlvbik7CiAgICAgY2FsbEZyYW1lLT5zZXRTY29wZShh
Y3RpdmF0aW9uKTsKIH0KIApAQCAtMzMyNCwzMiArMzMyNCwzMCBAQCBib29sIENvZGVCbG9jazo6
dXNlc09wY29kZShPcGNvZGVJRCBvcGNvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1TdHJpbmcg
Q29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoaW50IHJlZ2lzdGVyTnVtYmVyKQorU3RyaW5nIENv
ZGVCbG9jazo6bmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIp
CiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS0+bV9sb2Nr
KTsKICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBlbmQgPSBzeW1ib2xUYWJsZSgpLT5l
bmQobG9ja2VyKTsKICAgICBmb3IgKFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIHB0ciA9IHN5
bWJvbFRhYmxlKCktPmJlZ2luKGxvY2tlcik7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7Ci0gICAgICAg
IGlmIChwdHItPnZhbHVlLmdldEluZGV4KCkgPT0gcmVnaXN0ZXJOdW1iZXIpIHsKKyAgICAgICAg
aWYgKHB0ci0+dmFsdWUuZ2V0SW5kZXgoKSA9PSB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpIHsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdvbid0IHdvcmsgZnJvbSB0aGUgY29tcGlsYXRp
b24gdGhyZWFkLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExNTMwMAogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwdHItPmtleSk7CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG5lZWRzQWN0aXZhdGlvbigpICYmIHJlZ2lzdGVyTnVt
YmVyID09IGFjdGl2YXRpb25SZWdpc3RlcigpKQorICAgIGlmIChuZWVkc0FjdGl2YXRpb24oKSAm
JiB2aXJ0dWFsUmVnaXN0ZXIgPT0gYWN0aXZhdGlvblJlZ2lzdGVyKCkpCiAgICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoImFjdGl2YXRpb24iKTsKLSAgICBpZiAocmVnaXN0ZXJOdW1iZXIgPT0g
dGhpc1JlZ2lzdGVyKCkpCisgICAgaWYgKHZpcnR1YWxSZWdpc3RlciA9PSB0aGlzUmVnaXN0ZXIo
KSkKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgidGhpcyIpOwogICAgIGlmICh1c2VzQXJn
dW1lbnRzKCkpIHsKLSAgICAgICAgaWYgKHJlZ2lzdGVyTnVtYmVyID09IGFyZ3VtZW50c1JlZ2lz
dGVyKCkpCisgICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gYXJndW1lbnRzUmVnaXN0ZXIo
KSkKICAgICAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImFyZ3VtZW50cyIpOwotICAgICAg
ICBpZiAodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKCkpID09
IHJlZ2lzdGVyTnVtYmVyKQorICAgICAgICBpZiAodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVy
KGFyZ3VtZW50c1JlZ2lzdGVyKCkpID09IHZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoInJlYWwgYXJndW1lbnRzIik7CiAgICAgfQotICAgIGlmIChyZWdp
c3Rlck51bWJlciA8IDApIHsKLSAgICAgICAgaW50IGFyZ3VtZW50UG9zaXRpb24gPSAtcmVnaXN0
ZXJOdW1iZXI7Ci0gICAgICAgIGFyZ3VtZW50UG9zaXRpb24gLT0gSlNTdGFjazo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZSArIDE7Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiYXJndW1lbnRz
WyUzZF0iLCBhcmd1bWVudFBvc2l0aW9uIC0gMSkuaW1wbCgpOwotICAgIH0KKyAgICBpZiAodmly
dHVhbFJlZ2lzdGVyLmlzQXJndW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0
KCJhcmd1bWVudHNbJTNkXSIsIHZpcnR1YWxSZWdpc3Rlci50b0FyZ3VtZW50KCkpLmltcGwoKTsK
KwogICAgIHJldHVybiAiIjsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBA
CiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFs
RmluYWxpemVyLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCisjaW5jbHVkZSAiVmlydHVh
bFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTg2LDcgKzg3LDcgQEAg
Y2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgUmVw
YXRjaEJ1ZmZlcjsKIAotaW5saW5lIGludCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoaW50
IGFyZ3VtZW50c1JlZ2lzdGVyKSB7IHJldHVybiBhcmd1bWVudHNSZWdpc3RlciArIDE7IH0KK2lu
bGluZSBWaXJ0dWFsUmVnaXN0ZXIgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlcikgeyByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKGFyZ3Vt
ZW50c1JlZ2lzdGVyLm9mZnNldCgpICsgMSk7IH0KIAogc3RhdGljIEFMV0FZU19JTkxJTkUgaW50
IG1pc3NpbmdUaGlzT2JqZWN0TWFya2VyKCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKTsgfQogCkBAIC0xNDgsNyArMTQ5LDcgQEAgcHVibGljOgogCiAgICAgaW5saW5l
IGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShpbnQgaW5kZXgpCiAgICAgewotICAgICAgICBpZiAo
aW5kZXggPT0gbV90aGlzUmVnaXN0ZXIgJiYgIW1faXNTdHJpY3RNb2RlKQorICAgICAgICBpZiAo
aW5kZXggPT0gbV90aGlzUmVnaXN0ZXIub2Zmc2V0KCkgJiYgIW1faXNTdHJpY3RNb2RlKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgaWYgKGlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KGluZGV4KSkKQEAgLTI5OCw1OCArMjk5LDYxIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZN
KFZNKiB2bSkgeyBtX3ZtID0gdm07IH0KICAgICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9CiAK
LSAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihpbnQgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lz
dGVyID0gdGhpc1JlZ2lzdGVyOyB9Ci0gICAgaW50IHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0
dXJuIG1fdGhpc1JlZ2lzdGVyOyB9CisgICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIHRoaXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQor
ICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RoaXNS
ZWdpc3RlcjsgfQogCiAgICAgYm9vbCBuZWVkc0Z1bGxTY29wZUNoYWluKCkgY29uc3QgeyByZXR1
cm4gbV91bmxpbmtlZENvZGUtPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsgfQogICAgIGJvb2wgdXNl
c0V2YWwoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dXNlc0V2YWwoKTsgfQogCi0g
ICAgdm9pZCBzZXRBcmd1bWVudHNSZWdpc3RlcihpbnQgYXJndW1lbnRzUmVnaXN0ZXIpCisgICAg
dm9pZCBzZXRBcmd1bWVudHNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0
ZXIpCiAgICAgewotICAgICAgICBBU1NFUlQoYXJndW1lbnRzUmVnaXN0ZXIgIT0gKGludClJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgQVNTRVJUKGFyZ3VtZW50c1JlZ2lzdGVyLmlz
VmFsaWQoKSk7CiAgICAgICAgIG1fYXJndW1lbnRzUmVnaXN0ZXIgPSBhcmd1bWVudHNSZWdpc3Rl
cjsKICAgICAgICAgQVNTRVJUKHVzZXNBcmd1bWVudHMoKSk7CiAgICAgfQotICAgIGludCBhcmd1
bWVudHNSZWdpc3RlcigpIGNvbnN0CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lz
dGVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCh1c2VzQXJndW1lbnRzKCkpOwogICAg
ICAgICByZXR1cm4gbV9hcmd1bWVudHNSZWdpc3RlcjsKICAgICB9Ci0gICAgaW50IHVuY2hlY2tl
ZEFyZ3VtZW50c1JlZ2lzdGVyKCkKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdW5jaGVja2VkQXJndW1l
bnRzUmVnaXN0ZXIoKQogICAgIHsKICAgICAgICAgaWYgKCF1c2VzQXJndW1lbnRzKCkpCi0gICAg
ICAgICAgICByZXR1cm4gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKKyAgICAgICAgICAgIHJldHVy
biBWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1JlZ2lzdGVyKCk7
CiAgICAgfQotICAgIHZvaWQgc2V0QWN0aXZhdGlvblJlZ2lzdGVyKGludCBhY3RpdmF0aW9uUmVn
aXN0ZXIpCisgICAgdm9pZCBzZXRBY3RpdmF0aW9uUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGFj
dGl2YXRpb25SZWdpc3RlcikKICAgICB7CiAgICAgICAgIG1fYWN0aXZhdGlvblJlZ2lzdGVyID0g
YWN0aXZhdGlvblJlZ2lzdGVyOwogICAgIH0KLSAgICBpbnQgYWN0aXZhdGlvblJlZ2lzdGVyKCkg
Y29uc3QKKworICAgIFZpcnR1YWxSZWdpc3RlciBhY3RpdmF0aW9uUmVnaXN0ZXIoKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKG5lZWRzRnVsbFNjb3BlQ2hhaW4oKSk7CiAgICAgICAgIHJl
dHVybiBtX2FjdGl2YXRpb25SZWdpc3RlcjsKICAgICB9Ci0gICAgaW50IHVuY2hlY2tlZEFjdGl2
YXRpb25SZWdpc3RlcigpCisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdW5jaGVja2VkQWN0aXZhdGlv
blJlZ2lzdGVyKCkKICAgICB7CiAgICAgICAgIGlmICghbmVlZHNGdWxsU2NvcGVDaGFpbigpKQot
ICAgICAgICAgICAgcmV0dXJuIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgICAgICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIHJldHVybiBhY3RpdmF0aW9uUmVnaXN0
ZXIoKTsKICAgICB9Ci0gICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9h
cmd1bWVudHNSZWdpc3RlciAhPSAoaW50KUludmFsaWRWaXJ0dWFsUmVnaXN0ZXI7IH0KKworICAg
IGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzUmVnaXN0ZXIu
aXNWYWxpZCgpOyB9CiAKICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9uZWVkc0FjdGl2YXRpb247CiAgICAgfQogCi0gICAgYm9vbCBpc0Nh
cHR1cmVkKGludCBvcGVyYW5kLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IDAp
IGNvbnN0CisgICAgYm9vbCBpc0NhcHR1cmVkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IDApIGNvbnN0CiAgICAgewotICAgICAgICBp
ZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmFu
ZFRvQXJndW1lbnQob3BlcmFuZCkgJiYgdXNlc0FyZ3VtZW50cygpOworICAgICAgICBpZiAob3Bl
cmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gb3BlcmFuZC50b0FyZ3VtZW50
KCkgJiYgdXNlc0FyZ3VtZW50cygpOwogCiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0g
ICAgICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMuZ2V0KG9wZXJh
bmRUb0xvY2FsKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUt
PmNhcHR1cmVkVmFycy5nZXQob3BlcmFuZC50b0xvY2FsKCkpOwogCiAgICAgICAgIC8vIFRoZSBh
Y3RpdmF0aW9uIG9iamVjdCBpc24ndCBpbiB0aGUgY2FwdHVyZWQgcmVnaW9uLCBidXQgaXQncyAi
Y2FwdHVyZWQiCiAgICAgICAgIC8vIGluIHRoZSBzZW5zZSB0aGF0IHN0b3JlcyB0byBpdHMgbG9j
YXRpb24gY2FuIGJlIG9ic2VydmVkIGluZGlyZWN0bHkuCkBAIC0zNjgsOCArMzcyLDggQEAgcHVi
bGljOgogICAgICAgICBpZiAoIXN5bWJvbFRhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgcmV0dXJuIG9wZXJhbmQgPD0gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0
YXJ0KCkKLSAgICAgICAgICAgICYmIG9wZXJhbmQgPiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5k
KCk7CisgICAgICAgIHJldHVybiBvcGVyYW5kLm9mZnNldCgpIDw9IHN5bWJvbFRhYmxlKCktPmNh
cHR1cmVTdGFydCgpCisgICAgICAgICAgICAmJiBvcGVyYW5kLm9mZnNldCgpID4gc3ltYm9sVGFi
bGUoKS0+Y2FwdHVyZUVuZCgpOwogICAgIH0KIAogICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvZGVUeXBlKCk7IH0KQEAgLTM5MSw3ICszOTUs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyRXZhbENhY2hlKCk7CiAKLSAgICBTdHJpbmcg
bmFtZUZvclJlZ2lzdGVyKGludCByZWdpc3Rlck51bWJlcik7CisgICAgU3RyaW5nIG5hbWVGb3JS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIHNl
dE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKHNpemVfdCBzaXplKSB7IG1fc3RydWN0dXJlU3R1
YkluZm9zLmdyb3coc2l6ZSk7IH0KQEAgLTEwMjcsOSArMTAzMSw5IEBAIHByaXZhdGU6CiAgICAg
Vk0qIG1fdm07CiAKICAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rp
b25zOwotICAgIGludCBtX3RoaXNSZWdpc3RlcjsKLSAgICBpbnQgbV9hcmd1bWVudHNSZWdpc3Rl
cjsKLSAgICBpbnQgbV9hY3RpdmF0aW9uUmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1f
dGhpc1JlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3RlciBtX2FyZ3VtZW50c1JlZ2lzdGVyOwor
ICAgIFZpcnR1YWxSZWdpc3RlciBtX2FjdGl2YXRpb25SZWdpc3RlcjsKIAogICAgIGJvb2wgbV9p
c1N0cmljdE1vZGU7CiAgICAgYm9vbCBtX25lZWRzQWN0aXZhdGlvbjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxNTYzNjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlNwZWNpYWxQb2ludGVyLmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKKyNpbmNs
dWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yVHJhaXRzLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDE1NjM2OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwyNiArNDYsMjYgQEAgY2xhc3MgTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVLZXkgewogcHVibGljOgogICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5
KCkKICAgICAgICAgOiBtX2J5dGVjb2RlT2Zmc2V0KDApIC8vIDAgPSBlbXB0eSB2YWx1ZQotICAg
ICAgICAsIG1fb3BlcmFuZChJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSAvLyBub3QgYSB2YWxpZCBv
cGVyYW5kIGluZGV4IGluIG91ciBjdXJyZW50IHNjaGVtZQorICAgICAgICAsIG1fb3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIoKSkgLy8gbm90IGEgdmFsaWQgb3BlcmFuZCBpbmRleCBpbiBvdXIgY3Vy
cmVudCBzY2hlbWUKICAgICB7CiAgICAgfQogICAgIAogICAgIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKICAgICAgICAgOiBtX2J5dGVj
b2RlT2Zmc2V0KDEpIC8vIDEgPSBkZWxldGVkIHZhbHVlCi0gICAgICAgICwgbV9vcGVyYW5kKElu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIC8vIG5vdCBhIHZhbGlkIG9wZXJhbmQgaW5kZXggaW4gb3Vy
IGN1cnJlbnQgc2NoZW1lCisgICAgICAgICwgbV9vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigpKSAv
LyBub3QgYSB2YWxpZCBvcGVyYW5kIGluZGV4IGluIG91ciBjdXJyZW50IHNjaGVtZQogICAgIHsK
ICAgICB9CiAgICAgCi0gICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQsIGludCBvcGVyYW5kKQorICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5
KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICAg
ICAgOiBtX2J5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICAsIG1fb3BlcmFu
ZChvcGVyYW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG9wZXJhbmQgIT0gSW52YWxpZFZpcnR1
YWxSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChtX29wZXJhbmQuaXNWYWxpZCgpKTsKICAgICB9
CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fb3BlcmFuZCA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyOworICAgICAgICByZXR1cm4gIW1f
b3BlcmFuZC5pc1ZhbGlkKCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSYgb3RoZXIpIGNvbnN0CkBAIC03Niw3ICs3Niw3
IEBAIHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBXVEY6OmludEhhc2gobV9ieXRlY29kZU9mZnNldCkgKyBtX29wZXJhbmQ7Cisg
ICAgICAgIHJldHVybiBXVEY6OmludEhhc2gobV9ieXRlY29kZU9mZnNldCkgKyBtX29wZXJhbmQu
b2Zmc2V0KCk7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KCkgY29u
c3QKQEAgLTg0LDcgKzg0LDggQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoISEqdGhpcyk7CiAg
ICAgICAgIHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0OwogICAgIH0KLSAgICBpbnQgb3BlcmFuZCgp
IGNvbnN0CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQoISEqdGhpcyk7CiAgICAgICAgIHJldHVybiBtX29wZXJhbmQ7CkBAIC05Miwx
MSArOTMsMTEgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFs
dWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3BlcmFuZCA9PSBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyICYmIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIHJldHVybiAhbV9vcGVy
YW5kLmlzVmFsaWQoKSAmJiBtX2J5dGVjb2RlT2Zmc2V0OwogICAgIH0KIHByaXZhdGU6IAogICAg
IHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgaW50IG1fb3BlcmFuZDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwogfTsKIAogc3RydWN0IExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlS2V5SGFzaCB7CkBAIC0xMjksNyArMTMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBzdHJ1Y3Qg
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUgOiBwdWJsaWMgTWluaW1hbFZhbHVlUHJvZmlsZSB7CiAg
ICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUoKQogICAgICAgICA6IE1pbmltYWxWYWx1ZVByb2Zp
bGUoKQotICAgICAgICAsIG1fb3BlcmFuZChJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAg
ICAsIG1fb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoKSkKICAgICB7CiAgICAgfQogICAgIApAQCAt
MTQ0LDcgKzE0NSw3IEBAIHN0cnVjdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSA6IHB1YmxpYyAK
ICAgICAgICAgcmV0dXJuIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KG1fYnl0ZWNvZGVPZmZz
ZXQsIG1fb3BlcmFuZCk7CiAgICAgfQogICAgIAotICAgIGludCBtX29wZXJhbmQ7CisgICAgVmly
dHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKICAgICAKICAgICB0eXBlZGVmIFNlZ21lbnRlZFZlY3Rv
cjxMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSwgOD4gTGlzdDsKIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuY3BwCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBNZXRo
b2RPZkdldAogICAgIHJlc3VsdC5tX2tpbmQgPSBMYXp5T3BlcmFuZDsKICAgICByZXN1bHQudS5s
YXp5T3BlcmFuZC5jb2RlQmxvY2sgPSBjb2RlQmxvY2s7CiAgICAgcmVzdWx0LnUubGF6eU9wZXJh
bmQuYnl0ZWNvZGVPZmZzZXQgPSBrZXkuYnl0ZWNvZGVPZmZzZXQoKTsKLSAgICByZXN1bHQudS5s
YXp5T3BlcmFuZC5vcGVyYW5kID0ga2V5Lm9wZXJhbmQoKTsKKyAgICByZXN1bHQudS5sYXp5T3Bl
cmFuZC5vcGVyYW5kID0ga2V5Lm9wZXJhbmQoKS5vZmZzZXQoKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC01Myw3ICs1Myw3IEBAIEVuY29kZWRKU1ZhbHVlKiBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm8KICAgICAgICAgcmV0dXJuIHUucHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQoaW5kZXgp
OwogICAgICAgICAKICAgICBjYXNlIExhenlPcGVyYW5kOiB7Ci0gICAgICAgIExhenlPcGVyYW5k
VmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0LCB1LmxhenlP
cGVyYW5kLm9wZXJhbmQpOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXko
dS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgVmlydHVhbFJlZ2lzdGVyKHUubGF6eU9wZXJh
bmQub3BlcmFuZCkpOwogICAgICAgICAKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIodS5sYXp5T3BlcmFuZC5jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIExhenlPcGVyYW5k
VmFsdWVQcm9maWxlKiBwcm9maWxlID0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjAgKzI4LDEzIEBA
CiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1
ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorCiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGludCBs
b2NhbFRvT3BlcmFuZChpbnQgbG9jYWwpIHsgcmV0dXJuIC1sb2NhbDsgfQotaW5saW5lIGJvb2wg
b3BlcmFuZElzTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPD0gMDsgfQotaW5s
aW5lIGludCBvcGVyYW5kVG9Mb2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gLW9wZXJhbmQ7IH0K
LQotLy8gYXJndW1lbnQgMCBpcyAndGhpcycuCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNBcmd1bWVu
dChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCA+IDA7IH0KLWlubGluZSBpbnQgb3BlcmFu
ZFRvQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRo
aXNBcmd1bWVudE9mZnNldCgpOyB9Ci1pbmxpbmUgaW50IGFyZ3VtZW50VG9PcGVyYW5kKGludCBh
cmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNl
dCgpOyB9Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBPcGVyYW5kVmFsdWVUcmFpdHM7
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xNDMsMzMgKzEzNiw0MyBAQCBwdWJsaWM6CiAg
ICAgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kSXNB
cmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRv
QXJndW1lbnQob3BlcmFuZCk7CisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpOwogICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1l
bnRzW2FyZ3VtZW50XTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fbG9j
YWxzW29wZXJhbmRUb0xvY2FsKG9wZXJhbmQpXTsKKworICAgICAgICByZXR1cm4gbV9sb2NhbHNb
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKV07CiAgICAgfQotICAgIAorCisgICAg
VCYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG9wZXJhbmQodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKTsKKyAgICB9CisKICAg
ICBjb25zdCBUJiBvcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkp
OyB9CiAgICAgCiAgICAgYm9vbCBoYXNPcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdAogICAgIHsK
ICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmRUb0xv
Y2FsKG9wZXJhbmQpKSA8IG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxzaXplX3Q+KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpIDwgbnVtYmVy
T2ZMb2NhbHMoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVyYW5k
LCBjb25zdCBUJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChv
cGVyYW5kKSkgewotICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQo
b3BlcmFuZCk7CisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBWaXJ0dWFsUmVnaXN0ZXIob3Bl
cmFuZCkudG9Bcmd1bWVudCgpOwogICAgICAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRdID0g
dmFsdWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IHNldExvY2FsKG9wZXJhbmRUb0xvY2FsKG9wZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgIHNldExv
Y2FsKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCksIHZhbHVlKTsKICAgICB9CiAg
ICAgCisgICAgdm9pZCBzZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIs
IGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0T3BlcmFuZCh2aXJ0dWFsUmVnaXN0
ZXIub2Zmc2V0KCksIHZhbHVlKTsKKyAgICB9CisKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpOyB9CiAgICAgY29u
c3QgVCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHsKQEAgLTE5OSwxOCArMjAyLDE4IEBA
IHB1YmxpYzoKICAgICBpbnQgb3BlcmFuZEZvckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKICAg
ICB7CiAgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCi0gICAgICAgICAg
ICByZXR1cm4gYXJndW1lbnRUb09wZXJhbmQoaW5kZXgpOwotICAgICAgICByZXR1cm4gbG9jYWxU
b09wZXJhbmQoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKKyAgICAgICAgICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkub2Zmc2V0KCk7CisgICAgICAgIHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkp
Lm9mZnNldCgpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUoaW50
IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmRJc0Fy
Z3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAgICBzZXRBcmd1bWVudEZpcnN0VGltZShvcGVy
YW5kVG9Bcmd1bWVudChvcGVyYW5kKSwgdmFsdWUpOworICAgICAgICAgICAgc2V0QXJndW1lbnRG
aXJzdFRpbWUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKSwgdmFsdWUpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzZXRMb2Nh
bEZpcnN0VGltZShvcGVyYW5kVG9Mb2NhbChvcGVyYW5kKSwgdmFsdWUpOworICAgICAgICBzZXRM
b2NhbEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpLCB2YWx1ZSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgZmlsbChUIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZp
c2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsOCArMTk0LDggQEAgVW5saW5rZWRD
b2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNKgogICAgICwgbV9udW1DYWxsZWVSZWdpc3Rl
cnMoMCkKICAgICAsIG1fbnVtUGFyYW1ldGVycygwKQogICAgICwgbV92bSh2bSkKLSAgICAsIG1f
YXJndW1lbnRzUmVnaXN0ZXIoKGludClJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICwgbV9n
bG9iYWxPYmplY3RSZWdpc3RlcigoaW50KUludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgLCBt
X2FyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKQorICAgICwgbV9nbG9iYWxPYmpl
Y3RSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkKICAgICAsIG1fbmVlZHNGdWxsU2NvcGVDaGFp
bihpbmZvLm1fbmVlZHNBY3RpdmF0aW9uKQogICAgICwgbV91c2VzRXZhbChpbmZvLm1fdXNlc0V2
YWwpCiAgICAgLCBtX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbihmYWxzZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShy
ZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDE3ICsyNTQsMTcgQEAgcHVibGlj
OgogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZv
LnNpemUoKTsgfQogCiAgICAgLy8gU3BlY2lhbCByZWdpc3RlcnMKLSAgICB2b2lkIHNldFRoaXNS
ZWdpc3RlcihpbnQgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVy
OyB9Ci0gICAgdm9pZCBzZXRBY3RpdmF0aW9uUmVnaXN0ZXIoaW50IGFjdGl2YXRpb25SZWdpc3Rl
cikgeyBtX2FjdGl2YXRpb25SZWdpc3RlciA9IGFjdGl2YXRpb25SZWdpc3RlcjsgfQorICAgIHZv
aWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlz
UmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KKyAgICB2b2lkIHNldEFjdGl2YXRpb25SZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgYWN0aXZhdGlvblJlZ2lzdGVyKSB7IG1fYWN0aXZhdGlvblJlZ2lz
dGVyID0gYWN0aXZhdGlvblJlZ2lzdGVyOyB9CiAKLSAgICB2b2lkIHNldEFyZ3VtZW50c1JlZ2lz
dGVyKGludCBhcmd1bWVudHNSZWdpc3RlcikgeyBtX2FyZ3VtZW50c1JlZ2lzdGVyID0gYXJndW1l
bnRzUmVnaXN0ZXI7IH0KLSAgICBib29sIHVzZXNBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBt
X2FyZ3VtZW50c1JlZ2lzdGVyICE9IChpbnQpSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsgfQotICAg
IGludCBhcmd1bWVudHNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzUmVnaXN0
ZXI7IH0KKyAgICB2b2lkIHNldEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBhcmd1
bWVudHNSZWdpc3RlcikgeyBtX2FyZ3VtZW50c1JlZ2lzdGVyID0gYXJndW1lbnRzUmVnaXN0ZXI7
IH0KKyAgICBib29sIHVzZXNBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1Jl
Z2lzdGVyLmlzVmFsaWQoKTsgfQorICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3Rl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzUmVnaXN0ZXI7IH0KIAogCi0gICAgYm9vbCB1
c2VzR2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdpc3RlciAh
PSAoaW50KUludmFsaWRWaXJ0dWFsUmVnaXN0ZXI7IH0KLSAgICB2b2lkIHNldEdsb2JhbE9iamVj
dFJlZ2lzdGVyKGludCBnbG9iYWxPYmplY3RSZWdpc3RlcikgeyBtX2dsb2JhbE9iamVjdFJlZ2lz
dGVyID0gZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7IH0KLSAgICBpbnQgZ2xvYmFsT2JqZWN0UmVnaXN0
ZXIoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyOyB9CisgICAgYm9vbCB1
c2VzR2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdpc3Rlci5p
c1ZhbGlkKCk7IH0KKyAgICB2b2lkIHNldEdsb2JhbE9iamVjdFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciBnbG9iYWxPYmplY3RSZWdpc3RlcikgeyBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyID0gZ2xv
YmFsT2JqZWN0UmVnaXN0ZXI7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZ2xvYmFsT2JqZWN0UmVn
aXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyOyB9CiAKICAgICAv
LyBQYXJhbWV0ZXIgaW5mb3JtYXRpb24KICAgICB2b2lkIHNldE51bVBhcmFtZXRlcnMoaW50IG5l
d1ZhbHVlKSB7IG1fbnVtUGFyYW1ldGVycyA9IG5ld1ZhbHVlOyB9CkBAIC0zOTksOCArMzk5LDgg
QEAgcHVibGljOgogCiAgICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGVUeXBlOyB9CiAKLSAgICBpbnQgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90aGlz
UmVnaXN0ZXI7IH0KLSAgICBpbnQgYWN0aXZhdGlvblJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4g
bV9hY3RpdmF0aW9uUmVnaXN0ZXI7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVy
KCkgY29uc3QgeyByZXR1cm4gbV90aGlzUmVnaXN0ZXI7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
YWN0aXZhdGlvblJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmF0aW9uUmVnaXN0ZXI7
IH0KIAogCiAgICAgdm9pZCBhZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKHVuc2lnbmVkIHBy
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24pCkBAIC00NzksMTAgKzQ3OSwxMCBAQCBwcml2YXRlOgog
ICAgIGludCBtX251bVBhcmFtZXRlcnM7CiAgICAgVk0qIG1fdm07CiAKLSAgICBpbnQgbV90aGlz
UmVnaXN0ZXI7Ci0gICAgaW50IG1fYXJndW1lbnRzUmVnaXN0ZXI7Ci0gICAgaW50IG1fYWN0aXZh
dGlvblJlZ2lzdGVyOwotICAgIGludCBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyOworICAgIFZpcnR1
YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9hcmd1bWVu
dHNSZWdpc3RlcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9hY3RpdmF0aW9uUmVnaXN0ZXI7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7CiAKICAgICBib29sIG1f
bmVlZHNGdWxsU2NvcGVDaGFpbiA6IDE7CiAgICAgYm9vbCBtX3VzZXNFdmFsIDogMTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAkocmV2
aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjExLDcgKzIxMSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IERpc3BsYWNlZEluSlNTdGFjazsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdC5tX3NvdXJjZS52aXJ0dWFsUmVn
ID0gdmlydHVhbFJlZzsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLnZpcnR1YWxSZWcgPSB2aXJ0
dWFsUmVnLm9mZnNldCgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAg
LTI5NCw3ICsyOTQsNyBAQCBwdWJsaWM6CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gRGlzcGxh
Y2VkSW5KU1N0YWNrIHx8IG1fdGVjaG5pcXVlID09IEludDMyRGlzcGxhY2VkSW5KU1N0YWNrIHx8
IG1fdGVjaG5pcXVlID09IERvdWJsZURpc3BsYWNlZEluSlNTdGFjayB8fCBtX3RlY2huaXF1ZSA9
PSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrIHx8IG1fdGVjaG5pcXVlID09IEJvb2xlYW5EaXNwbGFj
ZWRJbkpTU3RhY2sgfHwgbV90ZWNobmlxdWUgPT0gSW50NTJEaXNwbGFjZWRJbkpTU3RhY2sgfHwg
bV90ZWNobmlxdWUgPT0gU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2spOwotICAgICAgICBy
ZXR1cm4gbV9zb3VyY2UudmlydHVhbFJlZzsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rl
cihtX3NvdXJjZS52aXJ0dWFsUmVnKTsKICAgICB9CiAgICAgCiAgICAgSlNWYWx1ZSBjb25zdGFu
dCgpIGNvbnN0CkBAIC0zNTEsMjUgKzM1MSwyNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm47CiAjZW5kaWYKICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAg
ICBvdXQucHJpbnRmKCIqJWQiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIqJWQiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAg
ICBvdXQucHJpbnRmKCIqaW50MzIoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAg
ICAgb3V0LnByaW50ZigiKmludDMyKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFj
azoKLSAgICAgICAgICAgIG91dC5wcmludGYoIippbnQ1MiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIo
KSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIqaW50NTIoJWQpIiwgdmlydHVhbFJlZ2lzdGVy
KCkub2Zmc2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIFN0cmljdElu
dDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgb3V0LnByaW50ZigiKnN0cmljdElu
dDUyKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIipz
dHJpY3RJbnQ1MiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAg
ICAgICAgb3V0LnByaW50ZigiKmRvdWJsZSglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAg
ICAgICAgICBvdXQucHJpbnRmKCIqZG91YmxlKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNl
dCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5K
U1N0YWNrOgotICAgICAgICAgICAgb3V0LnByaW50ZigiKmNlbGwoJWQpIiwgdmlydHVhbFJlZ2lz
dGVyKCkpOworICAgICAgICAgICAgb3V0LnByaW50ZigiKmNlbGwoJWQpIiwgdmlydHVhbFJlZ2lz
dGVyKCkub2Zmc2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIEJvb2xl
YW5EaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIqYm9vbCglZCki
LCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIqYm9vbCglZCki
LCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGNhc2UgQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgogICAgICAgICAgICAgb3V0LnBy
aW50ZigiYXJndW1lbnRzIik7CkBAIC00MDAsNyArNDAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBheWxvYWRHUFI7CiAgICAgICAgIH0gcGFp
cjsKICNlbmRpZgotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZzsKKyAgICAgICAg
aW50IHZpcnR1YWxSZWc7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlIGNvbnN0YW50OwogICAgIH0g
bV9zb3VyY2U7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1
YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwy
MyArMjYsODAgQEAKICNpZm5kZWYgVmlydHVhbFJlZ2lzdGVyX2gKICNkZWZpbmUgVmlydHVhbFJl
Z2lzdGVyX2gKIAorI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorCiAjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci0vLyBUeXBlIGZvciBhIHZpcnR1YWwgcmVnaXN0ZXIgbnVtYmVyIChzcGlsbCBsb2NhdGlvbiku
Ci0vLyBVc2luZyBhbiBlbnVtIHRvIG1ha2UgdGhpcyB0eXBlLWNoZWNrZWQgYXQgY29tcGlsZSB0
aW1lLCB0byBhdmVydCBwcm9ncmFtbWVyIGVycm9ycy4KLWVudW0gVmlydHVhbFJlZ2lzdGVyIHsg
SW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmYgfTsKK2lubGluZSBib29sIG9wZXJh
bmRJc0xvY2FsKGludCBvcGVyYW5kKQoreworICAgIHJldHVybiBvcGVyYW5kIDw9IDA7Cit9CisK
K2lubGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKQoreworICAgIHJldHVy
biBvcGVyYW5kID4gMDsKK30KKworCitjbGFzcyBWaXJ0dWFsUmVnaXN0ZXIgeworcHVibGljOgor
ICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW50KTsK
KyAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGlu
dCwgaW50KTsKKworICAgIFZpcnR1YWxSZWdpc3RlcigpCisgICAgICAgIDogbV92aXJ0dWFsUmVn
aXN0ZXIoc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgIHsgfQorCisgICAgZXhwbGljaXQg
VmlydHVhbFJlZ2lzdGVyKGludCB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgIDogbV92aXJ0dWFs
UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKQorICAgIHsgfQorCisgICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVyICE9IHNfaW52YWxpZFZpcnR1YWxSZWdp
c3Rlcik7IH0KKyAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiBvcGVyYW5kSXNMb2Nh
bChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJl
dHVybiBvcGVyYW5kSXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlz
Q29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBzX2ZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4OyB9CisgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChp
c0xvY2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Cisg
ICAgaW50IHRvQXJndW1lbnQoKSBjb25zdCB7IEFTU0VSVChpc0FyZ3VtZW50KCkpOyByZXR1cm4g
b3BlcmFuZFRvQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgaW50IHRvQ29uc3Rh
bnRJbmRleCgpIGNvbnN0IHsgQVNTRVJUKGlzQ29uc3RhbnQoKSk7IHJldHVybiBtX3ZpcnR1YWxS
ZWdpc3RlciAtIHNfZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KKyAgICBpbnQgb2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXI7IH0KKworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBWaXJ0dWFsUmVnaXN0ZXIgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVh
bFJlZ2lzdGVyID09IG90aGVyLm1fdmlydHVhbFJlZ2lzdGVyOyB9CisgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFZpcnR1YWxSZWdpc3RlciBvdGhlcikgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFs
UmVnaXN0ZXIgIT0gb3RoZXIubV92aXJ0dWFsUmVnaXN0ZXI7IH0KKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgY29uc3QgaW50IHNfaW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IDB4M2ZmZmZmZmY7Cisg
ICAgc3RhdGljIGNvbnN0IGludCBzX2ZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gMHg0MDAw
MDAwMDsKKworICAgIHN0YXRpYyBpbnQgbG9jYWxUb09wZXJhbmQoaW50IGxvY2FsKSB7IHJldHVy
biAtbG9jYWw7IH0KKyAgICBzdGF0aWMgaW50IG9wZXJhbmRUb0xvY2FsKGludCBvcGVyYW5kKSB7
IHJldHVybiAtb3BlcmFuZDsgfQorICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50
IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNl
dCgpOyB9CisgICAgc3RhdGljIGludCBhcmd1bWVudFRvT3BlcmFuZChpbnQgYXJndW1lbnQpIHsg
cmV0dXJuIGFyZ3VtZW50ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsgfQorCisg
ICAgaW50IG1fdmlydHVhbFJlZ2lzdGVyOworfTsKKwogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFZp
cnR1YWxSZWdpc3RlcikgPT0gc2l6ZW9mKGludCksIFZpcnR1YWxSZWdpc3Rlcl9pc18zMmJpdCk7
CiAKK2lubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW50IGxv
Y2FsKQoreworICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyOjpsb2Nh
bFRvT3BlcmFuZChsb2NhbCkpOworfQorCitpbmxpbmUgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGludCBhcmd1bWVudCwgaW50IG9mZnNldCA9IDApCit7CisgICAg
cmV0dXJuIFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXI6OmFyZ3VtZW50VG9PcGVyYW5k
KGFyZ3VtZW50KSArIG9mZnNldCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3Bh
Y2UgV1RGIHsKIAogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBK
U0M6OlZpcnR1YWxSZWdpc3RlciB2YWx1ZSkKIHsKLSAgICBvdXQucHJpbnQoc3RhdGljX2Nhc3Q8
aW50Pih2YWx1ZSkpOworICAgIG91dC5wcmludCh2YWx1ZS5vZmZzZXQoKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE1NjM2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZSgKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigi
Qnl0ZWNvZGUgR2VuZXJhdGlvbiIpOwogICAgIAotICAgIG1fY29kZUJsb2NrLT5zZXRUaGlzUmVn
aXN0ZXIobV90aGlzUmVnaXN0ZXIuaW5kZXgoKSk7CisgICAgbV9jb2RlQmxvY2stPnNldFRoaXNS
ZWdpc3RlcihtX3RoaXNSZWdpc3Rlci52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAKICAgICBtX3Njb3Bl
Tm9kZS0+ZW1pdEJ5dGVjb2RlKCp0aGlzKTsKIApAQCAtMTE3LDcgKzExNyw3IEBAIFBhcnNlckVy
cm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6
OmFkZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCBpc0NvbnN0YW50LCBSZWdpc3Rl
cklEKiYgcjApCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUo
KS5tX2xvY2spOwotICAgIGludCBpbmRleCA9IGxvY2FsVG9PcGVyYW5kKG1fY2FsbGVlUmVnaXN0
ZXJzLnNpemUoKSk7CisgICAgaW50IGluZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9j
YWxsZWVSZWdpc3RlcnMuc2l6ZSgpKS5vZmZzZXQoKTsKICAgICBTeW1ib2xUYWJsZUVudHJ5IG5l
d0VudHJ5KGluZGV4LCBpc0NvbnN0YW50ID8gUmVhZE9ubHkgOiAwKTsKICAgICBTeW1ib2xUYWJs
ZTo6TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3ltYm9sVGFibGUoKS5hZGQobG9ja2VyLCBpZGVu
dC5pbXBsKCksIG5ld0VudHJ5KTsKIApAQCAtMjIxLDEwICsyMjEsMTAgQEAgQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNG
dWxsU2NvcGVDaGFpbigpKSB7CiAgICAgICAgIG1fYWN0aXZhdGlvblJlZ2lzdGVyID0gYWRkVmFy
KCk7CiAgICAgICAgIGVtaXRJbml0TGF6eVJlZ2lzdGVyKG1fYWN0aXZhdGlvblJlZ2lzdGVyKTsK
LSAgICAgICAgbV9jb2RlQmxvY2stPnNldEFjdGl2YXRpb25SZWdpc3RlcihtX2FjdGl2YXRpb25S
ZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5zZXRBY3RpdmF0aW9uUmVn
aXN0ZXIobV9hY3RpdmF0aW9uUmVnaXN0ZXItPnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICB9CiAK
LSAgICBtX3N5bWJvbFRhYmxlLT5zZXRDYXB0dXJlU3RhcnQobG9jYWxUb09wZXJhbmQobV9jb2Rl
QmxvY2stPm1fbnVtVmFycykpOworICAgIG1fc3ltYm9sVGFibGUtPnNldENhcHR1cmVTdGFydCh2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2NvZGVCbG9jay0+bV9udW1WYXJzKS5vZmZzZXQoKSk7
CiAKICAgICBpZiAoZnVuY3Rpb25Cb2R5LT51c2VzQXJndW1lbnRzKCkgfHwgY29kZUJsb2NrLT51
c2VzRXZhbCgpKSB7IC8vIE1heSByZWlmeSBhcmd1bWVudHMgb2JqZWN0LgogICAgICAgICBSZWdp
c3RlcklEKiB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIoKTsgLy8gQW5vbnlt
b3VzLCBzbyBpdCBjYW4ndCBiZSBtb2RpZmllZCBieSB1c2VyIGNvZGUuCkBAIC0yMzMsOCArMjMz
LDggQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAv
LyBXZSBjYW4gc2F2ZSBhIGxpdHRsZSBzcGFjZSBieSBoYXJkLWNvZGluZyB0aGUga25vd2xlZGdl
IHRoYXQgdGhlIHR3bwogICAgICAgICAvLyAnYXJndW1lbnRzJyB2YWx1ZXMgYXJlIHN0b3JlZCBp
biBjb25zZWN1dGl2ZSByZWdpc3RlcnMsIGFuZCBzdG9yaW5nCiAgICAgICAgIC8vIG9ubHkgdGhl
IGluZGV4IG9mIHRoZSBhc3NpZ25hYmxlIG9uZS4KLSAgICAgICAgY29kZUJsb2NrLT5zZXRBcmd1
bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgIEFTU0VS
VF9VTlVTRUQodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyLCB1bm1vZGlmaWVkQXJndW1lbnRz
UmVnaXN0ZXItPmluZGV4KCkgPT0gSlNDOjp1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoY29k
ZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKSk7CisgICAgICAgIGNvZGVCbG9jay0+c2V0QXJn
dW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXItPnZpcnR1YWxSZWdpc3RlcigpKTsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRCh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIsIHVubW9kaWZp
ZWRBcmd1bWVudHNSZWdpc3Rlci0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gSlNDOjp1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIoY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKSk7CiAKICAg
ICAgICAgZW1pdEluaXRMYXp5UmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwogICAgICAgICBl
bWl0SW5pdExhenlSZWdpc3Rlcih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIpOwpAQCAtMzEx
LDcgKzMxMSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZhdGlvblJlZ2lzdGVyLT5pbmRleCgp
KTsKICAgICB9CiAKLSAgICBtX3N5bWJvbFRhYmxlLT5zZXRDYXB0dXJlRW5kKGxvY2FsVG9PcGVy
YW5kKGNvZGVCbG9jay0+bV9udW1WYXJzKSk7CisgICAgbV9zeW1ib2xUYWJsZS0+c2V0Q2FwdHVy
ZUVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChjb2RlQmxvY2stPm1fbnVtVmFycykub2Zmc2V0
KCkpOwogCiAgICAgbV9maXJzdExhenlGdW5jdGlvbiA9IGNvZGVCbG9jay0+bV9udW1WYXJzOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25TdGFjay5zaXplKCk7ICsraSkgewpA
QCAtMzI2LDcgKzMyNiw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihW
TSYKICAgICAgICAgICAgICAgICBlbWl0TmV3RnVuY3Rpb24ocmVnLmdldCgpLCBmdW5jdGlvbik7
CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBlbWl0SW5pdExhenlSZWdpc3Rl
cihyZWcuZ2V0KCkpOwotICAgICAgICAgICAgICAgIG1fbGF6eUZ1bmN0aW9ucy5zZXQobG9jYWxU
b09wZXJhbmQocmVnLT5pbmRleCgpKSwgZnVuY3Rpb24pOworICAgICAgICAgICAgICAgIG1fbGF6
eUZ1bmN0aW9ucy5zZXQocmVnLT52aXJ0dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCksIGZ1bmN0aW9u
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMzOCw3ICszMzgsNyBAQCBC
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgfQogCiAgICAgaWYg
KHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpCi0gICAgICAgIG1fc3ltYm9sVGFibGUtPnNldENh
cHR1cmVFbmQobG9jYWxUb09wZXJhbmQoY29kZUJsb2NrLT5tX251bVZhcnMpKTsKKyAgICAgICAg
bV9zeW1ib2xUYWJsZS0+c2V0Q2FwdHVyZUVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChjb2Rl
QmxvY2stPm1fbnVtVmFycykub2Zmc2V0KCkpOwogCiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzID0gKmZ1bmN0aW9uQm9keS0+cGFyYW1ldGVycygpOwogICAgIG1fcGFyYW1ldGVy
cy5ncm93KHBhcmFtZXRlcnMuc2l6ZSgpICsgMSk7IC8vIHJlc2VydmUgc3BhY2UgZm9yICJ0aGlz
IgpAQCAtNTA2LDggKzUwNiwxMSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6dW5j
aGVja2VkCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVMYXp5UmVnaXN0
ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKiByZWcpCiB7Ci0gICAgaW50IGxvY2FsVmFyaWFibGVO
dW1iZXIgPSBvcGVyYW5kVG9Mb2NhbChyZWctPmluZGV4KCkpOwotICAgIAorICAgIGlmICghcmVn
LT52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpCisgICAgICAgIHJldHVybiByZWc7CisKKyAg
ICBpbnQgbG9jYWxWYXJpYWJsZU51bWJlciA9IHJlZy0+dmlydHVhbFJlZ2lzdGVyKCkudG9Mb2Nh
bCgpOworCiAgICAgaWYgKG1fbGFzdExhenlGdW5jdGlvbiA8PSBsb2NhbFZhcmlhYmxlTnVtYmVy
IHx8IGxvY2FsVmFyaWFibGVOdW1iZXIgPCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKQogICAgICAgICBy
ZXR1cm4gcmVnOwogICAgIGVtaXRMYXp5TmV3RnVuY3Rpb24ocmVnLCBtX2xhenlGdW5jdGlvbnMu
Z2V0KGxvY2FsVmFyaWFibGVOdW1iZXIpKTsKQEAgLTUxNiw3ICs1MTksMTEgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUxhegogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6bmV3UmVnaXN0ZXIoKQogewotICAgIG1fY2FsbGVlUmVnaXN0ZXJzLmFwcGVuZChs
b2NhbFRvT3BlcmFuZChtX2NhbGxlZVJlZ2lzdGVycy5zaXplKCkpKTsKKyAgICBpbnQgb2xkT2Zm
c2V0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKS5v
ZmZzZXQoKTsKKyAgICBpbnQgbmV3T2Zmc2V0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9j
YWxsZWVSZWdpc3RlcnMuc2l6ZSgpKS5vZmZzZXQoKTsKKyAgICBBU1NFUlQob2xkT2Zmc2V0ID09
IG5ld09mZnNldCk7CisKKyAgICBtX2NhbGxlZVJlZ2lzdGVycy5hcHBlbmQodmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKSk7CiAgICAgbV9jb2RlQmxvY2st
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzID0gbWF4PGludD4obV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVl
UmVnaXN0ZXJzLCBtX2NhbGxlZVJlZ2lzdGVycy5zaXplKCkpOwogICAgIHJldHVybiAmbV9jYWxs
ZWVSZWdpc3RlcnMubGFzdCgpOwogfQpAQCAtMTExOSw3ICsxMTI2LDcgQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkRwogICAgICAgICArK21fbmV4dENvbnN0YW50T2Zm
c2V0OwogICAgICAgICBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnQoSlNWYWx1ZSgpKTsKICAgICAg
ICAgbV9nbG9iYWxPYmplY3RSZWdpc3RlciA9ICZtX2NvbnN0YW50UG9vbFJlZ2lzdGVyc1tpbmRl
eF07Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRHbG9iYWxPYmplY3RSZWdpc3RlcihpbmRleCk7
CisgICAgICAgIG1fY29kZUJsb2NrLT5zZXRHbG9iYWxPYmplY3RSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIoaW5kZXgpKTsKICAgICB9CiAgICAgaWYgKGRzdCkKICAgICAgICAgZW1pdE1vdmUoZHN0
LCBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyKTsKQEAgLTEyNjMsNyArMTI3MCw3IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QXIKIHsKICAgICBlbWl0T3Bjb2RlKG9wX2dl
dF9hcmd1bWVudHNfbGVuZ3RoKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRl
eCgpKTsKLSAgICBBU1NFUlQoYmFzZS0+aW5kZXgoKSA9PSBtX2NvZGVCbG9jay0+YXJndW1lbnRz
UmVnaXN0ZXIoKSk7CisgICAgQVNTRVJUKGJhc2UtPnZpcnR1YWxSZWdpc3RlcigpID09IG1fY29k
ZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
YmFzZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgpKTsKICAgICByZXR1cm4gZHN0OwpAQCAtMTMzOCw3ICsxMzQ1
LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRBcgogICAgIFVubGlu
a2VkQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOwogICAgIFVu
bGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2Fy
Z3VtZW50X2J5X3ZhbCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7Ci0g
ICAgQVNTRVJUKGJhc2UtPmluZGV4KCkgPT0gbV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVy
KCkpOworICAgIEFTU0VSVChiYXNlLT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBtX2NvZGVCbG9jay0+
YXJndW1lbnRzUmVnaXN0ZXIoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmlu
ZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wZXJ0eS0+aW5kZXgoKSk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFycmF5UHJvZmlsZSk7CkBAIC0xNTU4LDcgKzE1NjUs
NyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBcmd1bWVudHNJCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2FyZ3VtZW50cyk7Ci0gICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKKyAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zm
c2V0KCkpOwogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBY3RpdmF0aW9uSWZO
ZWNlc3NhcnkoKQpAQCAtMTc0Myw3ICsxNzUwLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRSZXR1cgogCiAgICAgaWYgKG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkg
JiYgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAhPSAxICYmICFpc1N0cmljdE1vZGUoKSkg
ewogICAgICAgICBlbWl0T3Bjb2RlKG9wX3RlYXJfb2ZmX2FyZ3VtZW50cyk7Ci0gICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7Cisg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0
ZXIoKS5vZmZzZXQoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2FjdGl2YXRp
b25SZWdpc3RlciA/IG1fYWN0aXZhdGlvblJlZ2lzdGVyLT5pbmRleCgpIDogZW1pdExvYWQoMCwg
SlNWYWx1ZSgpKS0+aW5kZXgoKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lv
biAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5OSwxMyArNDk5LDEzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEJiByZWdpc3RlckZvcihpbnQgaW5kZXgpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmIChvcGVyYW5kSXNMb2NhbChpbmRleCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG1fY2FsbGVlUmVnaXN0ZXJzW29wZXJhbmRUb0xvY2FsKGluZGV4KV07Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FsbGVlUmVnaXN0ZXJzW1ZpcnR1YWxSZWdpc3Rlcihp
bmRleCkudG9Mb2NhbCgpXTsKIAogICAgICAgICAgICAgaWYgKGluZGV4ID09IEpTU3RhY2s6OkNh
bGxlZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbV9jYWxsZWVSZWdpc3RlcjsKIAogICAgICAg
ICAgICAgQVNTRVJUKG1fcGFyYW1ldGVycy5zaXplKCkpOwotICAgICAgICAgICAgcmV0dXJuIG1f
cGFyYW1ldGVyc1tvcGVyYW5kVG9Bcmd1bWVudChpbmRleCldOworICAgICAgICAgICAgcmV0dXJu
IG1fcGFyYW1ldGVyc1tWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpLnRvQXJndW1lbnQoKV07CiAgICAg
ICAgIH0KIAogICAgICAgICB1bnNpZ25lZCBhZGRDb25zdGFudChjb25zdCBJZGVudGlmaWVyJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVy
SUQuaAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9SZWdpc3RlcklELmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNpZm5k
ZWYgUmVnaXN0ZXJJRF9oCiAjZGVmaW5lIFJlZ2lzdGVySURfaAogCisjaW5jbHVkZSAiVmlydHVh
bFJlZ2lzdGVyLmgiCisKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3JUcmFpdHMuaD4KIApAQCAtNDYsOSArNDgsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIFJlZ2lzdGVySUQoVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgIDogbV9yZWZDb3VudCgwKQorICAgICAgICAg
ICAgLCBtX3ZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICAsIG1f
aXNUZW1wb3JhcnkoZmFsc2UpCisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgLCBtX2RpZFNl
dEluZGV4KHRydWUpCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBleHBsaWNpdCBSZWdpc3RlcklEKGludCBpbmRleCkKICAgICAgICAgICAgIDogbV9yZWZD
b3VudCgwKQotICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgLCBtX3Zp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgpKQogICAgICAgICAgICAgLCBtX2lz
VGVtcG9yYXJ5KGZhbHNlKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgICwgbV9kaWRTZXRJ
bmRleCh0cnVlKQpAQCAtNjIsNyArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZm5kZWYgTkRF
QlVHCiAgICAgICAgICAgICBtX2RpZFNldEluZGV4ID0gdHJ1ZTsKICNlbmRpZgotICAgICAgICAg
ICAgbV9pbmRleCA9IGluZGV4OworICAgICAgICAgICAgbV92aXJ0dWFsUmVnaXN0ZXIgPSBWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBzZXRUZW1wb3Jh
cnkoKQpAQCAtNzMsNyArODUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBpbmRl
eCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtX2RpZFNldEluZGV4KTsK
LSAgICAgICAgICAgIHJldHVybiBtX2luZGV4OworICAgICAgICAgICAgcmV0dXJuIG1fdmlydHVh
bFJlZ2lzdGVyLm9mZnNldCgpOworICAgICAgICB9CisKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCht
X3ZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOworICAgICAgICAgICAgcmV0dXJuIG1fdmlydHVh
bFJlZ2lzdGVyOwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBpc1RlbXBvcmFyeSgpCkBAIC0x
MDAsNyArMTE4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKIAogICAgICAgICBp
bnQgbV9yZWZDb3VudDsKLSAgICAgICAgaW50IG1faW5kZXg7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBtX3ZpcnR1YWxSZWdpc3RlcjsKICAgICAgICAgYm9vbCBtX2lzVGVtcG9yYXJ5OwogI2lm
bmRlZiBOREVCVUcKICAgICAgICAgYm9vbCBtX2RpZFNldEluZGV4OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCShy
ZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIEpTT2JqZWN0
KiBEZWJ1Z2dlckNhbGxGcmFtZTo6dGhpc09iamVjdCgKICAgICBpZiAoIWNvZGVCbG9jaykKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IG1fY2FsbEZyYW1lLT51
bmNoZWNrZWRSKGNvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IG1fY2FsbEZyYW1lLT51bmNoZWNrZWRSKGNvZGVCbG9jay0+dGhpc1Jl
Z2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVj
dCgpKQogICAgICAgICByZXR1cm4gMDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyAr
MTEzLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKICAgICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkKLSAgICAgICAgICAgICwg
bV92YWx1ZShzdGF0aWNfY2FzdDxpbnQ+KG9wZXJhbmQpKQorICAgICAgICAgICAgLCBtX3ZhbHVl
KG9wZXJhbmQub2Zmc2V0KCkpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICBjYXNlIEdldEFyZ3VtZW50OiB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9y
bSA9PSBTU0EpOwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9z
dGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkub2Zmc2V0KCkpOwogICAgICAgICBBU1NFUlQodmFsdWUuaXNIZWFwVG9wKCkpOwog
ICAgICAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgICAgICB2YWx1ZS5maWx0
ZXIodHlwZUZpbHRlckZvcih1c2VLaW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkpOwpA
QCAtMTUyLDggKzE1Miw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6IHsKLSAg
ICAgICAgaWYgKCFvcGVyYW5kSXNBcmd1bWVudChub2RlLT51bmxpbmtlZExvY2FsKCkpCi0gICAg
ICAgICAgICAmJiBtX2dyYXBoLm1fbGF6eVZhcnMuZ2V0KG9wZXJhbmRUb0xvY2FsKG5vZGUtPnVu
bGlua2VkTG9jYWwoKSkpKSB7CisgICAgICAgIGlmICghKG5vZGUtPnVubGlua2VkTG9jYWwoKS5p
c0FyZ3VtZW50KCkpCisgICAgICAgICAgICAmJiBtX2dyYXBoLm1fbGF6eVZhcnMuZ2V0KG5vZGUt
PnVubGlua2VkTG9jYWwoKS50b0xvY2FsKCkpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzIGtp
bmQgb2YgcGVzc2ltaXN0aWMgLSB3ZSBjb3VsZCBrbm93IGluIHNvbWUgY2FzZXMgdGhhdCB0aGUK
ICAgICAgICAgICAgIC8vIERGRyBjb2RlIGF0IHRoZSBwb2ludCBvZiB0aGUgT1NSIGhhZCBhbHJl
YWR5IGluaXRpYWxpemVkIHRoZSBsYXp5CiAgICAgICAgICAgICAvLyB2YXJpYWJsZS4gQnV0IG1h
eWJlIHRoaXMgaXMgZmluZSwgc2luY2Ugd2UncmUgaW5zZXJ0aW5nIE9TUgpAQCAtMTcxLDcgKzE3
MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
ICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5v
cGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFs
dWUgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRh
LT5sb2NhbCgpLm9mZnNldCgpKTsKICAgICAgICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlz
Q2FwdHVyZWQoKSkgewogICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwpAQCAtMTgzLDcgKzE4Myw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgR2V0TG9jYWxVbmxpbmtlZDogewotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0g
bV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CisgICAg
ICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRMb2NhbCgpLm9mZnNldCgpKTsKICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkp
CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICBm
b3JOb2RlKG5vZGUpID0gdmFsdWU7CkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRM
b2NhbDogewotICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMo
KS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkub2Zmc2V0KCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0xMTMzLDcgKzExMzMsNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBDaGVj
a0FyZ3VtZW50c05vdENyZWF0ZWQ6CiAgICAgICAgIGlmIChpc0VtcHR5U3BlY3VsYXRpb24oCiAg
ICAgICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAotICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5t
X3R5cGUpKQorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9y
KG5vZGUtPmNvZGVPcmlnaW4pLm9mZnNldCgpKS5tX3R5cGUpKQogICAgICAgICAgICAgbV9zdGF0
ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKQEAgLTE2MDcsMTMgKzE2MDcsMTMgQEAgdm9pZCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IG1fY29kZUJsb2NrLT5tX251bVZhcnM7IGktLTspIHsKLSAg
ICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChsb2NhbFRvT3BlcmFuZChpKSkp
CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQodmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwoaSkpKQogICAgICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkubG9jYWwo
aSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkg
PSBtX3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9mQXJndW1lbnRzKCk7IGktLTspIHsKLSAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKGFyZ3VtZW50VG9PcGVyYW5kKGkpKSkKKyAg
ICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGkpKSkKICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkuYXJndW1lbnQoaSkubWFr
ZUhlYXBUb3AoKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50UG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExOCwxNSArMTE4LDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVzW2ldLT5maW5kKCk7Ci0gICAgICAg
ICAgICBpbnQgb3BlcmFuZCA9IHZhcmlhYmxlLT5vcGVyYW5kKCk7CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlLT5sb2NhbCgpOwogCiAgICAgICAgICAgICBp
ZiAoaSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAiKTsKIAotICAgICAgICAgICAgaWYg
KG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgICAgIG91dC5wcmludCgi
YXJnIiwgb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcCgqZ3JhcGgsIHZhcmlhYmxlKSwgIikiKTsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlz
QXJndW1lbnQoKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoImFyZyIsIG9wZXJhbmQudG9B
cmd1bWVudCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKmdyYXBoLCB2YXJpYWJsZSks
ICIpIik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb3V0LnByaW50KCJyIiwg
b3BlcmFuZCwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCpncmFwaCwgdmFyaWFibGUpLCAi
KSIpOworICAgICAgICAgICAgICAgIG91dC5wcmludCgiciIsIG9wZXJhbmQudG9Mb2NhbCgpLCAi
KCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKmdyYXBoLCB2YXJpYWJsZSksICIpIik7CiAgICAg
ICAgIH0KICAgICAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTg4LDcgKzE4OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2Fs
OiB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNvdXJjZSA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0KKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0KICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChzb3VyY2UtPm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzICYmIHNv
dXJjZS0+b3AoKSAhPSBQaGFudG9tQXJndW1lbnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgc291cmNlIG9mIHRoZSBTZXRMb2NhbCBrbm93cyB0aGF0
IGlmIGl0J3MKQEAgLTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIW1faXNMaXZlLmNvbnRhaW5zKHZhcmlhYmxlQWNjZXNzRGF0YSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0
ZXIuaXNWYWxpZCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bG9jYWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyICE9IElu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1Jl
Z2lzdGVyLmlzVmFsaWQoKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bG9jYWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSB1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IHNvdXJjZS0+Y29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCkBAIC02MTksNyArNjE5LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS0+Y2hpbGRyZW47
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0
VG9HZXRMb2NhbFVubGlua2VkKAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPigKKyAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
cigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFyZ3VtZW50SW5kZXhB
ZnRlckNhcHR1cmUoaW5kZXgpKSk7CiAKQEAgLTcxMSw4ICs3MTEsOCBAQCBwcml2YXRlOgogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICAg
ICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0gbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdp
c3RlckZvcihub2RlLT5jb2RlT3JpZ2luKTsKLSAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdp
c3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyCisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pOworICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVy
LmlzVmFsaWQoKQogICAgICAgICAgICAgICAgICYmIChub2RlLT5sb2NhbCgpID09IGFyZ3VtZW50
c1JlZ2lzdGVyCiAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPmxvY2FsKCkgPT0gdW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpIHsKICAgICAgICAgICAg
ICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKTsKQEAgLTc4Myw4ICs3ODMsOCBAQCBwcml2YXRlOgogICAgICAgICBzd2l0Y2ggKHNvdXJj
ZS0+b3AoKSkgewogICAgICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IHNvdXJjZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hl
Y2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKHNvdXJjZS0+Y29kZU9yaWdpbik7Ci0gICAgICAgICAg
ICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlciA9IG1fZ3JhcGgudW5jaGVj
a2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Ioc291cmNlLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAg
IGlmICghYXJndW1lbnRzUmVnaXN0ZXIuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyID09IHZhcmlhYmxlQWNjZXNzRGF0
YS0+bG9jYWwoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTU2
MTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5o
OjE1NjEzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBc3NlbWJseUhlbHBl
cnNfaAorI2RlZmluZSBERkdBc3NlbWJseUhlbHBlcnNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkRGR0ZQUkluZm8uaCIKKyNpbmNsdWRlICJERkdHUFJJbmZvLmgiCisjaW5jbHVk
ZSAiREZHSklUQ29kZS5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJWTS5oIgor
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKwordHlwZWRlZiB2b2lkICgqVl9ERkdEZWJ1Z09wZXJhdGlvbl9FUFApKEV4ZWNTdGF0
ZSosIHZvaWQqLCB2b2lkKik7CisKK2NsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1YmxpYyBNYWNy
b0Fzc2VtYmxlciB7CitwdWJsaWM6CisgICAgQXNzZW1ibHlIZWxwZXJzKFZNKiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2spCisgICAgICAgIDogbV92bSh2bSkKKyAgICAgICAgLCBtX2NvZGVCbG9j
ayhjb2RlQmxvY2spCisgICAgICAgICwgbV9iYXNlbGluZUNvZGVCbG9jayhjb2RlQmxvY2sgPyBj
b2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpIDogMCkKKyAgICB7CisgICAgICAgIGlmIChtX2Nv
ZGVCbG9jaykgeworICAgICAgICAgICAgQVNTRVJUKG1fYmFzZWxpbmVDb2RlQmxvY2spOworICAg
ICAgICAgICAgQVNTRVJUKCFtX2Jhc2VsaW5lQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29k
ZTo6QmFzZWxpbmVKSVQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIENvZGVCbG9jayog
Y29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KKyAgICBWTSogdm0oKSB7IHJldHVy
biBtX3ZtOyB9CisgICAgQXNzZW1ibGVyVHlwZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVybiBtX2Fz
c2VtYmxlcjsgfQorICAgIAorI2lmIENQVShYODZfNjQpIHx8IENQVShYODYpCisgICAgdm9pZCBw
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSUmVnIHJlZykKKyAgICB7CisgICAgICAg
IHBvcChyZWcpOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVS
ZXR1cm4oR1BSUmVnIHJlZykKKyAgICB7CisgICAgICAgIHB1c2gocmVnKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHB1c2goYWRkcmVzcyk7CisgICAgfQorI2VuZGlmIC8vIENQVShYODZf
NjQpIHx8IENQVShYODYpCisKKyNpZiBDUFUoQVJNKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBw
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAg
ICAgICBtb3ZlKGxpbmtSZWdpc3RlciwgcmVnKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCisg
ICAgeworICAgICAgICBtb3ZlKHJlZywgbGlua1JlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzLCBsaW5rUmVnaXN0ZXIpOwor
ICAgIH0KKyNlbmRpZgorCisjaWYgQ1BVKE1JUFMpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAg
ICAgIG1vdmUocmV0dXJuQWRkcmVzc1JlZ2lzdGVyLCByZWcpOworICAgIH0KKworICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklE
IHJlZykKKyAgICB7CisgICAgICAgIG1vdmUocmVnLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOwor
ICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9y
ZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3Ms
IHJldHVybkFkZHJlc3NSZWdpc3Rlcik7CisgICAgfQorI2VuZGlmCisKKyNpZiBDUFUoU0g0KQor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVn
aXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdHNwcihyZWcpOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJl
dHVybihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkc3ByKHJl
Zyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGxvYWRQdHJMaW5r
UmVnKGFkZHJlc3MpOworICAgIH0KKyNlbmRpZgorCisgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSwgR1BSUmVn
IHRvKQorICAgIHsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgfQorICAgIHZvaWQg
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJlZyBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJFbnRyeSBlbnRyeSkKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3Rv
cmU2NChmcm9tLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNp
emVvZihSZWdpc3RlcikpKTsKKyNlbHNlCisgICAgICAgIHN0b3JlMzIoZnJvbSwgQWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Cisj
ZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRl
cih2b2lkKiB2YWx1ZSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCisgICAg
eworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgQWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hJZk5vdENlbGwoR1BSUmVnIHJlZykKKyAgICB7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgcmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworI2Vsc2UKKyAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVnLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZykpOworI2VuZGlmCisgICAgfQorICAgIAorICAgIHN0YXRpYyBBZGRy
ZXNzIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFs
UmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICB9CisgICAgc3RhdGljIEFkZHJlc3Mg
YWRkcmVzc0ZvcihpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9y
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgIH0KKworICAgIHN0
YXRpYyBBZGRyZXNzIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZp
cnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgIH0KKyAgICBzdGF0aWMgQWRkcmVz
cyB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gdGFnRm9yKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgIH0KKworICAgIHN0YXRpYyBB
ZGRyZXNzIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICB7
CisgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0
dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgfQorICAgIHN0YXRpYyBBZGRy
ZXNzIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gcGF5bG9h
ZEZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaElmTm90T2JqZWN0KEdQUlJlZyBzdHJ1Y3R1cmVSZWcpCisgICAgeworICAg
ICAgICByZXR1cm4gYnJhbmNoOChCZWxvdywgQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVy
ZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkpOworICAg
IH0KKworICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0U2NyYXRjaEdQUihHUFJSZWcgcHJlc2VydmUx
ID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMiA9IEludmFsaWRHUFJSZWcsIEdQUlJl
ZyBwcmVzZXJ2ZTMgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmU0ID0gSW52YWxpZEdQ
UlJlZykKKyAgICB7CisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDAgJiYg
cHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdU
MCAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDApCisgICAgICAgICAgICByZXR1cm4gR1BS
SW5mbzo6cmVnVDA7CisKKyAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMSAm
JiBwcmVzZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDEgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJl
Z1QxICYmIHByZXNlcnZlNCAhPSBHUFJJbmZvOjpyZWdUMSkKKyAgICAgICAgICAgIHJldHVybiBH
UFJJbmZvOjpyZWdUMTsKKworICAgICAgICBpZiAocHJlc2VydmUxICE9IEdQUkluZm86OnJlZ1Qy
ICYmIHByZXNlcnZlMiAhPSBHUFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTMgIT0gR1BSSW5mbzo6
cmVnVDIgJiYgcHJlc2VydmU0ICE9IEdQUkluZm86OnJlZ1QyKQorICAgICAgICAgICAgcmV0dXJu
IEdQUkluZm86OnJlZ1QyOworCisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVn
VDMgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QzICYmIHByZXNlcnZlMyAhPSBHUFJJbmZv
OjpyZWdUMyAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDMpCisgICAgICAgICAgICByZXR1
cm4gR1BSSW5mbzo6cmVnVDM7CisKKyAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1Q0OworICAg
IH0KKworICAgIC8vIEFkZCBhIGRlYnVnIGNhbGwuIFRoaXMgY2FsbCBoYXMgbm8gZWZmZWN0IG9u
IEpJVCBjb2RlIGV4ZWN1dGlvbiBzdGF0ZS4KKyAgICB2b2lkIGRlYnVnQ2FsbChWX0RGR0RlYnVn
T3BlcmF0aW9uX0VQUCBmdW5jdGlvbiwgdm9pZCogYXJndW1lbnQpCisgICAgeworICAgICAgICBz
aXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKEdQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOworICAgICAgICBT
Y3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV92bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUo
c2NyYXRjaFNpemUpOworICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nh
c3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpOworCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsg
KytpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6
dG9SZWdpc3RlcihpKSwgYnVmZmVyICsgaSk7CisjZWxzZQorICAgICAgICAgICAgc3RvcmUzMihH
UFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBidWZmZXIgKyBpKTsKKyNlbmRpZgorICAgICAgICB9CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihidWZmZXIgKyBHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAg
ICBzdG9yZURvdWJsZShGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBUZWxsIEdDIG1hcmsgcGhhc2UgaG93IG11Y2ggb2YgdGhl
IHNjcmF0Y2ggYnVmZmVyIGlzIGFjdGl2ZSBkdXJpbmcgY2FsbC4KKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHNjcmF0Y2hTaXplKSwgR1BSSW5m
bzo6cmVnVDApOworCisjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTSkgfHwgQ1BVKE1JUFMpIHx8
IENQVShTSDQpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihidWZmZXIpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYXJndW1lbnQpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHNl
bGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisjZWxpZiBDUFUoWDg2KQorICAgICAgICBwb2tl
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAwKTsKKyAgICAgICAgcG9rZShUcnVzdGVkSW1t
UHRyKGFyZ3VtZW50KSwgMSk7CisgICAgICAgIHBva2UoVHJ1c3RlZEltbVB0cihidWZmZXIpLCAy
KTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMDsKKyNlbHNlCisjZXJy
b3IgIkRGRyBKSVQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKKyNlbmRpZgorICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb24p
KSwgc2NyYXRjaCk7CisgICAgICAgIGNhbGwoc2NyYXRjaCk7CisKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBHUFJJbmZvOjpyZWdUMCk7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihidWZmZXIgKyBH
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICBsb2FkRG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7ICsraSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBs
b2FkNjQoYnVmZmVyICsgaSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisjZWxzZQorICAgICAg
ICAgICAgbG9hZDMyKGJ1ZmZlciArIGksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworI2VuZGlm
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5lcmF0ZSBk
eW5hbWljLCBkZWJ1Zy1vbmx5IGNoZWNrcyAtIGFraW4gdG8gQVNTRVJUcy4KKyNpZiBERkdfRU5B
QkxFKEpJVF9BU1NFUlQpCisgICAgdm9pZCBqaXRBc3NlcnRJc0ludDMyKEdQUlJlZyk7CisgICAg
dm9pZCBqaXRBc3NlcnRJc0pTSW50MzIoR1BSUmVnKTsKKyAgICB2b2lkIGppdEFzc2VydElzSlNO
dW1iZXIoR1BSUmVnKTsKKyAgICB2b2lkIGppdEFzc2VydElzSlNEb3VibGUoR1BSUmVnKTsKKyAg
ICB2b2lkIGppdEFzc2VydElzQ2VsbChHUFJSZWcpOworICAgIHZvaWQgaml0QXNzZXJ0SGFzVmFs
aWRDYWxsRnJhbWUoKTsKKyNlbHNlCisgICAgdm9pZCBqaXRBc3NlcnRJc0ludDMyKEdQUlJlZykg
eyB9CisgICAgdm9pZCBqaXRBc3NlcnRJc0pTSW50MzIoR1BSUmVnKSB7IH0KKyAgICB2b2lkIGpp
dEFzc2VydElzSlNOdW1iZXIoR1BSUmVnKSB7IH0KKyAgICB2b2lkIGppdEFzc2VydElzSlNEb3Vi
bGUoR1BSUmVnKSB7IH0KKyAgICB2b2lkIGppdEFzc2VydElzQ2VsbChHUFJSZWcpIHsgfQorICAg
IHZvaWQgaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKSB7IH0KKyNlbmRpZgorCisgICAgLy8g
VGhlc2UgbWV0aG9kcyBjb252ZXJ0IGJldHdlZW4gZG91YmxlcywgYW5kIGRvdWJsZXMgYm94ZWQg
YW5kIEpTVmFsdWVzLgorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgR1BSUmVnIGJveERvdWJsZShG
UFJSZWcgZnByLCBHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAgbW92ZURvdWJsZVRvNjQoZnBy
LCBncHIpOworICAgICAgICBzdWI2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdw
cik7CisgICAgICAgIGppdEFzc2VydElzSlNEb3VibGUoZ3ByKTsKKyAgICAgICAgcmV0dXJuIGdw
cjsKKyAgICB9CisgICAgRlBSUmVnIHVuYm94RG91YmxlKEdQUlJlZyBncHIsIEZQUlJlZyBmcHIp
CisgICAgeworICAgICAgICBqaXRBc3NlcnRJc0pTRG91YmxlKGdwcik7CisgICAgICAgIGFkZDY0
KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKKyAgICAgICAgbW92ZTY0VG9E
b3VibGUoZ3ByLCBmcHIpOworICAgICAgICByZXR1cm4gZnByOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGJveEludDUyKEdQUlJlZyBzb3VyY2UsIEdQUlJlZyB0YXJnZXQsIEdQUlJlZyBzY3JhdGNo
LCBGUFJSZWcgZnBTY3JhdGNoKQorICAgIHsKKyAgICAgICAgLy8gSXMgaXQgYW4gaW50MzI/Cisg
ICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNvdXJjZSwgc2NyYXRjaCk7CisgICAgICAgIEp1bXAg
aXNJbnQzMiA9IGJyYW5jaDY0KEVxdWFsLCBzb3VyY2UsIHNjcmF0Y2gpOworICAgICAgICAKKyAg
ICAgICAgLy8gTm9wZSwgaXQncyBub3QsIGJ1dCByZWdUMCBjb250YWlucyB0aGUgaW50NjQgdmFs
dWUuCisgICAgICAgIGNvbnZlcnRJbnQ2NFRvRG91YmxlKHNvdXJjZSwgZnBTY3JhdGNoKTsKKyAg
ICAgICAgYm94RG91YmxlKGZwU2NyYXRjaCwgdGFyZ2V0KTsKKyAgICAgICAgSnVtcCBkb25lID0g
anVtcCgpOworICAgICAgICAKKyAgICAgICAgaXNJbnQzMi5saW5rKHRoaXMpOworICAgICAgICB6
ZXJvRXh0ZW5kMzJUb1B0cihzb3VyY2UsIHRhcmdldCk7CisgICAgICAgIG9yNjQoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YXJnZXQpOworICAgICAgICAKKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgIH0KKyNlbmRpZgorCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICB2
b2lkIGJveERvdWJsZShGUFJSZWcgZnByLCBHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQ
UikKKyAgICB7CisgICAgICAgIG1vdmVEb3VibGVUb0ludHMoZnByLCBwYXlsb2FkR1BSLCB0YWdH
UFIpOworICAgIH0KKyAgICB2b2lkIHVuYm94RG91YmxlKEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBw
YXlsb2FkR1BSLCBGUFJSZWcgZnByLCBGUFJSZWcgc2NyYXRjaEZQUikKKyAgICB7CisgICAgICAg
IG1vdmVJbnRzVG9Eb3VibGUocGF5bG9hZEdQUiwgdGFnR1BSLCBmcHIsIHNjcmF0Y2hGUFIpOwor
ICAgIH0KKyNlbmRpZgorICAgIAorICAgIGVudW0gRXhjZXB0aW9uQ2hlY2tLaW5kIHsgTm9ybWFs
RXhjZXB0aW9uQ2hlY2ssIEludmVydGVkRXhjZXB0aW9uQ2hlY2sgfTsKKyAgICBKdW1wIGVtaXRF
eGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNo
ZWNrKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHJldHVybiBicmFuY2hUZXN0NjQo
a2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFk
ZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgcmV0dXJuIGJyYW5jaDMyKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBO
b3RFcXVhbCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
dm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworI2Vu
ZGlmCisgICAgfQorCisjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQorICAgIHN0YXRpYyB2
b2lkIGVtaXRDb3VudChNYWNyb0Fzc2VtYmxlciYgaml0LCBBYnN0cmFjdFNhbXBsaW5nQ291bnRl
ciYgY291bnRlciwgaW50MzJfdCBpbmNyZW1lbnQgPSAxKQorICAgIHsKKyAgICAgICAgaml0LmFk
ZDY0KFRydXN0ZWRJbW0zMihpbmNyZW1lbnQpLCBBYnNvbHV0ZUFkZHJlc3MoY291bnRlci5hZGRy
ZXNzT2ZDb3VudGVyKCkpKTsKKyAgICB9CisgICAgdm9pZCBlbWl0Q291bnQoQWJzdHJhY3RTYW1w
bGluZ0NvdW50ZXImIGNvdW50ZXIsIGludDMyX3QgaW5jcmVtZW50ID0gMSkKKyAgICB7CisgICAg
ICAgIGFkZDY0KFRydXN0ZWRJbW0zMihpbmNyZW1lbnQpLCBBYnNvbHV0ZUFkZHJlc3MoY291bnRl
ci5hZGRyZXNzT2ZDb3VudGVyKCkpKTsKKyAgICB9CisjZW5kaWYKKworI2lmIEVOQUJMRShTQU1Q
TElOR19GTEFHUykKKyAgICB2b2lkIHNldFNhbXBsaW5nRmxhZyhpbnQzMl90KTsKKyAgICB2b2lk
IGNsZWFyU2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZyk7CisjZW5kaWYKKworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3RGb3IoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbik7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgc3RyaWN0TW9kZUZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
CisgICAgeworICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAg
ICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKTsKKyAgICAgICAgcmV0dXJu
IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
ZXhlY3V0YWJsZS5nZXQoKSktPmlzU3RyaWN0TW9kZSgpOworICAgIH0KKyAgICAKKyAgICBFeGVj
dXRhYmxlQmFzZSogZXhlY3V0YWJsZUZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKTsK
KyAgICAKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvbnN0IENvZGVPcmln
aW4mIGNvZGVPcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tG
b3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9j
aygpKTsKKyAgICB9CisgICAgCisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcihJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrKCk7Cisg
ICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVD
YWxsRnJhbWUpOworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Jhc2VsaW5lQ29kZUJsb2NrOworICAgIH0KKyAg
ICAKKyAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXJGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUpCisgICAgeworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKKyAgICAgICAg
ICAgIHJldHVybiBjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZSgKKyAgICAg
ICAgICAgIGlubGluZUNhbGxGcmFtZSktPmFyZ3VtZW50c1JlZ2lzdGVyKCkgKyBpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBpbnQgYXJndW1lbnRzUmVnaXN0
ZXJGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVy
biBhcmd1bWVudHNSZWdpc3RlckZvcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAg
fQorICAgIAorICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZUZvcihjb25zdCBDb2Rl
T3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJs
b2NrRm9yKGNvZGVPcmlnaW4pLT5zeW1ib2xUYWJsZSgpOworICAgIH0KKworICAgIGludCBvZmZz
ZXRPZkxvY2Fscyhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAg
aWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICog
c2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBpbnQgb2Zmc2V0T2ZBcmd1bWVudHNJbmNs
dWRpbmdUaGlzKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAgeworICAgICAgICBp
ZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIENhbGxG
cmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApICogc2l6ZW9mKFJlZ2lzdGVyKTsK
KyAgICAgICAgcmV0dXJuIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSkgKiBzaXplb2YoUmVn
aXN0ZXIpOworICAgIH0KKworICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBk
ZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBWTSog
bV92bTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIENvZGVCbG9jayogbV9iYXNl
bGluZUNvZGVCbG9jazsKKworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgVmVjdG9yPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldD4gPiBtX2RlY29kZWRDb2RlTWFwczsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHQXNzZW1ibHlIZWxwZXJzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUs
MzEgKzE1NSwzNCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAgCisgICAgc3RhdGljIEFk
ZHJlc3MgYWRkcmVzc0ZvcihpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCAqIHNpemVvZihSZWdpc3Rlcikp
OworICAgIH0KKwogICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpKTsK
KyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpKTsKICAg
ICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCkKKworICAgIHN0
YXRpYyBBZGRyZXNzIHRhZ0ZvcihpbnQgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
ZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAg
IHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy50YWcpKTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0
ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KTsKKyAgICAgICAgcmV0dXJuIHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOwogICAg
IH0KLSAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoaW50IG9wZXJhbmQpCisKKyAgICBzdGF0aWMg
QWRkcmVzcyBwYXlsb2FkRm9yKGludCBvZmZzZXQpCiAgICAgewotICAgICAgICByZXR1cm4gdGFn
Rm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICByZXR1
cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICogc2l6ZW9mKFJl
Z2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
cGF5bG9hZCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVn
aXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSk7Ci0gICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoaW50IG9wZXJh
bmQpCi0gICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuIHBheWxvYWRGb3IodmlydHVhbFJl
Z2lzdGVyLm9mZnNldCgpKTsKICAgICB9CiAKICAgICBKdW1wIGJyYW5jaElmTm90T2JqZWN0KEdQ
UlJlZyBzdHJ1Y3R1cmVSZWcpCkBAIC0zODEsNyArMzg0LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9iYXNlbGluZUNvZGVCbG9jazsKICAgICB9CiAgICAgCi0gICAgaW50IGFyZ3VtZW50
c1JlZ2lzdGVyRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlckZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSkKICAgICB7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAg
ICAgcmV0dXJuIGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpOwpAQCAtMzkwLDcgKzM5
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSktPmFyZ3VtZW50c1Jl
Z2lzdGVyKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwogICAgIH0KICAgICAKLSAg
ICBpbnQgYXJndW1lbnRzUmVnaXN0ZXJGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXJGb3IoY29uc3QgQ29kZU9yaWdp
biYgY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIHJldHVybiBhcmd1bWVudHNSZWdpc3RlckZv
cihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1NjM2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTEsMzcgKzE5MSwzNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbGlu
a0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMp
OwogICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxv
Y2tzLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwogICAgIAotICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKGludCBvcGVyYW5kLCBib29s
IGlzQ2FwdHVyZWQpCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIGJvb2wgaXNDYXB0dXJlZCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChvcGVyYW5kIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAg
ICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIG1fZ3Jh
cGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKFZhcmlhYmxlQWNjZXNzRGF0YShzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLCBpc0NhcHR1cmVkKSk7CisgICAgICAgIG1f
Z3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuYXBwZW5kKFZhcmlhYmxlQWNjZXNzRGF0YShvcGVy
YW5kLCBpc0NhcHR1cmVkKSk7CiAgICAgICAgIHJldHVybiAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNj
ZXNzRGF0YS5sYXN0KCk7CiAgICAgfQogICAgIAogICAgIC8vIEdldC9TZXQgdGhlIG9wZXJhbmRz
L3Jlc3VsdCBvZiBhIGJ5dGVjb2RlIGluc3RydWN0aW9uLgotICAgIE5vZGUqIGdldERpcmVjdChp
bnQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CiAgICAgewogICAgICAgICAvLyBJcyB0aGlzIGEgY29uc3RhbnQ/Ci0gICAgICAgIGlmIChvcGVy
YW5kID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBjb25zdGFudCA9IG9wZXJhbmQgLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKKyAgICAg
ICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjb25z
dGFudCA9IG9wZXJhbmQudG9Db25zdGFudEluZGV4KCk7CiAgICAgICAgICAgICBBU1NFUlQoY29u
c3RhbnQgPCBtX2NvbnN0YW50cy5zaXplKCkpOwogICAgICAgICAgICAgcmV0dXJuIGdldEpTQ29u
c3RhbnQoY29uc3RhbnQpOwogICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJUKG9wZXJhbmQgIT0g
SlNTdGFjazo6Q2FsbGVlKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQub2Zmc2V0KCkgIT0gSlNT
dGFjazo6Q2FsbGVlKTsKICAgICAgICAgCiAgICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/
Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgaWYgKG9w
ZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50KG9wZXJh
bmQpOwogCiAgICAgICAgIC8vIE11c3QgYmUgYSBsb2NhbC4KICAgICAgICAgcmV0dXJuIGdldExv
Y2FsKG9wZXJhbmQpOwogICAgIH0KIAotICAgIE5vZGUqIGdldChpbnQgb3BlcmFuZCkKKyAgICBO
b2RlKiBnZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3Bl
cmFuZCA9PSBKU1N0YWNrOjpDYWxsZWUpIHsKKyAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkg
PT0gSlNTdGFjazo6Q2FsbGVlKSB7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkg
JiYgaW5saW5lQ2FsbEZyYW1lKCktPmNhbGxlZSkKICAgICAgICAgICAgICAgICByZXR1cm4gY2Vs
bENvbnN0YW50KGlubGluZUNhbGxGcmFtZSgpLT5jYWxsZWUuZ2V0KCkpOwogICAgICAgICAgICAg
CkBAIC0yMzAsMTIgKzIzMCwxMiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgcmV0dXJu
IGdldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCkpOwogICAg
IH0KLQorICAgIAogICAgIGVudW0gU2V0TW9kZSB7IE5vcm1hbFNldCwgU2V0T25FbnRyeSB9Owot
ICAgIHZvaWQgc2V0RGlyZWN0KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRN
b2RlID0gTm9ybWFsU2V0KQorICAgIHZvaWQgc2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKICAg
ICAgICAgLy8gSXMgdGhpcyBhbiBhcmd1bWVudD8KLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3Vt
ZW50KG9wZXJhbmQpKSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkgewogICAg
ICAgICAgICAgc2V0QXJndW1lbnQob3BlcmFuZCwgdmFsdWUsIHNldE1vZGUpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNDQsNyArMjQ0LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgc2V0TG9jYWwob3BlcmFuZCwgdmFsdWUsIHNldE1vZGUpOwogICAgIH0KIAotICAgIHZvaWQg
c2V0KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0
KQorICAgIHZvaWQgc2V0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0
TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKICAgICAgICAgc2V0RGlyZWN0KG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSwgdmFsdWUsIHNldE1vZGUpOwogICAg
IH0KQEAgLTI2NCw5ICsyNjQsOSBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIC8vIFVzZWQgaW4g
aW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2Fs
IHZhcmlhYmxlLgotICAgIE5vZGUqIGdldExvY2FsKGludCBvcGVyYW5kKQorICAgIE5vZGUqIGdl
dExvY2FsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQg
bG9jYWwgPSBvcGVyYW5kVG9Mb2NhbChvcGVyYW5kKTsKKyAgICAgICAgdW5zaWduZWQgbG9jYWwg
PSBvcGVyYW5kLnRvTG9jYWwoKTsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpOwogICAgICAgICBib29sIGlzQ2FwdHVyZWQg
PSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBpbmxpbmVDYWxsRnJhbWUoKSk7CiAg
ICAgICAgIApAQCAtMzAyLDkgKzMwMiw5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2Rl
OwogICAgIH0KIAotICAgIHZvaWQgc2V0TG9jYWwoaW50IG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBT
ZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgdm9pZCBzZXRMb2NhbChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkK
ICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZFRvTG9jYWwob3BlcmFuZCk7
CisgICAgICAgIHVuc2lnbmVkIGxvY2FsID0gb3BlcmFuZC50b0xvY2FsKCk7CiAgICAgICAgIGJv
b2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQsIGlubGluZUNh
bGxGcmFtZSgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzZXRNb2RlID09IE5vcm1hbFNldCkg
ewpAQCAtMzIzLDkgKzMyMyw5IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgLy8gVXNlZCBpbiBp
bXBsZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGFuIGFyZ3Vt
ZW50LgotICAgIE5vZGUqIGdldEFyZ3VtZW50KHVuc2lnbmVkIG9wZXJhbmQpCisgICAgTm9kZSog
Z2V0QXJndW1lbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICB1bnNp
Z25lZCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOworICAgICAgICB1bnNp
Z25lZCBhcmd1bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOwogICAgICAgICBBU1NFUlQoYXJn
dW1lbnQgPCBtX251bUFyZ3VtZW50cyk7CiAgICAgICAgIAogICAgICAgICBOb2RlKiBub2RlID0g
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7CkBAIC0z
NTIsOSArMzUyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsK
ICAgICB9Ci0gICAgdm9pZCBzZXRBcmd1bWVudChpbnQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNl
dE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKyAgICB2b2lkIHNldEFyZ3VtZW50KFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0
KQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChv
cGVyYW5kKTsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kLnRvQXJndW1lbnQo
KTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogICAgICAgICAK
ICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFu
ZCk7CkBAIC0zODUsMjggKzM4NSwyOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc3RhY2st
Pm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRdOwogICAgIH0KICAgICAKLSAgICBBcmd1bWVu
dFBvc2l0aW9uKiBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKGludCBvcGVyYW5kKQorICAg
IEFyZ3VtZW50UG9zaXRpb24qIGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICBmb3IgKElubGluZVN0YWNrRW50cnkqIHN0
YWNrID0gbV9pbmxpbmVTdGFja1RvcDsgOyBzdGFjayA9IHN0YWNrLT5tX2NhbGxlcikgewogICAg
ICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBzdGFjay0+bV9pbmxp
bmVDYWxsRnJhbWU7CiAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChvcGVyYW5kIDw9IHN0YXRpY19jYXN0PGlu
dD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
clNpemUpKQorICAgICAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPD0gc3RhdGljX2Nhc3Q8
aW50PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAob3Bl
cmFuZCA9PSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJn
dW1lbnRPZmZzZXQoKSkKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLm9mZnNldCgpID09IGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG9wZXJhbmQgPiBz
dGF0aWNfY2FzdDxpbnQ+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJTaXplICsgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSkK
KyAgICAgICAgICAgIGlmIChvcGVyYW5kLm9mZnNldCgpID4gc3RhdGljX2Nhc3Q8aW50Pihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAr
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVy
YW5kIC0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7CisgICAgICAgICAgICBpbnQgYXJn
dW1lbnQgPSBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZzZXQoKSAtIGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQpLnRvQXJndW1lbnQoKTsKICAgICAgICAgICAgIHJldHVybiBzdGFjay0+
bV9hcmd1bWVudFBvc2l0aW9uc1thcmd1bWVudF07CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIAotICAgIEFyZ3VtZW50UG9zaXRpb24qIGZpbmRBcmd1bWVudFBvc2l0
aW9uKGludCBvcGVyYW5kKQorICAgIEFyZ3VtZW50UG9zaXRpb24qIGZpbmRBcmd1bWVudFBvc2l0
aW9uKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJ
c0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJuIGZpbmRBcmd1bWVudFBvc2l0
aW9uRm9yQXJndW1lbnQob3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkpOworICAgICAgICBpZiAo
b3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9z
aXRpb25Gb3JBcmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7CiAgICAgICAgIHJldHVybiBm
aW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQpOwogICAgIH0KIApAQCAtNDIyLDI0
ICs0MjIsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHZhbHVlKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBmbHVzaChpbnQgb3BlcmFuZCkKKyAgICB2b2lkIGZsdXNoKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgZmx1c2hEaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKG9wZXJhbmQpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmbHVzaERpcmVj
dChpbnQgb3BlcmFuZCkKKyAgICB2b2lkIGZsdXNoRGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgZmluZEFyZ3VtZW50UG9z
aXRpb24ob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZsdXNoRGlyZWN0KGludCBv
cGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHZvaWQgZmx1
c2hEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3Vt
ZW50UG9zaXRpb24pCiAgICAgewogICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9j
ay0+aXNDYXB0dXJlZChvcGVyYW5kLCBpbmxpbmVDYWxsRnJhbWUoKSk7CiAgICAgICAgIAotICAg
ICAgICBBU1NFUlQob3BlcmFuZCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAg
ICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAo
IW9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJz
LnNldChvcGVyYW5kVG9Mb2NhbChvcGVyYW5kKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzTG9j
YWwoKSkKKyAgICAgICAgICAgIG1fcHJlc2VydmVkVmFycy5zZXQob3BlcmFuZC50b0xvY2FsKCkp
OwogICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCkBAIC00NjUsMTEgKzQ2NSwxMSBA
QCBwcml2YXRlOgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxp
bmVTdGFja0VudHJ5LT5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGFyZ3VtZW50ID0gbnVtQXJndW1lbnRzOyBhcmd1bWVudC0tID4gMTspCi0gICAg
ICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVTdGFja0VudHJ5LT5yZW1hcE9wZXJhbmQoYXJndW1l
bnRUb09wZXJhbmQoYXJndW1lbnQpKSk7CisgICAgICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVT
dGFja0VudHJ5LT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnQpKSk7CiAgICAgICAgIGZvciAoaW50IGxvY2FsID0gMDsgbG9jYWwgPCBpbmxpbmVTdGFja0Vu
dHJ5LT5tX2NvZGVCbG9jay0+bV9udW1WYXJzOyArK2xvY2FsKSB7Ci0gICAgICAgICAgICBpZiAo
IWlubGluZVN0YWNrRW50cnktPm1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKGxvY2FsVG9PcGVyYW5k
KGxvY2FsKSkpCisgICAgICAgICAgICBpZiAoIWlubGluZVN0YWNrRW50cnktPm1fY29kZUJsb2Nr
LT5pc0NhcHR1cmVkKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGxvY2FsKSkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVTdGFja0VudHJ5
LT5yZW1hcE9wZXJhbmQobG9jYWxUb09wZXJhbmQobG9jYWwpKSk7CisgICAgICAgICAgICBmbHVz
aERpcmVjdChpbmxpbmVTdGFja0VudHJ5LT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwobG9jYWwpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ4Nyw3ICs0ODcsNyBAQCBw
cml2YXRlOgogICAgIC8vIEdldCBhbiBvcGVyYW5kLCBhbmQgcGVyZm9ybSBhIFRvSW50MzIvVG9O
dW1iZXIgY29udmVyc2lvbiBvbiBpdC4KICAgICBOb2RlKiBnZXRUb0ludDMyKGludCBvcGVyYW5k
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSW50MzIoZ2V0KG9wZXJhbmQpKTsKKyAgICAgICAg
cmV0dXJuIHRvSW50MzIoZ2V0KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSkpOwogICAgIH0KIAog
ICAgIC8vIFBlcmZvcm0gYW4gRVM1IFRvSW50MzIgb3BlcmF0aW9uIC0gcmV0dXJucyBhIG5vZGUg
b2YgdHlwZSBOb2RlUmVzdWx0SW50MzIuCkBAIC01NDksNiArNTQ5LDcgQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgICAgIHJldHVybiBnZXQobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnRo
aXNSZWdpc3RlcigpKTsKICAgICB9CisKICAgICB2b2lkIHNldFRoaXMoTm9kZSogdmFsdWUpCiAg
ICAgewogICAgICAgICBzZXQobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnRoaXNSZWdp
c3RlcigpLCB2YWx1ZSk7CkBAIC03NzAsNyArNzcxLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAg
IAotICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCkpOworICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7CiAgICAgICAgIGludCBhcmdDb3VudCA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgIGlmIChKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplICsgKHVuc2lnbmVkKWFyZ0NvdW50ID4gbV9wYXJhbWV0ZXJTbG90cykK
ICAgICAgICAgICAgIG1fcGFyYW1ldGVyU2xvdHMgPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJT
aXplICsgYXJnQ291bnQ7CkBAIC03NzgsMTAgKzc3OSwxMCBAQCBwcml2YXRlOgogICAgICAgICBp
bnQgcmVnaXN0ZXJPZmZzZXQgPSAtY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKICAg
ICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gb3AgPT0gQ2FsbCA/IDAgOiAxOwogICAgICAg
ICBmb3IgKGludCBpID0gMCArIGR1bW15VGhpc0FyZ3VtZW50OyBpIDwgYXJnQ291bnQ7ICsraSkK
LSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50
VG9PcGVyYW5kKGkpKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAKICAgICAgICAgTm9kZSog
Y2FsbCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBvcCwgT3BJbmZvKDApLCBPcEluZm8ocHJl
ZGljdGlvbikpOwotICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
Y2FsbCk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCksIGNhbGwpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAgCkBA
IC0xMDk1LDIwICsxMDk2LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2J5dGVDb2RlUGFy
c2VyLT5tX2lubGluZVN0YWNrVG9wID0gbV9jYWxsZXI7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGludCByZW1hcE9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAg
ICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhbmQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChvcGVy
YW5kID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSB7Ci0gICAgICAgICAgICAgICAgaW50
IHJlc3VsdCA9IG1fY29uc3RhbnRSZW1hcFtvcGVyYW5kIC0gRmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXhdOwotICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPj0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXgpOworICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKSB7Cisg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IFZpcnR1YWxSZWdpc3Rlciht
X2NvbnN0YW50UmVtYXBbb3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKV0pOworICAgICAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQuaXNDb25zdGFudCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBBU1NFUlQob3BlcmFuZCAhPSBK
U1N0YWNrOjpDYWxsZWUpOworICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQub2Zmc2V0KCkgIT0g
SlNTdGFjazo6Q2FsbGVlKTsKIAotICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQgKyBtX2lubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQub2Zmc2V0KCkgKyBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOwog
ICAgICAgICB9CiAgICAgfTsKICAgICAKQEAgLTExNDEsNyArMTE0Miw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW5zdHJ1Y3QKIHsKICAgICBBU1NFUlQoT1BDT0RFX0xFTkdU
SChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdCkpOwogICAgIAotICAgIE5v
ZGUqIGNhbGxUYXJnZXQgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Cisg
ICAgTm9kZSogY2FsbFRhcmdldCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCkpOwogICAgIAogICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3Rh
dHVzOwogCkBAIC0xMjEzLDcgKzEyMTQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVu
Y3Rpb25DaGVja3MoCiB7CiAgICAgTm9kZSogdGhpc0FyZ3VtZW50OwogICAgIGlmIChraW5kID09
IENvZGVGb3JDYWxsKQotICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQocmVnaXN0ZXJPZmZzZXQg
KyBhcmd1bWVudFRvT3BlcmFuZCgwKSk7CisgICAgICAgIHRoaXNBcmd1bWVudCA9IGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwogICAgIGVsc2UKICAg
ICAgICAgdGhpc0FyZ3VtZW50ID0gMDsKIApAQCAtMTIzOCw3ICsxMjM5LDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1p
dEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBmb3IgKGlu
dCBpID0ga2luZCA9PSBDb2RlRm9yQ2FsbCA/IDAgOiAxOyBpIDwgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXM7ICsraSkKLSAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQocmVnaXN0ZXJP
ZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZChpKSkpOworICAgICAgICBhZGRUb0dyYXBoKFBoYW50
b20sIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpLCByZWdpc3Rlck9mZnNldCkpKTsK
IH0KIAogYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdl
dE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtT
dGF0dXMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkBAIC0x
MjkyLDE0ICsxMjkzLDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5v
ZGUKICAgICAKICAgICAvLyBGSVhNRTogRG9uJ3QgZmx1c2ggY29uc3RhbnRzIQogICAgIAotICAg
IGludCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChyZWdpc3Rlck9mZnNldCkgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgIGlu
dCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS5vZmZzZXQoKSArIEpTU3RhY2s6OkNhbGxG
cmFtZUhlYWRlclNpemU7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFyZWEgdXNl
ZCBieSB0aGUgY2FsbCBmcmFtZSBpcyByZXNlcnZlZC4KLSAgICBmb3IgKGludCBhcmcgPSBvcGVy
YW5kVG9Mb2NhbChpbmxpbmVDYWxsRnJhbWVTdGFydCkgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFk
ZXJTaXplICsgY29kZUJsb2NrLT5tX251bVZhcnM7IGFyZy0tID4gb3BlcmFuZFRvTG9jYWwoaW5s
aW5lQ2FsbEZyYW1lU3RhcnQpOykKKyAgICBmb3IgKGludCBhcmcgPSBWaXJ0dWFsUmVnaXN0ZXIo
aW5saW5lQ2FsbEZyYW1lU3RhcnQpLnRvTG9jYWwoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
clNpemUgKyBjb2RlQmxvY2stPm1fbnVtVmFyczsgYXJnLS0gPiBWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lU3RhcnQpLnRvTG9jYWwoKTspCiAgICAgICAgIG1fcHJlc2VydmVkVmFycy5z
ZXQoYXJnKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBsb2Nh
bHMuCi0gICAgdW5zaWduZWQgbmV3TnVtTG9jYWxzID0gb3BlcmFuZFRvTG9jYWwoaW5saW5lQ2Fs
bEZyYW1lU3RhcnQpICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGNvZGVCbG9jay0+
bV9udW1DYWxsZWVSZWdpc3RlcnM7CisgICAgdW5zaWduZWQgbmV3TnVtTG9jYWxzID0gVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZVN0YXJ0KS50b0xvY2FsKCkgKyBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplICsgY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKICAgICBp
ZiAobmV3TnVtTG9jYWxzID4gbV9udW1Mb2NhbHMpIHsKICAgICAgICAgbV9udW1Mb2NhbHMgPSBu
ZXdOdW1Mb2NhbHM7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytpKQpAQCAtMTMxMCw3ICsxMzExLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcoTm9kZQogCiAgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0Vu
dHJ5KAogICAgICAgICB0aGlzLCBjb2RlQmxvY2ssIGNvZGVCbG9jaywgbV9ncmFwaC5sYXN0Qmxv
Y2soKSwgY2FsbExpbmtTdGF0dXMuZnVuY3Rpb24oKSwKLSAgICAgICAgKFZpcnR1YWxSZWdpc3Rl
ciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0T3BlcmFuZCksCisgICAgICAg
IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3Bl
cmFuZCkpLAogICAgICAgICAoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0LCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCk7CiAgICAgCiAgICAgLy8gVGhpcyBpcyB3
aGVyZSB0aGUgYWN0dWFsIGlubGluaW5nIHJlYWxseSBoYXBwZW5zLgpAQCAtMTQyNywxOSArMTQy
OCwxOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBlIG9w
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKIHsK
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeyAvLyBNYXRoLm1pbigp
Ci0gICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBjb25zdGFudE5hTigpKTsKKyAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgY29uc3RhbnROYU4oKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID09IDIpIHsgLy8gTWF0aC5taW4oeCkKLSAgICAgICAgTm9kZSogcmVzdWx0ID0gZ2V0
KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpOworICAgICAgICBOb2RlKiBy
ZXN1bHQgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEs
IHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIEVkZ2UocmVz
dWx0LCBOdW1iZXJVc2UpKTsKLSAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIHJlc3VsdCk7Cisg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlc3VsdCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPT0gMykgeyAvLyBNYXRoLm1pbih4LCB5KQotICAgICAgICBzZXQocmVzdWx0T3Bl
cmFuZCwgYWRkVG9HcmFwaChvcCwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJh
bmQoMSkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgyKSkpKTsKKyAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChvcCwg
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTE0NTQsMTcgKzE0NTUsMTcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIHN3aXRjaCAoaW50cmluc2lj
KSB7CiAgICAgY2FzZSBBYnNJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID09IDEpIHsgLy8gTWF0aC5hYnMoKQotICAgICAgICAgICAgc2V0KHJlc3Vs
dE9wZXJhbmQsIGNvbnN0YW50TmFOKCkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRPcGVyYW5kKSwgY29uc3RhbnROYU4oKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzRmxv
YXRpbmdQb2ludEFicygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIE5v
ZGUqIG5vZGUgPSBhZGRUb0dyYXBoKEFyaXRoQWJzLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1
bWVudFRvT3BlcmFuZCgxKSkpOworICAgICAgICBOb2RlKiBub2RlID0gYWRkVG9HcmFwaChBcml0
aEFicywgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkp
OwogICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpKQogICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFn
cyhOb2RlTWF5T3ZlcmZsb3cpOwotICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgbm9kZSk7Cisg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIG5vZGUpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0NzYsMTQgKzE0NzcsMTQgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICAKICAgICBjYXNlIFNxcnRJ
bnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEp
IHsgLy8gTWF0aC5zcXJ0KCkKLSAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBjb25zdGFu
dE5hTigpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCks
IGNvbnN0YW50TmFOKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzRmxvYXRpbmdQb2lu
dFNxcnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBzZXQocmVzdWx0
T3BlcmFuZCwgYWRkVG9HcmFwaChBcml0aFNxcnQsIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3Vt
ZW50VG9PcGVyYW5kKDEpKSkpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9w
ZXJhbmQpLCBhZGRUb0dyYXBoKEFyaXRoU3FydCwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgICAgICAKQEAgLTE1MDAsOCArMTUwMSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUludHJpbnNpYyhpbnQKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNl
IEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsK
LSAgICAgICAgICAgIE5vZGUqIGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNoLCBPcElu
Zm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJP
ZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3Vt
ZW50VG9PcGVyYW5kKDEpKSk7Ci0gICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQ
dXNoKTsKKyAgICAgICAgICAgIE5vZGUqIGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNo
LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYXJyYXlQdXNoKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTE1MjMsOCArMTUyNCw4
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIE5vZGUqIGFycmF5UG9w
ID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5m
byhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkp
KTsKLSAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhcnJheVBvcCk7CisgICAgICAgICAg
ICBOb2RlKiBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9wSW5mbyhhcnJheU1vZGUu
YXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgwLCByZWdpc3Rlck9mZnNldCkpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0T3BlcmFuZCksIGFycmF5UG9wKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE1MzcsMTEgKzE1MzgsMTEgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICBpbnQgdGhpc09wZXJhbmQgPSByZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDAp
OwotICAgICAgICBpbnQgaW5kZXhPcGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRv
T3BlcmFuZCgxKTsKLSAgICAgICAgTm9kZSogY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0No
YXJDb2RlQXQsIE9wSW5mbyhBcnJheU1vZGUoQXJyYXk6OlN0cmluZykuYXNXb3JkKCkpLCBnZXQo
dGhpc09wZXJhbmQpLCBnZXRUb0ludDMyKGluZGV4T3BlcmFuZCkpOworICAgICAgICBpbnQgdGhp
c09wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCku
b2Zmc2V0KCk7CisgICAgICAgIGludCBpbmRleE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkub2Zmc2V0KCk7CisgICAgICAgIE5vZGUqIGNoYXJD
b2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29kZUF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5
OjpTdHJpbmcpLmFzV29yZCgpKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih0aGlzT3BlcmFuZCkpLCBn
ZXRUb0ludDMyKGluZGV4T3BlcmFuZCkpOwogCi0gICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBj
aGFyQ29kZSk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGNo
YXJDb2RlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNTQ5LDIxICsxNTUw
LDIxIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAgICAg
aWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgaW50IHRoaXNPcGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1
bWVudFRvT3BlcmFuZCgwKTsKLSAgICAgICAgaW50IGluZGV4T3BlcmFuZCA9IHJlZ2lzdGVyT2Zm
c2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSk7Ci0gICAgICAgIE5vZGUqIGNoYXJDb2RlID0gYWRk
VG9HcmFwaChTdHJpbmdDaGFyQXQsIE9wSW5mbyhBcnJheU1vZGUoQXJyYXk6OlN0cmluZykuYXNX
b3JkKCkpLCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMyKGluZGV4T3BlcmFuZCkpOworICAg
ICAgICBpbnQgdGhpc09wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdp
c3Rlck9mZnNldCkub2Zmc2V0KCk7CisgICAgICAgIGludCBpbmRleE9wZXJhbmQgPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkub2Zmc2V0KCk7CisgICAgICAg
IE5vZGUqIGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQXQsIE9wSW5mbyhBcnJheU1v
ZGUoQXJyYXk6OlN0cmluZykuYXNXb3JkKCkpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHRoaXNPcGVy
YW5kKSksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7CiAKLSAgICAgICAgc2V0KHJlc3VsdE9w
ZXJhbmQsIGNoYXJDb2RlKTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVy
YW5kKSwgY2hhckNvZGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBG
cm9tQ2hhckNvZGVJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaW50IGlu
ZGV4T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSk7CisgICAg
ICAgIGludCBpbmRleE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdp
c3Rlck9mZnNldCkub2Zmc2V0KCk7CiAgICAgICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9HcmFw
aChTdHJpbmdGcm9tQ2hhckNvZGUsIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7CiAKLSAgICAg
ICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRPcGVyYW5kKSwgY2hhckNvZGUpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KQEAgLTE1NzIsOCArMTU3Myw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
dHJpbnNpYyhpbnQKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBOb2RlKiByZWdF
eHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBFeGVjLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVn
aXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwotICAgICAgICBzZXQocmVzdWx0
T3BlcmFuZCwgcmVnRXhwRXhlYyk7CisgICAgICAgIE5vZGUqIHJlZ0V4cEV4ZWMgPSBhZGRUb0dy
YXBoKFJlZ0V4cEV4ZWMsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZWdFeHBFeGVjKTsKICAgICAgICAgCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE1ODIsOCArMTU4Myw4IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAg
ICAgICBOb2RlKiByZWdFeHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBUZXN0LCBPcEluZm8oMCks
IE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJh
bmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwotICAg
ICAgICBzZXQocmVzdWx0T3BlcmFuZCwgcmVnRXhwRXhlYyk7CisgICAgICAgIE5vZGUqIHJlZ0V4
cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cFRlc3QsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rp
b24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSwg
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZWdFeHBFeGVjKTsKICAg
ICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE1OTEsMTEgKzE1OTIsMTEg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIGNhc2UgSU11
bEludHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0g
MykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaW50IGxlZnRPcGVyYW5kID0g
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKTsKLSAgICAgICAgaW50IHJpZ2h0
T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMik7CisgICAgICAg
IGludCBsZWZ0T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVy
T2Zmc2V0KS5vZmZzZXQoKTsKKyAgICAgICAgaW50IHJpZ2h0T3BlcmFuZCA9IHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KS5vZmZzZXQoKTsKICAgICAgICAgTm9k
ZSogbGVmdCA9IGdldFRvSW50MzIobGVmdE9wZXJhbmQpOwogICAgICAgICBOb2RlKiByaWdodCA9
IGdldFRvSW50MzIocmlnaHRPcGVyYW5kKTsKLSAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFk
ZFRvR3JhcGgoQXJpdGhJTXVsLCBsZWZ0LCByaWdodCkpOworICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEFyaXRoSU11bCwgbGVmdCwgcmlnaHQp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKQEAgLTE2NTEsOCArMTY1
Miw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVR5cGVkQXJyYXlDb24KICAgICBpZiAo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIHNldChyZXN1bHRPcGVyYW5kLAotICAgICAgICBhZGRUb0dyYXBoKE5ld1R5cGVk
QXJyYXksIE9wSW5mbyh0eXBlKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJh
bmQoMSkpKSk7CisgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwKKyAgICAg
ICAgYWRkVG9HcmFwaChOZXdUeXBlZEFycmF5LCBPcEluZm8odHlwZSksIGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTE2NzQsMTQgKzE2NzUsMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
Q29uc3RhbnRJbnRlcgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAg
ICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpIHsKLSAgICAgICAgICAgIHNl
dChyZXN1bHRPcGVyYW5kLAotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTmV3QXJyYXlXaXRo
U2l6ZSwgT3BJbmZvKEFycmF5V2l0aFVuZGVjaWRlZCksIGdldChyZWdpc3Rlck9mZnNldCArIGFy
Z3VtZW50VG9PcGVyYW5kKDEpKSkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRPcGVyYW5kKSwKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5ld0FycmF5V2l0aFNp
emUsIE9wSW5mbyhBcnJheVdpdGhVbmRlY2lkZWQpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXM7ICsraSkKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChy
ZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKGkpKSk7Ci0gICAgICAgIHNldChyZXN1
bHRPcGVyYW5kLAorICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGksIHJlZ2lzdGVyT2Zmc2V0KSkpOworICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKHJlc3VsdE9wZXJhbmQpLAogICAgICAgICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJB
cmcsIE5ld0FycmF5LCBPcEluZm8oQXJyYXlXaXRoVW5kZWNpZGVkKSwgT3BJbmZvKDApKSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE2OTIsMTIgKzE2OTMsMTIgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgICAgICBpZiAoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPD0gMSkKICAgICAgICAgICAgIHJlc3VsdCA9IGNlbGxDb25zdGFu
dChtX3ZtLT5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHJlc3VsdCA9IGFkZFRvR3JhcGgoVG9TdHJpbmcsIGdldChyZWdpc3Rlck9mZnNldCAr
IGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CisgICAgICAgICAgICByZXN1bHQgPSBhZGRUb0dyYXBo
KFRvU3RyaW5nLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZz
ZXQpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KQog
ICAgICAgICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChOZXdTdHJpbmdPYmplY3QsIE9wSW5mbyhm
dW5jdGlvbi0+Z2xvYmFsT2JqZWN0KCktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKSwgcmVzdWx0
KTsKICAgICAgICAgCi0gICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCByZXN1bHQpOworICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1bHQpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC0xNzMzLDcgKzE3MzQsNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKICAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5k
LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBzZXQoZGVzdGlu
YXRpb25PcGVyYW5kLCBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlm
aWVyTnVtYmVyLCBvZmZzZXQpKTsKKyAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9u
T3BlcmFuZCksIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJO
dW1iZXIsIG9mZnNldCkpOwogfQogCiBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlP
ZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBOb2RlKiB2YWx1ZSkKQEAgLTE3NjAsNyArMTc2MSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgaWYgKCFnZXRCeUlkU3RhdHVzLmlzU2ltcGxlKCkKICAg
ICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1
cnJlbnRJbmRleCwgQmFkQ2FjaGUpCiAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZFdlYWtDb25zdGFudENhY2hl
KSkgewotICAgICAgICBzZXQoZGVzdGluYXRpb25PcGVyYW5kLAorICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksCiAgICAgICAgICAgICBhZGRUb0dyYXBoKAog
ICAgICAgICAgICAgICAgIGdldEJ5SWRTdGF0dXMubWFrZXNDYWxscygpID8gR2V0QnlJZEZsdXNo
IDogR2V0QnlJZCwKICAgICAgICAgICAgICAgICBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9w
SW5mbyhwcmVkaWN0aW9uKSwgYmFzZSkpOwpAQCAtMTgwMyw3ICsxODA0LDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICBpZiAoZ2V0QnlJZFN0YXR1cy5zcGVjaWZp
Y1ZhbHVlKCkpIHsKICAgICAgICAgQVNTRVJUKGdldEJ5SWRTdGF0dXMuc3BlY2lmaWNWYWx1ZSgp
LmlzQ2VsbCgpKTsKICAgICAgICAgCi0gICAgICAgIHNldChkZXN0aW5hdGlvbk9wZXJhbmQsIGNl
bGxDb25zdGFudChnZXRCeUlkU3RhdHVzLnNwZWNpZmljVmFsdWUoKS5hc0NlbGwoKSkpOworICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksIGNlbGxDb25zdGFu
dChnZXRCeUlkU3RhdHVzLnNwZWNpZmljVmFsdWUoKS5hc0NlbGwoKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIApAQCAtMTg1MCw3ICsxODUxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLnJlc2l6
ZShtX251bUFyZ3VtZW50cyk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBh
cmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKAotICAgICAg
ICAgICAgICAgIGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSwgbV9jb2RlQmxvY2stPmlzQ2Fw
dHVyZWQoYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKSk7CisgICAgICAgICAgICAgICAgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLCBtX2NvZGVCbG9jay0+aXNDYXB0dXJl
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpKTsKICAgICAgICAgICAgIHZh
cmlhYmxlLT5tZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICAg
ICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJ
bmRleCwgQmFkQ2FjaGUpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZUNoZWNrQXJyYXlI
b2lzdGluZ0ZhaWxlZCgKQEAgLTE4OTksNyArMTkwMCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9lbnRlcjoKICAgICAgICAgICAg
IC8vIEluaXRpYWxpemUgYWxsIGxvY2FscyB0byB1bmRlZmluZWQuCiAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5tX251bVZhcnM7
ICsraSkKLSAgICAgICAgICAgICAgICBzZXQobG9jYWxUb09wZXJhbmQoaSksIGNvbnN0YW50VW5k
ZWZpbmVkKCksIFNldE9uRW50cnkpOworICAgICAgICAgICAgICAgIHNldCh2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChpKSwgY29uc3RhbnRVbmRlZmluZWQoKSwgU2V0T25FbnRyeSk7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9lbnRlcik7CiAKICAgICAgICAgY2FzZSBvcF90b190aGlzOiB7
CkBAIC0xOTMyLDcgKzE5MzMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczogewogICAgICAgICAgICAgaW50
IGNhbGxlZU9wZXJhbmQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAg
ICAgICAgTm9kZSogY2FsbGVlID0gZ2V0KGNhbGxlZU9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZSogY2FsbGVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWVPcGVyYW5kKSk7CiAgICAgICAg
ICAgICBib29sIGFscmVhZHlFbWl0dGVkID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoY2FsbGVl
LT5vcCgpID09IFdlYWtKU0NvbnN0YW50KSB7CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxs
ID0gY2FsbGVlLT53ZWFrQ29uc3RhbnQoKTsKQEAgLTE5NDQsMTkgKzE5NDUsMTkgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludCwgT3BJbmZvKGZ1bmN0aW9uKSk7
CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBjYWxsZWUgaXMgc3RpbGwgbGl2ZSB1cCB0byB0
aGlzIHBvaW50LgogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGNhbGxl
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kLAorICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChOZXdPYmplY3QsIE9wSW5mbyhhbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCkpKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGFscmVhZHlFbWl0dGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWFscmVhZHlFbWl0dGVkKQotICAg
ICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLAorICAgICAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCksCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ3JlYXRlVGhpcywgT3BJbmZv
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpLCBjYWxsZWUpKTsKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2NyZWF0ZV90aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
b3BfbmV3X29iamVjdDogewotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsCisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpLAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTmV3T2JqZWN0
LAogICAgICAgICAgICAgICAgICAgICBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzNdLnUub2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpKSkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfbmV3X29iamVjdCk7CkBAIC0xOTY3LDE1ICsxOTY4LDE1IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGludCBudW1PcGVyYW5k
cyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBBcnJheUFs
bG9jYXRpb25Qcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlB
bGxvY2F0aW9uUHJvZmlsZTsKICAgICAgICAgICAgIGZvciAoaW50IG9wZXJhbmRJZHggPSBzdGFy
dE9wZXJhbmQ7IG9wZXJhbmRJZHggPiBzdGFydE9wZXJhbmQgLSBudW1PcGVyYW5kczsgLS1vcGVy
YW5kSWR4KQotICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChvcGVyYW5kSWR4KSk7
Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9H
cmFwaChOb2RlOjpWYXJBcmcsIE5ld0FycmF5LCBPcEluZm8ocHJvZmlsZS0+c2VsZWN0SW5kZXhp
bmdUeXBlKCkpLCBPcEluZm8oMCkpKTsKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChn
ZXQoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmRJZHgpKSk7CisgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKE5v
ZGU6OlZhckFyZywgTmV3QXJyYXksIE9wSW5mbyhwcm9maWxlLT5zZWxlY3RJbmRleGluZ1R5cGUo
KSksIE9wSW5mbygwKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3X2FycmF5KTsK
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZTogewogICAgICAgICAgICAgaW50IGxlbmd0aE9wZXJhbmQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJv
ZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51LmFycmF5QWxsb2NhdGlvblByb2ZpbGU7Ci0g
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFw
aChOZXdBcnJheVdpdGhTaXplLCBPcEluZm8ocHJvZmlsZS0+c2VsZWN0SW5kZXhpbmdUeXBlKCkp
LCBnZXQobGVuZ3RoT3BlcmFuZCkpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoTmV3QXJyYXlXaXRo
U2l6ZSwgT3BJbmZvKHByb2ZpbGUtPnNlbGVjdEluZGV4aW5nVHlwZSgpKSwgZ2V0KFZpcnR1YWxS
ZWdpc3RlcihsZW5ndGhPcGVyYW5kKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25l
d19hcnJheV93aXRoX3NpemUpOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE5OTcsMTIg
KzE5OTgsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2dyYXBoLm1fbmV3QXJyYXlC
dWZmZXJEYXRhLmFwcGVuZChkYXRhKTsKLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKE5ld0FycmF5QnVmZmVyLCBPcEluZm8oJm1fZ3Jh
cGgubV9uZXdBcnJheUJ1ZmZlckRhdGEubGFzdCgpKSkpOworICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChO
ZXdBcnJheUJ1ZmZlciwgT3BJbmZvKCZtX2dyYXBoLm1fbmV3QXJyYXlCdWZmZXJEYXRhLmxhc3Qo
KSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19hcnJheV9idWZmZXIpOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7Ci0gICAg
ICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChO
ZXdSZWdleHAsIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOworICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSwgYWRkVG9HcmFwaChOZXdSZWdleHAsIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3X3JlZ2V4cCk7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjAxMywxMiArMjAxNCwxMiBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBpZiAocHJvZmlsZS0+
bV9zaW5nbGV0b25WYWx1ZUlzVG9wCiAgICAgICAgICAgICAgICAgfHwgIXByb2ZpbGUtPm1fc2lu
Z2xldG9uVmFsdWUKICAgICAgICAgICAgICAgICB8fCAhcHJvZmlsZS0+bV9zaW5nbGV0b25WYWx1
ZS5pc0NlbGwoKSkKLSAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgZ2V0KEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGdldChWaXJ0dWFs
UmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHByb2ZpbGUtPm1fc2luZ2xldG9uVmFsdWUuYXNDZWxsKCktPmluaGVy
aXRzKEpTRnVuY3Rpb246OmluZm8oKSkpOwotICAgICAgICAgICAgICAgIE5vZGUqIGFjdHVhbENh
bGxlZSA9IGdldChKU1N0YWNrOjpDYWxsZWUpOworICAgICAgICAgICAgICAgIE5vZGUqIGFjdHVh
bENhbGxlZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChDaGVja0Z1bmN0aW9uLCBPcEluZm8ocHJvZmlsZS0+bV9zaW5n
bGV0b25WYWx1ZS5hc0NlbGwoKSksIGFjdHVhbENhbGxlZSk7Ci0gICAgICAgICAgICAgICAgc2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoV2Vha0pTQ29uc3Rh
bnQsIE9wSW5mbyhwcm9maWxlLT5tX3NpbmdsZXRvblZhbHVlLmFzQ2VsbCgpKSkpOworICAgICAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCksIGFkZFRvR3JhcGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhwcm9maWxlLT5tX3Npbmds
ZXRvblZhbHVlLmFzQ2VsbCgpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfZ2V0X2NhbGxlZSk7CiAgICAgICAgIH0KQEAgLTIwMjgsMjEgKzIwMjksMjEgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9w
X2JpdGFuZDogewogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldFRvSW50
MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChCaXRBbmQsIG9wMSwgb3Ay
KSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEJpdEFuZCwgb3AxLCBvcDIpKTsKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2JpdGFuZCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2Jp
dG9yOiB7CiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0VG9JbnQzMihj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHNldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEJpdE9yLCBvcDEsIG9wMikpOwor
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSwgYWRkVG9HcmFwaChCaXRPciwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2JpdG9yKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfYml0eG9yOiB7
CiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEJpdFhvciwgb3AxLCBvcDIpKTsKKyAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCksIGFkZFRvR3JhcGgoQml0WG9yLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfYml0eG9yKTsKICAgICAgICAgfQogCkBAIC0yMDU1LDcgKzIwNTYsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gb3AxOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFkZFRv
R3JhcGgoQml0UlNoaWZ0LCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0KTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIHJlc3VsdCk7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9yc2hpZnQpOwogICAgICAgICB9CiAKQEAgLTIwNjgsNyArMjA2
OSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBvcDE7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gYWRkVG9HcmFwaChCaXRMU2hpZnQsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIHNl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHQpOworICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgcmVz
dWx0KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xzaGlmdCk7CiAgICAgICAgIH0KIApA
QCAtMjA5NSw3ICsyMDk2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFkZFRvR3JhcGgoQml0VVJTaGlmdCwgb3Ax
LCBvcDIpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1ha2VTYWZlKGFkZFRvR3JhcGgoVUlu
dDMyVG9OdW1iZXIsIHJlc3VsdCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlc3VsdCk7CisgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCByZXN1bHQp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdXJzaGlmdCk7CiAgICAgICAgIH0KIApAQCAt
MjEwMyw2MiArMjEwNCw2NCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAKICAgICAgICAgY2FzZSBvcF9pbmM6IHsKICAgICAgICAgICAgIGludCBzcmNEc3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZSogb3AgPSBn
ZXQoc3JjRHN0KTsKLSAgICAgICAgICAgIHNldChzcmNEc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgo
QXJpdGhBZGQsIG9wLCBvbmUoKSkpKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmNE
c3RWaXJ0dWFsUmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICAgICAgICAg
IE5vZGUqIG9wID0gZ2V0KHNyY0RzdFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgICAgICBzZXQo
c3JjRHN0VmlydHVhbFJlZ2lzdGVyLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcCwg
b25lKCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbmMpOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBvcF9kZWM6IHsKICAgICAgICAgICAgIGludCBzcmNEc3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQoc3Jj
RHN0KTsKLSAgICAgICAgICAgIHNldChzcmNEc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhT
dWIsIG9wLCBvbmUoKSkpKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3RWaXJ0
dWFsUmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICAgICAgICAgIE5vZGUq
IG9wID0gZ2V0KHNyY0RzdFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgICAgICBzZXQoc3JjRHN0
VmlydHVhbFJlZ2lzdGVyLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBvcCwgb25lKCkp
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9kZWMpOwogICAgICAgICB9CiAKICAgICAg
ICAgLy8gPT09IEFyaXRobWV0aWMgb3BlcmF0aW9ucyA9PT0KIAogICAgICAgICBjYXNlIG9wX2Fk
ZDogewotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2Rl
KiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpKTsKICAgICAgICAgICAgIGlmIChvcDEtPmhhc051bWJlclJlc3VsdCgpICYmIG9wMi0+aGFz
TnVtYmVyUmVzdWx0KCkpCi0gICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9wMSwgb3AyKSkpOwor
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCksIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9wMSwgb3AyKSkpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dyYXBoKFZhbHVlQWRkLCBvcDEsIG9wMikpKTsK
KyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpLCBtYWtlU2FmZShhZGRUb0dyYXBoKFZhbHVlQWRkLCBvcDEsIG9wMikpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2FkZCk7CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIG9wX3N1YjogewotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wMSwgb3Ay
KSkpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKyAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCksIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wMSwgb3AyKSkpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3Bfc3ViKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbmVn
YXRlOiB7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE5lZ2F0ZSwgb3AxKSkpOworICAgICAgICAg
ICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoTmVnYXRlLCBv
cDEpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZWdhdGUpOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBvcF9tdWw6IHsKICAgICAgICAgICAgIC8vIE11bHRpcGx5IHJlcXVpcmVz
IHRoYXQgdGhlIGlucHV0cyBhcmUgbm90IHRydW5jYXRlZCwgdW5mb3J0dW5hdGVseS4KLSAgICAg
ICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKTsKLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBt
YWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoTXVsLCBvcDEsIG9wMikpKTsKKyAgICAgICAgICAgIE5v
ZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCkpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBtYWtlU2FmZShhZGRUb0dy
YXBoKEFyaXRoTXVsLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX211
bCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX21vZDogewotICAgICAgICAgICAgTm9k
ZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFk
ZFRvR3JhcGgoQXJpdGhNb2QsIG9wMSwgb3AyKSkpOworICAgICAgICAgICAgTm9kZSogb3AxID0g
Z2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Cisg
ICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhN
b2QsIG9wMSwgb3AyKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbW9kKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZGl2OiB7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBn
ZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlKiBv
cDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBz
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZURpdlNhZmUoYWRkVG9HcmFw
aChBcml0aERpdiwgb3AxLCBvcDIpKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wMiA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgbWFrZURpdlNhZmUoYWRkVG9HcmFwaChBcml0aERpdiwg
b3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9kaXYpOwogICAgICAgICB9
CiAKQEAgLTIxNzAsNjcgKzIxNzMsNjcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZGVidWcpOwogI2VuZGlmCiAg
ICAgICAgIGNhc2Ugb3BfbW92OiB7Ci0gICAgICAgICAgICBOb2RlKiBvcCA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kLCBvcCk7CisgICAgICAgICAgICBOb2RlKiBvcCA9IGdldChWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwg
b3ApOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbW92KTsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNlOgotICAgICAgICAgICAgYWRkVG9HcmFwaChD
aGVja0hhc0luc3RhbmNlLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwor
ICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0hhc0luc3RhbmNlLCBnZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9jaGVja19oYXNfaW5zdGFuY2UpOwogCiAgICAgICAgIGNhc2Ugb3BfaW5zdGFu
Y2VvZjogewotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlKiBwcm90b3R5cGUgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChJbnN0YW5jZU9mLCB2YWx1ZSwgcHJvdG90
eXBlKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZSogcHJvdG90
eXBlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEluc3RhbmNlT2YsIHZhbHVlLCBwcm90b3R5cGUpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luc3RhbmNlb2YpOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6IHsKLSAgICAgICAgICAgIE5v
ZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSXNV
bmRlZmluZWQsIHZhbHVlKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRk
VG9HcmFwaChJc1VuZGVmaW5lZCwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2lzX3VuZGVmaW5lZCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2lzX2Jvb2xlYW46
IHsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQsIGFkZFRvR3JhcGgoSXNCb29sZWFuLCB2YWx1ZSkpOworICAgICAgICAgICAgTm9kZSogdmFs
dWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
KTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCksIGFkZFRvR3JhcGgoSXNCb29sZWFuLCB2YWx1ZSkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfaXNfYm9vbGVhbik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X2lzX251bWJlcjogewotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChJc051bWJlciwgdmFsdWUpKTsKKyAgICAgICAgICAg
IE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKElzTnVtYmVyLCB2YWx1ZSkpOwogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfbnVtYmVyKTsKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2Ugb3BfaXNfc3RyaW5nOiB7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHNldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKElzU3RyaW5nLCB2YWx1ZSkpOworICAg
ICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoSXNTdHJpbmcsIHZhbHVl
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pc19zdHJpbmcpOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBvcF9pc19vYmplY3Q6IHsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSXNPYmplY3QsIHZhbHVl
KSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChJc09iamVj
dCwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX29iamVjdCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIG9wX2lzX2Z1bmN0aW9uOiB7Ci0gICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKElzRnVu
Y3Rpb24sIHZhbHVlKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9H
cmFwaChJc0Z1bmN0aW9uLCB2YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaXNf
ZnVuY3Rpb24pOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9ub3Q6IHsKLSAgICAgICAg
ICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3Jh
cGgoTG9naWNhbE5vdCwgdmFsdWUpKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
LCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIHZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9ub3QpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF90b19w
cmltaXRpdmU6IHsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoVG9QcmltaXRpdmUsIHZhbHVlKSk7CisgICAgICAgICAg
ICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChUb1ByaW1pdGl2ZSwgdmFsdWUpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX3ByaW1pdGl2ZSk7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtMjI0Niw3ICsyMjQ5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogI2VuZGlmCiAgICAgICAgICAgICBhdXRvIHRvU3RyaW5nTm9kZXMg
PSBzdGQ6Om1ha2VfdW5pcXVlPE5vZGUqW10+KG51bU9wZXJhbmRzKTsKICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbnVtT3BlcmFuZHM7IGkrKykKLSAgICAgICAgICAgICAgICB0b1N0
cmluZ05vZGVzW2ldID0gYWRkVG9HcmFwaChUb1N0cmluZywgZ2V0KHN0YXJ0T3BlcmFuZCAtIGkp
KTsKKyAgICAgICAgICAgICAgICB0b1N0cmluZ05vZGVzW2ldID0gYWRkVG9HcmFwaChUb1N0cmlu
ZywgZ2V0KFZpcnR1YWxSZWdpc3RlcihzdGFydE9wZXJhbmQgLSBpKSkpOwogCiAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bU9wZXJhbmRzOyBpKyspCiAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQaGFudG9tLCB0b1N0cmluZ05vZGVzW2ldKTsKQEAgLTIyNjcsMTQxICsyMjcw
LDE0MSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICAgICAgQVNTRVJUKGluZGV4SW5PcGVyYW5kcyA8IG1heFJvcGVBcmd1bWVudHMpOwogICAg
ICAgICAgICAgICAgIG9wZXJhbmRzW2luZGV4SW5PcGVyYW5kcysrXSA9IHRvU3RyaW5nTm9kZXNb
b3BlcmFuZElkeF07CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChNYWtlUm9wZSwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSkpOwogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3Bfc3RyY2F0KTsKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2Ugb3BfbGVzczogewotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAg
ICAgICBOb2RlKiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGlmIChjYW5Gb2xkKG9wMSkgJiYgY2FuRm9sZChv
cDIpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhID0gdmFsdWVPZkpTQ29uc3RhbnQob3Ax
KTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGIgPSB2YWx1ZU9mSlNDb25zdGFudChvcDIpOwog
ICAgICAgICAgICAgICAgIGlmIChhLmlzTnVtYmVyKCkgJiYgYi5pc051bWJlcigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLAorICAg
ICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SlNDb25zdGFudEZvclZh
bHVlKGpzQm9vbGVhbihhLmFzTnVtYmVyKCkgPCBiLmFzTnVtYmVyKCkpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xlc3MpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCBhZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMikpOworICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFw
aChDb21wYXJlTGVzcywgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xl
c3MpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9sZXNzZXE6IHsKLSAgICAgICAgICAg
IE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CiAgICAgICAgICAg
ICBpZiAoY2FuRm9sZChvcDEpICYmIGNhbkZvbGQob3AyKSkgewogICAgICAgICAgICAgICAgIEpT
VmFsdWUgYSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBiID0gdmFsdWVPZkpTQ29uc3RhbnQob3AyKTsKICAgICAgICAgICAgICAgICBpZiAoYS5pc051
bWJlcigpICYmIGIuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBzZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwKKyAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldEpTQ29uc3RhbnRGb3JWYWx1ZShqc0Jvb2xlYW4oYS5hc051bWJlcigp
IDw9IGIuYXNOdW1iZXIoKSkpKTsKICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
bGVzc2VxKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBz
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJlTGVz
c0VxLCBvcDEsIG9wMikpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEs
IG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbGVzc2VxKTsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2Ugb3BfZ3JlYXRlcjogewotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZSogb3Ay
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKSk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGlmIChjYW5Gb2xkKG9w
MSkgJiYgY2FuRm9sZChvcDIpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhID0gdmFsdWVP
ZkpTQ29uc3RhbnQob3AxKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGIgPSB2YWx1ZU9mSlND
b25zdGFudChvcDIpOwogICAgICAgICAgICAgICAgIGlmIChhLmlzTnVtYmVyKCkgJiYgYi5pc051
bWJlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLAorICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2V0
SlNDb25zdGFudEZvclZhbHVlKGpzQm9vbGVhbihhLmFzTnVtYmVyKCkgPiBiLmFzTnVtYmVyKCkp
KSk7CiAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dyZWF0ZXIpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyLCBvcDEsIG9wMikp
OworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSwgYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlciwgb3AxLCBvcDIpKTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2dyZWF0ZXIpOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9ncmVhdGVyZXE6IHsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAg
ICAgICAgICAgTm9kZSogb3AyID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBpZiAoY2FuRm9sZChvcDEpICYmIGNhbkZv
bGQob3AyKSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWUgYSA9IHZhbHVlT2ZKU0NvbnN0YW50
KG9wMSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBiID0gdmFsdWVPZkpTQ29uc3RhbnQob3Ay
KTsKICAgICAgICAgICAgICAgICBpZiAoYS5pc051bWJlcigpICYmIGIuaXNOdW1iZXIoKSkgewot
ICAgICAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwK
KyAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGdldEpTQ29uc3RhbnRG
b3JWYWx1ZShqc0Jvb2xlYW4oYS5hc051bWJlcigpID49IGIuYXNOdW1iZXIoKSkpKTsKICAgICAg
ICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ3JlYXRlcmVxKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMikpOworICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSwgYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMikpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfZ3JlYXRlcmVxKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
b3BfZXE6IHsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAg
Tm9kZSogb3AyID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKSk7CiAgICAgICAgICAgICBpZiAoY2FuRm9sZChvcDEpICYmIGNhbkZvbGQob3AyKSkg
ewogICAgICAgICAgICAgICAgIEpTVmFsdWUgYSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMSk7CiAg
ICAgICAgICAgICAgICAgSlNWYWx1ZSBiID0gdmFsdWVPZkpTQ29uc3RhbnQob3AyKTsKLSAgICAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwKKyAgICAgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpLAogICAgICAgICAgICAgICAgICAgICBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoanNCb29sZWFu
KEpTVmFsdWU6OmVxdWFsKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
LCBhLCBiKSkpKTsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lcSk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
YWRkVG9HcmFwaChDb21wYXJlRXEsIG9wMSwgb3AyKSk7CisgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKENv
bXBhcmVFcSwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VxKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZXFfbnVsbDogewotICAgICAgICAgICAgTm9kZSog
dmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJl
RXFDb25zdGFudCwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKSk7CisgICAgICAgICAgICBOb2RlKiB2
YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChDb21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGNvbnN0
YW50TnVsbCgpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lcV9udWxsKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6IHsKLSAgICAgICAgICAgIE5vZGUqIG9w
MSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5v
ZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBpZiAoY2Fu
Rm9sZChvcDEpICYmIGNhbkZvbGQob3AyKSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWUgYSA9
IHZhbHVlT2ZKU0NvbnN0YW50KG9wMSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBiID0gdmFs
dWVPZkpTQ29uc3RhbnQob3AyKTsKLSAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAogICAgICAgICAgICAgICAgICAgICBnZXRK
U0NvbnN0YW50Rm9yVmFsdWUoanNCb29sZWFuKEpTVmFsdWU6OnN0cmljdEVxdWFsKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBhLCBiKSkpKTsKICAgICAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9zdHJpY3RlcSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoaXNDb25zdGFudEZvckNvbXBhcmVTdHJpY3RFcShvcDEpKQotICAgICAgICAgICAgICAg
IHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENvbXBhcmVT
dHJpY3RFcUNvbnN0YW50LCBvcDIsIG9wMSkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoQ29t
cGFyZVN0cmljdEVxQ29uc3RhbnQsIG9wMiwgb3AxKSk7CiAgICAgICAgICAgICBlbHNlIGlmIChp
c0NvbnN0YW50Rm9yQ29tcGFyZVN0cmljdEVxKG9wMikpCi0gICAgICAgICAgICAgICAgc2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ29tcGFyZVN0cmljdEVx
Q29uc3RhbnQsIG9wMSwgb3AyKSk7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChDb21wYXJlU3Ry
aWN0RXFDb25zdGFudCwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21w
YXJlU3RyaWN0RXEsIG9wMSwgb3AyKSk7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChDb21wYXJl
U3RyaWN0RXEsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdHJpY3Rl
cSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX25lcTogewotICAgICAgICAgICAgTm9k
ZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGlm
IChjYW5Gb2xkKG9wMSkgJiYgY2FuRm9sZChvcDIpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBhID0gdmFsdWVPZkpTQ29uc3RhbnQob3AxKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGIg
PSB2YWx1ZU9mSlNDb25zdGFudChvcDIpOwotICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLAorICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksCiAgICAgICAgICAgICAgICAgICAg
IGdldEpTQ29uc3RhbnRGb3JWYWx1ZShqc0Jvb2xlYW4oIUpTVmFsdWU6OmVxdWFsKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBhLCBiKSkpKTsKICAgICAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9uZXEpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwg
YWRkVG9HcmFwaChDb21wYXJlRXEsIG9wMSwgb3AyKSkpOworICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChM
b2dpY2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVFcSwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9uZXEpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9uZXFf
bnVsbDogewotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0
YW50LCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwor
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0
YW50LCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9uZXFfbnVsbCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX25zdHJpY3RlcTogewot
ICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBvcDIg
PSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsK
ICAgICAgICAgICAgIGlmIChjYW5Gb2xkKG9wMSkgJiYgY2FuRm9sZChvcDIpKSB7CiAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBhID0gdmFsdWVPZkpTQ29uc3RhbnQob3AxKTsKICAgICAgICAgICAg
ICAgICBKU1ZhbHVlIGIgPSB2YWx1ZU9mSlNDb25zdGFudChvcDIpOwotICAgICAgICAgICAgICAg
IHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLAorICAgICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksCiAgICAg
ICAgICAgICAgICAgICAgIGdldEpTQ29uc3RhbnRGb3JWYWx1ZShqc0Jvb2xlYW4oIUpTVmFsdWU6
OnN0cmljdEVxdWFsKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBh
LCBiKSkpKTsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uc3RyaWN0ZXEpOwogICAg
ICAgICAgICAgfQpAQCAtMjQxMiw3ICsyNDE1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGludmVydGVkUmVzdWx0ID0gYWRkVG9H
cmFwaChDb21wYXJlU3RyaWN0RXFDb25zdGFudCwgb3AxLCBvcDIpOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIGludmVydGVkUmVzdWx0ID0gYWRkVG9HcmFwaChDb21wYXJlU3Ry
aWN0RXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIGludmVydGVkUmVzdWx0KSk7CisgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIGludmVydGVkUmVzdWx0KSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9uc3RyaWN0ZXEpOwogICAgICAgICB9CiAKQEAgLTI0MjEsMjIgKzI0
MjQsMjIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICBjYXNlIG9wX2dldF9ieV92YWw6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUq
IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICBOb2RlKiBiYXNlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlN
b2RlQ29uc2lkZXJpbmdTbG93UGF0aChjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2Zp
bGUsIEFycmF5OjpSZWFkKTsKLSAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHkg
PSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsK
ICAgICAgICAgICAgIE5vZGUqIGdldEJ5VmFsID0gYWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZv
KGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSwgcHJvcGVydHkp
OwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldEJ5
VmFsKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCksIGdldEJ5VmFsKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
Z2V0X2J5X3ZhbCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsK
LSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAKICAgICAgICAgICAgIEFycmF5TW9kZSBh
cnJheU1vZGUgPSBnZXRBcnJheU1vZGVDb25zaWRlcmluZ1Nsb3dQYXRoKGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51LmFycmF5UHJvZmlsZSwgQXJyYXk6OldyaXRlKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBO
b2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNl
KTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKQEAgLTI0NTIsNyArMjQ1
NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
Y2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBO
b2RlKiBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAg
ICAgICAgTm9kZSogYmFzZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9
IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBTdHJpbmdJbXBsKiB1aWQg
PSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CkBAIC0yNDcwLDggKzI0
NzMsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
IGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgogICAgICAgICBjYXNlIG9wX3B1
dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdF9vdXRfb2ZfbGluZToKICAgICAgICAgY2FzZSBvcF9w
dXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0X29mX2xpbmU6IHsKLSAgICAgICAgICAgIE5v
ZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgTm9kZSogYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVu
dGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZF07CiAgICAgICAgICAg
ICBib29sIGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51Lm9wZXJhbmQ7CiAKQEAgLTI1
NzcsNyArMjU4MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6IHsKLSAgICAg
ICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAg
ICAgICAgICAgICAgUHV0R2xvYmFsVmFyLAogICAgICAgICAgICAgICAgIE9wSW5mbyhtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFzc2VydFJlZ2lzdGVySXNJ
blRoaXNPYmplY3QoY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKSksCkBA
IC0yNTk1LDcgKzI1OTgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAKICAgICAgICAgY2FzZSBvcF9qdHJ1ZTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVs
YXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICAg
ICAgTm9kZSogY29uZGl0aW9uID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBpZiAoY2FuRm9sZChj
b25kaXRpb24pKSB7CiAgICAgICAgICAgICAgICAgVHJpU3RhdGUgc3RhdGUgPSB2YWx1ZU9mSlND
b25zdGFudChjb25kaXRpb24pLnB1cmVUb0Jvb2xlYW4oKTsKICAgICAgICAgICAgICAgICBpZiAo
c3RhdGUgPT0gVHJ1ZVRyaVN0YXRlKSB7CkBAIC0yNjE0LDcgKzI2MTcsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qZmFsc2U6
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlv
biA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkp
OwogICAgICAgICAgICAgaWYgKGNhbkZvbGQoY29uZGl0aW9uKSkgewogICAgICAgICAgICAgICAg
IFRyaVN0YXRlIHN0YXRlID0gdmFsdWVPZkpTQ29uc3RhbnQoY29uZGl0aW9uKS5wdXJlVG9Cb29s
ZWFuKCk7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09IEZhbHNlVHJpU3RhdGUpIHsKQEAg
LTI2MzMsNyArMjYzNiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKIAogICAgICAgICBjYXNlIG9wX2plcV9udWxsOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCBy
ZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBh
ZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpOwogICAg
ICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0
aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qZXFf
bnVsbCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfamVxX251bGwp
OwpAQCAtMjY0MSw3ICsyNjQ0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3Bfam5lcV9udWxsOiB7CiAgICAgICAgICAgICB1bnNp
Z25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRp
b24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgY29uc3RhbnROdWxsKCkp
OwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCAr
IE9QQ09ERV9MRU5HVEgob3Bfam5lcV9udWxsKSksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJl
bGF0aXZlT2Zmc2V0KSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pu
ZXFfbnVsbCk7CkBAIC0yNjQ5LDggKzI2NTIsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qbGVzczogewogICAgICAgICAgICAg
dW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBv
cDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
KTsKICAgICAgICAgICAgIGlmIChjYW5Gb2xkKG9wMSkgJiYgY2FuRm9sZChvcDIpKSB7CiAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSBhVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChvcDEpOwogICAg
ICAgICAgICAgICAgIEpTVmFsdWUgYlZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQob3AyKTsKQEAg
LTI2NzUsOCArMjY3OCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKIAogICAgICAgICBjYXNlIG9wX2psZXNzZXE6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJl
bGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAg
ICAgICBpZiAoY2FuRm9sZChvcDEpICYmIGNhbkZvbGQob3AyKSkgewogICAgICAgICAgICAgICAg
IEpTVmFsdWUgYVZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQob3AxKTsKICAgICAgICAgICAgICAg
ICBKU1ZhbHVlIGJWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMik7CkBAIC0yNzAxLDggKzI3
MDQsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAg
ICAgY2FzZSBvcF9qZ3JlYXRlcjogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZz
ZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZSog
b3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAg
Tm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAg
ICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGlmIChj
YW5Gb2xkKG9wMSkgJiYgY2FuRm9sZChvcDIpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBh
VmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChvcDEpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUg
YlZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQob3AyKTsKQEAgLTI3MjcsOCArMjczMCw4IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9w
X2pncmVhdGVyZXE6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGUqIG9w
MiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCkpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBpZiAoY2FuRm9sZChv
cDEpICYmIGNhbkZvbGQob3AyKSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWUgYVZhbHVlID0g
dmFsdWVPZkpTQ29uc3RhbnQob3AxKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGJWYWx1ZSA9
IHZhbHVlT2ZKU0NvbnN0YW50KG9wMik7CkBAIC0yNzUzLDggKzI3NTYsOCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qbmxlc3M6
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAg
ICAgICAgICAgTm9kZSogb3AyID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBpZiAoY2FuRm9sZChvcDEpICYmIGNhbkZv
bGQob3AyKSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWUgYVZhbHVlID0gdmFsdWVPZkpTQ29u
c3RhbnQob3AxKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGJWYWx1ZSA9IHZhbHVlT2ZKU0Nv
bnN0YW50KG9wMik7CkBAIC0yNzc5LDggKzI3ODIsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qbmxlc3NlcTogewogICAgICAg
ICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBO
b2RlKiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpKTsKICAgICAgICAgICAgIGlmIChjYW5Gb2xkKG9wMSkgJiYgY2FuRm9sZChvcDIpKSB7
CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChvcDEp
OwogICAgICAgICAgICAgICAgIEpTVmFsdWUgYlZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQob3Ay
KTsKQEAgLTI4MDUsOCArMjgwOCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcjogewogICAgICAgICAgICAgdW5z
aWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwot
ICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBvcDIg
PSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsK
ICAgICAgICAgICAgIGlmIChjYW5Gb2xkKG9wMSkgJiYgY2FuRm9sZChvcDIpKSB7CiAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBhVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChvcDEpOwogICAgICAg
ICAgICAgICAgIEpTVmFsdWUgYlZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQob3AyKTsKQEAgLTI4
MzEsOCArMjgzNCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
IAogICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCBy
ZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAg
ICAgICAgaWYgKGNhbkZvbGQob3AxKSAmJiBjYW5Gb2xkKG9wMikpIHsKICAgICAgICAgICAgICAg
ICBKU1ZhbHVlIGFWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMSk7CiAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSBiVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChvcDIpOwpAQCAtMjg3MCw3ICsy
ODczLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4
KGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KHRhYmxlLm1pbiArIGkpKSwgdGFyZ2V0KSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5hcHBlbmQo
ZGF0YSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1f
c3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkp
OworICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmbV9ncmFwaC5tX3N3aXRj
aERhdGEubGFzdCgpKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKSkpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX2ltbSk7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjg5MCw3ICsyODkzLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBTd2l0Y2hD
YXNlOjp3aXRoQnl0ZWNvZGVJbmRleChMYXp5SlNWYWx1ZTo6c2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KHRhYmxlLm1pbiArIGkpLCB0YXJnZXQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1f
Z3JhcGgubV9zd2l0Y2hEYXRhLmFwcGVuZChkYXRhKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgo
U3dpdGNoLCBPcEluZm8oJm1fZ3JhcGgubV9zd2l0Y2hEYXRhLmxhc3QoKSksIGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRj
aCwgT3BJbmZvKCZtX2dyYXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9zd2l0Y2hfY2hhcik7CiAgICAgICAgIH0KIApAQCAtMjkxMCwxNSArMjkxMywx
NSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICAgICAgICAgIFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVlOjprbm93
blN0cmluZ0ltcGwoaXRlci0+a2V5LmdldCgpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5hcHBlbmQoZGF0YSk7Ci0gICAgICAgICAg
ICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkp
LCBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgYWRk
VG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmbV9ncmFwaC5tX3N3aXRjaERhdGEubGFzdCgpKSwgZ2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOwogICAg
ICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX3N0cmluZyk7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX3JldDoKICAgICAgICAgICAgIGZsdXNoQXJndW1lbnRzQW5kQ2FwdHVyZWRW
YXJpYWJsZXMoKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlICE9IEludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIHNldERpcmVjdChtX2lubGluZVN0
YWNrVG9wLT5tX3JldHVyblZhbHVlLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZh
bHVlLmlzVmFsaWQoKSk7CisgICAgICAgICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tU
b3AtPm1fcmV0dXJuVmFsdWUsIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCkpKTsKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Rp
ZFJldHVybiA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1f
dW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdl
J3JlIHJldHVybmluZyBmcm9tIHRoZSBmaXJzdCBibG9jaywgdGhlbiB3ZSdyZSBkb25lIHBhcnNp
bmcuCkBAIC0yOTM5LDE3ICsyOTQyLDE3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTEFTVF9PUENP
REUob3BfcmV0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFkZFRvR3JhcGgoUmV0dXJu
LCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgYWRk
VG9HcmFwaChSZXR1cm4sIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCkpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBvcF9lbmQ6CiAgICAgICAgICAgICBmbHVzaEFyZ3VtZW50c0Fu
ZENhcHR1cmVkVmFyaWFibGVzKCk7CiAgICAgICAgICAgICBBU1NFUlQoIWlubGluZUNhbGxGcmFt
ZSgpKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoUmV0dXJuLCBnZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChSZXR1cm4sIGdldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKICAgICAg
ICAgICAgIExBU1RfT1BDT0RFKG9wX2VuZCk7CiAKICAgICAgICAgY2FzZSBvcF90aHJvdzoKLSAg
ICAgICAgICAgIGFkZFRvR3JhcGgoVGhyb3csIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFRocm93LCBnZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSk7CiAgICAgICAgICAgICBmbHVz
aEFsbEFyZ3VtZW50c0FuZENhcHR1cmVkVmFyaWFibGVzSW5JbmxpbmVTdGFjaygpOwogICAgICAg
ICAgICAgYWRkVG9HcmFwaChVbnJlYWNoYWJsZSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShv
cF90aHJvdyk7CkBAIC0yOTcwLDcgKzI5NzMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFy
Z3M6IHsKICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUoKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCA9PSBtX2lubGluZVN0YWNr
VG9wLT5tX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBBU1NF
UlQoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCA9PSBtX2lubGluZVN0YWNrVG9wLT5t
X2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CiAgICAgICAgICAgICBB
U1NFUlQoIW1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5zbG93
QXJndW1lbnRzKCkpOwogICAgICAgICAgICAgLy8gSXQgd291bGQgYmUgY29vbCB0byBmdW5uZWwg
dGhpcyBpbnRvIGhhbmRsZUNhbGwoKSBzbyB0aGF0IGl0IGNhbiBoYW5kbGUKICAgICAgICAgICAg
IC8vIGlubGluaW5nLiBCdXQgY3VycmVudGx5IHRoYXQgd29uJ3QgYmUgcHJvZml0YWJsZSBhbnl3
YXksIHNpbmNlIG5vbmUgb2YgdGhlCkBAIC0yOTg1LDEyICsyOTg4LDEyIEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGlmIChKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJTaXplICsgYXJnQ291bnQgPiBtX3BhcmFtZXRlclNsb3RzKQogICAgICAg
ICAgICAgICAgIG1fcGFyYW1ldGVyU2xvdHMgPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXpl
ICsgYXJnQ291bnQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7IC8vIGNhbGxlZQotICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsg
Ly8gdGhpcworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOyAvLyBjYWxsZWUKKyAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCkpKTsgLy8gdGhpcwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVu
dCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCi0gICAgICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoZ2V0KGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSkpOworICAgICAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChh
cmd1bWVudCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsCisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Tm9kZTo6VmFyQXJnLCBDYWxsLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSkpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3ZhcmFyZ3MpOwpAQCAt
MzAwNCw3ICszMDA3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgYWRkVG9HcmFwaCgKICAgICAgICAgICAgICAgICBDaGVja0Z1bmN0aW9u
LAogICAgICAgICAgICAgICAgIE9wSW5mbyhhY3R1YWxQb2ludGVyRm9yKG1faW5saW5lU3RhY2tU
b3AtPm1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5zcGVjaWFsUG9pbnRlcikp
LAotICAgICAgICAgICAgICAgIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7
CisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9j
dXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2puZXFfcHRyKSkpOwogICAgICAgICAgICAg
TEFTVF9PUENPREUob3Bfam5lcV9wdHIpOwogCkBAIC0zMDIyLDExICszMDI1LDExIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGNhc2UgR2xv
YmFsVmFyOgogICAgICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICAgICAgc2V0KGRzdCwgY2VsbENvbnN0YW50KG1faW5saW5lU3RhY2tUb3At
Pm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIoZHN0KSwgY2VsbENvbnN0YW50KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgICAgICBzZXQoZHN0LCBnZXRTY29wZShtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bmVlZHNBY3RpdmF0aW9uKCksIGRlcHRoKSk7CisgICAg
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBnZXRTY29wZShtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+bmVlZHNBY3RpdmF0aW9uKCksIGRlcHRoKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIER5bmFtaWM6CiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTMwNTgsMzQgKzMwNjEsMzQgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgICAg
ICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoKm1fdm0s
IHN0cnVjdHVyZSwgdWlkKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnRha2VzU2xvd1Bh
dGgoKSkgewotICAgICAgICAgICAgICAgICAgICBzZXQoZHN0LCBhZGRUb0dyYXBoKEdldEJ5SWRG
bHVzaCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChz
Y29wZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBh
ZGRUb0dyYXBoKEdldEJ5SWRGbHVzaCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8o
cHJlZGljdGlvbiksIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSkpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTm9kZSog
YmFzZSA9IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1
cy5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAg
aWYgKEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IHN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHNldChkc3QsIGNlbGxDb25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2Vs
bCgpKSk7CisgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgY2Vs
bENvbnN0YW50KHNwZWNpZmljVmFsdWUuYXNDZWxsKCkpKTsKICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHNldChkc3QsIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rp
b24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIG9wZXJhbmQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9u
LCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBvcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAg
ICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAg
ICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCkt
PmdldCh1aWQpOwogICAgICAgICAgICAgICAgIGlmICghZW50cnkuY291bGRCZVdhdGNoZWQoKSB8
fCAhbV9ncmFwaC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChlbnRyeS53YXRjaHBvaW50U2V0
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldChkc3QsIGFkZFRvR3JhcGgoR2V0R2xvYmFs
VmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhwcmVkaWN0aW9uKSkpOworICAgICAgICAgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFy
LCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhwcmVkaWN0aW9uKSkpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKEdsb2JhbFZhcldhdGNocG9pbnQsIE9wSW5mbyhvcGVyYW5kKSwgT3BJbmZvKGlkZW50aWZp
ZXJOdW1iZXIpKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBnbG9i
YWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCk7Ci0gICAgICAgICAg
ICAgICAgc2V0KGRzdCwgY2VsbENvbnN0YW50KHNwZWNpZmljVmFsdWUuYXNDZWxsKCkpKTsKKyAg
ICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGNlbGxDb25zdGFudChzcGVj
aWZpY1ZhbHVlLmFzQ2VsbCgpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgICAgICBjYXNlIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgICAgIHNldChkc3QsIAor
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwKICAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChHZXRDbG9zdXJlVmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhw
cmVkaWN0aW9uKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldENsb3N1
cmVSZWdpc3RlcnMsIGdldChzY29wZSkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKEdldENsb3N1cmVSZWdpc3RlcnMsIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSkp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRHluYW1pYzoKICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzExNiwyOSAr
MzExOSwyOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAg
ICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcigqbV92bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCwgZmFsc2UpOwogICAgICAg
ICAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBnZXQo
c2NvcGUpLCBnZXQodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRC
eUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUp
KSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxs
Q29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXMub2xkU3RydWN0
dXJlKCkpOwotICAgICAgICAgICAgICAgIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZp
ZXJOdW1iZXIsIHN0YXRpY19jYXN0PFByb3BlcnR5T2Zmc2V0PihvcGVyYW5kKSwgZ2V0KHZhbHVl
KSk7CisgICAgICAgICAgICAgICAgaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllck51
bWJlciwgc3RhdGljX2Nhc3Q8UHJvcGVydHlPZmZzZXQ+KG9wZXJhbmQpLCBnZXQoVmlydHVhbFJl
Z2lzdGVyKHZhbHVlKSkpOwogICAgICAgICAgICAgICAgIC8vIEtlZXAgc2NvcGUgYWxpdmUgdW50
aWwgYWZ0ZXIgcHV0LgotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KHNj
b3BlKSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJl
Z2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5
IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQodWlkKTsKICAgICAgICAg
ICAgICAgICBBU1NFUlQoIWVudHJ5LmNvdWxkQmVXYXRjaGVkKCkgfHwgIW1fZ3JhcGgud2F0Y2hw
b2ludHMoKS5pc1N0aWxsVmFsaWQoZW50cnkud2F0Y2hwb2ludFNldCgpKSk7Ci0gICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChQdXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgZ2V0KHZhbHVl
KSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVy
YW5kKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKICAgICAgICAgICAgICAgICAvLyBL
ZWVwIHNjb3BlIGFsaXZlIHVudGlsIGFmdGVyIHB1dC4KLSAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKFBoYW50b20sIGdldChzY29wZSkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhh
bnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAg
ICAgICBOb2RlKiBzY29wZU5vZGUgPSBnZXQoc2NvcGUpOworICAgICAgICAgICAgICAgIE5vZGUq
IHNjb3BlTm9kZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKTsKICAgICAgICAgICAgICAg
ICBOb2RlKiBzY29wZVJlZ2lzdGVycyA9IGFkZFRvR3JhcGgoR2V0Q2xvc3VyZVJlZ2lzdGVycywg
c2NvcGVOb2RlKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dENsb3N1cmVWYXIsIE9w
SW5mbyhvcGVyYW5kKSwgc2NvcGVOb2RlLCBzY29wZVJlZ2lzdGVycywgZ2V0KHZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRDbG9zdXJlVmFyLCBPcEluZm8ob3BlcmFuZCks
IHNjb3BlTm9kZSwgc2NvcGVSZWdpc3RlcnMsIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IER5bmFtaWM6CkBAIC0zMTY5LDg2ICszMTcyLDg2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
b3BfaW5pdF9sYXp5X3JlZzogewotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGdldEpTQ29uc3RhbnRGb3JWYWx1ZShKU1ZhbHVlKCkpKTsKKyAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCks
IGdldEpTQ29uc3RhbnRGb3JWYWx1ZShKU1ZhbHVlKCkpKTsKICAgICAgICAgICAgIEFTU0VSVChv
cGVyYW5kSXNMb2NhbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAgICAg
ICAgICBtX2dyYXBoLm1fbGF6eVZhcnMuc2V0KG9wZXJhbmRUb0xvY2FsKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9sYXp5VmFycy5zZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLnRvTG9jYWwo
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbml0X2xhenlfcmVnKTsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2FjdGl2YXRpb246IHsKLSAg
ICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBo
KENyZWF0ZUFjdGl2YXRpb24sIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkp
OworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSwgYWRkVG9HcmFwaChDcmVhdGVBY3RpdmF0aW9uLCBnZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSkpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfY3JlYXRlX2FjdGl2YXRpb24pOwogICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzOiB7CiAgICAgICAgICAgICBtX2dyYXBo
Lm1faGFzQXJndW1lbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIE5vZGUqIGNyZWF0ZUFyZ3VtZW50
cyA9IGFkZFRvR3JhcGgoQ3JlYXRlQXJndW1lbnRzLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCkpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIGNyZWF0ZUFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBzZXQodW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBjcmVhdGVBcmd1
bWVudHMpOworICAgICAgICAgICAgTm9kZSogY3JlYXRlQXJndW1lbnRzID0gYWRkVG9HcmFwaChD
cmVhdGVBcmd1bWVudHMsIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGNyZWF0ZUFyZ3VtZW50cyk7CisgICAgICAgICAgICBz
ZXQodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSksIGNyZWF0ZUFyZ3VtZW50cyk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9jcmVhdGVfYXJndW1lbnRzKTsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0aXZhdGlvbjogewotICAgICAgICAgICAgYWRk
VG9HcmFwaChUZWFyT2ZmQWN0aXZhdGlvbiwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoVGVhck9mZkFjdGl2YXRpb24sIGdldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX3RlYXJfb2ZmX2FjdGl2YXRpb24pOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6IHsKICAgICAgICAgICAgIG1fZ3Jh
cGgubV9oYXNBcmd1bWVudHMgPSB0cnVlOwotICAgICAgICAgICAgYWRkVG9HcmFwaChUZWFyT2Zm
QXJndW1lbnRzLCBnZXQodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKSwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
KTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoVGVhck9mZkFyZ3VtZW50cywgZ2V0KHVubW9kaWZp
ZWRBcmd1bWVudHNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCkpKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdGVhcl9vZmZfYXJndW1l
bnRzKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2FyZ3Vt
ZW50c19sZW5ndGg6IHsKICAgICAgICAgICAgIG1fZ3JhcGgubV9oYXNBcmd1bWVudHMgPSB0cnVl
OwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRv
R3JhcGgoR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlKSk7CisgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEdl
dE15QXJndW1lbnRzTGVuZ3RoU2FmZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0
X2FyZ3VtZW50c19sZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBvcF9nZXRfYXJndW1lbnRfYnlfdmFsOiB7CiAgICAgICAgICAgICBtX2dyYXBoLm1faGFzQXJn
dW1lbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLAorICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKAogICAgICAgICAg
ICAgICAgICAgICBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlLCBPcEluZm8oMCksIE9wSW5mbyhnZXRQ
cmVkaWN0aW9uKCkpLAotICAgICAgICAgICAgICAgICAgICBnZXQoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2dldF9hcmd1bWVudF9ieV92YWwpOwogICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBvcF9uZXdfZnVuYzogewogICAgICAgICAgICAgaWYgKCFjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsCisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChOZXdGdW5jdGlvbk5vQ2hlY2ssIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBz
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwKKyAgICAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAogICAgICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKAogICAgICAgICAgICAgICAgICAgICAgICAgTmV3RnVu
Y3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCksCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldChWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfZnVuYyk7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDogewotICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsCisgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAogICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoTmV3RnVuY3Rpb25FeHByZXNzaW9uLCBPcEluZm8oY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X25ld19mdW5jX2V4cCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3R5cGVvZjogewot
ICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsCi0gICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChUeXBlT2YsIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKSkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSwKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFR5cGVPZiwg
Z2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3R5cGVvZik7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX3RvX251bWJlcjogewotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChJZGVudGl0eSwgRWRn
ZShnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCksIE51bWJlclVzZSkpKTsKKyAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCksCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChJZGVudGl0eSwgRWRnZShnZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSwgTnVtYmVyVXNl
KSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdG9fbnVtYmVyKTsKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfaW46IHsKLSAgICAgICAgICAgIHNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLAotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
SW4sIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSwgZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAorICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoSW4sIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCkpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW4pOwogICAgICAgICB9CiAKQEAg
LTMzNzEsNyArMzM3NCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxp
bmUKICAgICBpZiAobV9jYWxsZXIpIHsKICAgICAgICAgLy8gSW5saW5lIGNhc2UuCiAgICAgICAg
IEFTU0VSVChjb2RlQmxvY2sgIT0gYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrKTsKLSAgICAg
ICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZVN0YXJ0ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
OworICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lU3RhcnQuaXNWYWxpZCgpKTsKICAgICAg
ICAgQVNTRVJUKGNhbGxzaXRlQmxvY2tIZWFkKTsKICAgICAgICAgCiAgICAgICAgIG1faW5saW5l
Q2FsbEZyYW1lID0gYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGgubV9pbmxpbmVDYWxsRnJhbWVzLT5h
ZGQoKTsKQEAgLTMzODIsNyArMzM4NSw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0Vu
dHJ5OjpJbmxpbmUKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLAogICAgICAgICAgICAg
Ynl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgCiAgICAgICAg
ICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKLSAgICAgICAgbV9pbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lU3RhcnQgLSBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplOworICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
PSBpbmxpbmVDYWxsRnJhbWVTdGFydC5vZmZzZXQoKSAtIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
clNpemU7CiAgICAgICAgIGlmIChjYWxsZWUpIHsKICAgICAgICAgICAgIGluaXRpYWxpemVMYXp5
V3JpdGVCYXJyaWVyRm9ySW5saW5lQ2FsbEZyYW1lQ2FsbGVlKAogICAgICAgICAgICAgICAgIGJ5
dGVDb2RlUGFyc2VyLT5tX2dyYXBoLm1fcGxhbi53cml0ZUJhcnJpZXJzLApAQCAtMzQwMCwxOSAr
MzQwMywyMCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAg
ICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzID0gbV9pbmxpbmVDYWxsRnJh
bWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFyczsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBmb3IgKGludCBpID0gYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5t
X251bVZhcnM7IGktLTspIHsKLSAgICAgICAgICAgICAgICBpZiAoYnl0ZUNvZGVQYXJzZXItPm1f
Y29kZUJsb2NrLT5pc0NhcHR1cmVkKGxvY2FsVG9PcGVyYW5kKGkpKSkKKyAgICAgICAgICAgICAg
ICBpZiAoYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGkpKSkKICAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUt
PmNhcHR1cmVkVmFycy5zZXQoaSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAg
ICBmb3IgKGludCBpID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7IGktLTspIHsKLSAgICAg
ICAgICAgIGlmIChjb2RlQmxvY2stPmlzQ2FwdHVyZWQoYXJndW1lbnRUb09wZXJhbmQoaSkpKQot
ICAgICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMuc2V0KG9wZXJh
bmRUb0xvY2FsKGFyZ3VtZW50VG9PcGVyYW5kKGkpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0KSk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnQgPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpKTsKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmlzQ2Fw
dHVyZWQoYXJndW1lbnQpKQorICAgICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0
dXJlZFZhcnMuc2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudC5vZmZzZXQoKSArIG1faW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKICAgICAgICAgfQogICAgICAgICBm
b3IgKHNpemVfdCBpID0gY29kZUJsb2NrLT5tX251bVZhcnM7IGktLTspIHsKLSAgICAgICAgICAg
IGludCBsb2NhbE9wZXJhbmQgPSBsb2NhbFRvT3BlcmFuZChpKTsKLSAgICAgICAgICAgIGlmIChj
b2RlQmxvY2stPmlzQ2FwdHVyZWQobG9jYWxPcGVyYW5kKSkKLSAgICAgICAgICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzLnNldChvcGVyYW5kVG9Mb2NhbChsb2NhbE9wZXJh
bmQgKyBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpKTsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBsb2NhbCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpOworICAgICAgICAg
ICAgaWYgKGNvZGVCbG9jay0+aXNDYXB0dXJlZChsb2NhbCkpCisgICAgICAgICAgICAgICAgbV9p
bmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5zZXQoVmlydHVhbFJlZ2lzdGVyKGxvY2FsLm9m
ZnNldCgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOwogICAg
ICAgICB9CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCkBAIC0zNDc2LDggKzM0ODAs
OCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgIC8v
IE1hY2hpbmUgY29kZSBibG9jayBjYXNlLgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrID09IGJ5
dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jayk7CiAgICAgICAgIEFTU0VSVCghY2FsbGVlKTsKLSAg
ICAgICAgQVNTRVJUKHJldHVyblZhbHVlVlIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7Ci0g
ICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWVTdGFydCA9PSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKTsKKyAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZVZSLmlzVmFsaWQoKSk7CisgICAgICAg
IEFTU0VSVCghaW5saW5lQ2FsbEZyYW1lU3RhcnQuaXNWYWxpZCgpKTsKICAgICAgICAgQVNTRVJU
KCFjYWxsc2l0ZUJsb2NrSGVhZCk7CiAKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSAwOwpA
QCAtMzYzMCw3ICszNjM0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogI2VuZGlm
CiAgICAgCiAgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KAotICAgICAgICB0
aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9maWxlZEJsb2NrLCAwLCAwLCBJbnZhbGlkVmlydHVhbFJl
Z2lzdGVyLCBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICB0aGlzLCBtX2NvZGVCbG9j
aywgbV9wcm9maWxlZEJsb2NrLCAwLCAwLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgVmlydHVhbFJlZ2lz
dGVyKCksCiAgICAgICAgIG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIENvZGVGb3JDYWxs
KTsKICAgICAKICAgICBwYXJzZUNvZGVCbG9jaygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZp
Y2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNyArMzExLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQga2VlcE9wZXJhbmRBbGl2ZShCYXNpY0Js
b2NrKiBibG9jaywgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIGludCBvcGVyYW5kKQorICAgIHZvaWQga2VlcE9wZXJhbmRBbGl2ZShCYXNpY0Jsb2Nr
KiBibG9jaywgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgTm9kZSogbGl2ZW5l
c3NOb2RlID0gamV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5k
KTsKICAgICAgICAgaWYgKCFsaXZlbmVzc05vZGUpCkBAIC0zMjYsOSArMzI2LDkgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGpldHRpc29uQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sq
IGpldHRpc29uZWRCbG9jaywgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4pCiAgICAgewog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKLSAgICAgICAgICAgIGtlZXBPcGVyYW5k
QWxpdmUoYmxvY2ssIGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBhcmd1bWVu
dFRvT3BlcmFuZChpKSk7CisgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBqZXR0
aXNvbmVkQmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbiwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaSkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkKLSAgICAgICAgICAgIGtlZXBP
cGVyYW5kQWxpdmUoYmxvY2ssIGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBs
b2NhbFRvT3BlcmFuZChpKSk7CisgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBq
ZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbiwgdmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoaSkpOwogICAgICAgICAKICAgICAgICAgZml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhibG9j
aywgamV0dGlzb25lZEJsb2NrKTsKICAgICB9CkBAIC0zODAsOSArMzgwLDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIC8vIGRpZmZlcmVudCBwYXRoIHRoYW4gc2Vjb25kQmxvY2suCiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQotICAgICAgICAgICAg
ICAgIGtlZXBPcGVyYW5kQWxpdmUoZmlyc3RCbG9jaywgamV0dGlzb25lZEJsb2NrLCBib3VuZGFy
eUNvZGVPcmlnaW4sIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsKKyAgICAgICAgICAgICAgICBrZWVw
T3BlcmFuZEFsaXZlKGZpcnN0QmxvY2ssIGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlDb2RlT3Jp
Z2luLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CiAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCk7ICsraSkKLSAgICAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGZpcnN0Qmxv
Y2ssIGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBsb2NhbFRvT3BlcmFuZChp
KSk7CisgICAgICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2ZShmaXJzdEJsb2NrLCBqZXR0aXNv
bmVkQmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbiwgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNl
Y29uZEJsb2NrLT5waGlzLnNpemUoKTsgKytpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNTYz
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsMTAgKzIxNywxMCBAQCBwcml2YXRlOgogICAgIHZv
aWQgY2Fub25pY2FsaXplR2V0TG9jYWwoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KHZhcmlhYmxlLT5sb2NhbCgpKSkKLSAgICAgICAg
ICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIG9wZXJhbmRUb0FyZ3VtZW50KHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgIGlmICh2
YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICBjYW5vbmljYWxpemVH
ZXRMb2NhbEZvcjxBcmd1bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9j
YWwoKS50b0FyZ3VtZW50KCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxp
emVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCBvcGVyYW5kVG9Mb2Nh
bCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxG
b3I8TG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2Nh
bCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVTZXRMb2NhbChOb2RlKiBu
b2RlKQpAQCAtMjg1LDE3ICsyODUsMTcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbm9uaWNhbGl6
ZUZsdXNoT3JQaGFudG9tTG9jYWwoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAg
ICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KHZhcmlhYmxlLT5sb2NhbCgpKSkKLSAgICAgICAgICAg
IGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIEFyZ3VtZW50T3Bl
cmFuZD4obm9kZSwgdmFyaWFibGUsIG9wZXJhbmRUb0FyZ3VtZW50KHZhcmlhYmxlLT5sb2NhbCgp
KSk7CisgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCisgICAgICAg
ICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBBcmd1bWVu
dE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50KCkp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxv
Y2FsRm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCBvcGVyYW5kVG9M
b2NhbCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hP
clBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgTG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwg
dmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5v
bmljYWxpemVTZXRBcmd1bWVudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaW50IGxvY2Fs
ID0gbm9kZS0+bG9jYWwoKTsKLSAgICAgICAgQVNTRVJUKG9wZXJhbmRJc0FyZ3VtZW50KGxvY2Fs
KSk7Ci0gICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KGxvY2FsKTsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgQVNT
RVJUKGxvY2FsLmlzQXJndW1lbnQoKSk7CisgICAgICAgIGludCBhcmd1bWVudCA9IGxvY2FsLnRv
QXJndW1lbnQoKTsKICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50
Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2RlKTsKICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRU
YWlsLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2RlKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lv
biAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsxOTAsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2Fw
YWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgfQogCiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6
Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSAmJiBwY1s0XS51Lm9wZXJh
bmQgPT0gY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKQorICAgICAgICBpZiAoY29kZUJs
b2NrLT51c2VzQXJndW1lbnRzKCkgJiYgcGNbNF0udS5vcGVyYW5kID09IGNvZGVCbG9jay0+YXJn
dW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSkKICAgICAgICAgICAgIHJldHVybiBDYW5JbmxpbmU7
CiAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNp
b24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NSwyMyArMzg1LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KLSAgICAKLSNpZiAhQVNT
RVJUX0RJU0FCTEVECi0gICAgYm9vbCBpc0NhcHR1cmVkQXRPckFmdGVyKEJhc2ljQmxvY2sqIGJs
b2NrLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIGludCBvcGVyYW5kKQotICAgIHsKLSAgICAgICAg
Zm9yICg7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0g
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAg
ICAgICBpZiAoIW5vZGUtPmhhc0xvY2FsKG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgIT0gb3BlcmFuZCkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNB
QkxFRAotICAgIAorCiAgICAgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCkKICAg
ICB7CiAgICAgICAgIE5vZGUqIHdlYWtDb25zdGFudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTU2MzY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIHZvaWQgc2V0Rm9yTm9kZShOb2RlKiBub2RlLCBpbnQgb3BlcmFuZCwg
Rmx1c2hGb3JtYXQgbm9kZUZvcm1hdCwgRmx1c2hGb3JtYXQgbmV3Rm9ybWF0KQorICAgIHZvaWQg
c2V0Rm9yTm9kZShOb2RlKiBub2RlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgRmx1c2hGb3Jt
YXQgbm9kZUZvcm1hdCwgRmx1c2hGb3JtYXQgbmV3Rm9ybWF0KQogICAgIHsKICAgICAgICAgRmx1
c2hGb3JtYXQmIGN1cnJlbnRGb3JtYXQgPSBtX2xpdmUub3BlcmFuZChvcGVyYW5kKTsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24g
MTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzNCwxOCArMjM0LDE4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCwgY29uc3QKICAgICBBU1NFUlQobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0
aGlzKSA9PSBub2RlLT5oYXNMb2NhbCgqdGhpcykpOwogICAgIGlmIChub2RlLT5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEoKnRoaXMpKSB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIGludCBv
cGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7Ci0gICAgICAgIGlmIChvcGVy
YW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImFy
ZyIsIG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1
bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOworICAgICAgICBpZiAo
b3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJhcmci
LCBvcGVyYW5kLnRvQXJndW1lbnQoKSwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlz
LCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJsb2MiLCBvcGVyYW5kVG9Mb2NhbChvcGVyYW5kKSwgIigiLCBWYXJp
YWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOworICAg
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgb3BlcmFuZC50b0xvY2FsKCksICIoIiwg
VmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsK
ICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc1VubGlua2VkTG9jYWwoKSkgewotICAgICAgICBpbnQg
b3BlcmFuZCA9IG5vZGUtPnVubGlua2VkTG9jYWwoKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0Fy
Z3VtZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYXJnIiwgb3Bl
cmFuZFRvQXJndW1lbnQob3BlcmFuZCkpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IG5vZGUtPnVubGlua2VkTG9jYWwoKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVu
dCgpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYXJnIiwgb3BlcmFuZC50b0FyZ3Vt
ZW50KCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2Mi
LCBvcGVyYW5kVG9Mb2NhbChvcGVyYW5kKSk7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJsb2MiLCBvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNDb25z
dGFudEJ1ZmZlcigpKSB7CiAgICAgICAgIG91dC5wcmludChjb21tYSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyOSwxNyArNDI5
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGhhc0V4aXRTaXRlKG5vZGUtPmNvZGVPcmln
aW4sIGV4aXRLaW5kKTsKICAgICB9CiAgICAgCi0gICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyRm9y
KGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3Vt
ZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgewogICAg
ICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgcmV0dXJu
IG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpOwogICAgICAgICAKLSAgICAgICAgcmV0
dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKAotICAgICAgICAgICAgY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpLT5hcmd1bWVudHNSZWdpc3RlcigpICsKLSAgICAgICAg
ICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICAgICAgcmV0
dXJuIFZpcnR1YWxSZWdpc3RlcihiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZSgK
KyAgICAgICAgICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKS0+YXJndW1lbnRzUmVnaXN0
ZXIoKS5vZmZzZXQoKSArCisgICAgICAgICAgICBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQpOwogICAgIH0KICAgICAKLSAgICBpbnQgdW5jaGVja2VkQXJndW1lbnRzUmVn
aXN0ZXJGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9y
aWdpbikKICAgICB7CiAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAg
ICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVy
KCk7CkBAIC00NDcsMTMgKzQ0NywxMyBAQCBwdWJsaWM6CiAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoCiAgICAgICAgICAg
ICBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIGlmICghY29kZUJsb2NrLT51
c2VzQXJndW1lbnRzKCkpCi0gICAgICAgICAgICByZXR1cm4gSW52YWxpZFZpcnR1YWxSZWdpc3Rl
cjsKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgCi0gICAg
ICAgIHJldHVybiBjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkgKwotICAgICAgICAgICAg
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgICAgICByZXR1cm4g
VmlydHVhbFJlZ2lzdGVyKGNvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSAr
CisgICAgICAgICAgICBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOwog
ICAgIH0KICAgICAKLSAgICBpbnQgdW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyRm9yKGNvbnN0
IENvZGVPcmlnaW4mKQorICAgIFZpcnR1YWxSZWdpc3RlciB1bmNoZWNrZWRBY3RpdmF0aW9uUmVn
aXN0ZXJGb3IoY29uc3QgQ29kZU9yaWdpbiYpCiAgICAgewogICAgICAgICAvLyBUaGlzIHdpbGwg
aWdub3JlIENvZGVPcmlnaW4gYmVjYXVzZSB3ZSBkb24ndCBpbmxpbmUgY29kZSB0aGF0IHVzZXMg
YWN0aXZhdGlvbnMuCiAgICAgICAgIC8vIEhlbmNlIGZvciBpbmxpbmVkIGNhbGwgZnJhbWVzIGl0
IHdpbGwgcmV0dXJuIHRoZSBvdXRlcm1vc3QgY29kZSBibG9jaydzCkBAIC00NzIsMTQgKzQ3Miwx
NCBAQCBwdWJsaWM6CiAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5l
Q29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAKICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gR2V0QXJndW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9j
ay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQob3BlcmFuZFRvQXJndW1lbnQobm9kZS0+bG9jYWwo
KSkpOworICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFy
Z3VtZW50KG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpKTsKICAgICAgICAgCiAgICAgICAgIGlm
IChub2RlLT5oYXNMb2NhbCgqdGhpcykpIHsKICAgICAgICAgICAgIGlmIChtX2Zvcm0gPT0gU1NB
KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaWYgKCFvcGVyYW5kSXNB
cmd1bWVudChub2RlLT5sb2NhbCgpKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+bG9jYWwoKS5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBpbnQg
YXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgICAg
IGludCBhcmd1bWVudCA9IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpOwogICAgICAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IG1fYXJndW1lbnRzW2FyZ3VtZW50XS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
ICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1l
bnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCShyZXZp
c2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgSklUQ29kZTo6cmVjb25zdHJ1
Y3QoCiAgICAgICAgIGludCBvcGVyYW5kID0gcmVzdWx0Lm9wZXJhbmRGb3JJbmRleChpKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKQotICAgICAgICAg
ICAgJiYgIW9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAmJiAhVmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKQogICAgICAgICAgICAgJiYgY29kZUJsb2Nr
LT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQogICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5z
cGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7CiAgICAgICAgICAgICAv
LyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1lbnQgbWF5
IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDcgQEAgc3RydWN0IE5vZGUgewogICAg
ICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjb2RlT3JpZ2luRm9yRXhp
dFRhcmdldChjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKGNoaWxkcmVuKQotICAgICAg
ICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICwg
bV92aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgICwgbV9yZWZDb3Vu
dCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICB7CkBAIC0xNzcsNyAr
MTc3LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikK
ICAgICAgICAgLCBjb2RlT3JpZ2luRm9yRXhpdFRhcmdldChjb2RlT3JpZ2luKQogICAgICAgICAs
IGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQot
ICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAg
ICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgICwgbV9y
ZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICB7CkBAIC0x
OTEsNyArMTkxLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9y
aWdpbikKICAgICAgICAgLCBjb2RlT3JpZ2luRm9yRXhpdFRhcmdldChjb2RlT3JpZ2luKQogICAg
ICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hp
bGQzKQotICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
CisgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAg
ICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAg
ICAgLCBtX29wSW5mbyhpbW0ubV92YWx1ZSkKQEAgLTIwNiw3ICsyMDYsNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNvZGVPcmln
aW5Gb3JFeGl0VGFyZ2V0KGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5
TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCi0gICAgICAgICwgbV92aXJ0dWFs
UmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgLCBtX3ZpcnR1YWxSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkKICAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAgICAg
ICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1
ZSkKQEAgLTIyMiw3ICsyMjIsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIDogY29kZU9yaWdp
bihjb2RlT3JpZ2luKQogICAgICAgICAsIGNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0KGNvZGVPcmln
aW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUsIGZpcnN0Q2hp
bGQsIG51bUNoaWxkcmVuKQotICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIpCisgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
KCkpCiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVj
Tm9uZSkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCkBAIC0zOTAsNyArMzkwLDcg
QEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgbV9vcCA9IEdldExvY2FsVW5saW5rZWQ7
CiAgICAgICAgIG1fZmxhZ3MgJj0gfihOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJl
ciB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKLSAgICAgICAgbV9vcEluZm8gPSBsb2NhbDsKKyAgICAg
ICAgbV9vcEluZm8gPSBsb2NhbC5vZmZzZXQoKTsKICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsK
ICAgICB9CiAgICAgCkBAIC0xMDU3LDIwICsxMDU3LDIwIEBAIHN0cnVjdCBOb2RlIHsKICAgICAK
ICAgICBib29sIGhhc1ZpcnR1YWxSZWdpc3RlcigpCiAgICAgewotICAgICAgICByZXR1cm4gbV92
aXJ0dWFsUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKKyAgICAgICAgcmV0dXJu
IG1fdmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKTsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzUmVzdWx0
KCkpOwotICAgICAgICBBU1NFUlQobV92aXJ0dWFsUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxS
ZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChtX3ZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwog
ICAgICAgICByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXI7CiAgICAgfQogICAgIAogICAgIHZvaWQg
c2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAg
ewogICAgICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotICAgICAgICBBU1NFUlQobV92aXJ0dWFs
UmVnaXN0ZXIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVCghbV92
aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgbV92aXJ0dWFsUmVnaXN0ZXIgPSB2
aXJ0dWFsUmVnaXN0ZXI7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsMzQgKzEz
OCwzNSBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgfQog
ICAgIAogICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBlbnRyeS0+bV9leHBlY3Rl
ZFZhbHVlcy5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgIGludCBsb2NhbE9m
ZnNldCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGxvY2FsKS5vZmZzZXQoKTsKICAgICAgICAg
aWYgKGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZERvdWJsZS5nZXQobG9jYWwpKSB7Ci0gICAgICAgICAg
ICBpZiAoIWV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsVG9PcGVyYW5kKGxvY2FsKV0uanNWYWx1ZSgp
LmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGlmICghZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxP
ZmZzZXRdLmpzVmFsdWUoKS5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAotICAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgIiwgbG9j
YWxUb09wZXJhbmQobG9jYWwpLCAiIGlzICIsCi0gICAgICAgICAgICAgICAgICAgICAgICBleGVj
LT5yZWdpc3RlcnMoKVtsb2NhbFRvT3BlcmFuZChsb2NhbCldLmpzVmFsdWUoKSwgIiwgZXhwZWN0
ZWQgbnVtYmVyLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiICAgIE9TUiBmYWlsZWQg
YmVjYXVzZSB2YXJpYWJsZSAiLCBsb2NhbE9mZnNldCwgIiBpcyAiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxPZmZzZXRdLmpzVmFsdWUoKSwgIiwgZXhw
ZWN0ZWQgbnVtYmVyLlxuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZE1hY2hpbmVJbnQuZ2V0KGxvY2FsKSkg
ewotICAgICAgICAgICAgaWYgKCFleGVjLT5yZWdpc3RlcnMoKVtsb2NhbFRvT3BlcmFuZChsb2Nh
bCldLmpzVmFsdWUoKS5pc01hY2hpbmVJbnQoKSkgeworICAgICAgICAgICAgaWYgKCFleGVjLT5y
ZWdpc3RlcnMoKVtsb2NhbE9mZnNldF0uanNWYWx1ZSgpLmlzTWFjaGluZUludCgpKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBPU1IgZmFpbGVkIGJl
Y2F1c2UgdmFyaWFibGUgIiwgbG9jYWxUb09wZXJhbmQobG9jYWwpLCAiIGlzICIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBleGVjLT5yZWdpc3RlcnMoKVtsb2NhbFRvT3BlcmFuZChsb2NhbCld
LmpzVmFsdWUoKSwgIiwgZXhwZWN0ZWQgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICAg
T1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICIsIGxvY2FsT2Zmc2V0LCAiIGlzICIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBleGVjLT5yZWdpc3RlcnMoKVtsb2NhbE9mZnNldF0uanNWYWx1
ZSgpLCAiLCBleHBlY3RlZCAiLAogICAgICAgICAgICAgICAgICAgICAgICAgIm1hY2hpbmUgaW50
LlxuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KCFlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCkudmFsaWRhdGUoZXhlYy0+cmVn
aXN0ZXJzKClbbG9jYWxUb09wZXJhbmQobG9jYWwpXS5qc1ZhbHVlKCkpKSB7CisgICAgICAgIGlm
ICghZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9jYWwpLnZhbGlkYXRlKGV4ZWMtPnJl
Z2lzdGVycygpW2xvY2FsT2Zmc2V0XS5qc1ZhbHVlKCkpKSB7CiAgICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAg
ICAgICAgICAgICAgIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgIiwgbG9jYWxUb09w
ZXJhbmQobG9jYWwpLCAiIGlzICIsCi0gICAgICAgICAgICAgICAgICAgIGV4ZWMtPnJlZ2lzdGVy
cygpW2xvY2FsVG9PcGVyYW5kKGxvY2FsKV0uanNWYWx1ZSgpLCAiLCBleHBlY3RlZCAiLAorICAg
ICAgICAgICAgICAgICAgICAiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAiLCBsb2Nh
bE9mZnNldCwgIiBpcyAiLAorICAgICAgICAgICAgICAgICAgICBleGVjLT5yZWdpc3RlcnMoKVts
b2NhbE9mZnNldF0uanNWYWx1ZSgpLCAiLCBleHBlY3RlZCAiLAogICAgICAgICAgICAgICAgICAg
ICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCksICIuXG4iKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTc5LDcgKzE4MCw3IEBAIHZvaWQqIHBy
ZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAvLyAgICBpdCBzZWVtcyBzaWxs
eTogeW91J2QgYmUgZGl2ZXJ0aW5nIHRoZSBwcm9ncmFtIHRvIGVycm9yIGhhbmRsaW5nIHdoZW4g
aXQKICAgICAvLyAgICB3b3VsZCBoYXZlIG90aGVyd2lzZSBqdXN0IGtlcHQgcnVubmluZyBhbGJl
aXQgbGVzcyBxdWlja2x5LgogICAgIAotICAgIGlmICghdm0tPmludGVycHJldGVyLT5zdGFjaygp
Lmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsVG9PcGVyYW5kKGNvZGVCbG9jay0+bV9udW1D
YWxsZWVSZWdpc3RlcnMpXSkpIHsKKyAgICBpZiAoIXZtLT5pbnRlcnByZXRlci0+c3RhY2soKS5n
cm93KCZleGVjLT5yZWdpc3RlcnMoKVt2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChjb2RlQmxvY2st
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKS5vZmZzZXQoKV0pKSB7CiAgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9nRigiICAgIE9TUiBmYWlsZWQgYmVj
YXVzZSBzdGFjayBncm93dGggZmFpbGVkLlxuIik7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTkx
LDkgKzE5Miw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAg
ICAvLyAzKSBQZXJmb3JtIGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zLgogICAgIGZvciAoc2l6ZV90
IGxvY2FsID0gMDsgbG9jYWwgPCBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5udW1iZXJPZkxvY2Fs
cygpOyArK2xvY2FsKSB7CiAgICAgICAgIGlmIChlbnRyeS0+bV9sb2NhbHNGb3JjZWREb3VibGUu
Z2V0KGxvY2FsKSkKLSAgICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oZXhlYy0+cmVn
aXN0ZXJzKCkgKyBsb2NhbFRvT3BlcmFuZChsb2NhbCkpID0gZXhlYy0+cmVnaXN0ZXJzKClbbG9j
YWxUb09wZXJhbmQobG9jYWwpXS5qc1ZhbHVlKCkuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgICpi
aXR3aXNlX2Nhc3Q8ZG91YmxlKj4oZXhlYy0+cmVnaXN0ZXJzKCkgKyB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChsb2NhbCkub2Zmc2V0KCkpID0gZXhlYy0+cmVnaXN0ZXJzKClbdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwobG9jYWwpLm9mZnNldCgpXS5qc1ZhbHVlKCkuYXNOdW1iZXIoKTsKICAgICAg
ICAgaWYgKGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZE1hY2hpbmVJbnQuZ2V0KGxvY2FsKSkKLSAgICAg
ICAgICAgICpiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KGV4ZWMtPnJlZ2lzdGVycygpICsgbG9jYWxU
b09wZXJhbmQobG9jYWwpKSA9IGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsVG9PcGVyYW5kKGxvY2Fs
KV0uanNWYWx1ZSgpLmFzTWFjaGluZUludCgpIDw8IEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQ7
CisgICAgICAgICAgICAqYml0d2lzZV9jYXN0PGludDY0X3QqPihleGVjLT5yZWdpc3RlcnMoKSAr
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGxvY2FsKS5vZmZzZXQoKSkgPSBleGVjLT5yZWdpc3Rl
cnMoKVt2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbCkub2Zmc2V0KCldLmpzVmFsdWUoKS5h
c01hY2hpbmVJbnQoKSA8PCBKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50OwogICAgIH0KICAgICAK
ICAgICAvLyA0KSBGaXggdGhlIGNhbGwgZnJhbWUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
cHJldmlvdXNIZWFkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBuZXdSb290LT5hcHBlbmROb2RlKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHZhcmlh
YmxlLT5wcmVkaWN0aW9uKCksIEV4dHJhY3RPU1JFbnRyeUxvY2FsLCBjb2RlT3JpZ2luLAotICAg
ICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAg
IE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgbmV3Um9v
dC0+YXBwZW5kTm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgU2V0TG9j
YWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIEVkZ2Uobm9kZSkpOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2aXNpb24gMTU2
MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0
QmFzZSB7CiAgICAgdm9pZCBjb252ZXJ0VG9Gb3J3YXJkKEJhc2ljQmxvY2sqLCBOb2RlKiwgdW5z
aWduZWQgbm9kZUluZGV4LCBjb25zdCBWYWx1ZVJlY292ZXJ5Jik7CiAKICAgICB1bnNpZ25lZCBt
X3N0cmVhbUluZGV4OwotICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworICAgIFZpcnR1YWxSZWdp
c3RlciBtX2xhc3RTZXRPcGVyYW5kOwogICAgIAogICAgIFJlZlB0cjxWYWx1ZVJlY292ZXJ5T3Zl
cnJpZGU+IG1fdmFsdWVSZWNvdmVyeU92ZXJyaWRlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZp
c2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgT1NS
RXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgY2FzZSBDZWxsRGlzcGxh
Y2VkSW5KU1N0YWNrOgogICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6IHsK
ICAgICAgICAgICAgIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycysrOwotICAgICAg
ICAgICAgQVNTRVJUKG9wZXJhbmRJc0xvY2FsKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSk7
CisgICAgICAgICAgICBBU1NFUlQocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gU2VlIGlmIHdlIG1pZ2h0IGxpa2UgdG8g
c3RvcmUgdG8gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyIGJlZm9yZSBkb2luZwogICAgICAgICAgICAg
Ly8gdmlydHVhbCByZWdpc3RlciBzaHVmZmxpbmcuIElmIHNvLCB3ZSBzYXkgdGhhdCB0aGUgdmly
dHVhbCByZWdpc3RlcgpAQCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpj
b21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGlzIGhhcHBlbnMg
ZWZmaWNpZW50bHkuIE5vdGUgdGhhdCB3ZSBleHBlY3QgdGhpcyBjYXNlCiAgICAgICAgICAgICAv
LyB0byBiZSByYXJlLCBzbyB0aGUgaGFuZGxpbmcgb2YgaXQgaXMgb3B0aW1pemVkIGZvciB0aGUg
Y2FzZXMgaW4KICAgICAgICAgICAgIC8vIHdoaWNoIGl0IGRvZXMgbm90IGhhcHBlbi4KLSAgICAg
ICAgICAgIGludCBsb2NhbCA9IG9wZXJhbmRUb0xvY2FsKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rl
cigpKTsKKyAgICAgICAgICAgIGludCBsb2NhbCA9IHJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rlcigp
LnRvTG9jYWwoKTsKICAgICAgICAgICAgIGlmIChsb2NhbCA8IChpbnQpb3BlcmFuZHMubnVtYmVy
T2ZMb2NhbHMoKSkgewogICAgICAgICAgICAgICAgIHN3aXRjaCAob3BlcmFuZHMubG9jYWwobG9j
YWwpLnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBJbkdQUjoKQEAgLTUzNSwx
NyArNTM1LDE5IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAg
ICAvLyA5KSBEdW1wIGFsbCBwb2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVycy4KICAgICAKICAgICBp
ZiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpIHsKLSAgICAgICAgZm9yIChpbnQg
dmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgKGludClvcGVyYW5kcy5udW1i
ZXJPZkxvY2FscygpOyArK3ZpcnR1YWxSZWdpc3RlcikgewotICAgICAgICAgICAgaWYgKCFwb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnNbdmlydHVhbFJlZ2lzdGVyXSkKKyAgICAgICAgZm9yIChpbnQg
bG9jYWxJbmRleCA9IDA7IGxvY2FsSW5kZXggPCAoaW50KW9wZXJhbmRzLm51bWJlck9mTG9jYWxz
KCk7ICsrbG9jYWxJbmRleCkgeworICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnNbbG9jYWxJbmRleF0pCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHMu
bG9jYWwodmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbEluZGV4KTsKKworICAg
ICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kcy5sb2NhbChs
b2NhbEluZGV4KTsKICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgSW5HUFI6CiAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMklu
R1BSOgogICAgICAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOiB7Ci0gICAgICAgICAg
ICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVm
ZmVyICsgcG9pc29uSW5kZXgodmlydHVhbFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxw
ZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpbG9jYWxUb09wZXJhbmQodmlydHVhbFJl
Z2lzdGVyKSkpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0
PGNoYXIqPihzY3JhdGNoRGF0YUJ1ZmZlciArIHBvaXNvbkluZGV4KGxvY2FsSW5kZXgpKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCksIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJl
Z1QwLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAg
ICAgICAgICAgICAgdWludDMyX3QgdGFnID0gSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZzsKICAgICAg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gSW5HUFIpCiAgICAgICAgICAg
ICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkNlbGxUYWc7CkBAIC01NTMsMTcgKzU1NSwxNyBAQCB2
b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAgICAg
ICAgIHRhZyA9IEpTVmFsdWU6OkludDMyVGFnOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6Qm9vbGVhblRhZzsKLSAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHRhZyksIEFzc2Vt
Ymx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpbG9jYWxUb09wZXJhbmQodmlydHVh
bFJlZ2lzdGVyKSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIodGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IodmlydHVhbFJl
Z2lzdGVyKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGNhc2UgSW5GUFI6CiAgICAgICAgICAgICBjYXNlIEluUGFpcjoKICAgICAgICAgICAg
IGNhc2UgVUludDMySW5HUFI6Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVyICsgcG9pc29uSW5kZXgodmlydHVhbFJl
Z2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMy
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVyICsgcG9pc29uSW5kZXgo
dmlydHVhbFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnRhZyksIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1
YWxSZWdpc3Rlcilsb2NhbFRvT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIpKSk7Ci0gICAgICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdG
b3IoKFZpcnR1YWxSZWdpc3Rlcilsb2NhbFRvT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIpKSk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0
Y2hEYXRhQnVmZmVyICsgcG9pc29uSW5kZXgobG9jYWxJbmRleCkpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihz
Y3JhdGNoRGF0YUJ1ZmZlciArIHBvaXNvbkluZGV4KGxvY2FsSW5kZXgpKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSwgR1BSSW5mbzo6cmVnVDEp
OworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5
SGVscGVyczo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zvcih2aXJ0
dWFsUmVnaXN0ZXIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC03MDYsOSArNzA4LDkgQEAgdm9pZCBPU1JFeGl0Q29t
cGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIAogICAgIC8vIDE1KSBMb2FkIHRoZSByZXN1
bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCiAgICAgCi0gICAg
aWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKSB7Ci0gICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Io
KFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRS
ZXN1bHRSZWdpc3Rlcik7Ci0gICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnRh
Z0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNh
Y2hlZFJlc3VsdFJlZ2lzdGVyMik7CisgICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZC5pc1Zh
bGlkKCkpIHsKKyAgICAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZv
cihleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7
CisgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihleGl0Lm1fbGFz
dFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3RlcjIpOwogICAgIH0KICAg
ICAKICAgICAvLyAxNikgQW5kIGZpbmlzaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lvbiAxNTYzNjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCIKICNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisKICNpbmNsdWRlIDx3dGYvRGF0
YUxvZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0zOTQsNyArMzk2
LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogCiAgICAgICAg
ICAgICBpZiAoIW1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSktPnVz
ZXNBcmd1bWVudHMoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlu
dCBhcmd1bWVudHNSZWdpc3RlciA9IG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNh
bGxGcmFtZSk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIg
PSBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAg
ICAgaWYgKGRpZENyZWF0ZUFyZ3VtZW50c09iamVjdC5hZGQoaW5saW5lQ2FsbEZyYW1lKS5pc05l
d0VudHJ5KSB7CiAgICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGlzIGNhbGwgZnJhbWUgb3B0
aW1pemVkIG91dCBhbiBhcmd1bWVudHMgb2JqZWN0IHRoYXQKICAgICAgICAgICAgICAgICAvLyB0
aGUgYmFzZWxpbmUgSklUIHdvdWxkIGhhdmUgY3JlYXRlZC4gRG8gdGhhdCBjcmVhdGlvbiBub3cu
CkBAIC00MjIsNyArNDI0LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNv
bnN0IAogICAgIAogICAgIC8vIDEwKSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNv
ZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCiAgICAgCi0gICAgaWYgKGV4aXQubV9sYXN0U2V0T3Bl
cmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgIGlmIChleGl0Lm1f
bGFzdFNldE9wZXJhbmQuaXNWYWxpZCgpKQogICAgICAgICBtX2ppdC5sb2FkNjQoQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKGV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hl
ZFJlc3VsdFJlZ2lzdGVyKTsKICAgICAKICAgICAvLyAxMSkgQW5kIGZpbmlzaC4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJCYW5rLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaAkocmV2aXNpb24gMTU2
MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaAkod29y
a2luZyBjb3B5KQpAQCAtODUsMTAgKzg1LDEwIEBAIHB1YmxpYzoKICAgICAvLyByZXR1cm5zIC0x
IChJbnZhbGlkR1BSUmVnIG9yIEludmFsaWRGUFJSZWcpLgogICAgIFJlZ0lEIHRyeUFsbG9jYXRl
KCkKICAgICB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBpZ25vcmVkOworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgaWdub3JlZCA9IFZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICAKICAgICAg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IE5VTV9SRUdTOyArK2kpIHsKLSAgICAgICAgICAg
IGlmICghbV9kYXRhW2ldLmxvY2tDb3VudCAmJiBtX2RhdGFbaV0ubmFtZSA9PSBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgaWYgKCFtX2RhdGFbaV0ubG9ja0NvdW50ICYmICFt
X2RhdGFbaV0ubmFtZS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRl
SW50ZXJuYWwoaSwgaWdub3JlZCk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xNDcsNyArMTQ3
LDcgQEAgcHVibGljOgogCiAgICAgICAgICsrbV9kYXRhW2luZGV4XS5sb2NrQ291bnQ7CiAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lID0gbmFtZUF0SW5kZXgoaW5kZXgpOwotICAgICAgICBp
ZiAobmFtZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICBpZiAobmFtZS5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICByZWxlYXNlQXRJbmRleChpbmRleCk7CiAgICAgICAgIAogICAg
ICAgICByZXR1cm4gbmFtZTsKQEAgLTE2NSw4ICsxNjUsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFT
U0VSVChpbmRleCA8IE5VTV9SRUdTKTsKICAgICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0ubG9j
a0NvdW50KTsKICAgICAgICAgLy8gJ2luZGV4JyBzaG91bGQgbm90IGN1cnJlbnRseSBiZSBuYW1l
ZCwgdGhlIG5ldyBuYW1lIG11c3QgYmUgdmFsaWQuCi0gICAgICAgIEFTU0VSVChtX2RhdGFbaW5k
ZXhdLm5hbWUgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIEFTU0VSVChuYW1l
ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQoIW1fZGF0YVtpbmRl
eF0ubmFtZS5pc1ZhbGlkKCkpOworICAgICAgICBBU1NFUlQobmFtZS5pc1ZhbGlkKCkpOwogICAg
ICAgICAvLyAnaW5kZXgnIHNob3VsZCBub3QgY3VycmVudGx5IGhhdmUgYSBzcGlsbE9yZGVyLgog
ICAgICAgICBBU1NFUlQobV9kYXRhW2luZGV4XS5zcGlsbE9yZGVyID09IFNwaWxsSGludEludmFs
aWQpOwogCkBAIC0yMDEsNyArMjAxLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEdldCB0
aGUgbmFtZSAoVmlydHVhbFJlZ2lzdGVyKSBhc3NvY2lhdGVkIHdpdGggdGhlCi0gICAgLy8gZ2l2
ZW4gcmVnaXN0ZXIgKG9yIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgZm9yIG5vbmUpLgorICAgIC8v
IGdpdmVuIHJlZ2lzdGVyIChvciBkZWZhdWx0IFZpcnR1YWxSZWdpc3RlcigpIGZvciBub25lKS4K
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZShSZWdJRCByZWcpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbmFtZUF0SW5kZXgoQmFua0luZm86OnRvSW5kZXgocmVnKSk7CkBAIC0yMDksNyAr
MjA5LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNJblVzZShSZWdJRCByZWcpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gaXNMb2NrZWQocmVnKSB8fCBuYW1lKHJlZykgIT0gSW52
YWxpZFZpcnR1YWxSZWdpc3RlcjsKKyAgICAgICAgcmV0dXJuIGlzTG9ja2VkKHJlZykgfHwgbmFt
ZShyZWcpLmlzVmFsaWQoKTsKICAgICB9CiAgICAgCiAjaWZuZGVmIE5ERUJVRwpAQCAtMjE3LDgg
KzIxNyw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIC8vIEZvciBlYWNoIHJlZ2lzdGVyLCBw
cmludCB0aGUgVmlydHVhbFJlZ2lzdGVyICduYW1lJy4KICAgICAgICAgZm9yICh1aW50MzJfdCBp
ID0wOyBpIDwgTlVNX1JFR1M7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fZGF0YVtpXS5uYW1l
ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlsl
MDJkXSIsIG1fZGF0YVtpXS5uYW1lKTsKKyAgICAgICAgICAgIGlmIChtX2RhdGFbaV0ubmFtZS5p
c1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlslMDJkXSIsIG1fZGF0YVtpXS5u
YW1lLm9mZnNldCgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBkYXRhTG9n
RigiWy0tXSIpOwogICAgICAgICB9CkBAIC0zMTIsMTEgKzMxMiwxMSBAQCBwcml2YXRlOgogICAg
ICAgICAvLyAnaW5kZXgnIG11c3QgYmUgYSB2YWxpZCByZWdpc3Rlci4KICAgICAgICAgQVNTRVJU
KGluZGV4IDwgTlVNX1JFR1MpOwogICAgICAgICAvLyAnaW5kZXgnIHNob3VsZCBjdXJyZW50bHkg
YmUgbmFtZWQuCi0gICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLm5hbWUgIT0gSW52YWxpZFZp
cnR1YWxSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLm5hbWUuaXNWYWxp
ZCgpKTsKICAgICAgICAgLy8gJ2luZGV4JyBzaG91bGQgY3VycmVudGx5IGhhdmUgYSB2YWxpZCBz
cGlsbCBvcmRlci4KICAgICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0uc3BpbGxPcmRlciAhPSBT
cGlsbEhpbnRJbnZhbGlkKTsKIAotICAgICAgICBtX2RhdGFbaW5kZXhdLm5hbWUgPSBJbnZhbGlk
VmlydHVhbFJlZ2lzdGVyOworICAgICAgICBtX2RhdGFbaW5kZXhdLm5hbWUgPSBWaXJ0dWFsUmVn
aXN0ZXIoKTsKICAgICAgICAgbV9kYXRhW2luZGV4XS5zcGlsbE9yZGVyID0gU3BpbGxIaW50SW52
YWxpZDsKICAgICB9CiAKQEAgLTMyNyw3ICszMjcsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NF
UlQoaSA8IE5VTV9SRUdTICYmICFtX2RhdGFbaV0ubG9ja0NvdW50KTsKIAogICAgICAgICAvLyBS
ZXR1cm4gdGhlIFZpcnR1YWxSZWdpc3RlciBvZiB0aGUgbmFtZWQgdmFsdWUgY3VycmVudGx5IHN0
b3JlZCBpbgotICAgICAgICAvLyB0aGUgcmVnaXN0ZXIgYmVpbmcgcmV0dXJuZWQgLSBvciBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyIGlmIG5vbmUuCisgICAgICAgIC8vIHRoZSByZWdpc3RlciBiZWlu
ZyByZXR1cm5lZCAtIG9yIGRlZmF1bHQgVmlydHVhbFJlZ2lzdGVyKCkgaWYgbm9uZS4KICAgICAg
ICAgc3BpbGxNZSA9IG1fZGF0YVtpXS5uYW1lOwogCiAgICAgICAgIC8vIENsZWFyIGFueSBuYW1l
L3NwaWxsT3JkZXIgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnaXN0ZXIsCkBAIC0z
NDUsNyArMzQ1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBjb3VudCwgbmFtZSBhbmQgc3BpbGxPcmRl
ciBoaW50LgogICAgIHN0cnVjdCBNYXBFbnRyeSB7CiAgICAgICAgIE1hcEVudHJ5KCkKLSAgICAg
ICAgICAgIDogbmFtZShJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgOiBuYW1l
KFZpcnR1YWxSZWdpc3RlcigpKQogICAgICAgICAgICAgLCBzcGlsbE9yZGVyKFNwaWxsSGludElu
dmFsaWQpCiAgICAgICAgICAgICAsIGxvY2tDb3VudCgwKQogICAgICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAkocmV2aXNpb24gMTU2MzY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg5LDE0ICs4OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBVc2UgY291bnQg
bXVzdCBoYXZlIGhpdCB6ZXJvIGZvciBpdCB0byBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGZyZWUg
bGlzdCEKICAgICAgICAgICAgIEFTU0VSVCghbV91c2VkW2luZGV4XSk7CiAgICAgICAgICAgICBt
X2hpZ2hXYXRlcm1hcmsgPSBzdGQ6Om1heChtX2hpZ2hXYXRlcm1hcmssIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihpbmRleCkgKyAxKTsKLSAgICAgICAgICAgIHJldHVybiAoVmlydHVhbFJlZ2lzdGVy
KWxvY2FsVG9PcGVyYW5kKGluZGV4KTsKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChpbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBBbGxvY2F0ZSBhIG5l
dyBWaXJ0dWFsUmVnaXN0ZXIsIGFuZCBhZGQgYSBjb3JyZXNwb25kaW5nIGVudHJ5IHRvIG1fdXNl
ZC4KICAgICAgICAgc2l6ZV90IG5leHQgPSBtX3VzZWQuc2l6ZSgpOwogICAgICAgICBtX3VzZWQu
YXBwZW5kKDApOwogICAgICAgICBtX2hpZ2hXYXRlcm1hcmsgPSBzdGQ6Om1heChtX2hpZ2hXYXRl
cm1hcmssIHN0YXRpY19jYXN0PHVuc2lnbmVkPihuZXh0KSArIDEpOwotICAgICAgICByZXR1cm4g
KFZpcnR1YWxSZWdpc3Rlcilsb2NhbFRvT3BlcmFuZChuZXh0KTsKKyAgICAgICAgcmV0dXJuIHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKG5leHQpOwogICAgIH0KIAogICAgIC8vIEluY3JlbWVudCB0
aGUgdXNlY291bnQgZm9yIHRoZSBWaXJ0dWFsUmVnaXN0ZXIgYXNzb2NpYXRlZCB3aXRoICdjaGls
ZCcsCkBAIC0xMDcsNyArMTA3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIC8vIEZpbmQgdGhlIHZpcnR1YWwgcmVnaXN0ZXIgbnVtYmVyIGZvciB0aGlzIGNoaWxk
LCBpbmNyZW1lbnQgaXRzIHVzZSBjb3VudC4KLSAgICAgICAgdWludDMyX3QgaW5kZXggPSBvcGVy
YW5kVG9Mb2NhbChjaGlsZC0+dmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICB1aW50MzJfdCBp
bmRleCA9IGNoaWxkLT52aXJ0dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCk7CiAgICAgICAgIEFTU0VS
VChtX3VzZWRbaW5kZXhdICE9IG1heCgpKTsKICAgICAgICAgaWYgKGNoaWxkLT5yZWZDb3VudCgp
ID09ICsrbV91c2VkW2luZGV4XSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc3OSw3
ICs0Nzc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAg
ICAgICAgICAgICAgICBjcmVhdGVkLCB0aGlzLCBvcGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgs
IHJlc3VsdEdQUiwKLSAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihu
b2RlLT5jb2RlT3JpZ2luKSkpOworICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pLm9mZnNldCgpKSk7CiAgICAgICAgIAogICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDkxOCwx
NCArNDkxOCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0
aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRJ
bmxpbmVkQXJndW1lbnRCeVZhbCwgcmVzdWx0R1BSLCAKLSAgICAgICAgICAgICAgICAgICAgbV9q
aXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbiksCisgICAgICAgICAgICAg
ICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pLm9mZnNl
dCgpLAogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgaW5kZXhHUFIpKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCgKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkdldEFy
Z3VtZW50QnlWYWwsIHJlc3VsdEdQUiwgCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmFyZ3Vt
ZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICBt
X2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKS5vZmZzZXQoKSwKICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhHUFIpKTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBTcGVjdWxhdGl2ZUpJ
VDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsCiAgICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0
LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycykKICAgICAsIG1fYXJndW1lbnRzKGpp
dC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKQogICAgICwgbV92YXJpYWJsZXMoaml0Lmdy
YXBoKCkubV9sb2NhbFZhcnMpCi0gICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkpCisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
cigpKQogICAgICwgbV9zdGF0ZShtX2ppdC5ncmFwaCgpKQogICAgICwgbV9pbnRlcnByZXRlciht
X2ppdC5ncmFwaCgpLCBtX3N0YXRlKQogICAgICwgbV9zdHJlYW0oJmppdC5qaXRDb2RlKCktPnZh
cmlhYmxlRXZlbnRTdHJlYW0pCkBAIC0xMTgzLDcgKzExODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjaGVja0NvbnNpc3RlbmN5KCkKIAogICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBt
X2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgewogICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gaXRlci5uYW1lKCk7Ci0gICAgICAgIGlm
ICh2aXJ0dWFsUmVnaXN0ZXIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgaWYg
KCF2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVn
aXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKQEAgLTEyMDksNyArMTIwOSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNoZWNrQ29uc2lzdGVuY3koKQogCiAgICAgZm9yIChmcHJfaXRlcmF0b3IgaXRl
ciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytpdGVyKSB7CiAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBpdGVyLm5hbWUoKTsKLSAgICAg
ICAgaWYgKHZpcnR1YWxSZWdpc3RlciA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAg
ICBpZiAoIXZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1
YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQoTm9kZQogICAgIGlmIChjaGlsZC0+b3AoKSA9
PSBVSW50MzJUb051bWJlcikKICAgICAgICAgbm90aWNlT1NSQmlydGgoY2hpbGQtPmNoaWxkMSgp
Lm5vZGUoKSk7CiAgICAgCi0gICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50
Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT5sb2NhbCgpKSk7CisgICAgbV9zdHJl
YW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQp
LCBub2RlLT5sb2NhbCgpLm9mZnNldCgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVNb3ZIaW50QW5kQ2hlY2soTm9kZSogbm9kZSkKQEAgLTE1NTYsNyArMTU1Niw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbmxpbmVTdGFydCgKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxG
cmFtZSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsgKytpKSB7CiAgICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVjb3Zlcnk7Ci0gICAgICAgIGlmIChj
b2RlQmxvY2stPmlzQ2FwdHVyZWQoYXJndW1lbnRUb09wZXJhbmQoaSkpKQorICAgICAgICBpZiAo
Y29kZUJsb2NrLT5pc0NhcHR1cmVkKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSkKICAg
ICAgICAgICAgIHJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluSlNTdGFjaygpOwog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24mIGFyZ3VtZW50UG9z
aXRpb24gPQpAQCAtMTYzOSw3ICsxNjM5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUN1cnJlbnRCbG9jawogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJj
ZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gdmFsdWVTb3VyY2U7
Ci0gICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwo
YXJndW1lbnRUb09wZXJhbmQoaSksIHZhbHVlU291cmNlLmRhdGFGb3JtYXQoKSkpOworICAgICAg
ICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGkpLCB2YWx1ZVNvdXJjZS5kYXRhRm9ybWF0KCkpKTsKICAgICB9
CiAgICAgCiAgICAgbV9zdGF0ZS5yZXNldCgpOwpAQCAtMTY1OSwxMCArMTY1OSwxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgICAgICB2YWx1ZVNv
dXJjZSA9IFZhbHVlU291cmNlOjpmb3JGbHVzaEZvcm1hdChub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+Zmx1c2hGb3JtYXQoKSk7CiAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gdmFsdWVTb3Vy
Y2U7CiAgICAgICAgIC8vIEZJWE1FOiBEb24ndCBlbWl0IFNldExvY2FsKERlYWQpLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MDE5Ci0gICAgICAgIG1fc3RyZWFt
LT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwobG9jYWxUb09wZXJhbmQoaSks
IHZhbHVlU291cmNlLmRhdGFGb3JtYXQoKSkpOworICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5k
TG9nKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCB2
YWx1ZVNvdXJjZS5kYXRhRm9ybWF0KCkpKTsKICAgICB9CiAgICAgCi0gICAgbV9sYXN0U2V0T3Bl
cmFuZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CisgICAgbV9sYXN0U2V0T3Bl
cmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOwogICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQg
PSBDb2RlT3JpZ2luKCk7CiAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUgPSBDb2RlT3Jp
Z2luKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAK
ICNpbmNsdWRlICJERkdWYWx1ZVNvdXJjZS5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIu
aCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC0xODQsNyArMTg1LDcg
QEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lOwogICAg
ICAgICBHUFJSZWcgZ3ByID0gbV9ncHJzLmFsbG9jYXRlKHNwaWxsTWUpOwotICAgICAgICBpZiAo
c3BpbGxNZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSB7CisgICAgICAgIGlmIChzcGlsbE1l
LmlzVmFsaWQoKSkgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgICAgICBHZW5lcmF0
aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3RlcihzcGlsbE1l
KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBE
YXRhRm9ybWF0SlNEb3VibGUpOwpAQCAtMjAxLDcgKzIwMiw3IEBAIHB1YmxpYzoKICAgICAgICAg
bV9qaXQuYWRkUmVnaXN0ZXJBbGxvY2F0aW9uQXRPZmZzZXQobV9qaXQuZGVidWdPZmZzZXQoKSk7
CiAjZW5kaWYKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWUgPSBtX2dwcnMuYWxsb2Nh
dGVTcGVjaWZpYyhzcGVjaWZpYyk7Ci0gICAgICAgIGlmIChzcGlsbE1lICE9IEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgaWYgKHNwaWxsTWUuaXNWYWxpZCgpKSB7CiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJh
dGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHNwaWxsTWUpOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0RvdWJsZSk7CkBA
IC0yMjMsNyArMjI0LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcGlsbE1lOwogICAgICAgICBGUFJSZWcgZnByID0gbV9mcHJzLmFsbG9jYXRlKHNwaWxsTWUp
OwotICAgICAgICBpZiAoc3BpbGxNZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAg
ICBpZiAoc3BpbGxNZS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBzcGlsbChzcGlsbE1lKTsKICAg
ICAgICAgcmV0dXJuIGZwcjsKICAgICB9CkBAIC0zNjAsNyArMzYxLDcgQEAgcHVibGljOgogICAg
ICAgICBBU1NFUlQocGxhbnMuaXNFbXB0eSgpKTsKICAgICAgICAgZm9yIChncHJfaXRlcmF0b3Ig
aXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7CiAg
ICAgICAgICAgICBHUFJSZWcgZ3ByID0gaXRlci5yZWdJRCgpOwotICAgICAgICAgICAgaWYgKGl0
ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgZ3ByICE9IGV4Y2x1ZGUgJiYg
Z3ByICE9IGV4Y2x1ZGUyKSB7CisgICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkuaXNWYWxpZCgp
ICYmIGdwciAhPSBleGNsdWRlICYmIGdwciAhPSBleGNsdWRlMikgewogICAgICAgICAgICAgICAg
IFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gcGxhbiA9IHNpbGVudFNhdmVQbGFuRm9yR1BSKGl0ZXIu
bmFtZSgpLCBncHIpOwogICAgICAgICAgICAgICAgIGlmIChkb1NwaWxsKQogICAgICAgICAgICAg
ICAgICAgICBzaWxlbnRTcGlsbChwbGFuKTsKQEAgLTM2OCw3ICszNjksNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yIChmcHJfaXRlcmF0b3IgaXRlciA9
IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
ICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlciAmJiBpdGVyLnJl
Z0lEKCkgIT0gZnByRXhjbHVkZSkgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpLmlzVmFs
aWQoKSAmJiBpdGVyLnJlZ0lEKCkgIT0gZnByRXhjbHVkZSkgewogICAgICAgICAgICAgICAgIFNp
bGVudFJlZ2lzdGVyU2F2ZVBsYW4gcGxhbiA9IHNpbGVudFNhdmVQbGFuRm9yRlBSKGl0ZXIubmFt
ZSgpLCBpdGVyLnJlZ0lEKCkpOwogICAgICAgICAgICAgICAgIGlmIChkb1NwaWxsKQogICAgICAg
ICAgICAgICAgICAgICBzaWxlbnRTcGlsbChwbGFuKTsKQEAgLTU5NCwxMyArNTk1LDEzIEBAIHB1
YmxpYzoKICAgICB2b2lkIGZsdXNoUmVnaXN0ZXJzKCkKICAgICB7CiAgICAgICAgIGZvciAoZ3By
X2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsr
aXRlcikgewotICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKS5pc1ZhbGlkKCkpIHsKICAgICAg
ICAgICAgICAgICBzcGlsbChpdGVyLm5hbWUoKSk7CiAgICAgICAgICAgICAgICAgaXRlci5yZWxl
YXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yIChmcHJfaXRlcmF0
b3IgaXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcikg
eworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpLmlzVmFsaWQoKSkgewogICAgICAgICAgICAg
ICAgIHNwaWxsKGl0ZXIubmFtZSgpKTsKICAgICAgICAgICAgICAgICBpdGVyLnJlbGVhc2UoKTsK
ICAgICAgICAgICAgIH0KQEAgLTYxMywxMSArNjE0LDExIEBAIHB1YmxpYzoKICAgICBib29sIGlz
Rmx1c2hlZCgpCiAgICAgewogICAgICAgICBmb3IgKGdwcl9pdGVyYXRvciBpdGVyID0gbV9ncHJz
LmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlm
IChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgaWYg
KGl0ZXIubmFtZSgpLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICAgICAgZm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigp
OyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5u
YW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgIGlmIChpdGVyLm5h
bWUoKS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzUyLDcgKzc1Myw3IEBAIHB1YmxpYzoKICAgICAv
LyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MgYXJndW1lbnRTbG90KGludCBhcmd1bWVudCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
KC1tX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyBhcmd1bWVudFRvT3Bl
cmFuZChhcmd1bWVudCkpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSk7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgKC1tX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MgY2FsbEZyYW1lVGFnU2xvdChpbnQgc2xvdCkKQEAgLTc2NywxMiArNzY4LDEyIEBAIHB1
YmxpYzoKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFyZ3VtZW50VGFnU2xvdChpbnQg
YXJndW1lbnQpCiAgICAgewotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICgtbV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2Fs
bGVlUmVnaXN0ZXJzICsgYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKSAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICgtbV9qaXQuY29kZUJsb2NrKCktPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzICsgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQp
Lm9mZnNldCgpKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwogICAgIH0KIAog
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFyZ3VtZW50UGF5bG9hZFNsb3QoaW50IGFyZ3Vt
ZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAoLW1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJl
Z2lzdGVycyArIGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSkgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKC1tX2ppdC5jb2RlQmxvY2soKS0+bV9u
dW1DYWxsZWVSZWdpc3RlcnMgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCku
b2Zmc2V0KCkpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwogICAgIH0K
IAogICAgIHZvaWQgZW1pdENhbGwoTm9kZSopOwpAQCAtMjE4MSwxMiArMjE4MiwxMiBAQCBwdWJs
aWM6CiAgICAgLy8gVHJhY2tpbmcgZm9yIHdoaWNoIG5vZGVzIGFyZSBjdXJyZW50bHkgaG9sZGlu
ZyB0aGUgdmFsdWVzIG9mIGFyZ3VtZW50cyBhbmQgYnl0ZWNvZGUKICAgICAvLyBvcGVyYW5kLWlu
ZGV4ZWQgdmFyaWFibGVzLgogICAgIAotICAgIFZhbHVlU291cmNlIHZhbHVlU291cmNlRm9yT3Bl
cmFuZChpbnQgb3BlcmFuZCkKKyAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZUZvck9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gdmFsdWVTb3Vy
Y2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNl
dE5vZGVGb3JPcGVyYW5kKE5vZGUqIG5vZGUsIGludCBvcGVyYW5kKQorICAgIHZvaWQgc2V0Tm9k
ZUZvck9wZXJhbmQoTm9kZSogbm9kZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewog
ICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFuZCkgPSBWYWx1ZVNv
dXJjZShNaW5pZmllZElEKG5vZGUpKTsKICAgICB9CkBAIC0yMTk1LDIxICsyMTk2LDIxIEBAIHB1
YmxpYzoKICAgICAvLyBhbmQgcG90ZW50aWFsbHkgcmVzaXplcyB0aGUgYXJyYXkuIFNvIGl0IHdv
dWxkIG5vdCBiZSByaWdodCB0byBjYWxsIHRoaXMKICAgICAvLyB0d2ljZSBhbmQgdGhlbiBwZXJm
b3JtIG9wZXJhbmRzIG9uIGJvdGggcmVmZXJlbmNlcywgc2luY2UgdGhlIG9uZSBmcm9tCiAgICAg
Ly8gdGhlIGZpcnN0IGNhbGwgbWF5IG5vIGxvbmdlciBiZSB2YWxpZC4KLSAgICBWYWx1ZVNvdXJj
ZSYgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKGludCBvcGVyYW5kKQorICAgIFZhbHVl
U291cmNlJiB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsK
LSAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOwor
ICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgICAgIGludCBhcmd1
bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOwogICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1l
bnRzW2FyZ3VtZW50XTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBsb2NhbCA9IG9wZXJhbmRU
b0xvY2FsKG9wZXJhbmQpOworICAgICAgICBpbnQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsK
ICAgICAgICAgaWYgKCh1bnNpZ25lZClsb2NhbCA+PSBtX3ZhcmlhYmxlcy5zaXplKCkpCiAgICAg
ICAgICAgICBtX3ZhcmlhYmxlcy5yZXNpemUobG9jYWwgKyAxKTsKICAgICAgICAgCiAgICAgICAg
IHJldHVybiBtX3ZhcmlhYmxlc1tsb2NhbF07CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVjb3Jk
U2V0TG9jYWwoaW50IG9wZXJhbmQsIFZhbHVlU291cmNlIHZhbHVlU291cmNlKQorICAgIHZvaWQg
cmVjb3JkU2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFZhbHVlU291cmNlIHZhbHVl
U291cmNlKQogICAgIHsKICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9w
ZXJhbmQpID0gdmFsdWVTb3VyY2U7CiAgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFy
aWFibGVFdmVudDo6c2V0TG9jYWwob3BlcmFuZCwgdmFsdWVTb3VyY2UuZGF0YUZvcm1hdCgpKSk7
CkBAIC0yMjE3LDcgKzIyMTgsNyBAQCBwdWJsaWM6CiAKICAgICBHZW5lcmF0aW9uSW5mbyYgZ2Vu
ZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIpCiAgICAgewotICAgICAgICByZXR1cm4gbV9nZW5lcmF0aW9uSW5mb1tvcGVyYW5kVG9M
b2NhbCh2aXJ0dWFsUmVnaXN0ZXIpXTsKKyAgICAgICAgcmV0dXJuIG1fZ2VuZXJhdGlvbkluZm9b
dmlydHVhbFJlZ2lzdGVyLnRvTG9jYWwoKV07CiAgICAgfQogICAgIAogICAgIEdlbmVyYXRpb25J
bmZvJiBnZW5lcmF0aW9uSW5mbyhOb2RlKiBub2RlKQpAQCAtMjI2MCw3ICsyMjYxLDcgQEAgcHVi
bGljOgogCiAgICAgVmVjdG9yPFZhbHVlU291cmNlLCAwPiBtX2FyZ3VtZW50czsKICAgICBWZWN0
b3I8VmFsdWVTb3VyY2UsIDA+IG1fdmFyaWFibGVzOwotICAgIGludCBtX2xhc3RTZXRPcGVyYW5k
OworICAgIFZpcnR1YWxSZWdpc3RlciBtX2xhc3RTZXRPcGVyYW5kOwogICAgIENvZGVPcmlnaW4g
bV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldDsKICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZv
ckV4aXRQcm9maWxlOwogICAgIApAQCAtMjI3OSw3ICsyMjgwLDcgQEAgcHVibGljOgogCiAgICAg
VmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihpbnQgb3BlcmFuZCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcih2YWx1ZVNvdXJjZUZvck9w
ZXJhbmQob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Io
dmFsdWVTb3VyY2VGb3JPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSkpOwogICAgIH0K
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShy
ZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8v
IFZhbGlkYXRlIHRoYXQgYWxsIGxvY2FsIHZhcmlhYmxlcyBhdCB0aGUgaGVhZCBvZiB0aGUgcm9v
dCBibG9jayBhcmUgZGVhZC4KICAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGguYmxv
Y2soMCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByb290LT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQotICAgICAgICAgICAgVl9FUVVBTCgoc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihsb2NhbFRvT3BlcmFuZChpKSksIDApLCBzdGF0aWNfY2Fz
dDxOb2RlKj4oMCksIHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKSk7CisgICAgICAgICAg
ICBWX0VRVUFMKCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgMCksIHN0YXRpY19jYXN0PE5v
ZGUqPigwKSwgcm9vdC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIFZhbGlkYXRlIHJlZiBjb3VudHMgYW5kIHVzZXMuCiAgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsr
YmxvY2tJbmRleCkgewpAQCAtMzE3LDE3ICszMTcsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVkFMSURB
VEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oYXJndW1lbnRUb09wZXJhbmQoaSkpLCBi
bG9jayksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQuYXJndW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkp
LCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBo
KSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQot
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVy
Pihhcmd1bWVudFRvT3BlcmFuZChpKSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
YXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpKS0+aGFzVmFy
aWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVz
QXRUYWlsLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaSkt
Pmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMuYXJndW1lbnQoaSkgPSBub3RTZXQ7CiAgICAg
ICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMuYXJndW1lbnQoaSkgPSBub3RTZXQ7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVkFM
SURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obG9jYWxUb09wZXJhbmQoaSkpLCBi
bG9jayksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpIHx8IGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBibG9jayks
ICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhl
YWQubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQotICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihsb2NhbFRvT3BlcmFu
ZChpKSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaSkgfHwgYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgp
KTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGkpIHx8IGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7
CiAKICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5sb2NhbChpKSA9IG5vdFNldDsK
ICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5sb2NhbChpKSA9IG5vdFNldDsKQEAg
LTM4OSwxOCArMzg5LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3Vt
ZW50cygpOyArK2kpIHsKICAgICAgICAgICAgICAgICBjaGVja09wZXJhbmQoCi0gICAgICAgICAg
ICAgICAgICAgIGJsb2NrLCBnZXRMb2NhbFBvc2l0aW9ucywgc2V0TG9jYWxQb3NpdGlvbnMsIGFy
Z3VtZW50VG9PcGVyYW5kKGkpKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2ssIGdldExvY2Fs
UG9zaXRpb25zLCBzZXRMb2NhbFBvc2l0aW9ucywgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
aSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewogICAgICAgICAg
ICAgICAgIGNoZWNrT3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgYmxvY2ssIGdldExvY2Fs
UG9zaXRpb25zLCBzZXRMb2NhbFBvc2l0aW9ucywgbG9jYWxUb09wZXJhbmQoaSkpOworICAgICAg
ICAgICAgICAgICAgICBibG9jaywgZ2V0TG9jYWxQb3NpdGlvbnMsIHNldExvY2FsUG9zaXRpb25z
LCB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjaGVja09wZXJhbmQoCiAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrLCBPcGVyYW5kczxzaXplX3Q+JiBnZXRMb2NhbFBvc2l0aW9ucywKLSAgICAgICAgT3Bl
cmFuZHM8c2l6ZV90PiYgc2V0TG9jYWxQb3NpdGlvbnMsIGludCBvcGVyYW5kKQorICAgICAgICBP
cGVyYW5kczxzaXplX3Q+JiBzZXRMb2NhbFBvc2l0aW9ucywgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCiAgICAgewogICAgICAgICBpZiAoZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5k
KSA9PSBub3RTZXQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00MzIsMjMgKzQzMiwyMyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoVmlydHVhbFJlZ2lzdGVy
IGxvY2FsLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7CiAgICAgICAgIGlmICghYmxvY2spIHsK
LSAgICAgICAgICAgIGRhdGFMb2coInIiLCBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsKSwgIiBpbiBu
dWxsIEJsb2NrICIpOworICAgICAgICAgICAgZGF0YUxvZygiciIsIGxvY2FsLCAiIGluIG51bGwg
QmxvY2sgIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBkYXRh
TG9nKCJyIiwgc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCksICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsK
KyAgICAgICAgZGF0YUxvZygiciIsIGxvY2FsLCAiIGluIEJsb2NrICIsICpibG9jayk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCiAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRl
c3RpbmF0aW9uQmxvY2spCiAgICAgewotICAgICAgICBkYXRhTG9nKCJyIiwgc3RhdGljX2Nhc3Q8
aW50Pihsb2NhbCksICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5h
dGlvbkJsb2NrKTsKKyAgICAgICAgZGF0YUxvZygiciIsIGxvY2FsLCAiIGluIEJsb2NrICIsICpz
b3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRpb25CbG9jayk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBs
b2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIE5vZGUqIHByZXZOb2RlKQogICAgIHsKLSAg
ICAgICAgZGF0YUxvZyhwcmV2Tm9kZSwgIiBmb3IgciIsIHN0YXRpY19jYXN0PGludD4obG9jYWwp
LCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7CisgICAgICAgIGRhdGFMb2cocHJldk5vZGUs
ICIgZm9yIHIiLCBsb2NhbCwgIiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2spOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGUqIG5vZGUsIEJhc2ljQmxv
Y2sqIGJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVJlY292
ZXJ5T3ZlcnJpZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSwxMyArMzksMTMgQEAgY2xhc3MgVmFsdWVSZWNvdmVyeU92ZXJyaWRlIDogcHVibGlj
IFJlZgogcHVibGljOgogICAgIFZhbHVlUmVjb3ZlcnlPdmVycmlkZSgpIHsgfQogICAgIAotICAg
IFZhbHVlUmVjb3ZlcnlPdmVycmlkZShpbnQgb3BlcmFuZCwgY29uc3QgVmFsdWVSZWNvdmVyeSYg
cmVjb3ZlcnkpCisgICAgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSkKICAgICAgICAgOiBvcGVyYW5kKG9w
ZXJhbmQpCiAgICAgICAgICwgcmVjb3ZlcnkocmVjb3ZlcnkpCiAgICAgewogICAgIH0KICAgICAK
LSAgICBpbnQgb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZDsKICAgICBWYWx1
ZVJlY292ZXJ5IHJlY292ZXJ5OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAxNTYzNjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04MCwxMiArODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2xvY2Fs
ID09IGZpbmQoKS0+bV9sb2NhbCk7CiAgICAgICAgIHJldHVybiBtX2xvY2FsOwogICAgIH0KLSAg
ICAKLSAgICBpbnQgb3BlcmFuZCgpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50Pihsb2NhbCgpKTsKLSAgICB9Ci0gICAgCisKICAgICBib29sIG1lcmdlSXNDYXB0dXJlZChi
b29sIGlzQ2FwdHVyZWQpCiAgICAgewogICAgICAgICByZXR1cm4gY2hlY2tBbmRTZXQobV9zaG91
bGROZXZlclVuYm94LCBtX3Nob3VsZE5ldmVyVW5ib3ggfCBpc0NhcHR1cmVkKQpAQCAtMjMwLDcg
KzIyNSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhp
cyBmYWNpbGl0eSBmb3IgYXJndW1lbnRzLCB5ZXQuCiAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHRo
aXMgd29yayBmb3IgYXJndW1lbnRzLgotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3Bl
cmFuZCgpKSkKKyAgICAgICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIG5v
dCBhIG51bWJlciBwcmVkaWN0aW9uLCB0aGVuIHRoaXMgZG9lc24ndApAQCAtMjc4LDcgKzI3Myw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1Jvb3QoKSk7CiAgICAgICAgIAot
ICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQobG9jYWwoKSkgfHwgc2hvdWxkTmV2ZXJVbmJv
eCgpKQorICAgICAgICBpZiAobG9jYWwoKS5pc0FyZ3VtZW50KCkgfHwgc2hvdWxkTmV2ZXJVbmJv
eCgpKQogICAgICAgICAgICAgcmV0dXJuIERGRzo6bWVyZ2VEb3VibGVGb3JtYXRTdGF0ZShtX2Rv
dWJsZUZvcm1hdFN0YXRlLCBOb3RVc2luZ0RvdWJsZUZvcm1hdCk7CiAgICAgICAgIAogICAgICAg
ICBpZiAobV9kb3VibGVGb3JtYXRTdGF0ZSA9PSBDYW50VXNlRG91YmxlRm9ybWF0KQpAQCAtMzMz
LDcgKzMyOCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVk
aWN0aW9uKSkKICAgICAgICAgICAgIHJldHVybiBGbHVzaGVkSW50MzI7CiAgICAgICAgIAotICAg
ICAgICBpZiAoZW5hYmxlSW50NTIoKSAmJiAhb3BlcmFuZElzQXJndW1lbnQobV9sb2NhbCkgJiYg
aXNNYWNoaW5lSW50U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgIGlmIChlbmFibGVJ
bnQ1MigpICYmICFtX2xvY2FsLmlzQXJndW1lbnQoKSAmJiBpc01hY2hpbmVJbnRTcGVjdWxhdGlv
bihwcmVkaWN0aW9uKSkKICAgICAgICAgICAgIHJldHVybiBGbHVzaGVkSW50NTI7CiAgICAgICAg
IAogICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAkocmV2aXNpb24gMTU2
MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChr
aW5kID09IEJpcnRoVG9TcGlsbCB8fCBraW5kID09IFNwaWxsKTsKICAgICAgICAgVmFyaWFibGVF
dmVudCBldmVudDsKICAgICAgICAgZXZlbnQubV9pZCA9IGlkOwotICAgICAgICBldmVudC51LnZp
cnR1YWxSZWcgPSB2aXJ0dWFsUmVnaXN0ZXI7CisgICAgICAgIGV2ZW50LnUudmlydHVhbFJlZyA9
IHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKICAgICAgICAgZXZlbnQubV9raW5kID0ga2luZDsK
ICAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0ID0gZm9ybWF0OwogICAgICAgICByZXR1cm4gZXZl
bnQ7CkBAIC0xNTUsMTAgKzE1NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBldmVudDsK
ICAgICB9CiAgICAgCi0gICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgc2V0TG9jYWwoaW50IG9wZXJh
bmQsIERhdGFGb3JtYXQgZm9ybWF0KQorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IHNldExvY2Fs
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIERhdGFGb3JtYXQgZm9ybWF0KQogICAg
IHsKICAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKLSAgICAgICAgZXZlbnQudS52aXJ0dWFs
UmVnID0gb3BlcmFuZDsKKyAgICAgICAgZXZlbnQudS52aXJ0dWFsUmVnID0gdmlydHVhbFJlZ2lz
dGVyLm9mZnNldCgpOwogICAgICAgICBldmVudC5tX2tpbmQgPSBTZXRMb2NhbEV2ZW50OwogICAg
ICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIHJldHVybiBldmVudDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcg
KzExNSw3IEBAIHZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgCiAg
ICAgdW5zaWduZWQgbnVtVmFyaWFibGVzOwogICAgIGlmIChjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkKLSAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVD
YWxsRnJhbWUoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpLT5tX251bUNhbGxlZVJlZ2lzdGVy
cyArIG9wZXJhbmRUb0xvY2FsKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCk7CisgICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2Fs
bEZyYW1lKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMg
KyBWaXJ0dWFsUmVnaXN0ZXIoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
KS50b0xvY2FsKCk7CiAgICAgZWxzZQogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNv
ZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7CiAgICAgCkBAIC0yODMsNyArMjgzLDcgQEAg
dm9pZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAvLyB0aGF0IHRob3Nl
IHZhbHVlcyBkb24ndCBoYXZlIHRvIGJlIHJlY292ZXJlZC4gU2lnbmFsIHRoaXMgYnkgdXNpbmcg
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluSlNTdGFjaygpCiAgICAgZm9yIChJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVD
YWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGlu
ZUNhbGxGcmFtZSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBKU1N0YWNrOjpDYWxsRnJh
bWVIZWFkZXJTaXplOyBpLS07KQotICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzLnNldExvY2Fs
KG9wZXJhbmRUb0xvY2FsKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpIC0gaSAtIDEsIFZh
bHVlUmVjb3Zlcnk6OmFscmVhZHlJbkpTU3RhY2soKSk7CisgICAgICAgICAgICB2YWx1ZVJlY292
ZXJpZXMuc2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpLnRvTG9jYWwoKSAtIGkgLSAxLCBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5KU1N0YWNrKCkp
OwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFs
UmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0
ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAg
cHVibGljOgogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlubGluZUNhbGxGcmFtZUNv
dW50OyBpKyspIHsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gbV9ncmFwaC5tX2lubGluZUNhbGxGcmFtZXMtPmF0KGkpOwogICAgICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxp
bmVDYWxsRnJhbWUpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVxdWlyZWRDYWxsZWVSZWdpc3Rl
cnMgPSBvcGVyYW5kVG9Mb2NhbChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSArIGNvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7CisgICAgICAgICAgICB1bnNpZ25lZCByZXF1aXJl
ZENhbGxlZVJlZ2lzdGVycyA9IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0KS50b0xvY2FsKCkgKyBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwogICAg
ICAgICAgICAgaWYgKHJlcXVpcmVkQ2FsbGVlUmVnaXN0ZXJzID4gY2FsbGVlUmVnaXN0ZXJzKQog
ICAgICAgICAgICAgICAgIGNhbGxlZVJlZ2lzdGVycyA9IHJlcXVpcmVkQ2FsbGVlUmVnaXN0ZXJz
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1
bWVudEZvck9wZXJhbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDExICszOCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiBjbGFzcyBFeGl0QXJndW1lbnRGb3JPcGVyYW5kIHsKIHB1YmxpYzoKICAgICBFeGl0QXJndW1l
bnRGb3JPcGVyYW5kKCkKLSAgICAgICAgOiBtX29wZXJhbmQoSW52YWxpZFZpcnR1YWxSZWdpc3Rl
cikKKyAgICAgICAgOiBtX29wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgewogICAgIH0K
ICAgICAKLSAgICBFeGl0QXJndW1lbnRGb3JPcGVyYW5kKEV4aXRBcmd1bWVudCBleGl0QXJndW1l
bnQsIGludCBvcGVyYW5kKQorICAgIEV4aXRBcmd1bWVudEZvck9wZXJhbmQoRXhpdEFyZ3VtZW50
IGV4aXRBcmd1bWVudCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgICAgIDogbV9leGl0
QXJndW1lbnQoZXhpdEFyZ3VtZW50KQogICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQogICAg
IHsKQEAgLTUxLDEzICs1MSwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhbV9leGl0QXJndW1lbnQ7IH0KICAgICAKICAgICBjb25zdCBFeGl0QXJndW1l
bnQmIGV4aXRBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhpdEFyZ3VtZW50OyB9Ci0gICAg
aW50IG9wZXJhbmQoKSBjb25zdCB7IHJldHVybiBtX29wZXJhbmQ7IH0KKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQogICAgIAogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKICAgICBFeGl0QXJn
dW1lbnQgbV9leGl0QXJndW1lbnQ7Ci0gICAgaW50IG1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9vcGVyYW5kOwogfTsKIAogaW5saW5lIGJvb2wgbGVzc2VyQXJndW1lbnRJbmRleCgK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTU2MzY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJK
SVRTdHVicy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVn
aXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvTExWTUhlYWRlcnMuaD4KIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgewpAQCAtNzUsNyArNzYsNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRl
KQogICAgICAgICAvLyBQbGFudCBhIGNoZWNrIHRoYXQgc3VmZmljaWVudCBzcGFjZSBpcyBhdmFp
bGFibGUgaW4gdGhlIEpTU3RhY2suCiAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyOTEKICAgICAgICAgaml0LmFkZFB0cigKLSAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2FsVG9PcGVyYW5kKGNvZGVCbG9j
ay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpICogc2l6ZW9mKFJlZ2lzdGVyKSksCisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChjb2Rl
QmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikp
LAogICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1Qx
KTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHN0YWNrQ2hlY2sgPSBqaXQuYnJhbmNoUHRy
KAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92ZSwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTYzNjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOCBAQAogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNp
bmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5j
bHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisKICNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+CiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKQEAgLTY5LDcgKzcxLDcgQEAgcHVibGlj
OgogICAgICAgICAsIG1faGVhcHMoc3RhdGUuY29udGV4dCkKICAgICAgICAgLCBtX291dChzdGF0
ZS5jb250ZXh0KQogICAgICAgICAsIG1fdmFsdWVTb3VyY2VzKE9wZXJhbmRzTGlrZSwgc3RhdGUu
Z3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAgICAgLCBtX2xhc3RTZXRPcGVy
YW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAgICwgbV9sYXN0U2V0
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoKSkKICAgICAgICAgLCBtX2V4aXRUaHVua0dlbmVyYXRv
cihzdGF0ZSkKICAgICAgICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgICAgICAsIG1faW50
ZXJwcmV0ZXIoc3RhdGUuZ3JhcGgsIG1fc3RhdGUpCkBAIC01MjQsNyArNTI2LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudCgpCiAgICAgewogICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgaW50IG9wZXJhbmQgPSB2YXJpYWJsZS0+b3BlcmFuZCgpOworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlLT5sb2NhbCgpOwogCiAgICAgICAgIExWYWx1ZSBq
c1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOwogCkBAIC01NTQsNyAr
NTU2LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIg
PSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAogICAgICAgICAgICAgbV9mdGxTdGF0ZS5q
aXRDb2RlLT5mdGxGb3JPU1JFbnRyeSgpLT5lbnRyeUJ1ZmZlcigpLT5kYXRhQnVmZmVyKCkpOwot
ICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBv
cGVyYW5kVG9Mb2NhbChtX25vZGUtPnVubGlua2VkTG9jYWwoKSkpKSk7CisgICAgICAgIHNldEpT
VmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+dW5saW5r
ZWRMb2NhbCgpLnRvTG9jYWwoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0
TG9jYWwoKQpAQCAtMjAwMyw3ICsyMDA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAg
IExWYWx1ZSBjYWxsZWVGcmFtZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgIG1fY2FsbEZyYW1l
LAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKFJlZ2lzdGVyKSAqIGxvY2Fs
VG9PcGVyYW5kKGNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycykpKTsKKyAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihSZWdpc3RlcikgKiB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChjb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMpLm9mZnNldCgpKSk7CiAg
ICAgICAgIAogICAgICAgICBtX291dC5zdG9yZTMyKAogICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMihudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQpLApAQCAtMjAxNiw3ICsyMDE4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdz
OyArK2kpIHsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCiAgICAgICAgICAgICAgICAgbG93
SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSArIGkpKSwKLSAgICAgICAgICAg
ICAgICBhZGRyZXNzRm9yKGNhbGxlZUZyYW1lLCBhcmd1bWVudFRvT3BlcmFuZChpICsgZHVtbXlU
aGlzQXJndW1lbnQpKSk7CisgICAgICAgICAgICAgICAgYWRkcmVzc0ZvcihjYWxsZWVGcmFtZSwg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSArIGR1bW15VGhpc0FyZ3VtZW50KS5vZmZzZXQo
KSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291
dC5vcGVyYXRpb24oZnVuY3Rpb24pLCBjYWxsZWVGcmFtZSkpOwpAQCAtMzM1MSw3ICszMzUzLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhp
dC5hcHBlbmQoT1NSRXhpdCgKICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBt
X2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKLSAgICAg
ICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9m
aWxlLCBtX2xhc3RTZXRPcGVyYW5kLAorICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRh
cmdldCwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIG1fbGFzdFNldE9wZXJhbmQub2Zmc2V0
KCksCiAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkFyZ3VtZW50cygpLCBtX3Zh
bHVlU291cmNlcy5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUub3NyRXhp
dC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKICAgICAgICAgCkBAIC0zNjI2LDcg
KzM2MjgsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobm9kZS0+Y29udGFpbnNNb3ZIaW50
KCkpOwogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBab21iaWVIaW50KTsKICAgICAgICAg
Ci0gICAgICAgIGludCBvcGVyYW5kID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSBub2RlLT5sb2NhbCgpOwogICAgICAgICAKICAgICAgICAgbV9sYXN0
U2V0T3BlcmFuZCA9IG9wZXJhbmQ7CiAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQob3Bl
cmFuZCkgPSBWYWx1ZVNvdXJjZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwpAQCAtMzc0NCwxNCAr
Mzc0NiwyNiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9j
YWxsRnJhbWUsIG9wZXJhbmQpOwogICAgIH0KKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9y
KG1fY2FsbEZyYW1lLCBvcGVyYW5kLm9mZnNldCgpKTsKKyAgICB9CiAgICAgVHlwZWRQb2ludGVy
IHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gcGF5bG9hZEZv
cihtX2NhbGxGcmFtZSwgb3BlcmFuZCk7CiAgICAgfQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2Fk
Rm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBheWxv
YWRGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQub2Zmc2V0KCkpOworICAgIH0KICAgICBUeXBlZFBv
aW50ZXIgdGFnRm9yKGludCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRhZ0Zvciht
X2NhbGxGcmFtZSwgb3BlcmFuZCk7CiAgICAgfQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gdGFnRm9yKG1fY2Fs
bEZyYW1lLCBvcGVyYW5kLm9mZnNldCgpKTsKKyAgICB9CiAgICAgCiAgICAgVk0mIHZtKCkgeyBy
ZXR1cm4gbV9ncmFwaC5tX3ZtOyB9CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVy
biBtX2dyYXBoLm1fY29kZUJsb2NrOyB9CkBAIC0zNzgxLDcgKzM3OTUsNyBAQCBwcml2YXRlOgog
ICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9waGlzOwogICAgIAogICAgIE9wZXJhbmRzPFZh
bHVlU291cmNlPiBtX3ZhbHVlU291cmNlczsKLSAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbV9sYXN0U2V0T3BlcmFuZDsKICAgICBFeGl0VGh1bmtHZW5lcmF0
b3IgbV9leGl0VGh1bmtHZW5lcmF0b3I7CiAgICAgCiAgICAgSW5QbGFjZUFic3RyYWN0U3RhdGUg
bV9zdGF0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3Bw
CShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVu
dHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCB2b2lkKiBwcmVwYXJlT1NS
RW50cnkoCiAgICAgCiAgICAgZm9yIChpbnQgYXJndW1lbnQgPSB2YWx1ZXMubnVtYmVyT2ZBcmd1
bWVudHMoKTsgYXJndW1lbnQtLTspIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoCi0gICAgICAg
ICAgICBleGVjLT5yKGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSkuanNWYWx1ZSgpID09IHZh
bHVlcy5hcmd1bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgZXhlYy0+cih2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpLmpzVmFsdWUoKSA9PSB2YWx1ZXMu
YXJndW1lbnQoYXJndW1lbnQpKTsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoCkBA
IC03OCw3ICs3OCw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAgICAgc2NyYXRjaFts
b2NhbF0gPSBKU1ZhbHVlOjplbmNvZGUodmFsdWVzLmxvY2FsKGxvY2FsKSk7CiAgICAgCiAgICAg
aW50IHN0YWNrRnJhbWVTaXplID0gZW50cnlDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJz
OwotICAgIGlmICghdm0uaW50ZXJwcmV0ZXItPnN0YWNrKCkuZ3JvdygmZXhlYy0+cmVnaXN0ZXJz
KClbbG9jYWxUb09wZXJhbmQoc3RhY2tGcmFtZVNpemUpXSkpIHsKKyAgICBpZiAoIXZtLmludGVy
cHJldGVyLT5zdGFjaygpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW3ZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKHN0YWNrRnJhbWVTaXplKS5vZmZzZXQoKV0pKSB7CiAgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiY2F1
c2Ugc3RhY2sgZ3Jvd3RoIGZhaWxlZC5cbiIpOwogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkocmV2aXNpb24gMTU2MzY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzgsMjMgKzc4LDIzIEBAIHZvaWQgT1NSRXhpdDo6Y29udmVydFRvRm9yd2FyZCgKICAg
ICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaW50IG92ZXJyaWRkZW5P
cGVyYW5kID0gbGFzdE1vdkhpbnQtPmxvY2FsKCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIG92ZXJy
aWRkZW5PcGVyYW5kID0gbGFzdE1vdkhpbnQtPmxvY2FsKCk7CiAgICAgbV9sYXN0U2V0T3BlcmFu
ZCA9IG92ZXJyaWRkZW5PcGVyYW5kOwogICAgIAogICAgIC8vIElzIHRoZSB2YWx1ZSBmb3IgdGhp
cyBvcGVyYW5kIGJlaW5nIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgZXhpdCwgb3IgaXMK
ICAgICAvLyBpdCBzb21ldGhpbmcgZWxzZT8gSWYgaXQncyBhbiBhcmd1bWVudCBhbHJlYWR5LCB0
aGVuIHJlcGxhY2UgdGhhdCBhcmd1bWVudDsKICAgICAvLyBvdGhlcndpc2UgYWRkIGFub3RoZXIg
YXJndW1lbnQuCi0gICAgaWYgKG1fdmFsdWVzW292ZXJyaWRkZW5PcGVyYW5kXS5pc0FyZ3VtZW50
KCkpIHsKLSAgICAgICAgRXhpdEFyZ3VtZW50IGV4aXRBcmd1bWVudCA9IG1fdmFsdWVzW292ZXJy
aWRkZW5PcGVyYW5kXS5leGl0QXJndW1lbnQoKTsKKyAgICBpZiAobV92YWx1ZXNbb3ZlcnJpZGRl
bk9wZXJhbmQub2Zmc2V0KCldLmlzQXJndW1lbnQoKSkgeworICAgICAgICBFeGl0QXJndW1lbnQg
ZXhpdEFyZ3VtZW50ID0gbV92YWx1ZXNbb3ZlcnJpZGRlbk9wZXJhbmQub2Zmc2V0KCldLmV4aXRB
cmd1bWVudCgpOwogICAgICAgICBhcmd1bWVudHNbZXhpdEFyZ3VtZW50LmFyZ3VtZW50KCldID0g
dmFsdWUudmFsdWUoKTsKLSAgICAgICAgbV92YWx1ZXNbb3ZlcnJpZGRlbk9wZXJhbmRdID0gRXhp
dFZhbHVlOjpleGl0QXJndW1lbnQoCisgICAgICAgIG1fdmFsdWVzW292ZXJyaWRkZW5PcGVyYW5k
Lm9mZnNldCgpXSA9IEV4aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KAogICAgICAgICAgICAgZXhpdEFy
Z3VtZW50LndpdGhGb3JtYXQodmFsdWUuZm9ybWF0KCkpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IGFyZ3VtZW50cy5zaXplKCk7CiAgICAg
YXJndW1lbnRzLmFwcGVuZCh2YWx1ZS52YWx1ZSgpKTsKLSAgICBtX3ZhbHVlc1ttX2xhc3RTZXRP
cGVyYW5kXSA9IEV4aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KAorICAgIG1fdmFsdWVzW21fbGFzdFNl
dE9wZXJhbmQub2Zmc2V0KCldID0gRXhpdFZhbHVlOjpleGl0QXJndW1lbnQoCiAgICAgICAgIEV4
aXRBcmd1bWVudCh2YWx1ZS5mb3JtYXQoKSwgYXJndW1lbnQpKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2
ICs0MCw3IEBACiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgogI2lu
Y2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCisjaW5jbHVkZSAi
VmlydHVhbFJlZ2lzdGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApA
QCAtMTYwLDcgKzE2MSw3IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJh
c2UKICAgICAvLyBPZmZzZXQgd2l0aGluIHRoZSBleGl0IHN0dWJzIG9mIHRoZSBzdHViIGZvciB0
aGlzIGV4aXQuCiAgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0OwogICAgIAotICAg
IGludCBtX2xhc3RTZXRPcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBtX2xhc3RTZXRPcGVy
YW5kOwogICAgIAogICAgIE9wZXJhbmRzPEV4aXRWYWx1ZT4gbV92YWx1ZXM7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3Bw
CShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgc3RhdGljIHZv
aWQgY29tcGlsZVN0dWIoCiAgICAgICAgIGlmICghdmFsdWUuaXNBcmd1bWVudCgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBzb3J0ZWRBcmd1bWVudHMuYXBwZW5k
KEV4aXRBcmd1bWVudEZvck9wZXJhbmQodmFsdWUuZXhpdEFyZ3VtZW50KCksIG9wZXJhbmQpKTsK
KyAgICAgICAgc29ydGVkQXJndW1lbnRzLmFwcGVuZChFeGl0QXJndW1lbnRGb3JPcGVyYW5kKHZh
bHVlLmV4aXRBcmd1bWVudCgpLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkpKTsKICAgICB9CiAg
ICAgc3RkOjpzb3J0KHNvcnRlZEFyZ3VtZW50cy5iZWdpbigpLCBzb3J0ZWRBcmd1bWVudHMuZW5k
KCksIGxlc3NlckFyZ3VtZW50SW5kZXgpOwogICAgIApAQCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRp
YyB2b2lkIGNvbXBpbGVTdHViKAogICAgIGppdC5wb3AoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBqaXQucG9wKEdQUkluZm86Om5vbkFyZ0dQUjApOyAvLyBpZ25v
cmUgdGhlIHJlc3VsdC4KICAgICAKLSAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpIHsKKyAgICBpZiAoZXhpdC5tX2xhc3RTZXRP
cGVyYW5kLmlzVmFsaWQoKSkgewogICAgICAgICBqaXQubG9hZDY0KAogICAgICAgICAgICAgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKGV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86
OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxOCw3ICsyMTgsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAKICAgICAgICAgLy8gUmVhZCBh
IHJlZ2lzdGVyIGZyb20gdGhlIGNvZGVmcmFtZSAob3IgY29uc3RhbnQgZnJvbSB0aGUgQ29kZUJs
b2NrKS4KICAgICAgICAgUmVnaXN0ZXImIHIoaW50KTsKLSAgICAgICAgLy8gUmVhZCBhIHJlZ2lz
dGVyIGZvciBhIG5vbi1jb25zdGFudCAKKyAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZvciBh
IG5vbi1jb25zdGFudAogICAgICAgICBSZWdpc3RlciYgdW5jaGVja2VkUihpbnQpOwogCiAgICAg
ICAgIC8vIEFjY2VzcyB0byBhcmd1bWVudHMgYXMgcGFzc2VkLiAoQWZ0ZXIgY2FwdHVyZSwgYXJn
dW1lbnRzIG1heSBtb3ZlIHRvIGEgZGlmZmVyZW50IGxvY2F0aW9uLikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNp
b24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQAogI2luY2x1ZGUgIlN0cmlj
dEV2YWxBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUg
IlZNU3RhY2tCb3VuZHMuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKwogI2luY2x1
ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNrU3Rh
dHMuaD4KQEAgLTMxOCw3ICszMjAsNyBAQCB2b2lkIEludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJz
KENhbGxGcmFtCiAgICAgd2hpbGUgKGl0ID4gZW5kKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGl0
LT5qc1ZhbHVlKCk7CiAgICAgICAgIGludCByZWdpc3Rlck51bWJlciA9IGl0IC0gY2FsbEZyYW1l
LT5yZWdpc3RlcnMoKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBjb2RlQmxvY2stPm5hbWVGb3JS
ZWdpc3RlcihyZWdpc3Rlck51bWJlcik7CisgICAgICAgIFN0cmluZyBuYW1lID0gY29kZUJsb2Nr
LT5uYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyTnVtYmVyKSk7CiAgICAg
ICAgIGRhdGFMb2dGKCJbciUgM2QgJTE0c10gICAgICB8ICUxMHAgfCAlLTE2cyAweCVsbGQgXG4i
LCByZWdpc3Rlck51bWJlciwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgaXQsIHRvQ1N0cmluZyh2KS5k
YXRhKCksIChsb25nIGxvbmcpSlNWYWx1ZTo6ZW5jb2RlKHYpKTsKICAgICAgICAgaXQrKzsKICAg
ICB9CkBAIC0zNTIsNyArMzU0LDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyhD
YWxsRnJhbQogICAgICAgICBkbyB7CiAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBpdC0+anNWYWx1
ZSgpOwogICAgICAgICAgICAgaW50IHJlZ2lzdGVyTnVtYmVyID0gaXQgLSBjYWxsRnJhbWUtPnJl
Z2lzdGVycygpOwotICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBjb2RlQmxvY2stPm5hbWVGb3JS
ZWdpc3RlcihyZWdpc3Rlck51bWJlcik7CisgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGNvZGVC
bG9jay0+bmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck51bWJlcikpOwog
ICAgICAgICAgICAgZGF0YUxvZ0YoIltyJSAzZCAlMTRzXSAgICAgIHwgJTEwcCB8ICUtMTZzIDB4
JWxsZCBcbiIsIHJlZ2lzdGVyTnVtYmVyLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBpdCwgdG9DU3Ry
aW5nKHYpLmRhdGEoKSwgKGxvbmcgbG9uZylKU1ZhbHVlOjplbmNvZGUodikpOwogICAgICAgICAg
ICAgLS1pdDsKICAgICAgICAgICAgIC0tcmVnaXN0ZXJDb3VudDsKQEAgLTQxMCwxMyArNDEyLDEz
IEBAIHN0YXRpYyBib29sIHVud2luZENhbGxGcmFtZShTdGFja1Zpc2l0b3IKICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZpc2l0b3ItPmlzSW5saW5lZEZyYW1l
KCkpOwogI2VuZGlmCi0gICAgICAgIGFjdGl2YXRpb24gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
b2xkQ29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOworICAgICAgICBh
Y3RpdmF0aW9uID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9sZENvZGVCbG9jay0+YWN0aXZhdGlv
blJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKTsKICAgICAgICAgaWYgKGFjdGl2YXRpb24p
CiAgICAgICAgICAgICBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlvbiktPnRlYXJPZmYo
KnNjb3BlLT52bSgpKTsKICAgICB9CiAKICAgICBpZiAob2xkQ29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZSAmJiBvbGRDb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSkgewotICAg
ICAgICBpZiAoSlNWYWx1ZSBhcmd1bWVudHMgPSB2aXNpdG9yLT5yKHVubW9kaWZpZWRBcmd1bWVu
dHNSZWdpc3RlcihvbGRDb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpKS5qc1ZhbHVlKCkp
IHsKKyAgICAgICAgaWYgKEpTVmFsdWUgYXJndW1lbnRzID0gdmlzaXRvci0+cih1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIob2xkQ29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKS5vZmZz
ZXQoKSkuanNWYWx1ZSgpKSB7CiAgICAgICAgICAgICBpZiAoYWN0aXZhdGlvbikKICAgICAgICAg
ICAgICAgICBqc0Nhc3Q8QXJndW1lbnRzKj4oYXJndW1lbnRzKS0+ZGlkVGVhck9mZkFjdGl2YXRp
b24oY2FsbEZyYW1lLCBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlvbikpOwogI2lmIEVO
QUJMRShERkdfSklUKQpAQCAtNjk3LDcgKzY5OSw3IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5m
byogSW50ZXJwcmV0ZXI6OnUKIAogICAgIC8vIFVud2luZCB0aGUgc2NvcGUgY2hhaW4gd2l0aGlu
IHRoZSBleGNlcHRpb24gaGFuZGxlcidzIGNhbGwgZnJhbWUuCiAgICAgaW50IHRhcmdldFNjb3Bl
RGVwdGggPSBoYW5kbGVyLT5zY29wZURlcHRoOwotICAgIGlmIChjb2RlQmxvY2stPm5lZWRzQWN0
aXZhdGlvbigpICYmIGNhbGxGcmFtZS0+dW5jaGVja2VkUihjb2RlQmxvY2stPmFjdGl2YXRpb25S
ZWdpc3RlcigpKS5qc1ZhbHVlKCkpCisgICAgaWYgKGNvZGVCbG9jay0+bmVlZHNBY3RpdmF0aW9u
KCkgJiYgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGNvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVy
KCkub2Zmc2V0KCkpLmpzVmFsdWUoKSkKICAgICAgICAgKyt0YXJnZXRTY29wZURlcHRoOwogCiAg
ICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE1NjM2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE1Niw3ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIEFkZHJlc3Mg
YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdp
c3RlciAqIHNpemVvZihSZWdpc3RlcikpOworICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJl
Z2lzdGVyKSk7CiAgICAgfQogICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoaW50IG9wZXJh
bmQpCiAgICAgewpAQCAtMTY1LDcgKzE2NSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBBZGRy
ZXNzIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdp
c3RlciAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSk7CiAgICAgfQogICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihpbnQgb3BlcmFuZCkKICAgICB7
CkBAIC0xNzQsNyArMTc0LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEFkZHJlc3MgcGF5bG9h
ZEZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3RlciAq
IHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKTsKICAgICB9CiAgICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkK
ICAgICB7CkBAIC0zODAsMTYgKzM4MCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2Jh
c2VsaW5lQ29kZUJsb2NrOwogICAgIH0KICAgICAKLSAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXJG
b3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgVmlydHVhbFJlZ2lzdGVy
IGFyZ3VtZW50c1JlZ2lzdGVyRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQog
ICAgIHsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICByZXR1cm4g
Y29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCk7CiAgICAgICAgIAotICAgICAgICByZXR1
cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoCi0gICAgICAgICAgICBpbmxp
bmVDYWxsRnJhbWUpLT5hcmd1bWVudHNSZWdpc3RlcigpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldDsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihiYXNlbGluZUNvZGVCbG9j
a0ZvcklubGluZUNhbGxGcmFtZSgKKyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSktPmFyZ3Vt
ZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsK
ICAgICB9CiAgICAgCi0gICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmln
aW4mIGNvZGVPcmlnaW4pCisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyRm9y
KGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICByZXR1cm4gYXJn
dW1lbnRzUmVnaXN0ZXJGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgzLDggKzU4MywxMSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0R2V0SklUU3R1YkFyZyhpbnQgYXJn
dW1lbnROdW1iZXIsIFJlZ2lzdGVySUQgZHN0KTsKIAogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOworICAgICAgICB2b2lkIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwog
ICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklE
IGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOworICAgICAgICB2b2lkIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZp
cnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOworICAg
ICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVn
aXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGRz
dCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQg
Ki8gPSBmYWxzZSkKICAgICAgICAgewogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHBheWxvYWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgSklUOjpjb21waWxlTG9h
ZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24KICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKICAgICBKdW1wTGlz
dCBlbmQ7CiAgICAgYm9vbCBjYW5PcHRpbWl6ZSA9IG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRz
KCkKLSAgICAgICAgJiYgYXJndW1lbnRzID09IG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3Rl
cigpCisgICAgICAgICYmIGFyZ3VtZW50cyA9PSBtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0
ZXIoKS5vZmZzZXQoKQogICAgICAgICAmJiAhbV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNs
b3dBcmd1bWVudHMoKTsKIAogICAgIGlmIChjYW5PcHRpbWl6ZSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTgsNyAr
NzU4LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHNyYyA9PSBtX2xhc3RSZXN1bHRCeXRlY29kZVJl
Z2lzdGVyICYmIG1fY29kZUJsb2NrLT5pc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgob3BlcmFuZFRv
TG9jYWwoc3JjKSkgJiYgIWF0SnVtcFRhcmdldCgpKSB7CisgICAgaWYgKHNyYyA9PSBtX2xhc3RS
ZXN1bHRCeXRlY29kZVJlZ2lzdGVyICYmIG9wZXJhbmRJc0xvY2FsKHNyYykgJiYgbV9jb2RlQmxv
Y2stPmlzVGVtcG9yYXJ5UmVnaXN0ZXJJbmRleChWaXJ0dWFsUmVnaXN0ZXIoc3JjKS50b0xvY2Fs
KCkpICYmICFhdEp1bXBUYXJnZXQoKSkgewogICAgICAgICAvLyBUaGUgYXJndW1lbnQgd2Ugd2Fu
dCBpcyBhbHJlYWR5IHN0b3JlZCBpbiBlYXgKICAgICAgICAgaWYgKGRzdCAhPSBjYWNoZWRSZXN1
bHRSZWdpc3RlcikKICAgICAgICAgICAgIG1vdmUoY2FjaGVkUmVzdWx0UmVnaXN0ZXIsIGRzdCk7
CkBAIC03NzAsNiArNzcwLDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmUKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiB9CiAKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMub2Zmc2V0KCks
IGRzdCk7Cit9CisKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIp
CiB7CiAgICAgaWYgKHNyYzIgPT0gbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlcikgewpAQCAt
NzgxLDYgKzc4NiwxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJl
CiAgICAgfQogfQogCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0
ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQoreworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KHNyYzEub2Zmc2V0KCksIGRzdDEsIHNyYzIub2Zmc2V0KCksIGRzdDIpOworfQorCiBBTFdBWVNf
SU5MSU5FIGludDMyX3QgSklUOjpnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQoaW50IHNy
YykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwpAQCAt
Nzk3LDYgKzgwNywxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJl
CiAgICAgbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlciA9IChmcm9tID09IGNhY2hlZFJlc3Vs
dFJlZ2lzdGVyKSA/IGRzdCA6IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CiB9CiAK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQoreworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0Lm9mZnNldCgpLCBmcm9tKTsKK30KKwogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEluaXRSZWdpc3RlcihpbnQgZHN0KQogewogICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRz
dCAqIHNpemVvZihSZWdpc3RlcikpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
NiArMzksNyBAQAogI2luY2x1ZGUgIkpTVmFyaWFibGVPYmplY3QuaCIKICNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCisjaW5jbHVkZSAiVmlydHVhbFJl
Z2lzdGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xMDk5LDcgKzExMDAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnRlcihJbnN0cnVjdGlvbiopCiAgICAgLy8gcmVnaXN0ZXJzIHRvIHph
cCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAg
Ly8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm1fbnVtVmFyczsgKytpKQotICAgICAgICBlbWl0
U3RvcmUobG9jYWxUb09wZXJhbmQoaSksIGpzVW5kZWZpbmVkKCkpOworICAgICAgICBlbWl0U3Rv
cmUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkub2Zmc2V0KCksIGpzVW5kZWZpbmVkKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfYWN0aXZhdGlvbihJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCShyZXZpc2lvbiAxNTYzNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAi
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNs
dWRlICJTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTI1Nyw5ICsyNTgsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90ZWFy
X29mZl9hcmd1bWVudHMoSW5zCiAgICAgaW50IGFyZ3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IGFjdGl2YXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwogCi0gICAgSnVtcCBhcmdzTm90Q3JlYXRlZCA9IGJyYW5jaFRlc3Q2NCha
ZXJvLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogKHVubW9k
aWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHMpKSkpOworICAgIEp1bXAgYXJnc05vdENy
ZWF0ZWQgPSBicmFuY2hUZXN0NjQoWmVybywgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2l6
ZW9mKFJlZ2lzdGVyKSAqICh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyKGFyZ3VtZW50cykpLm9mZnNldCgpKSkpOwogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGN0aV9vcF90ZWFyX29mZl9hcmd1bWVudHMpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHMpLCByZWdUMik7CisgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdp
c3Rlcihhcmd1bWVudHMpKS5vZmZzZXQoKSwgcmVnVDIpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KGFjdGl2YXRpb24sIHJlZ1QyKTsKICAgICBzdHViQ2FsbC5jYWxsKCk7CiAgICAgYXJnc05v
dENyZWF0ZWQubGluayh0aGlzKTsKQEAgLTUwNyw3ICs1MDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcG5hbWVzKEluc3RydWN0aW9uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZShiYXNl
KSkKICAgICAgICAgaXNOb3RPYmplY3QuYXBwZW5kKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDAp
KTsKLSAgICBpZiAoYmFzZSAhPSBtX2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkgfHwgbV9jb2Rl
QmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CisgICAgaWYgKGJhc2UgIT0gbV9jb2RlQmxvY2stPnRo
aXNSZWdpc3RlcigpLm9mZnNldCgpIHx8IG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgewog
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCByZWdUMik7CiAgICAgICAgIGlzTm90T2JqZWN0LmFwcGVuZChlbWl0SnVtcElmTm90T2JqZWN0
KHJlZ1QyKSk7CiAgICAgfQpAQCAtODM2LDcgKzgzNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dGVyKEluc3RydWN0aW9uKikKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcg
R0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm1fbnVtVmFyczsK
ICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0
UmVnaXN0ZXIobG9jYWxUb09wZXJhbmQoaikpOworICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGopLm9mZnNldCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX2FjdGl2YXRpb24oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTg1NSw3ICs4NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfYXJndW1lbnRzKEluc3Ry
CiAgICAgSnVtcCBhcmdzQ3JlYXRlZCA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCBBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogZHN0KSk7CiAgICAgSklUU3R1YkNh
bGwodGhpcywgY3RpX29wX2NyZWF0ZV9hcmd1bWVudHMpLmNhbGwoKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcih1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIoZHN0KSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcih1bm1v
ZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGRzdCkpKTsKICAgICBhcmdz
Q3JlYXRlZC5saW5rKHRoaXMpOwogfQogCkBAIC0xMTMzLDcgKzExMzQsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwog
ICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKS5jYWxsKCk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50cykpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3Rlcihhcmd1bWVudHMpKSk7CiAgICAgCiAgICAgc2tpcEFyZ3VtZW50c0NyZWF0aW9uLmxp
bmsodGhpcyk7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV92
YWxfZ2VuZXJpYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAko
cmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNDcsNyArMTA0Nyw3IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKHZvaWQsIG9wdGltaXplKQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RI
YW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVz
dEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkKLSAgICAgICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1l
bnQob3BlcmFuZCkKKyAgICAgICAgICAgICAgICAmJiAhVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQp
LnRvQXJndW1lbnQoKQogICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9
PSBGdW5jdGlvbkNvZGUKICAgICAgICAgICAgICAgICAmJiBjb2RlQmxvY2stPnNwZWNpYWxpemF0
aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpIHsKICAgICAgICAgICAgICAgICAvLyBVZ2gu
IElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1lbnQgbWF5IGhvbGQg
Z2FyYmFnZS4gSXQgd2lsbApAQCAtMTE1NCw3ICsxMTU0LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04oSlNPYmplY3QqLCBvcF9uZXdfZgogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFj
a0ZyYW1lKTsKICAgICAKLSAgICBBU1NFUlQoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSB8fCAhc3RhY2tGcmFtZS5jYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkgfHwgc3RhY2tGcmFtZS5jYWxsRnJh
bWUtPnVuY2hlY2tlZFIoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5hY3RpdmF0
aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsKKyAgICBBU1NFUlQoc3RhY2tGcmFtZS5jYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSB8fCAhc3RhY2tGcmFt
ZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkgfHwgc3RhY2tG
cmFtZS5jYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpKTsKICAgICByZXR1
cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFy
Z3NbMF0uZnVuY3Rpb24oKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNjb3BlKCkpOwogfQogCkBA
IC0xOTMxLDcgKzE5MzEsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25l
d19mCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gc3RhY2tGcmFtZS5hcmdz
WzBdLmZ1bmN0aW9uKCk7CiAgICAgSlNGdW5jdGlvbiogZnVuYyA9IEpTRnVuY3Rpb246OmNyZWF0
ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLCBjYWxsRnJhbWUtPnNjb3BlKCkpOwotICAgIEFTU0VSVChj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSB8fCAhY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpIHx8IGNhbGxGcmFtZS0+
dW5jaGVja2VkUihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSku
anNWYWx1ZSgpKTsKKyAgICBBU1NFUlQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Y29kZVR5cGUo
KSAhPSBGdW5jdGlvbkNvZGUgfHwgIWNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNj
b3BlQ2hhaW4oKSB8fCBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKSk7CiAKICAgICByZXR1
cm4gZnVuYzsKIH0KQEAgLTE5NTksNyArMTk1OSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVu
Y29kZWRKU1ZhbHVlLCBvcF8KICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1l
LT5jYWxsZXJGcmFtZSgpOwogICAgIEFTU0VSVChjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNv
ZGVCbG9jaygpLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZQogICAgICAgICB8fCAhY2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpCi0g
ICAgICAgIHx8IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+dW5jaGVja2VkUihjYWxsRnJhbWUt
PmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1
ZSgpKTsKKyAgICAgICAgfHwgY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT51bmNoZWNrZWRSKGNh
bGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3Rlcigp
Lm9mZnNldCgpKS5qc1ZhbHVlKCkpOwogCiAgICAgY2FsbEZyYW1lLT5zZXRTY29wZShjYWxsZXJG
cmFtZS0+c2NvcGUoKSk7CiAgICAgY2FsbEZyYW1lLT5zZXRSZXR1cm5QQyhzdGF0aWNfY2FzdDxJ
bnN0cnVjdGlvbio+KChTVFVCX1JFVFVSTl9BRERSRVNTKS52YWx1ZSgpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9u
IDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY5Nyw3ICs2OTcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfZ2V0X2FyZ3VtCiAgICAgICAgIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3Jl
YXRlKHZtLCBleGVjKTsKICAgICAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAg
IExMSU5UX09QKDIpID0gYXJndW1lbnRzOwotICAgICAgICBleGVjLT51bmNoZWNrZWRSKHVubW9k
aWZpZWRBcmd1bWVudHNSZWdpc3RlcihwY1syXS51Lm9wZXJhbmQpKSA9IGFyZ3VtZW50czsKKyAg
ICAgICAgZXhlYy0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyKHBjWzJdLnUub3BlcmFuZCkpLm9mZnNldCgpKSA9IGFyZ3VtZW50czsKICAgICB9
CiAgICAgCiAgICAgTExJTlRfUkVUVVJOX1BST0ZJTEVEKG9wX2dldF9hcmd1bWVudF9ieV92YWws
IGdldEJ5VmFsKGV4ZWMsIGFyZ3VtZW50cywgTExJTlRfT1BfQygzKS5qc1ZhbHVlKCkpKTsKQEAg
LTkxNyw3ICs5MTcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2Z1bmMp
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZQogICAgICAgICAgICB8fCAh
Y29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkKLSAgICAgICAgICAgfHwgZXhlYy0+dW5j
aGVja2VkUihjb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpOworICAg
ICAgICAgICB8fCBleGVjLT51bmNoZWNrZWRSKGNvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVy
KCkub2Zmc2V0KCkpLmpzVmFsdWUoKSk7CiAjaWYgTExJTlRfU0xPV19QQVRIX1RSQUNJTkcKICAg
ICBkYXRhTG9nRigiQ3JlYXRpbmcgZnVuY3Rpb24hXG4iKTsKICNlbmRpZgpAQCAtMTEyOCw3ICsx
MTI4LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RlYXJfb2ZmXwogewogICAg
IExMSU5UX0JFR0lOKCk7CiAgICAgQVNTRVJUKGV4ZWMtPmNvZGVCbG9jaygpLT51c2VzQXJndW1l
bnRzKCkpOwotICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0ganNDYXN0PEFyZ3VtZW50cyo+KGV4
ZWMtPnVuY2hlY2tlZFIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKHBjWzFdLnUub3BlcmFu
ZCkpLmpzVmFsdWUoKSk7CisgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBqc0Nhc3Q8QXJndW1l
bnRzKj4oZXhlYy0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCkpLm9mZnNldCgpKS5qc1ZhbHVlKCkpOwogICAgIGlm
IChKU1ZhbHVlIGFjdGl2YXRpb25WYWx1ZSA9IExMSU5UX09QX0MoMikuanNWYWx1ZSgpKQogICAg
ICAgICBhcmd1bWVudHMtPmRpZFRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMsIGpzQ2FzdDxKU0FjdGl2
YXRpb24qPihhY3RpdmF0aW9uVmFsdWUpKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVl
bmNlLmNwcAkocmV2aXNpb24gMTU2MzY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgQnl0ZWNvZGVTZXF1ZW5jZTo6Qnl0ZWNvZGVTZXF1ZW5jZShDb2RlQgogICAgICAg
ICBpZiAoIWRlc2NyaXB0aW9uLmxlbmd0aCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIG91dC5yZXNldCgpOwotICAgICAgICBvdXQucHJpbnQoImFyZyIsIGksICIgKHIiLCBhcmd1
bWVudFRvT3BlcmFuZChpKSwgIik6ICIsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgb3V0LnByaW50
KCJhcmciLCBpLCAiIChyIiwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCks
ICIpOiAiLCBkZXNjcmlwdGlvbik7CiAgICAgICAgIG1faGVhZGVyLmFwcGVuZChvdXQudG9DU3Ry
aW5nKCkpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJ
KHJldmlzaW9uIDE1NjM2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsxOTksNyBAQCBTTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfY3JlYXRlX2FyZ3VtZW50CiAgICAgSlNWYWx1ZSBhcmd1bWVudHMg
PSBKU1ZhbHVlKEFyZ3VtZW50czo6Y3JlYXRlKHZtLCBleGVjKSk7CiAgICAgQ0hFQ0tfRVhDRVBU
SU9OKCk7CiAgICAgZXhlYy0+dW5jaGVja2VkUihwY1sxXS51Lm9wZXJhbmQpID0gYXJndW1lbnRz
OwotICAgIGV4ZWMtPnVuY2hlY2tlZFIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKHBjWzFd
LnUub3BlcmFuZCkpID0gYXJndW1lbnRzOworICAgIGV4ZWMtPnVuY2hlY2tlZFIodW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihwY1sxXS51Lm9wZXJhbmQpKS5vZmZz
ZXQoKSkgPSBhcmd1bWVudHM7CiAgICAgRU5EKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMTU2MzY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjE4LDEzICsyMTgsMTMgQEAgSlNWYWx1ZSBKU0FjdGl2YXRpb246OmFyZ3Vt
ZW50c0dldHRlcihFeAogICAgIGlmIChhY3RpdmF0aW9uLT5pc1Rvcm5PZmYoKSB8fCAhKGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPnVzZXNBcmd1bWVudHMoKSB8fCBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT51c2VzRXZhbCgpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBp
bnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5hcmd1bWVudHNS
ZWdpc3RlcigpOwotICAgIGlmIChKU1ZhbHVlIGFyZ3VtZW50cyA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihhcmd1bWVudHNSZWdpc3RlcikuanNWYWx1ZSgpKQorICAgIFZpcnR1YWxSZWdpc3RlciBh
cmd1bWVudHNSZWdpc3RlciA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lz
dGVyKCk7CisgICAgaWYgKEpTVmFsdWUgYXJndW1lbnRzID0gY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGFyZ3VtZW50c1JlZ2lzdGVyLm9mZnNldCgpKS5qc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBh
cmd1bWVudHM7Ci0gICAgaW50IHJlYWxBcmd1bWVudHNSZWdpc3RlciA9IHVubW9kaWZpZWRBcmd1
bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcik7CisgICAgaW50IHJlYWxBcmd1bWVudHNS
ZWdpc3RlciA9IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlciku
b2Zmc2V0KCk7CiAKICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWUoQXJndW1lbnRzOjpj
cmVhdGUoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUpKTsKLSAgICBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRzOworICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihhcmd1bWVudHNSZWdpc3Rlci5vZmZzZXQoKSkgPSBhcmd1bWVudHM7CiAgICAgY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKHJlYWxBcmd1bWVudHNSZWdpc3RlcikgPSBhcmd1bWVudHM7CiAg
ICAgCiAgICAgQVNTRVJUKGNhbGxGcmFtZS0+dW5jaGVja2VkUihyZWFsQXJndW1lbnRzUmVnaXN0
ZXIpLmpzVmFsdWUoKS5pbmhlcml0cyhBcmd1bWVudHM6OmluZm8oKSkpOwo=
</data>
<flag name="review"
          id="234915"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212724</attachid>
            <date>2013-09-26 10:48:23 -0700</date>
            <delta_ts>2013-09-26 10:48:23 -0700</delta_ts>
            <desc>Patch for Landing</desc>
            <filename>121732-3.patch</filename>
            <type>text/plain</type>
            <size>224081</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBA
CisyMDEzLTA5LTI1ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBzaG91bGQgYmUgYSBjbGFzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzMyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgR2VvZmZyZXkgR2FyZW4uCisKKyAgICAgICAgVGhpcyBpcyBhIHJlZmFjdG9yaW5nIGNoYW5n
ZS4gIENoYW5nZWQgVmlydHVhbFJlZ2lzdGVyIGZyb20gYW4gZW51bSB0byBhIGNsYXNzLgorICAg
ICAgICBNb3ZlZCBPcGVyYW5kczo6b3BlcmFuZElzQXJndW1lbnQoKSwgb3BlcmFuZFRvQXJndW1l
bnQoKSwgYXJndW1lbnRUb09wZXJhbmQoKQorICAgICAgICBhbmQgdGhlIHNpbWlsYXIgZnVuY3Rp
b25zIGZvciBsb2NhbHMgdG8gVmlydHVhbFJlZ2lzdGVyIGNsYXNzLgorCisgICAgICAgIFRoaXMg
aXMgaW4gcHJlcGFyYXRpb24gZm9yIGNoYW5naW5nIHRoZSBvZmZzZXQgZm9yIHRoZSBmaXJzdCBs
b2NhbCByZWdpc3RlciBmcm9tCisgICAgICAgIDAgdG8gLTEuICBUaGlzIGlzIG5lZWRlZCBzaW5j
ZSBtb3N0IG5hdGl2ZSBjYWxsaW5nIGNvbnZlbnRpb25zIGhhdmUgdGhlIGFyY2hpdGVjdGVkCisg
ICAgICAgIGZyYW1lIHBvaW50ZXIgKGUuZy4gJXJicCBmb3IgWDg2KSBwb2ludCBhdCB0aGUgc2xv
dCB0aGF0IHN0b3JlcyB0aGUgcHJldmlvdXMgZnJhbWUKKyAgICAgICAgcG9pbnRlci4gIExvY2Fs
IHZhbHVlcyBzdGFydCBiZWxvdyB0aGF0IGFkZHJlc3MuCisKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAq
IGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLmNwcDoKKyAgICAgICAgKiBieXRlY29kZS9PcGVyYW5kcy5oOgorICAgICAgICAqIGJ5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKiBieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaDoKKyAgICAg
ICAgKiBieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9SZWdpc3RlcklELmg6CisgICAgICAg
ICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwOgorICAgICAgICAqIGRmZy9ERkdBYnN0
cmFjdEhlYXAuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oOgorICAgICAgICAqIGRmZy9E
RkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhh
c2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgICogZGZnL0RGR0dy
YXBoLmg6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdO
b2RlLmg6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKiBkZmcvREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Lmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAgICAg
KiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAqIGRmZy9ERkdSZWdpc3Rl
ckJhbmsuaDoKKyAgICAgICAgKiBkZmcvREZHU2NvcmVCb2FyZC5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAqIGRmZy9E
RkdWYWxpZGF0ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5o
OgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAgKiBkZmcv
REZHVmFyaWFibGVFdmVudC5oOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFt
LmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNw
cDoKKyAgICAgICAgKiBmdGwvRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oOgorICAgICAgICAq
IGZ0bC9GVExMaW5rLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgor
ICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQu
Y3BwOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6CisgICAgICAgICogZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHA6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAg
ICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAqIGppdC9Bc3NlbWJs
eUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVENhbGwu
Y3BwOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgICogaml0L0pJVE9wY29k
ZXMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAqIGpp
dC9KSVRTdHVicy5jcHA6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAg
ICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHA6CisgICAgICAgICog
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0
aW9uLmNwcDoKKwogMjAxMy0wOS0yNiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUu
Y29tPgogCiAgICAgICAgIFdlYWsgc2hvdWxkIGhhdmUgYSBtb3ZlIGNvbnN0cnVjdG9yIGFuZCBt
b3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDEy
ICsxNjgsMTIgQEAgQ1N0cmluZyBDb2RlQmxvY2s6OnJlZ2lzdGVyTmFtZShpbnQgcikgYwogICAg
ICAgICByZXR1cm4gY29uc3RhbnROYW1lKHIsIGdldENvbnN0YW50KHIpKTsKIAogICAgIGlmIChv
cGVyYW5kSXNBcmd1bWVudChyKSkgewotICAgICAgICBpZiAoIW9wZXJhbmRUb0FyZ3VtZW50KHIp
KQorICAgICAgICBpZiAoIVZpcnR1YWxSZWdpc3RlcihyKS50b0FyZ3VtZW50KCkpCiAgICAgICAg
ICAgICByZXR1cm4gInRoaXMiOwotICAgICAgICByZXR1cm4gdG9DU3RyaW5nKCJhcmciLCBvcGVy
YW5kVG9Bcmd1bWVudChyKSk7CisgICAgICAgIHJldHVybiB0b0NTdHJpbmcoImFyZyIsIFZpcnR1
YWxSZWdpc3RlcihyKS50b0FyZ3VtZW50KCkpOwogICAgIH0KIAotICAgIHJldHVybiB0b0NTdHJp
bmcoImxvYyIsIG9wZXJhbmRUb0xvY2FsKHIpKTsKKyAgICByZXR1cm4gdG9DU3RyaW5nKCJsb2Mi
LCBWaXJ0dWFsUmVnaXN0ZXIocikudG9Mb2NhbCgpKTsKIH0KIAogc3RhdGljIENTdHJpbmcgcmVn
ZXhwVG9Tb3VyY2VTdHJpbmcoUmVnRXhwKiByZWdFeHApCkBAIC01MTQsMTEgKzUxNCwxMSBAQCB2
b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgaWYgKHVzZXNBcmd1
bWVudHMoKSkgewogICAgICAgICBvdXQucHJpbnRmKAogICAgICAgICAgICAgIjsgdXNlcyBhcmd1
bWVudHMsIGluIHIlZCwgciVkIiwKLSAgICAgICAgICAgIGFyZ3VtZW50c1JlZ2lzdGVyKCksCi0g
ICAgICAgICAgICB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIo
KSkpOworICAgICAgICAgICAgYXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSwKKyAgICAgICAg
ICAgIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcigpKS5vZmZz
ZXQoKSk7CiAgICAgfQogICAgIGlmIChuZWVkc0Z1bGxTY29wZUNoYWluKCkgJiYgY29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUpCi0gICAgICAgIG91dC5wcmludGYoIjsgYWN0aXZhdGlvbiBpbiBy
JWQiLCBhY3RpdmF0aW9uUmVnaXN0ZXIoKSk7CisgICAgICAgIG91dC5wcmludGYoIjsgYWN0aXZh
dGlvbiBpbiByJWQiLCBhY3RpdmF0aW9uUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CiAgICAgb3V0LnBy
aW50ZigiXG4iKTsKICAgICAKICAgICBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4gPSBpbnN0cnVj
dGlvbnMoKS5iZWdpbigpOwpAQCAtMTYxOSw3ICsxNjE5LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxv
Y2soU2NyaXB0RXhlY3V0YWJsZSogbwogCiAgICAgc2V0Q29uc3RhbnRSZWdpc3RlcnModW5saW5r
ZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzKCkpOwogICAgIGlmICh1bmxpbmtlZENvZGVC
bG9jay0+dXNlc0dsb2JhbE9iamVjdCgpKQotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3Vu
bGlua2VkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3RSZWdpc3RlcigpXS5zZXQoKm1fdm0sIG93bmVy
RXhlY3V0YWJsZSwgbV9nbG9iYWxPYmplY3QuZ2V0KCkpOworICAgICAgICBtX2NvbnN0YW50UmVn
aXN0ZXJzW3VubGlua2VkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3RSZWdpc3RlcigpLm9mZnNldCgp
XS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0YWJsZSwgbV9nbG9iYWxPYmplY3QuZ2V0KCkpOwogICAg
IG1fZnVuY3Rpb25EZWNscy5ncm93KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9u
RGVjbHMoKSk7CiAgICAgZm9yIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVt
YmVyT2ZGdW5jdGlvbkRlY2xzKCksIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlID0gdW5saW5rZWRD
b2RlQmxvY2stPmZ1bmN0aW9uRGVjbChpKTsKQEAgLTI1NTcsOSArMjU1Nyw5IEBAIHZvaWQgQ29k
ZUJsb2NrOjpjcmVhdGVBY3RpdmF0aW9uKENhbGxGcmEKIHsKICAgICBBU1NFUlQoY29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUpOwogICAgIEFTU0VSVChuZWVkc0Z1bGxTY29wZUNoYWluKCkpOwot
ICAgIEFTU0VSVCghY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRpb25SZWdpc3RlcigpKS5q
c1ZhbHVlKCkpOworICAgIEFTU0VSVCghY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRpb25S
ZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCkpOwogICAgIEpTQWN0aXZhdGlvbiogYWN0aXZh
dGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLCB0
aGlzKTsKLSAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYWN0aXZhdGlvblJlZ2lzdGVyKCkpID0g
SlNWYWx1ZShhY3RpdmF0aW9uKTsKKyAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYWN0aXZhdGlv
blJlZ2lzdGVyKCkub2Zmc2V0KCkpID0gSlNWYWx1ZShhY3RpdmF0aW9uKTsKICAgICBjYWxsRnJh
bWUtPnNldFNjb3BlKGFjdGl2YXRpb24pOwogfQogCkBAIC0zMzI3LDMyICszMzI3LDMwIEBAIGJv
b2wgQ29kZUJsb2NrOjp1c2VzT3Bjb2RlKE9wY29kZUlEIG9wY28KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVN0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3RlcihpbnQgcmVnaXN0ZXJOdW1i
ZXIpCitTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcikKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xU
YWJsZSgpLT5tX2xvY2spOwogICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9IHN5
bWJvbFRhYmxlKCktPmVuZChsb2NrZXIpOwogICAgIGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRl
cmF0b3IgcHRyID0gc3ltYm9sVGFibGUoKS0+YmVnaW4obG9ja2VyKTsgcHRyICE9IGVuZDsgKytw
dHIpIHsKLSAgICAgICAgaWYgKHB0ci0+dmFsdWUuZ2V0SW5kZXgoKSA9PSByZWdpc3Rlck51bWJl
cikgeworICAgICAgICBpZiAocHRyLT52YWx1ZS5nZXRJbmRleCgpID09IHZpcnR1YWxSZWdpc3Rl
ci5vZmZzZXQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgd29uJ3Qgd29yayBmcm9t
IHRoZSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1MzAwCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHB0ci0+a2V5KTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobmVlZHNBY3RpdmF0aW9uKCkg
JiYgcmVnaXN0ZXJOdW1iZXIgPT0gYWN0aXZhdGlvblJlZ2lzdGVyKCkpCisgICAgaWYgKG5lZWRz
QWN0aXZhdGlvbigpICYmIHZpcnR1YWxSZWdpc3RlciA9PSBhY3RpdmF0aW9uUmVnaXN0ZXIoKSkK
ICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYWN0aXZhdGlvbiIpOwotICAgIGlmIChyZWdp
c3Rlck51bWJlciA9PSB0aGlzUmVnaXN0ZXIoKSkKKyAgICBpZiAodmlydHVhbFJlZ2lzdGVyID09
IHRoaXNSZWdpc3RlcigpKQogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ0aGlzIik7CiAg
ICAgaWYgKHVzZXNBcmd1bWVudHMoKSkgewotICAgICAgICBpZiAocmVnaXN0ZXJOdW1iZXIgPT0g
YXJndW1lbnRzUmVnaXN0ZXIoKSkKKyAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlciA9PSBhcmd1
bWVudHNSZWdpc3RlcigpKQogICAgICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYXJndW1l
bnRzIik7Ci0gICAgICAgIGlmICh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRz
UmVnaXN0ZXIoKSkgPT0gcmVnaXN0ZXJOdW1iZXIpCisgICAgICAgIGlmICh1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIoKSkgPT0gdmlydHVhbFJlZ2lzdGVyKQog
ICAgICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgicmVhbCBhcmd1bWVudHMiKTsKICAgICB9
Ci0gICAgaWYgKHJlZ2lzdGVyTnVtYmVyIDwgMCkgewotICAgICAgICBpbnQgYXJndW1lbnRQb3Np
dGlvbiA9IC1yZWdpc3Rlck51bWJlcjsKLSAgICAgICAgYXJndW1lbnRQb3NpdGlvbiAtPSBKU1N0
YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgMTsKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9y
bWF0KCJhcmd1bWVudHNbJTNkXSIsIGFyZ3VtZW50UG9zaXRpb24gLSAxKS5pbXBsKCk7Ci0gICAg
fQorICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIuaXNBcmd1bWVudCgpKQorICAgICAgICByZXR1cm4g
U3RyaW5nOjpmb3JtYXQoImFyZ3VtZW50c1slM2RdIiwgdmlydHVhbFJlZ2lzdGVyLnRvQXJndW1l
bnQoKSkuaW1wbCgpOworCiAgICAgcmV0dXJuICIiOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDYgKzcxLDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogI2luY2x1ZGUg
IlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKKyNp
bmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAt
ODYsNyArODcsNyBAQCBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiBjbGFzcyBSZXBhdGNoQnVmZmVyOwogCi1pbmxpbmUgaW50IHVubW9kaWZpZWRBcmd1bWVu
dHNSZWdpc3RlcihpbnQgYXJndW1lbnRzUmVnaXN0ZXIpIHsgcmV0dXJuIGFyZ3VtZW50c1JlZ2lz
dGVyICsgMTsgfQoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB1bm1vZGlmaWVkQXJndW1lbnRzUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyKSB7IHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIub2Zmc2V0KCkgKyAxKTsgfQogCiBzdGF0aWMgQUxX
QVlTX0lOTElORSBpbnQgbWlzc2luZ1RoaXNPYmplY3RNYXJrZXIoKSB7IHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpOyB9CiAKQEAgLTE0OCw3ICsxNDksNyBAQCBwdWJsaWM6
CiAKICAgICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKGludCBpbmRleCkKICAgICB7
Ci0gICAgICAgIGlmIChpbmRleCA9PSBtX3RoaXNSZWdpc3RlciAmJiAhbV9pc1N0cmljdE1vZGUp
CisgICAgICAgIGlmIChpbmRleCA9PSBtX3RoaXNSZWdpc3Rlci5vZmZzZXQoKSAmJiAhbV9pc1N0
cmljdE1vZGUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBpZiAoaXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQpAQCAtMjk4LDU4ICsyOTksNjEgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0Vk0oVk0qIHZtKSB7IG1fdm0gPSB2bTsgfQogICAgIFZNKiB2bSgpIHsgcmV0
dXJuIG1fdm07IH0KIAotICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKGludCB0aGlzUmVnaXN0ZXIp
IHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KLSAgICBpbnQgdGhpc1JlZ2lzdGVy
KCkgY29uc3QgeyByZXR1cm4gbV90aGlzUmVnaXN0ZXI7IH0KKyAgICB2b2lkIHNldFRoaXNSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhp
c1JlZ2lzdGVyOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlcigpIGNvbnN0IHsg
cmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9CiAKICAgICBib29sIG5lZWRzRnVsbFNjb3BlQ2hhaW4o
KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOyB9
CiAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51c2Vz
RXZhbCgpOyB9CiAKLSAgICB2b2lkIHNldEFyZ3VtZW50c1JlZ2lzdGVyKGludCBhcmd1bWVudHNS
ZWdpc3RlcikKKyAgICB2b2lkIHNldEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBh
cmd1bWVudHNSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIEFTU0VSVChhcmd1bWVudHNSZWdpc3Rl
ciAhPSAoaW50KUludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQoYXJndW1l
bnRzUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgbV9hcmd1bWVudHNSZWdpc3RlciA9IGFy
Z3VtZW50c1JlZ2lzdGVyOwogICAgICAgICBBU1NFUlQodXNlc0FyZ3VtZW50cygpKTsKICAgICB9
Ci0gICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyKCkgY29uc3QKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
YXJndW1lbnRzUmVnaXN0ZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKHVzZXNBcmd1
bWVudHMoKSk7CiAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyOwogICAgIH0KLSAg
ICBpbnQgdW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXIoKQorICAgIFZpcnR1YWxSZWdpc3RlciB1
bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlcigpCiAgICAgewogICAgICAgICBpZiAoIXVzZXNBcmd1
bWVudHMoKSkKLSAgICAgICAgICAgIHJldHVybiBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyOworICAg
ICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICByZXR1cm4gYXJndW1l
bnRzUmVnaXN0ZXIoKTsKICAgICB9Ci0gICAgdm9pZCBzZXRBY3RpdmF0aW9uUmVnaXN0ZXIoaW50
IGFjdGl2YXRpb25SZWdpc3RlcikKKyAgICB2b2lkIHNldEFjdGl2YXRpb25SZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgYWN0aXZhdGlvblJlZ2lzdGVyKQogICAgIHsKICAgICAgICAgbV9hY3RpdmF0
aW9uUmVnaXN0ZXIgPSBhY3RpdmF0aW9uUmVnaXN0ZXI7CiAgICAgfQotICAgIGludCBhY3RpdmF0
aW9uUmVnaXN0ZXIoKSBjb25zdAorCisgICAgVmlydHVhbFJlZ2lzdGVyIGFjdGl2YXRpb25SZWdp
c3RlcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobmVlZHNGdWxsU2NvcGVDaGFpbigp
KTsKICAgICAgICAgcmV0dXJuIG1fYWN0aXZhdGlvblJlZ2lzdGVyOwogICAgIH0KLSAgICBpbnQg
dW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyKCkKKworICAgIFZpcnR1YWxSZWdpc3RlciB1bmNo
ZWNrZWRBY3RpdmF0aW9uUmVnaXN0ZXIoKQogICAgIHsKICAgICAgICAgaWYgKCFuZWVkc0Z1bGxT
Y29wZUNoYWluKCkpCi0gICAgICAgICAgICByZXR1cm4gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsK
KyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgcmV0dXJuIGFj
dGl2YXRpb25SZWdpc3RlcigpOwogICAgIH0KLSAgICBib29sIHVzZXNBcmd1bWVudHMoKSBjb25z
dCB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyICE9IChpbnQpSW52YWxpZFZpcnR1YWxSZWdp
c3RlcjsgfQorCisgICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1
bWVudHNSZWdpc3Rlci5pc1ZhbGlkKCk7IH0KIAogICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX25lZWRzQWN0aXZhdGlvbjsKICAgICB9CiAK
LSAgICBib29sIGlzQ2FwdHVyZWQoaW50IG9wZXJhbmQsIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gMCkgY29uc3QKKyAgICBib29sIGlzQ2FwdHVyZWQoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gMCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAg
IHJldHVybiBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSAmJiB1c2VzQXJndW1lbnRzKCk7Cisg
ICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVy
YW5kLnRvQXJndW1lbnQoKSAmJiB1c2VzQXJndW1lbnRzKCk7CiAKICAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVk
VmFycy5nZXQob3BlcmFuZFRvTG9jYWwob3BlcmFuZCkpOworICAgICAgICAgICAgcmV0dXJuIGlu
bGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzLmdldChvcGVyYW5kLnRvTG9jYWwoKSk7CiAKICAg
ICAgICAgLy8gVGhlIGFjdGl2YXRpb24gb2JqZWN0IGlzbid0IGluIHRoZSBjYXB0dXJlZCByZWdp
b24sIGJ1dCBpdCdzICJjYXB0dXJlZCIKICAgICAgICAgLy8gaW4gdGhlIHNlbnNlIHRoYXQgc3Rv
cmVzIHRvIGl0cyBsb2NhdGlvbiBjYW4gYmUgb2JzZXJ2ZWQgaW5kaXJlY3RseS4KQEAgLTM2OCw4
ICszNzIsOCBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghc3ltYm9sVGFibGUoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICByZXR1cm4gb3BlcmFuZCA8PSBzeW1ib2xUYWJs
ZSgpLT5jYXB0dXJlU3RhcnQoKQotICAgICAgICAgICAgJiYgb3BlcmFuZCA+IHN5bWJvbFRhYmxl
KCktPmNhcHR1cmVFbmQoKTsKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQub2Zmc2V0KCkgPD0gc3lt
Ym9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCkKKyAgICAgICAgICAgICYmIG9wZXJhbmQub2Zmc2V0
KCkgPiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7CiAgICAgfQogCiAgICAgQ29kZVR5cGUg
Y29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29kZVR5cGUoKTsgfQpA
QCAtMzkxLDcgKzM5NSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXJFdmFsQ2FjaGUoKTsK
IAotICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoaW50IHJlZ2lzdGVyTnVtYmVyKTsKKyAgICBT
dHJpbmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKICNpZiBFTkFCTEUoSklU
KQogICAgIHZvaWQgc2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3Moc2l6ZV90IHNpemUpIHsg
bV9zdHJ1Y3R1cmVTdHViSW5mb3MuZ3JvdyhzaXplKTsgfQpAQCAtMTAyNyw5ICsxMDMxLDkgQEAg
cHJpdmF0ZToKICAgICBWTSogbV92bTsKIAogICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlv
bj4gbV9pbnN0cnVjdGlvbnM7Ci0gICAgaW50IG1fdGhpc1JlZ2lzdGVyOwotICAgIGludCBtX2Fy
Z3VtZW50c1JlZ2lzdGVyOwotICAgIGludCBtX2FjdGl2YXRpb25SZWdpc3RlcjsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fYXJndW1l
bnRzUmVnaXN0ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fYWN0aXZhdGlvblJlZ2lzdGVyOwog
CiAgICAgYm9vbCBtX2lzU3RyaWN0TW9kZTsKICAgICBib29sIG1fbmVlZHNBY3RpdmF0aW9uOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHJl
dmlzaW9uIDE1NjQ3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVj
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiU3BlY2lh
bFBvaW50ZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVD
aGFpbi5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3JUcmFpdHMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAkocmV2
aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVy
YW5kVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDI2ICs0NiwyNiBAQCBjbGFz
cyBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSB7CiBwdWJsaWM6CiAgICAgTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVLZXkoKQogICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoMCkgLy8gMCA9IGVt
cHR5IHZhbHVlCi0gICAgICAgICwgbV9vcGVyYW5kKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIC8v
IG5vdCBhIHZhbGlkIG9wZXJhbmQgaW5kZXggaW4gb3VyIGN1cnJlbnQgc2NoZW1lCisgICAgICAg
ICwgbV9vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigpKSAvLyBub3QgYSB2YWxpZCBvcGVyYW5kIGlu
ZGV4IGluIG91ciBjdXJyZW50IHNjaGVtZQogICAgIHsKICAgICB9CiAgICAgCiAgICAgTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQogICAg
ICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoMSkgLy8gMSA9IGRlbGV0ZWQgdmFsdWUKLSAgICAgICAg
LCBtX29wZXJhbmQoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgLy8gbm90IGEgdmFsaWQgb3BlcmFu
ZCBpbmRleCBpbiBvdXIgY3VycmVudCBzY2hlbWUKKyAgICAgICAgLCBtX29wZXJhbmQoVmlydHVh
bFJlZ2lzdGVyKCkpIC8vIG5vdCBhIHZhbGlkIG9wZXJhbmQgaW5kZXggaW4gb3VyIGN1cnJlbnQg
c2NoZW1lCiAgICAgewogICAgIH0KICAgICAKLSAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtl
eSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50IG9wZXJhbmQpCisgICAgTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVLZXkodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQogICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCiAgICAg
ICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NFUlQob3BlcmFuZCAh
PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgQVNTRVJUKG1fb3BlcmFuZC5pc1Zh
bGlkKCkpOwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gbV9vcGVyYW5kID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXI7CisgICAg
ICAgIHJldHVybiAhbV9vcGVyYW5kLmlzVmFsaWQoKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5JiBvdGhlcikgY29uc3QK
QEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVjb2RlT2Zmc2V0KSAr
IG1fb3BlcmFuZDsKKyAgICAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVjb2RlT2Zmc2V0
KSArIG1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQoKSBjb25zdApAQCAtODQsNyArODQsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VCghISp0aGlzKTsKICAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgfQotICAg
IGludCBvcGVyYW5kKCkgY29uc3QKKworICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKCkgY29u
c3QKICAgICB7CiAgICAgICAgIEFTU0VSVCghISp0aGlzKTsKICAgICAgICAgcmV0dXJuIG1fb3Bl
cmFuZDsKQEAgLTkyLDExICs5MywxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9vcGVyYW5k
ID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgbV9ieXRlY29kZU9mZnNldDsKKyAgICAgICAg
cmV0dXJuICFtX29wZXJhbmQuaXNWYWxpZCgpICYmIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgfQog
cHJpdmF0ZTogCiAgICAgdW5zaWduZWQgbV9ieXRlY29kZU9mZnNldDsKLSAgICBpbnQgbV9vcGVy
YW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBtX29wZXJhbmQ7CiB9OwogCiBzdHJ1Y3QgTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVLZXlIYXNoIHsKQEAgLTEyOSw3ICsxMzAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIHN0cnVjdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSA6IHB1YmxpYyBNaW5pbWFsVmFs
dWVQcm9maWxlIHsKICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSgpCiAgICAgICAgIDogTWlu
aW1hbFZhbHVlUHJvZmlsZSgpCi0gICAgICAgICwgbV9vcGVyYW5kKEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIpCisgICAgICAgICwgbV9vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigpKQogICAgIHsKICAg
ICB9CiAgICAgCkBAIC0xNDQsNyArMTQ1LDcgQEAgc3RydWN0IExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlIDogcHVibGljIAogICAgICAgICByZXR1cm4gTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXko
bV9ieXRlY29kZU9mZnNldCwgbV9vcGVyYW5kKTsKICAgICB9CiAgICAgCi0gICAgaW50IG1fb3Bl
cmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwogICAgIAogICAgIHR5cGVkZWYg
U2VnbWVudGVkVmVjdG9yPExhenlPcGVyYW5kVmFsdWVQcm9maWxlLCA4PiBMaXN0OwogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDE1NjQ3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlIE1ldGhvZE9mR2V0CiAgICAgcmVzdWx0Lm1fa2luZCA9IExhenlPcGVyYW5kOwog
ICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmNvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICByZXN1
bHQudS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCA9IGtleS5ieXRlY29kZU9mZnNldCgpOwot
ICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpOworICAgIHJl
c3VsdC51LmxhenlPcGVyYW5kLm9wZXJhbmQgPSBrZXkub3BlcmFuZCgpLm9mZnNldCgpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTUzLDcgKzUzLDcgQEAgRW5jb2RlZEpTVmFsdWUqIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVBybwogICAgICAgICByZXR1cm4gdS5wcm9maWxlLT5zcGVjRmFp
bEJ1Y2tldChpbmRleCk7CiAgICAgICAgIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAgICAg
ICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVP
ZmZzZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0
ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5kKSk7CiAgICAgICAgIAogICAgICAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAg
ICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDE1NjQ3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwyMCArMjgsMTMgQEAKIAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisKICNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1pbmxpbmUgaW50IGxvY2FsVG9PcGVyYW5kKGludCBsb2NhbCkgeyByZXR1cm4gLWxvY2FsOyB9
Ci1pbmxpbmUgYm9vbCBvcGVyYW5kSXNMb2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFu
ZCA8PSAwOyB9Ci1pbmxpbmUgaW50IG9wZXJhbmRUb0xvY2FsKGludCBvcGVyYW5kKSB7IHJldHVy
biAtb3BlcmFuZDsgfQotCi0vLyBhcmd1bWVudCAwIGlzICd0aGlzJy4KLWlubGluZSBib29sIG9w
ZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kID4gMDsgfQotaW5s
aW5lIGludCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAt
IENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7IH0KLWlubGluZSBpbnQgYXJndW1lbnRU
b09wZXJhbmQoaW50IGFyZ3VtZW50KSB7IHJldHVybiBhcmd1bWVudCArIENhbGxGcmFtZTo6dGhp
c0FyZ3VtZW50T2Zmc2V0KCk7IH0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9wZXJh
bmRWYWx1ZVRyYWl0czsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE0MywzMyArMTM2LDQz
IEBAIHB1YmxpYzoKICAgICBUJiBvcGVyYW5kKGludCBvcGVyYW5kKQogICAgIHsKICAgICAgICAg
aWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAgICBpbnQgYXJndW1l
bnQgPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKKyAgICAgICAgICAgIGludCBhcmd1bWVu
dCA9IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCk7CiAgICAgICAgICAgICBy
ZXR1cm4gbV9hcmd1bWVudHNbYXJndW1lbnRdOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICByZXR1cm4gbV9sb2NhbHNbb3BlcmFuZFRvTG9jYWwob3BlcmFuZCldOworCisgICAgICAgIHJl
dHVybiBtX2xvY2Fsc1tWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpXTsKICAgICB9
Ci0gICAgCisKKyAgICBUJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIp
CisgICAgeworICAgICAgICByZXR1cm4gb3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkp
OworICAgIH0KKwogICAgIGNvbnN0IFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3Bl
cmFuZChvcGVyYW5kKSk7IH0KICAgICAKICAgICBib29sIGhhc09wZXJhbmQoaW50IG9wZXJhbmQp
IGNvbnN0CiAgICAgewogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVf
dD4ob3BlcmFuZFRvTG9jYWwob3BlcmFuZCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9j
YWwoKSkgPCBudW1iZXJPZkxvY2FscygpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldE9wZXJh
bmQoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKG9wZXJh
bmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVy
YW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9IFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCk7CiAgICAgICAgICAgICBtX2FyZ3VtZW50
c1thcmd1bWVudF0gPSB2YWx1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgc2V0TG9jYWwob3BlcmFuZFRvTG9jYWwob3BlcmFuZCksIHZhbHVlKTsK
KyAgICAgICAgc2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSwgdmFs
dWUpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBzZXRPcGVyYW5k
KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSwgdmFsdWUpOworICAgIH0KKwogICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxz
KCk7IH0KICAgICBjb25zdCBUJiBhdChzaXplX3QgaW5kZXgpIGNvbnN0CiAgICAgewpAQCAtMTk5
LDE4ICsyMDIsMTggQEAgcHVibGljOgogICAgIGludCBvcGVyYW5kRm9ySW5kZXgoc2l6ZV90IGlu
ZGV4KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMo
KSkKLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudFRvT3BlcmFuZChpbmRleCk7Ci0gICAgICAg
IHJldHVybiBsb2NhbFRvT3BlcmFuZChpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCkpOworICAg
ICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KS5vZmZzZXQo
KTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVtYmVy
T2ZBcmd1bWVudHMoKSkub2Zmc2V0KCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0T3BlcmFu
ZEZpcnN0VGltZShpbnQgb3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCiAgICAgewogICAgICAgICBp
ZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKLSAgICAgICAgICAgIHNldEFyZ3VtZW50
Rmlyc3RUaW1lKG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgICAg
ICBzZXRBcmd1bWVudEZpcnN0VGltZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1bWVu
dCgpLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHNldExvY2FsRmlyc3RUaW1lKG9wZXJhbmRUb0xvY2FsKG9wZXJhbmQpLCB2YWx1ZSk7
CisgICAgICAgIHNldExvY2FsRmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xv
Y2FsKCksIHZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaWxsKFQgdmFsdWUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAJKHJldmlzaW9uIDE1NjQ3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw4ICsxOTQs
OCBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0qCiAgICAgLCBtX251
bUNhbGxlZVJlZ2lzdGVycygwKQogICAgICwgbV9udW1QYXJhbWV0ZXJzKDApCiAgICAgLCBtX3Zt
KHZtKQotICAgICwgbV9hcmd1bWVudHNSZWdpc3RlcigoaW50KUludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpCi0gICAgLCBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyKChpbnQpSW52YWxpZFZpcnR1YWxSZWdp
c3RlcikKKyAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCisgICAg
LCBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKQogICAgICwgbV9uZWVk
c0Z1bGxTY29wZUNoYWluKGluZm8ubV9uZWVkc0FjdGl2YXRpb24pCiAgICAgLCBtX3VzZXNFdmFs
KGluZm8ubV91c2VzRXZhbCkKICAgICAsIG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKGZhbHNl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmgJKHJldmlzaW9uIDE1NjQ3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsMTcgKzI1
NCwxNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1f
ZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyB9CiAKICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwotICAg
IHZvaWQgc2V0VGhpc1JlZ2lzdGVyKGludCB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIg
PSB0aGlzUmVnaXN0ZXI7IH0KLSAgICB2b2lkIHNldEFjdGl2YXRpb25SZWdpc3RlcihpbnQgYWN0
aXZhdGlvblJlZ2lzdGVyKSB7IG1fYWN0aXZhdGlvblJlZ2lzdGVyID0gYWN0aXZhdGlvblJlZ2lz
dGVyOyB9CisgICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdp
c3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQorICAgIHZvaWQgc2V0QWN0
aXZhdGlvblJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBhY3RpdmF0aW9uUmVnaXN0ZXIpIHsgbV9h
Y3RpdmF0aW9uUmVnaXN0ZXIgPSBhY3RpdmF0aW9uUmVnaXN0ZXI7IH0KIAotICAgIHZvaWQgc2V0
QXJndW1lbnRzUmVnaXN0ZXIoaW50IGFyZ3VtZW50c1JlZ2lzdGVyKSB7IG1fYXJndW1lbnRzUmVn
aXN0ZXIgPSBhcmd1bWVudHNSZWdpc3RlcjsgfQotICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzUmVnaXN0ZXIgIT0gKGludClJbnZhbGlkVmlydHVhbFJl
Z2lzdGVyOyB9Ci0gICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9h
cmd1bWVudHNSZWdpc3RlcjsgfQorICAgIHZvaWQgc2V0QXJndW1lbnRzUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyKSB7IG1fYXJndW1lbnRzUmVnaXN0ZXIgPSBhcmd1
bWVudHNSZWdpc3RlcjsgfQorICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fYXJndW1lbnRzUmVnaXN0ZXIuaXNWYWxpZCgpOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIGFy
Z3VtZW50c1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHNSZWdpc3RlcjsgfQog
CiAKLSAgICBib29sIHVzZXNHbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9i
amVjdFJlZ2lzdGVyICE9IChpbnQpSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsgfQotICAgIHZvaWQg
c2V0R2xvYmFsT2JqZWN0UmVnaXN0ZXIoaW50IGdsb2JhbE9iamVjdFJlZ2lzdGVyKSB7IG1fZ2xv
YmFsT2JqZWN0UmVnaXN0ZXIgPSBnbG9iYWxPYmplY3RSZWdpc3RlcjsgfQotICAgIGludCBnbG9i
YWxPYmplY3RSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXI7
IH0KKyAgICBib29sIHVzZXNHbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9i
amVjdFJlZ2lzdGVyLmlzVmFsaWQoKTsgfQorICAgIHZvaWQgc2V0R2xvYmFsT2JqZWN0UmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIGdsb2JhbE9iamVjdFJlZ2lzdGVyKSB7IG1fZ2xvYmFsT2JqZWN0
UmVnaXN0ZXIgPSBnbG9iYWxPYmplY3RSZWdpc3RlcjsgfQorICAgIFZpcnR1YWxSZWdpc3RlciBn
bG9iYWxPYmplY3RSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0UmVnaXN0
ZXI7IH0KIAogICAgIC8vIFBhcmFtZXRlciBpbmZvcm1hdGlvbgogICAgIHZvaWQgc2V0TnVtUGFy
YW1ldGVycyhpbnQgbmV3VmFsdWUpIHsgbV9udW1QYXJhbWV0ZXJzID0gbmV3VmFsdWU7IH0KQEAg
LTM5OSw4ICszOTksOCBAQCBwdWJsaWM6CiAKICAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZVR5cGU7IH0KIAotICAgIGludCB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7
IHJldHVybiBtX3RoaXNSZWdpc3RlcjsgfQotICAgIGludCBhY3RpdmF0aW9uUmVnaXN0ZXIoKSBj
b25zdCB7IHJldHVybiBtX2FjdGl2YXRpb25SZWdpc3RlcjsgfQorICAgIFZpcnR1YWxSZWdpc3Rl
ciB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RoaXNSZWdpc3RlcjsgfQorICAgIFZp
cnR1YWxSZWdpc3RlciBhY3RpdmF0aW9uUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2
YXRpb25SZWdpc3RlcjsgfQogCiAKICAgICB2b2lkIGFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b24odW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbikKQEAgLTQ3OSwxMCArNDc5LDEw
IEBAIHByaXZhdGU6CiAgICAgaW50IG1fbnVtUGFyYW1ldGVyczsKICAgICBWTSogbV92bTsKIAot
ICAgIGludCBtX3RoaXNSZWdpc3RlcjsKLSAgICBpbnQgbV9hcmd1bWVudHNSZWdpc3RlcjsKLSAg
ICBpbnQgbV9hY3RpdmF0aW9uUmVnaXN0ZXI7Ci0gICAgaW50IG1fZ2xvYmFsT2JqZWN0UmVnaXN0
ZXI7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdp
c3RlciBtX2FyZ3VtZW50c1JlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3RlciBtX2FjdGl2YXRp
b25SZWdpc3RlcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsK
IAogICAgIGJvb2wgbV9uZWVkc0Z1bGxTY29wZUNoYWluIDogMTsKICAgICBib29sIG1fdXNlc0V2
YWwgOiAxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3Zl
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVS
ZWNvdmVyeS5oCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNyArMjExLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gRGlzcGxhY2VkSW5KU1N0
YWNrOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0Lm1fc291
cmNlLnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVnOworICAgICAgICByZXN1bHQubV9zb3VyY2Uudmly
dHVhbFJlZyA9IHZpcnR1YWxSZWcub2Zmc2V0KCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIApAQCAtMjk0LDcgKzI5NCw3IEBAIHB1YmxpYzoKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3RlY2hu
aXF1ZSA9PSBEaXNwbGFjZWRJbkpTU3RhY2sgfHwgbV90ZWNobmlxdWUgPT0gSW50MzJEaXNwbGFj
ZWRJbkpTU3RhY2sgfHwgbV90ZWNobmlxdWUgPT0gRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrIHx8
IG1fdGVjaG5pcXVlID09IENlbGxEaXNwbGFjZWRJbkpTU3RhY2sgfHwgbV90ZWNobmlxdWUgPT0g
Qm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjayB8fCBtX3RlY2huaXF1ZSA9PSBJbnQ1MkRpc3BsYWNl
ZEluSlNTdGFjayB8fCBtX3RlY2huaXF1ZSA9PSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFj
ayk7Ci0gICAgICAgIHJldHVybiBtX3NvdXJjZS52aXJ0dWFsUmVnOworICAgICAgICByZXR1cm4g
VmlydHVhbFJlZ2lzdGVyKG1fc291cmNlLnZpcnR1YWxSZWcpOwogICAgIH0KICAgICAKICAgICBK
U1ZhbHVlIGNvbnN0YW50KCkgY29uc3QKQEAgLTM1MSwyNSArMzUxLDI1IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFj
azoKLSAgICAgICAgICAgIG91dC5wcmludGYoIiolZCIsIHZpcnR1YWxSZWdpc3RlcigpKTsKKyAg
ICAgICAgICAgIG91dC5wcmludGYoIiolZCIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFj
azoKLSAgICAgICAgICAgIG91dC5wcmludGYoIippbnQzMiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIo
KSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIqaW50MzIoJWQpIiwgdmlydHVhbFJlZ2lzdGVy
KCkub2Zmc2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIEludDUyRGlz
cGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgb3V0LnByaW50ZigiKmludDUyKCVkKSIsIHZp
cnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIippbnQ1MiglZCkiLCB2
aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIqc3RyaWN0SW50NTIoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAg
b3V0LnByaW50ZigiKnN0cmljdEludDUyKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpT
U3RhY2s6Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIqZG91YmxlKCVkKSIsIHZpcnR1YWxSZWdp
c3RlcigpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIipkb3VibGUoJWQpIiwgdmlydHVhbFJl
Z2lzdGVyKCkub2Zmc2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIENl
bGxEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIqY2VsbCglZCki
LCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIqY2VsbCglZCki
LCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIipib29sKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIipib29sKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgY2FzZSBBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6CiAgICAg
ICAgICAgICBvdXQucHJpbnRmKCJhcmd1bWVudHMiKTsKQEAgLTQwMCw3ICs0MDAsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF5bG9hZEdQUjsK
ICAgICAgICAgfSBwYWlyOwogI2VuZGlmCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnOworICAgICAgICBpbnQgdmlydHVhbFJlZzsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUgY29u
c3RhbnQ7CiAgICAgfSBtX3NvdXJjZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAxNTY0NzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDIzICsyNiw4MCBAQAogI2lmbmRlZiBWaXJ0dWFsUmVnaXN0ZXJfaAogI2Rl
ZmluZSBWaXJ0dWFsUmVnaXN0ZXJfaAogCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisKICNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLS8vIFR5cGUgZm9yIGEgdmlydHVhbCByZWdpc3RlciBudW1iZXIgKHNw
aWxsIGxvY2F0aW9uKS4KLS8vIFVzaW5nIGFuIGVudW0gdG8gbWFrZSB0aGlzIHR5cGUtY2hlY2tl
ZCBhdCBjb21waWxlIHRpbWUsIHRvIGF2ZXJ0IHByb2dyYW1tZXIgZXJyb3JzLgotZW51bSBWaXJ0
dWFsUmVnaXN0ZXIgeyBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gMHgzZmZmZmZmZiB9OworaW5s
aW5lIGJvb2wgb3BlcmFuZElzTG9jYWwoaW50IG9wZXJhbmQpCit7CisgICAgcmV0dXJuIG9wZXJh
bmQgPD0gMDsKK30KKworaW5saW5lIGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQp
Cit7CisgICAgcmV0dXJuIG9wZXJhbmQgPiAwOworfQorCisKK2NsYXNzIFZpcnR1YWxSZWdpc3Rl
ciB7CitwdWJsaWM6CisgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChpbnQpOworICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaW50LCBpbnQpOworCisgICAgVmlydHVhbFJlZ2lzdGVyKCkKKyAgICAgICAg
OiBtX3ZpcnR1YWxSZWdpc3RlcihzX2ludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgeyB9CisK
KyAgICBleHBsaWNpdCBWaXJ0dWFsUmVnaXN0ZXIoaW50IHZpcnR1YWxSZWdpc3RlcikKKyAgICAg
ICAgOiBtX3ZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpCisgICAgeyB9CisKKyAgICBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gc19pbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJu
IG9wZXJhbmRJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNBcmd1bWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsg
fQorICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVy
ID49IHNfZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KKyAgICBpbnQgdG9Mb2NhbCgpIGNv
bnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVybiBvcGVyYW5kVG9Mb2NhbChtX3ZpcnR1YWxS
ZWdpc3Rlcik7IH0KKyAgICBpbnQgdG9Bcmd1bWVudCgpIGNvbnN0IHsgQVNTRVJUKGlzQXJndW1l
bnQoKSk7IHJldHVybiBvcGVyYW5kVG9Bcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAg
ICBpbnQgdG9Db25zdGFudEluZGV4KCkgY29uc3QgeyBBU1NFUlQoaXNDb25zdGFudCgpKTsgcmV0
dXJuIG1fdmlydHVhbFJlZ2lzdGVyIC0gc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQor
ICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlcjsgfQorCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZpcnR1YWxSZWdpc3RlciBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPT0gb3RoZXIubV92aXJ0dWFsUmVnaXN0ZXI7IH0KKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgVmlydHVhbFJlZ2lzdGVyIG90aGVyKSBjb25zdCB7IHJl
dHVybiBtX3ZpcnR1YWxSZWdpc3RlciAhPSBvdGhlci5tX3ZpcnR1YWxSZWdpc3RlcjsgfQorCitw
cml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBpbnQgc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0g
MHgzZmZmZmZmZjsKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfZmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXggPSAweDQwMDAwMDAwOworCisgICAgc3RhdGljIGludCBsb2NhbFRvT3BlcmFuZChpbnQg
bG9jYWwpIHsgcmV0dXJuIC1sb2NhbDsgfQorICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwo
aW50IG9wZXJhbmQpIHsgcmV0dXJuIC1vcGVyYW5kOyB9CisgICAgc3RhdGljIGludCBvcGVyYW5k
VG9Bcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxGcmFtZTo6dGhp
c0FyZ3VtZW50T2Zmc2V0KCk7IH0KKyAgICBzdGF0aWMgaW50IGFyZ3VtZW50VG9PcGVyYW5kKGlu
dCBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9m
ZnNldCgpOyB9CisKKyAgICBpbnQgbV92aXJ0dWFsUmVnaXN0ZXI7Cit9OworCiBDT01QSUxFX0FT
U0VSVChzaXplb2YoVmlydHVhbFJlZ2lzdGVyKSA9PSBzaXplb2YoaW50KSwgVmlydHVhbFJlZ2lz
dGVyX2lzXzMyYml0KTsKIAoraW5saW5lIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChpbnQgbG9jYWwpCit7CisgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXI6OmxvY2FsVG9PcGVyYW5kKGxvY2FsKSk7Cit9CisKK2lubGluZSBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW50IGFyZ3VtZW50LCBpbnQgb2Zmc2V0
ID0gMCkKK3sKKyAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcjo6YXJn
dW1lbnRUb09wZXJhbmQoYXJndW1lbnQpICsgb2Zmc2V0KTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKIG5hbWVzcGFjZSBXVEYgewogCiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEpTQzo6VmlydHVhbFJlZ2lzdGVyIHZhbHVlKQogewotICAgIG91dC5wcmlu
dChzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSk7CisgICAgb3V0LnByaW50KHZhbHVlLm9mZnNldCgp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgUGFyc2VyRXJy
b3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogewogICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJCeXRlY29kZSBHZW5lcmF0aW9uIik7CiAgICAgCi0gICAgbV9jb2RlQmxv
Y2stPnNldFRoaXNSZWdpc3RlcihtX3RoaXNSZWdpc3Rlci5pbmRleCgpKTsKKyAgICBtX2NvZGVC
bG9jay0+c2V0VGhpc1JlZ2lzdGVyKG1fdGhpc1JlZ2lzdGVyLnZpcnR1YWxSZWdpc3RlcigpKTsK
IAogICAgIG1fc2NvcGVOb2RlLT5lbWl0Qnl0ZWNvZGUoKnRoaXMpOwogCkBAIC0xMTcsNyArMTE3
LDcgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogYm9vbCBCeXRl
Y29kZUdlbmVyYXRvcjo6YWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29u
c3RhbnQsIFJlZ2lzdGVySUQqJiByMCkKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihzeW1ib2xUYWJsZSgpLm1fbG9jayk7Ci0gICAgaW50IGluZGV4ID0gbG9jYWxUb09wZXJhbmQo
bV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICBpbnQgaW5kZXggPSB2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChtX2NhbGxlZVJlZ2lzdGVycy5zaXplKCkpLm9mZnNldCgpOwogICAgIFN5bWJv
bFRhYmxlRW50cnkgbmV3RW50cnkoaW5kZXgsIGlzQ29uc3RhbnQgPyBSZWFkT25seSA6IDApOwog
ICAgIFN5bWJvbFRhYmxlOjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZSgpLmFk
ZChsb2NrZXIsIGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogCkBAIC0yMzAsMTAgKzIzMCwxMCBA
QCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgaWYgKG1fY29k
ZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpIHsKICAgICAgICAgbV9hY3RpdmF0aW9uUmVn
aXN0ZXIgPSBhZGRWYXIoKTsKICAgICAgICAgZW1pdEluaXRMYXp5UmVnaXN0ZXIobV9hY3RpdmF0
aW9uUmVnaXN0ZXIpOwotICAgICAgICBtX2NvZGVCbG9jay0+c2V0QWN0aXZhdGlvblJlZ2lzdGVy
KG1fYWN0aXZhdGlvblJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPnNl
dEFjdGl2YXRpb25SZWdpc3RlcihtX2FjdGl2YXRpb25SZWdpc3Rlci0+dmlydHVhbFJlZ2lzdGVy
KCkpOwogICAgIH0KIAotICAgIG1fc3ltYm9sVGFibGUtPnNldENhcHR1cmVTdGFydChsb2NhbFRv
T3BlcmFuZChtX2NvZGVCbG9jay0+bV9udW1WYXJzKSk7CisgICAgbV9zeW1ib2xUYWJsZS0+c2V0
Q2FwdHVyZVN0YXJ0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY29kZUJsb2NrLT5tX251bVZh
cnMpLm9mZnNldCgpKTsKIAogICAgIGlmIChmdW5jdGlvbkJvZHktPnVzZXNBcmd1bWVudHMoKSB8
fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkpIHsgLy8gTWF5IHJlaWZ5IGFyZ3VtZW50cyBvYmplY3Qu
CiAgICAgICAgIFJlZ2lzdGVySUQqIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlciA9IGFkZFZh
cigpOyAvLyBBbm9ueW1vdXMsIHNvIGl0IGNhbid0IGJlIG1vZGlmaWVkIGJ5IHVzZXIgY29kZS4K
QEAgLTI0Miw4ICsyNDIsOCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Io
Vk0mCiAgICAgICAgIC8vIFdlIGNhbiBzYXZlIGEgbGl0dGxlIHNwYWNlIGJ5IGhhcmQtY29kaW5n
IHRoZSBrbm93bGVkZ2UgdGhhdCB0aGUgdHdvCiAgICAgICAgIC8vICdhcmd1bWVudHMnIHZhbHVl
cyBhcmUgc3RvcmVkIGluIGNvbnNlY3V0aXZlIHJlZ2lzdGVycywgYW5kIHN0b3JpbmcKICAgICAg
ICAgLy8gb25seSB0aGUgaW5kZXggb2YgdGhlIGFzc2lnbmFibGUgb25lLgotICAgICAgICBjb2Rl
QmxvY2stPnNldEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyLT5pbmRleCgpKTsK
LSAgICAgICAgQVNTRVJUX1VOVVNFRCh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIsIHVubW9k
aWZpZWRBcmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSA9PSBKU0M6OnVubW9kaWZpZWRBcmd1bWVu
dHNSZWdpc3Rlcihjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpKTsKKyAgICAgICAgY29k
ZUJsb2NrLT5zZXRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlci0+dmlydHVhbFJl
Z2lzdGVyKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHVubW9kaWZpZWRBcmd1bWVudHNSZWdp
c3RlciwgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyLT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBK
U0M6OnVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lz
dGVyKCkpKTsKIAogICAgICAgICBlbWl0SW5pdExhenlSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rl
cik7CiAgICAgICAgIGVtaXRJbml0TGF6eVJlZ2lzdGVyKHVubW9kaWZpZWRBcmd1bWVudHNSZWdp
c3Rlcik7CkBAIC0zMjQsNyArMzI0LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2Vu
ZXJhdG9yKFZNJgogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hY3RpdmF0aW9uUmVn
aXN0ZXItPmluZGV4KCkpOwogICAgIH0KIAotICAgIG1fc3ltYm9sVGFibGUtPnNldENhcHR1cmVF
bmQobG9jYWxUb09wZXJhbmQoY29kZUJsb2NrLT5tX251bVZhcnMpKTsKKyAgICBtX3N5bWJvbFRh
YmxlLT5zZXRDYXB0dXJlRW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGNvZGVCbG9jay0+bV9u
dW1WYXJzKS5vZmZzZXQoKSk7CiAKICAgICBtX2ZpcnN0TGF6eUZ1bmN0aW9uID0gY29kZUJsb2Nr
LT5tX251bVZhcnM7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNp
emUoKTsgKytpKSB7CkBAIC0zMzksNyArMzM5LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAgICAgICAgIGVtaXROZXdGdW5jdGlvbihyZWcuZ2V0
KCksIGZ1bmN0aW9uKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGVtaXRJ
bml0TGF6eVJlZ2lzdGVyKHJlZy5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgbV9sYXp5RnVuY3Rp
b25zLnNldChsb2NhbFRvT3BlcmFuZChyZWctPmluZGV4KCkpLCBmdW5jdGlvbik7CisgICAgICAg
ICAgICAgICAgbV9sYXp5RnVuY3Rpb25zLnNldChyZWctPnZpcnR1YWxSZWdpc3RlcigpLnRvTG9j
YWwoKSwgZnVuY3Rpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzUx
LDcgKzM1MSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAg
ICB9CiAKICAgICBpZiAoc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncykKLSAgICAgICAgbV9zeW1i
b2xUYWJsZS0+c2V0Q2FwdHVyZUVuZChsb2NhbFRvT3BlcmFuZChjb2RlQmxvY2stPm1fbnVtVmFy
cykpOworICAgICAgICBtX3N5bWJvbFRhYmxlLT5zZXRDYXB0dXJlRW5kKHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKGNvZGVCbG9jay0+bV9udW1WYXJzKS5vZmZzZXQoKSk7CiAKICAgICBtX3BhcmFt
ZXRlcnMuZ3JvdyhwYXJhbWV0ZXJzLnNpemUoKSArIDEpOyAvLyByZXNlcnZlIHNwYWNlIGZvciAi
dGhpcyIKIApAQCAtNTMzLDggKzUzMywxMSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6dW5jaGVja2VkCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVMYXp5
UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdpc3RlcklEKiByZWcpCiB7Ci0gICAgaW50IGxvY2FsVmFy
aWFibGVOdW1iZXIgPSBvcGVyYW5kVG9Mb2NhbChyZWctPmluZGV4KCkpOwotICAgIAorICAgIGlm
ICghcmVnLT52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpCisgICAgICAgIHJldHVybiByZWc7
CisKKyAgICBpbnQgbG9jYWxWYXJpYWJsZU51bWJlciA9IHJlZy0+dmlydHVhbFJlZ2lzdGVyKCku
dG9Mb2NhbCgpOworCiAgICAgaWYgKG1fbGFzdExhenlGdW5jdGlvbiA8PSBsb2NhbFZhcmlhYmxl
TnVtYmVyIHx8IGxvY2FsVmFyaWFibGVOdW1iZXIgPCBtX2ZpcnN0TGF6eUZ1bmN0aW9uKQogICAg
ICAgICByZXR1cm4gcmVnOwogICAgIGVtaXRMYXp5TmV3RnVuY3Rpb24ocmVnLCBtX2xhenlGdW5j
dGlvbnMuZ2V0KGxvY2FsVmFyaWFibGVOdW1iZXIpKTsKQEAgLTU0Myw3ICs1NDYsNyBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlTGF6CiAKIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjpuZXdSZWdpc3RlcigpCiB7Ci0gICAgbV9jYWxsZWVSZWdpc3RlcnMuYXBw
ZW5kKGxvY2FsVG9PcGVyYW5kKG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkpOworICAgIG1fY2Fs
bGVlUmVnaXN0ZXJzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2NhbGxlZVJlZ2lz
dGVycy5zaXplKCkpKTsKICAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgPSBt
YXg8aW50PihtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMsIG1fY2FsbGVlUmVnaXN0
ZXJzLnNpemUoKSk7CiAgICAgcmV0dXJuICZtX2NhbGxlZVJlZ2lzdGVycy5sYXN0KCk7CiB9CkBA
IC0xMTQ2LDcgKzExNDksNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExv
YWRHCiAgICAgICAgICsrbV9uZXh0Q29uc3RhbnRPZmZzZXQ7CiAgICAgICAgIG1fY29kZUJsb2Nr
LT5hZGRDb25zdGFudChKU1ZhbHVlKCkpOwogICAgICAgICBtX2dsb2JhbE9iamVjdFJlZ2lzdGVy
ID0gJm1fY29uc3RhbnRQb29sUmVnaXN0ZXJzW2luZGV4XTsKLSAgICAgICAgbV9jb2RlQmxvY2st
PnNldEdsb2JhbE9iamVjdFJlZ2lzdGVyKGluZGV4KTsKKyAgICAgICAgbV9jb2RlQmxvY2stPnNl
dEdsb2JhbE9iamVjdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihpbmRleCkpOwogICAgIH0KICAg
ICBpZiAoZHN0KQogICAgICAgICBlbWl0TW92ZShkc3QsIG1fZ2xvYmFsT2JqZWN0UmVnaXN0ZXIp
OwpAQCAtMTI5MCw3ICsxMjkzLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRHZXRBcgogewogICAgIGVtaXRPcGNvZGUob3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgIEFTU0VSVChiYXNlLT5p
bmRleCgpID09IG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKKyAgICBBU1NFUlQo
YmFzZS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gbV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVy
KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHlOYW1lcygpLmxlbmd0aCkpOwog
ICAgIHJldHVybiBkc3Q7CkBAIC0xMzY1LDcgKzEzNjgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdEdldEFyCiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9m
aWxlID0gbmV3QXJyYXlQcm9maWxlKCk7CiAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmls
ZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfYXJndW1lbnRfYnlfdmFsKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICBBU1NFUlQoYmFzZS0+aW5kZXgoKSA9
PSBtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CisgICAgQVNTRVJUKGJhc2UtPnZp
cnR1YWxSZWdpc3RlcigpID09IG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHByb3BlcnR5LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
YXJyYXlQcm9maWxlKTsKQEAgLTE1ODUsNyArMTU4OCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmNyZWF0ZUFyZ3VtZW50c0kKICAgICAgICAgcmV0dXJuOwogCiAgICAgZW1pdE9wY29kZShv
cF9jcmVhdGVfYXJndW1lbnRzKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxv
Y2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2Nv
ZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CiB9CiAKIHZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgpCkBAIC0xNzcwLDcgKzE3
NzMsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJldHVyCiAKICAgICBp
ZiAobV9jb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSAmJiBtX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpICE9IDEgJiYgIWlzU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgIGVtaXRPcGNvZGUob3Bf
dGVhcl9vZmZfYXJndW1lbnRzKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fY29k
ZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpKTsKICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZhdGlvblJlZ2lzdGVyID8gbV9hY3RpdmF0aW9u
UmVnaXN0ZXItPmluZGV4KCkgOiBlbWl0TG9hZCgwLCBKU1ZhbHVlKCkpLT5pbmRleCgpKTsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE1NjQ3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAyLDEzICs1MDIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVy
SUQmIHJlZ2lzdGVyRm9yKGludCBpbmRleCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG9w
ZXJhbmRJc0xvY2FsKGluZGV4KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jYWxsZWVSZWdp
c3RlcnNbb3BlcmFuZFRvTG9jYWwoaW5kZXgpXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9j
YWxsZWVSZWdpc3RlcnNbVmlydHVhbFJlZ2lzdGVyKGluZGV4KS50b0xvY2FsKCldOwogCiAgICAg
ICAgICAgICBpZiAoaW5kZXggPT0gSlNTdGFjazo6Q2FsbGVlKQogICAgICAgICAgICAgICAgIHJl
dHVybiBtX2NhbGxlZVJlZ2lzdGVyOwogCiAgICAgICAgICAgICBBU1NFUlQobV9wYXJhbWV0ZXJz
LnNpemUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9wYXJhbWV0ZXJzW29wZXJhbmRUb0FyZ3Vt
ZW50KGluZGV4KV07CisgICAgICAgICAgICByZXR1cm4gbV9wYXJhbWV0ZXJzW1ZpcnR1YWxSZWdp
c3RlcihpbmRleCkudG9Bcmd1bWVudCgpXTsKICAgICAgICAgfQogCiAgICAgICAgIHVuc2lnbmVk
IGFkZENvbnN0YW50KGNvbnN0IElkZW50aWZpZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCShyZXZpc2lvbiAxNTY0NzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogI2lmbmRlZiBSZWdpc3RlcklEX2gKICNkZWZpbmUg
UmVnaXN0ZXJJRF9oCiAKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKwogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3RvclRyYWl0cy5oPgogCkBAIC00
Niw5ICs0OCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAg
ICAgICAgUmVnaXN0ZXJJRChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgICAg
ICAgICAgOiBtX3JlZkNvdW50KDApCisgICAgICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKHZp
cnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9pc1RlbXBvcmFyeShmYWxzZSkKKyNpZm5k
ZWYgTkRFQlVHCisgICAgICAgICAgICAsIG1fZGlkU2V0SW5kZXgodHJ1ZSkKKyNlbmRpZgorICAg
ICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGV4cGxpY2l0IFJlZ2lzdGVySUQo
aW50IGluZGV4KQogICAgICAgICAgICAgOiBtX3JlZkNvdW50KDApCi0gICAgICAgICAgICAsIG1f
aW5kZXgoaW5kZXgpCisgICAgICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlcihpbmRleCkpCiAgICAgICAgICAgICAsIG1faXNUZW1wb3JhcnkoZmFsc2UpCiAjaWZuZGVm
IE5ERUJVRwogICAgICAgICAgICAgLCBtX2RpZFNldEluZGV4KHRydWUpCkBAIC02Miw3ICs3NCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIG1fZGlkU2V0
SW5kZXggPSB0cnVlOwogI2VuZGlmCi0gICAgICAgICAgICBtX2luZGV4ID0gaW5kZXg7CisgICAg
ICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihpbmRleCk7CiAgICAg
ICAgIH0KIAogICAgICAgICB2b2lkIHNldFRlbXBvcmFyeSgpCkBAIC03Myw3ICs4NSwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgaW50IGluZGV4KCkgY29uc3QKICAgICAgICAgewogICAg
ICAgICAgICAgQVNTRVJUKG1fZGlkU2V0SW5kZXgpOwotICAgICAgICAgICAgcmV0dXJuIG1faW5k
ZXg7CisgICAgICAgICAgICByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCk7CisgICAg
ICAgIH0KKworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fdmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQo
KSk7CisgICAgICAgICAgICByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXI7CiAgICAgICAgIH0KIAog
ICAgICAgICBib29sIGlzVGVtcG9yYXJ5KCkKQEAgLTEwMCw3ICsxMTgsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBwcml2YXRlOgogCiAgICAgICAgIGludCBtX3JlZkNvdW50OwotICAgICAgICBp
bnQgbV9pbmRleDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fdmlydHVhbFJlZ2lzdGVyOwog
ICAgICAgICBib29sIG1faXNUZW1wb3Jhcnk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBib29s
IG1fZGlkU2V0SW5kZXg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE1NjQ3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBKU09iamVjdCogRGVidWdnZXJDYWxsRnJhbWU6OnRo
aXNPYmplY3QoCiAgICAgaWYgKCFjb2RlQmxvY2spCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBtX2NhbGxGcmFtZS0+dW5jaGVja2VkUihjb2RlQmxvY2stPnRo
aXNSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBtX2NhbGxG
cmFtZS0+dW5jaGVja2VkUihjb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpLm9mZnNldCgpKS5qc1Zh
bHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAko
cmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgICAgICAg
ICA6IG1faXNUb3AoZmFsc2UpCi0gICAgICAgICAgICAsIG1fdmFsdWUoc3RhdGljX2Nhc3Q8aW50
PihvcGVyYW5kKSkKKyAgICAgICAgICAgICwgbV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQogICAg
ICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZp
c2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBHZXRBcmd1bWVu
dDogewogICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwot
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9z
dGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKTsKICAg
ICAgICAgQVNTRVJUKHZhbHVlLmlzSGVhcFRvcCgpKTsKICAgICAgICAgRmlsdHJhdGlvblJlc3Vs
dCByZXN1bHQgPQogICAgICAgICAgICAgdmFsdWUuZmlsdGVyKHR5cGVGaWx0ZXJGb3IodXNlS2lu
ZEZvcih2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpKTsKQEAgLTE1Miw4ICsxNTIsOCBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOiB7Ci0gICAgICAgIGlmICghb3BlcmFuZElzQXJn
dW1lbnQobm9kZS0+dW5saW5rZWRMb2NhbCgpKQotICAgICAgICAgICAgJiYgbV9ncmFwaC5tX2xh
enlWYXJzLmdldChvcGVyYW5kVG9Mb2NhbChub2RlLT51bmxpbmtlZExvY2FsKCkpKSkgeworICAg
ICAgICBpZiAoIShub2RlLT51bmxpbmtlZExvY2FsKCkuaXNBcmd1bWVudCgpKQorICAgICAgICAg
ICAgJiYgbV9ncmFwaC5tX2xhenlWYXJzLmdldChub2RlLT51bmxpbmtlZExvY2FsKCkudG9Mb2Nh
bCgpKSkgewogICAgICAgICAgICAgLy8gVGhpcyBpcyBraW5kIG9mIHBlc3NpbWlzdGljIC0gd2Ug
Y291bGQga25vdyBpbiBzb21lIGNhc2VzIHRoYXQgdGhlCiAgICAgICAgICAgICAvLyBERkcgY29k
ZSBhdCB0aGUgcG9pbnQgb2YgdGhlIE9TUiBoYWQgYWxyZWFkeSBpbml0aWFsaXplZCB0aGUgbGF6
eQogICAgICAgICAgICAgLy8gdmFyaWFibGUuIEJ1dCBtYXliZSB0aGlzIGlzIGZpbmUsIHNpbmNl
IHdlJ3JlIGluc2VydGluZyBPU1IKQEAgLTE3MSw3ICsxNzEsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgQWJzdHJhY3RW
YWx1ZSB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmxvY2FsKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS52YXJp
YWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKS5vZmZzZXQoKSk7CiAg
ICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAg
ICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKQEAgLTE4Myw3ICsxODMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6
IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3Bl
cmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVl
ID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKS5vZmZz
ZXQoKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9zdGF0ZS5z
ZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOwpA
QCAtMTkxLDcgKzE5MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgbV9zdGF0
ZS52YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2RlLT5sb2NhbCgp
Lm9mZnNldCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIApAQCAtMTEzMyw3ICsxMTMzLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgog
ICAgICAgICBpZiAoaXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAgICAgICAgIG1fc3RhdGUu
dmFyaWFibGVzKCkub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVu
dHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkKKyAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKS5vZmZz
ZXQoKSkubV90eXBlKSkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1
ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CkBA
IC0xNjA3LDEzICsxNjA3LDEzIEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBt
X2NvZGVCbG9jay0+bV9udW1WYXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ2FwdHVyZWQobG9jYWxUb09wZXJhbmQoaSkpKQorICAgICAgICAgICAgaWYgKG1fY29k
ZUJsb2NrLT5pc0NhcHR1cmVkKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKSkKICAgICAgICAg
ICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLmxvY2FsKGkpLm1ha2VIZWFwVG9wKCk7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5u
dW1iZXJPZkFyZ3VtZW50cygpOyBpLS07KSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXND
YXB0dXJlZChhcmd1bWVudFRvT3BlcmFuZChpKSkpCisgICAgICAgIGlmIChtX2NvZGVCbG9jay0+
aXNDYXB0dXJlZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSkpCiAgICAgICAgICAgICBt
X3N0YXRlLnZhcmlhYmxlcygpLmFyZ3VtZW50KGkpLm1ha2VIZWFwVG9wKCk7CiAgICAgfQogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9u
LmgJKHJldmlzaW9uIDE1NjQ3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRQb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMTUgKzExOCwxNSBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYWJsZXMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBtX3ZhcmlhYmxlc1tpXS0+ZmluZCgpOwotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSB2YXJp
YWJsZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2
YXJpYWJsZS0+bG9jYWwoKTsKIAogICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIgIik7CiAKLSAgICAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVy
YW5kKSkKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoImFyZyIsIG9wZXJhbmRUb0FyZ3VtZW50
KG9wZXJhbmQpLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKmdyYXBoLCB2YXJpYWJsZSks
ICIpIik7CisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCJhcmciLCBvcGVyYW5kLnRvQXJndW1lbnQoKSwgIigiLCBWYXJpYWJs
ZUFjY2Vzc0RhdGFEdW1wKCpncmFwaCwgdmFyaWFibGUpLCAiKSIpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiciIsIG9wZXJhbmQsICIoIiwgVmFyaWFibGVB
Y2Nlc3NEYXRhRHVtcCgqZ3JhcGgsIHZhcmlhYmxlKSwgIikiKTsKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQoInIiLCBvcGVyYW5kLnRvTG9jYWwoKSwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wKCpncmFwaCwgdmFyaWFibGUpLCAiKSIpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmlu
dCgiXG4iKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDE1NjQ3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw3ICsxODgsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3Rl
ciA9CisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3Rl
ciA9CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1Jl
Z2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICBpZiAoc291
cmNlLT5vcCgpICE9IENyZWF0ZUFyZ3VtZW50cyAmJiBzb3VyY2UtPm9wKCkgIT0gUGhhbnRvbUFy
Z3VtZW50cykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhl
IHNvdXJjZSBvZiB0aGUgU2V0TG9jYWwga25vd3MgdGhhdCBpZiBpdCdzCkBAIC0yMTYsNyArMjE2
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2lzTGl2ZS5jb250
YWlucyh2YXJpYWJsZUFjY2Vzc0RhdGEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYXJndW1lbnRzUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcgorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyLmlzVmFsaWQoKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICYmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gYXJn
dW1lbnRzUmVnaXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdmFyaWFi
bGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1
bWVudHNSZWdpc3RlcikpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVz
QXJndW1lbnRzLmFkZChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CkBAIC0yMzQs
NyArMjM0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNh
bGxDb250ZXh0KG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyCisg
ICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3Rlci5pc1ZhbGlkKCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICYmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gYXJn
dW1lbnRzUmVnaXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50
c1JlZ2lzdGVyKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSA9PSBzb3VyY2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KQpAQCAtNjE5LDcgKzYxOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQWRqYWNl
bmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNoaWxkcmVuOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0TG9jYWxVbmxpbmtlZCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oCisgICAg
ICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9y
KG5vZGUtPmNvZGVPcmlnaW4pLT5hcmd1bWVudEluZGV4QWZ0ZXJDYXB0dXJlKGluZGV4KSkpOwog
CkBAIC03MTEsOCArNzExLDggQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3Rl
ciA9IG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdp
bik7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcgorICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0g
bV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKTsK
KyAgICAgICAgICAgIGlmIChhcmd1bWVudHNSZWdpc3Rlci5pc1ZhbGlkKCkKICAgICAgICAgICAg
ICAgICAmJiAobm9kZS0+bG9jYWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgogICAgICAgICAgICAg
ICAgICAgICB8fCBub2RlLT5sb2NhbCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihh
cmd1bWVudHNSZWdpc3RlcikpKSB7CiAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRz
LmFkZChub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CkBAIC03ODMsOCArNzgzLDgg
QEAgcHJpdmF0ZToKICAgICAgICAgc3dpdGNoIChzb3VyY2UtPm9wKCkpIHsKICAgICAgICAgY2Fz
ZSBHZXRMb2NhbDogewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBzb3VyY2UtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgaW50
IGFyZ3VtZW50c1JlZ2lzdGVyID0gbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZv
cihzb3VyY2UtPmNvZGVPcmlnaW4pOwotICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVy
ID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YXJndW1lbnRzUmVnaXN0ZXIgPSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9y
KHNvdXJjZS0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1JlZ2lzdGVy
LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChhcmd1
bWVudHNSZWdpc3RlciA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
MSwzNyArMTkxLDM3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayos
IFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgdm9pZCBsaW5rQmxv
Y2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCYXNpY0Js
b2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEoaW50IG9wZXJhbmQsIGJvb2wgaXNDYXB0dXJlZCkKKyAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgYm9vbCBpc0NhcHR1cmVkKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG9wZXJhbmQg
PCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5p
c0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNz
RGF0YS5hcHBlbmQoVmFyaWFibGVBY2Nlc3NEYXRhKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4ob3BlcmFuZCksIGlzQ2FwdHVyZWQpKTsKKyAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNj
ZXNzRGF0YS5hcHBlbmQoVmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpKTsK
ICAgICAgICAgcmV0dXJuICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLmxhc3QoKTsKICAg
ICB9CiAgICAgCiAgICAgLy8gR2V0L1NldCB0aGUgb3BlcmFuZHMvcmVzdWx0IG9mIGEgYnl0ZWNv
ZGUgaW5zdHJ1Y3Rpb24uCi0gICAgTm9kZSogZ2V0RGlyZWN0KGludCBvcGVyYW5kKQorICAgIE5v
ZGUqIGdldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIC8v
IElzIHRoaXMgYSBjb25zdGFudD8KLSAgICAgICAgaWYgKG9wZXJhbmQgPj0gRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXgpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0YW50ID0gb3BlcmFu
ZCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OworICAgICAgICBpZiAob3BlcmFuZC5pc0Nv
bnN0YW50KCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0YW50ID0gb3BlcmFuZC50b0Nv
bnN0YW50SW5kZXgoKTsKICAgICAgICAgICAgIEFTU0VSVChjb25zdGFudCA8IG1fY29uc3RhbnRz
LnNpemUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChjb25zdGFudCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBBU1NFUlQob3BlcmFuZCAhPSBKU1N0YWNrOjpDYWxsZWUpOwor
ICAgICAgICBBU1NFUlQob3BlcmFuZC5vZmZzZXQoKSAhPSBKU1N0YWNrOjpDYWxsZWUpOwogICAg
ICAgICAKICAgICAgICAgLy8gSXMgdGhpcyBhbiBhcmd1bWVudD8KLSAgICAgICAgaWYgKG9wZXJh
bmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkp
CiAgICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnQob3BlcmFuZCk7CiAKICAgICAgICAgLy8g
TXVzdCBiZSBhIGxvY2FsLgogICAgICAgICByZXR1cm4gZ2V0TG9jYWwob3BlcmFuZCk7CiAgICAg
fQogCi0gICAgTm9kZSogZ2V0KGludCBvcGVyYW5kKQorICAgIE5vZGUqIGdldChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kID09IEpTU3RhY2s6OkNh
bGxlZSkgeworICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA9PSBKU1N0YWNrOjpDYWxsZWUp
IHsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSAmJiBpbmxpbmVDYWxsRnJhbWUo
KS0+Y2FsbGVlKQogICAgICAgICAgICAgICAgIHJldHVybiBjZWxsQ29uc3RhbnQoaW5saW5lQ2Fs
bEZyYW1lKCktPmNhbGxlZS5nZXQoKSk7CiAgICAgICAgICAgICAKQEAgLTIzMCwxMiArMjMwLDEy
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICByZXR1cm4gZ2V0RGlyZWN0KG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CiAgICAgfQotCisgICAgCiAgICAgZW51
bSBTZXRNb2RlIHsgTm9ybWFsU2V0LCBTZXRPbkVudHJ5IH07Ci0gICAgdm9pZCBzZXREaXJlY3Qo
aW50IG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisg
ICAgdm9pZCBzZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBT
ZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewogICAgICAgICAvLyBJcyB0aGlzIGFu
IGFyZ3VtZW50PwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAg
ICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKSB7CiAgICAgICAgICAgICBzZXRBcmd1bWVu
dChvcGVyYW5kLCB2YWx1ZSwgc2V0TW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KQEAgLTI0NCw3ICsyNDQsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRMb2NhbChvcGVyYW5k
LCB2YWx1ZSwgc2V0TW9kZSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5v
ZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCisgICAgdm9pZCBzZXQoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3Jt
YWxTZXQpCiAgICAgewogICAgICAgICBzZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKG9wZXJhbmQpLCB2YWx1ZSwgc2V0TW9kZSk7CiAgICAgfQpAQCAtMjY0LDkgKzI2NCw5
IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3Nl
dCwgYWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGEgbG9jYWwgdmFyaWFibGUuCi0gICAgTm9k
ZSogZ2V0TG9jYWwoaW50IG9wZXJhbmQpCisgICAgTm9kZSogZ2V0TG9jYWwoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmRUb0xv
Y2FsKG9wZXJhbmQpOworICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgp
OwogICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5s
b2NhbChsb2NhbCk7CiAgICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0Nh
cHR1cmVkKG9wZXJhbmQsIGlubGluZUNhbGxGcmFtZSgpKTsKICAgICAgICAgCkBAIC0zMDIsOSAr
MzAyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCi0gICAgdm9p
ZCBzZXRMb2NhbChpbnQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5v
cm1hbFNldCkKKyAgICB2b2lkIHNldExvY2FsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2Rl
KiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKLSAgICAgICAgdW5z
aWduZWQgbG9jYWwgPSBvcGVyYW5kVG9Mb2NhbChvcGVyYW5kKTsKKyAgICAgICAgdW5zaWduZWQg
bG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9j
b2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgaW5saW5lQ2FsbEZyYW1lKCkpOwogICAgICAg
ICAKICAgICAgICAgaWYgKHNldE1vZGUgPT0gTm9ybWFsU2V0KSB7CkBAIC0zMjMsOSArMzIzLDkg
QEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0
LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYW4gYXJndW1lbnQuCi0gICAgTm9kZSogZ2V0
QXJndW1lbnQodW5zaWduZWQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRBcmd1bWVudChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3Bl
cmFuZFRvQXJndW1lbnQob3BlcmFuZCk7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3Bl
cmFuZC50b0FyZ3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1l
bnRzKTsKICAgICAgICAgCiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFy
aWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKQEAgLTM1Miw5ICszNTIsOSBAQCBwcml2
YXRlOgogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFy
Z3VtZW50KSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KLSAgICB2b2lkIHNl
dEFyZ3VtZW50KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9y
bWFsU2V0KQorICAgIHZvaWQgc2V0QXJndW1lbnQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5v
ZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCiAgICAgewotICAgICAgICB1
bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOworICAgICAgICB1
bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOwogICAgICAgICBBU1NFUlQo
YXJndW1lbnQgPCBtX251bUFyZ3VtZW50cyk7CiAgICAgICAgIAogICAgICAgICBib29sIGlzQ2Fw
dHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kKTsKQEAgLTM4NSwyOCArMzg1
LDI4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzdGFjay0+bV9hcmd1bWVudFBvc2l0aW9u
c1thcmd1bWVudF07CiAgICAgfQogICAgIAotICAgIEFyZ3VtZW50UG9zaXRpb24qIGZpbmRBcmd1
bWVudFBvc2l0aW9uRm9yTG9jYWwoaW50IG9wZXJhbmQpCisgICAgQXJndW1lbnRQb3NpdGlvbiog
ZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAg
ICB7CiAgICAgICAgIGZvciAoSW5saW5lU3RhY2tFbnRyeSogc3RhY2sgPSBtX2lubGluZVN0YWNr
VG9wOyA7IHN0YWNrID0gc3RhY2stPm1fY2FsbGVyKSB7CiAgICAgICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHN0YWNrLT5tX2lubGluZUNhbGxGcmFtZTsKICAgICAg
ICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgaWYgKG9wZXJhbmQgPD0gc3RhdGljX2Nhc3Q8aW50PihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkpCisgICAgICAgICAg
ICBpZiAob3BlcmFuZC5vZmZzZXQoKSA8PSBzdGF0aWNfY2FzdDxpbnQ+KGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChvcGVyYW5kID09IGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKQorICAg
ICAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPT0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBpZiAob3BlcmFuZCA+IHN0YXRpY19jYXN0PGludD4oaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUg
KyBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpKQorICAgICAgICAgICAgaWYgKG9w
ZXJhbmQub2Zmc2V0KCkgPiBzdGF0aWNfY2FzdDxpbnQ+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHMuc2l6ZSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGludCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQgLSBpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9IFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kLm9mZnNldCgpIC0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9B
cmd1bWVudCgpOwogICAgICAgICAgICAgcmV0dXJuIHN0YWNrLT5tX2FyZ3VtZW50UG9zaXRpb25z
W2FyZ3VtZW50XTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0g
ICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oaW50IG9wZXJhbmQpCisg
ICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JBcmd1bWVudChvcGVy
YW5kVG9Bcmd1bWVudChvcGVyYW5kKSk7CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkKKyAgICAgICAgICAgIHJldHVybiBmaW5kQXJndW1lbnRQb3NpdGlvbkZvckFyZ3VtZW50KG9w
ZXJhbmQudG9Bcmd1bWVudCgpKTsKICAgICAgICAgcmV0dXJuIGZpbmRBcmd1bWVudFBvc2l0aW9u
Rm9yTG9jYWwob3BlcmFuZCk7CiAgICAgfQogCkBAIC00MjIsMjQgKzQyMiwyNCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZsdXNoKGludCBv
cGVyYW5kKQorICAgIHZvaWQgZmx1c2goVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewog
ICAgICAgICBmbHVzaERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFu
ZCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZsdXNoRGlyZWN0KGludCBvcGVyYW5kKQorICAg
IHZvaWQgZmx1c2hEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAg
ICBmbHVzaERpcmVjdChvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoaW50IG9wZXJhbmQsIEFyZ3VtZW50UG9z
aXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCisgICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7
CiAgICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKG9wZXJh
bmQsIGlubGluZUNhbGxGcmFtZSgpKTsKICAgICAgICAgCi0gICAgICAgIEFTU0VSVChvcGVyYW5k
IDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICBBU1NFUlQoIW9wZXJhbmQu
aXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIGlmICghb3BlcmFuZElzQXJndW1lbnQo
b3BlcmFuZCkpCi0gICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmRUb0xvY2Fs
KG9wZXJhbmQpKTsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQorICAgICAgICAgICAg
bV9wcmVzZXJ2ZWRWYXJzLnNldChvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgICAgIAogICAgICAg
ICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9w
ZXJhbmQpOwogICAgICAgICAKQEAgLTQ2NSwxMSArNDY1LDExIEBAIHByaXZhdGU6CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9IGlubGluZVN0YWNrRW50cnktPm1fY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSBudW1Bcmd1bWVudHM7IGFyZ3VtZW50LS0gPiAxOykKLSAgICAgICAgICAgIGZsdXNoRGlyZWN0
KGlubGluZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChhcmd1bWVudFRvT3BlcmFuZChhcmd1bWVu
dCkpKTsKKyAgICAgICAgICAgIGZsdXNoRGlyZWN0KGlubGluZVN0YWNrRW50cnktPnJlbWFwT3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpKTsKICAgICAgICAgZm9y
IChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGlubGluZVN0YWNrRW50cnktPm1fY29kZUJsb2NrLT5t
X251bVZhcnM7ICsrbG9jYWwpIHsKLSAgICAgICAgICAgIGlmICghaW5saW5lU3RhY2tFbnRyeS0+
bV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQobG9jYWxUb09wZXJhbmQobG9jYWwpKSkKKyAgICAgICAg
ICAgIGlmICghaW5saW5lU3RhY2tFbnRyeS0+bV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQodmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwobG9jYWwpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGZsdXNoRGlyZWN0KGlubGluZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChsb2Nh
bFRvT3BlcmFuZChsb2NhbCkpKTsKKyAgICAgICAgICAgIGZsdXNoRGlyZWN0KGlubGluZVN0YWNr
RW50cnktPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbCkpKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtNDg3LDcgKzQ4Nyw3IEBAIHByaXZhdGU6CiAgICAgLy8gR2V0
IGFuIG9wZXJhbmQsIGFuZCBwZXJmb3JtIGEgVG9JbnQzMi9Ub051bWJlciBjb252ZXJzaW9uIG9u
IGl0LgogICAgIE5vZGUqIGdldFRvSW50MzIoaW50IG9wZXJhbmQpCiAgICAgewotICAgICAgICBy
ZXR1cm4gdG9JbnQzMihnZXQob3BlcmFuZCkpOworICAgICAgICByZXR1cm4gdG9JbnQzMihnZXQo
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKSk7CiAgICAgfQogCiAgICAgLy8gUGVyZm9ybSBhbiBF
UzUgVG9JbnQzMiBvcGVyYXRpb24gLSByZXR1cm5zIGEgbm9kZSBvZiB0eXBlIE5vZGVSZXN1bHRJ
bnQzMi4KQEAgLTU0OSw2ICs1NDksNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgcmV0dXJu
IGdldChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpOwogICAg
IH0KKwogICAgIHZvaWQgc2V0VGhpcyhOb2RlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHNldCht
X2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCksIHZhbHVlKTsKQEAg
LTc3MCw3ICs3NzEsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKICAgICAgICAgCi0gICAgICAgIGFkZFZhckFy
Z0NoaWxkKGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCkpKTsKICAgICAgICAgaW50IGFyZ0NvdW50ID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKICAgICAgICAgaWYgKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyAo
dW5zaWduZWQpYXJnQ291bnQgPiBtX3BhcmFtZXRlclNsb3RzKQogICAgICAgICAgICAgbV9wYXJh
bWV0ZXJTbG90cyA9IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBhcmdDb3VudDsKQEAg
LTc3OCwxMCArNzc5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9
IC1jdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwogICAgICAgICBpbnQgZHVtbXlUaGlz
QXJndW1lbnQgPSBvcCA9PSBDYWxsID8gMCA6IDE7CiAgICAgICAgIGZvciAoaW50IGkgPSAwICsg
ZHVtbXlUaGlzQXJndW1lbnQ7IGkgPCBhcmdDb3VudDsgKytpKQotICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoaSkpKTsKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
LCByZWdpc3Rlck9mZnNldCkpKTsKIAogICAgICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaChO
b2RlOjpWYXJBcmcsIG9wLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSk7Ci0gICAgICAg
IHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjYWxsKTsKKyAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgY2FsbCk7
CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAKQEAgLTEwOTUsMjAgKzEwOTYsMjAg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tU
b3AgPSBtX2NhbGxlcjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW50IHJlbWFwT3Bl
cmFuZChpbnQgb3BlcmFuZCkgY29uc3QKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlbWFwT3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKCFtX2lubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmFu
ZDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG9wZXJhbmQgPj0gRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXgpIHsKLSAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gbV9jb25zdGFu
dFJlbWFwW29wZXJhbmQgLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVyKG1fY29uc3RhbnRSZW1hcFtvcGVy
YW5kLnRvQ29uc3RhbnRJbmRleCgpXSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC5p
c0NvbnN0YW50KCkpOwogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kICE9IEpTU3RhY2s6OkNhbGxlZSk7Cisg
ICAgICAgICAgICBBU1NFUlQob3BlcmFuZC5vZmZzZXQoKSAhPSBKU1N0YWNrOjpDYWxsZWUpOwog
Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmFuZCArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldDsKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZzZXQo
KSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7CiAgICAgICAgIH0KICAgICB9Owog
ICAgIApAQCAtMTE0MSw3ICsxMTQyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2Fs
bChJbnN0cnVjdAogewogICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09E
RV9MRU5HVEgob3BfY29uc3RydWN0KSk7CiAgICAgCi0gICAgTm9kZSogY2FsbFRhcmdldCA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICBOb2RlKiBjYWxsVGFyZ2V0
ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7
CiAgICAgCiAgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0dXM7CiAKQEAgLTEyMTMsNyAr
MTIxNCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcygKIHsKICAg
ICBOb2RlKiB0aGlzQXJndW1lbnQ7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAg
ICAgIHRoaXNBcmd1bWVudCA9IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDApKTsKKyAgICAgICAgdGhpc0FyZ3VtZW50ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgZWxzZQogICAgICAgICB0aGlzQXJndW1lbnQg
PSAwOwogCkBAIC0xMjM4LDcgKzEyMzksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVu
Y3Rpb25DaGVja3MoCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0QXJndW1lbnRQaGFudG9tcyhp
bnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIGZvciAoaW50IGkgPSBraW5kID09IENvZGVG
b3JDYWxsID8gMCA6IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKQotICAg
ICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9P
cGVyYW5kKGkpKSk7CisgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGksIHJlZ2lzdGVyT2Zmc2V0KSkpOwogfQogCiBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9w
ZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZz
ZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTEyOTIsMTQgKzEyOTMsMTQgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIAogICAgIC8vIEZJ
WE1FOiBEb24ndCBmbHVzaCBjb25zdGFudHMhCiAgICAgCi0gICAgaW50IGlubGluZUNhbGxGcmFt
ZVN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlZ2lzdGVyT2Zmc2V0KSAr
IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgaW50IGlubGluZUNhbGxGcmFtZVN0
YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZWdp
c3Rlck9mZnNldCkpLm9mZnNldCgpICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKICAg
ICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYXJlYSB1c2VkIGJ5IHRoZSBjYWxsIGZyYW1l
IGlzIHJlc2VydmVkLgotICAgIGZvciAoaW50IGFyZyA9IG9wZXJhbmRUb0xvY2FsKGlubGluZUNh
bGxGcmFtZVN0YXJ0KSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBjb2RlQmxvY2st
Pm1fbnVtVmFyczsgYXJnLS0gPiBvcGVyYW5kVG9Mb2NhbChpbmxpbmVDYWxsRnJhbWVTdGFydCk7
KQorICAgIGZvciAoaW50IGFyZyA9IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWVTdGFy
dCkudG9Mb2NhbCgpICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGNvZGVCbG9jay0+
bV9udW1WYXJzOyBhcmctLSA+IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWVTdGFydCku
dG9Mb2NhbCgpOykKICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzLnNldChhcmcpOwogICAgIAogICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZW5vdWdoIGxvY2Fscy4KLSAgICB1bnNpZ25lZCBu
ZXdOdW1Mb2NhbHMgPSBvcGVyYW5kVG9Mb2NhbChpbmxpbmVDYWxsRnJhbWVTdGFydCkgKyBKU1N0
YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVy
czsKKyAgICB1bnNpZ25lZCBuZXdOdW1Mb2NhbHMgPSBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lU3RhcnQpLnRvTG9jYWwoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBj
b2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwogICAgIGlmIChuZXdOdW1Mb2NhbHMgPiBt
X251bUxvY2FscykgewogICAgICAgICBtX251bUxvY2FscyA9IG5ld051bUxvY2FsczsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2kpCkBAIC0x
MzEwLDcgKzEzMTEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2Rl
CiAKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50cnkoCiAgICAgICAgIHRoaXMs
IGNvZGVCbG9jaywgY29kZUJsb2NrLCBtX2dyYXBoLmxhc3RCbG9jaygpLCBjYWxsTGlua1N0YXR1
cy5mdW5jdGlvbigpLAotICAgICAgICAoVmlydHVhbFJlZ2lzdGVyKW1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChyZXN1bHRPcGVyYW5kKSwKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSksCiAgICAgICAgIChW
aXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBraW5kKTsKICAgICAKICAgICAvLyBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgaW5s
aW5pbmcgcmVhbGx5IGhhcHBlbnMuCkBAIC0xNDI3LDE5ICsxNDI4LDE5IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZU1pbk1heChpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNl
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQogewogICAgIGlmIChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7IC8vIE1hdGgubWluKCkKLSAgICAgICAgc2V0KHJlc3Vs
dE9wZXJhbmQsIGNvbnN0YW50TmFOKCkpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJl
c3VsdE9wZXJhbmQpLCBjb25zdGFudE5hTigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgICAKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMikgeyAvLyBN
YXRoLm1pbih4KQotICAgICAgICBOb2RlKiByZXN1bHQgPSBnZXQocmVnaXN0ZXJPZmZzZXQgKyBh
cmd1bWVudFRvT3BlcmFuZCgxKSk7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdldChWaXJ0dWFs
UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7
CiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgRWRnZShyZXN1bHQsIE51bWJlclVzZSkpOwot
ICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgcmVzdWx0KTsKKyAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIAogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAzKSB7IC8v
IE1hdGgubWluKHgsIHkpCi0gICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhZGRUb0dyYXBoKG9w
LCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSksIGdldChyZWdpc3Rl
ck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDIpKSkpOworICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKG9wLCBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIApAQCAtMTQ1NCwxNyArMTQ1NSwxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbnRyaW5zaWMoaW50CiAgICAgc3dpdGNoIChpbnRyaW5zaWMpIHsKICAgICBjYXNlIEFic0lu
dHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkg
eyAvLyBNYXRoLmFicygpCi0gICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY29uc3RhbnRO
YU4oKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBj
b25zdGFudE5hTigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKCFNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNGbG9hdGluZ1BvaW50QWJzKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3Jh
cGgoQXJpdGhBYnMsIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7
CisgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKEFyaXRoQWJzLCBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAgICAgIGlmIChtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBP
dmVyZmxvdykpCiAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7
Ci0gICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBub2RlKTsKKyAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgbm9kZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtMTQ3NiwxNCArMTQ3NywxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bnRyaW5zaWMoaW50CiAgICAgICAgIAogICAgIGNhc2UgU3FydEludHJpbnNpYzogewogICAgICAg
ICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeyAvLyBNYXRoLnNxcnQoKQot
ICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNvbnN0YW50TmFOKCkpOworICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgY29uc3RhbnROYU4oKSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYg
KCFNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhZGRUb0dyYXBo
KEFyaXRoU3FydCwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKSk7
CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgo
QXJpdGhTcXJ0LCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZz
ZXQpKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIApAQCAtMTUwMCw4
ICsxNTAxLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAg
ICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogewotICAgICAgICAgICAgTm9kZSog
YXJyYXlQdXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3Jk
KCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9P
cGVyYW5kKDApKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsK
LSAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhcnJheVB1c2gpOworICAgICAgICAgICAg
Tm9kZSogYXJyYXlQdXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUu
YXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgwLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MSwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJl
c3VsdE9wZXJhbmQpLCBhcnJheVB1c2gpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTUyMyw4ICsxNTI0LDggQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
U3RvcmFnZTogewotICAgICAgICAgICAgTm9kZSogYXJyYXlQb3AgPSBhZGRUb0dyYXBoKEFycmF5
UG9wLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQo
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSkpOwotICAgICAgICAgICAgc2V0
KHJlc3VsdE9wZXJhbmQsIGFycmF5UG9wKTsKKyAgICAgICAgICAgIE5vZGUqIGFycmF5UG9wID0g
YWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhw
cmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zm
c2V0KSkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwg
YXJyYXlQb3ApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtMTUzNywxMSArMTUzOCwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bnRyaW5zaWMoaW50CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAy
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGludCB0aGlzT3BlcmFuZCA9
IHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCk7Ci0gICAgICAgIGludCBpbmRl
eE9wZXJhbmQgPSByZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpOwotICAgICAg
ICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckNvZGVBdCwgT3BJbmZvKEFy
cmF5TW9kZShBcnJheTo6U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdldFRv
SW50MzIoaW5kZXhPcGVyYW5kKSk7CisgICAgICAgIGludCB0aGlzT3BlcmFuZCA9IHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KS5vZmZzZXQoKTsKKyAgICAgICAg
aW50IGluZGV4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVy
T2Zmc2V0KS5vZmZzZXQoKTsKKyAgICAgICAgTm9kZSogY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0
cmluZ0NoYXJDb2RlQXQsIE9wSW5mbyhBcnJheU1vZGUoQXJyYXk6OlN0cmluZykuYXNXb3JkKCkp
LCBnZXQoVmlydHVhbFJlZ2lzdGVyKHRoaXNPcGVyYW5kKSksIGdldFRvSW50MzIoaW5kZXhPcGVy
YW5kKSk7CiAKLSAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKKyAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgY2hhckNvZGUpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE1NDksMjEgKzE1NTAsMjEgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBp
bnQgdGhpc09wZXJhbmQgPSByZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApOwot
ICAgICAgICBpbnQgaW5kZXhPcGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3Bl
cmFuZCgxKTsKLSAgICAgICAgTm9kZSogY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJB
dCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3Bl
cmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7CisgICAgICAgIGludCB0aGlzT3BlcmFu
ZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KS5vZmZzZXQo
KTsKKyAgICAgICAgaW50IGluZGV4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDEsIHJlZ2lzdGVyT2Zmc2V0KS5vZmZzZXQoKTsKKyAgICAgICAgTm9kZSogY2hhckNvZGUgPSBh
ZGRUb0dyYXBoKFN0cmluZ0NoYXJBdCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5h
c1dvcmQoKSksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc09wZXJhbmQpKSwgZ2V0VG9JbnQzMihp
bmRleE9wZXJhbmQpKTsKIAotICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY2hhckNvZGUpOwor
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBjaGFyQ29kZSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIEZyb21DaGFyQ29kZUludHJpbnNp
YzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpbnQgaW5kZXhPcGVyYW5kID0gcmVnaXN0
ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKTsKKyAgICAgICAgaW50IGluZGV4T3BlcmFu
ZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KS5vZmZzZXQo
KTsKICAgICAgICAgTm9kZSogY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0Zyb21DaGFyQ29k
ZSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpKTsKIAotICAgICAgICBzZXQocmVzdWx0T3BlcmFu
ZCwgY2hhckNvZGUpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQp
LCBjaGFyQ29kZSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTU3Miw4ICsx
NTczLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAg
ICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIHJlZ0V4cEV4ZWMgPSBhZGRUb0dyYXBo
KFJlZ0V4cEV4ZWMsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJP
ZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3Vt
ZW50VG9PcGVyYW5kKDEpKSk7Ci0gICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCByZWdFeHBFeGVj
KTsKKyAgICAgICAgTm9kZSogcmVnRXhwRXhlYyA9IGFkZFRvR3JhcGgoUmVnRXhwRXhlYywgT3BJ
bmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgwLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwg
cmVnaXN0ZXJPZmZzZXQpKSk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3Bl
cmFuZCksIHJlZ0V4cEV4ZWMpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQpAQCAtMTU4Miw4ICsxNTgzLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmlu
c2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIHJlZ0V4cEV4
ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cFRlc3QsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24p
LCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rl
ck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7Ci0gICAgICAgIHNldChyZXN1bHRPcGVy
YW5kLCByZWdFeHBFeGVjKTsKKyAgICAgICAgTm9kZSogcmVnRXhwRXhlYyA9IGFkZFRvR3JhcGgo
UmVnRXhwVGVzdCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CisgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlZ0V4cEV4ZWMpOwogICAgICAgICAKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMTU5MSwxMSArMTU5MiwxMSBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgY2FzZSBJTXVsSW50cmluc2ljOiB7CiAgICAg
ICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAzKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpbnQgbGVmdE9wZXJhbmQgPSByZWdpc3Rlck9mZnNldCArIGFy
Z3VtZW50VG9PcGVyYW5kKDEpOwotICAgICAgICBpbnQgcmlnaHRPcGVyYW5kID0gcmVnaXN0ZXJP
ZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgyKTsKKyAgICAgICAgaW50IGxlZnRPcGVyYW5kID0g
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpLm9mZnNldCgpOwor
ICAgICAgICBpbnQgcmlnaHRPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwg
cmVnaXN0ZXJPZmZzZXQpLm9mZnNldCgpOwogICAgICAgICBOb2RlKiBsZWZ0ID0gZ2V0VG9JbnQz
MihsZWZ0T3BlcmFuZCk7CiAgICAgICAgIE5vZGUqIHJpZ2h0ID0gZ2V0VG9JbnQzMihyaWdodE9w
ZXJhbmQpOwotICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChBcml0aElNdWws
IGxlZnQsIHJpZ2h0KSk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFu
ZCksIGFkZFRvR3JhcGgoQXJpdGhJTXVsLCBsZWZ0LCByaWdodCkpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgICAgIApAQCAtMTY1MSw4ICsxNjUyLDggQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlVHlwZWRBcnJheUNvbgogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAhPSAyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgc2V0KHJlc3Vs
dE9wZXJhbmQsCi0gICAgICAgIGFkZFRvR3JhcGgoTmV3VHlwZWRBcnJheSwgT3BJbmZvKHR5cGUp
LCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpKTsKKyAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLAorICAgICAgICBhZGRUb0dyYXBoKE5ld1R5
cGVkQXJyYXksIE9wSW5mbyh0eXBlKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEs
IHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTY3NCwxNCAr
MTY3NSwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPT0gMikgewotICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsCi0g
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOZXdBcnJheVdpdGhTaXplLCBPcEluZm8oQXJyYXlX
aXRoVW5kZWNpZGVkKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkp
KSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLAorICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoTmV3QXJyYXlXaXRoU2l6ZSwgT3BJbmZvKEFycmF5V2l0
aFVuZGVjaWRlZCksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9m
ZnNldCkpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsg
KytpKQotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJn
dW1lbnRUb09wZXJhbmQoaSkpKTsKLSAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsCisgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVn
aXN0ZXJPZmZzZXQpKSk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFu
ZCksCiAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgTmV3QXJyYXksIE9wSW5m
byhBcnJheVdpdGhVbmRlY2lkZWQpLCBPcEluZm8oMCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtMTY5MiwxMiArMTY5MywxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVDb25zdGFudEludGVyCiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8
PSAxKQogICAgICAgICAgICAgcmVzdWx0ID0gY2VsbENvbnN0YW50KG1fdm0tPnNtYWxsU3RyaW5n
cy5lbXB0eVN0cmluZygpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gYWRk
VG9HcmFwaChUb1N0cmluZywgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQo
MSkpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGFkZFRvR3JhcGgoVG9TdHJpbmcsIGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpCiAgICAgICAgICAgICByZXN1bHQg
PSBhZGRUb0dyYXBoKE5ld1N0cmluZ09iamVjdCwgT3BJbmZvKGZ1bmN0aW9uLT5nbG9iYWxPYmpl
Y3QoKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpLCByZXN1bHQpOwogICAgICAgICAKLSAgICAg
ICAgc2V0KHJlc3VsdE9wZXJhbmQsIHJlc3VsdCk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0T3BlcmFuZCksIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICAKQEAgLTE3MzMsNyArMTczNCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdl
dEJ5T2Zmc2V0KAogICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQogewotICAgIHNldChkZXN0aW5hdGlvbk9wZXJhbmQsIGhhbmRs
ZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIG9mZnNldCkp
OworICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwgaGFuZGxlR2V0
QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0KSk7CiB9
CiAKIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1
bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGUqIHZhbHVlKQpA
QCAtMTc2MCw3ICsxNzYxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgK
ICAgICBpZiAoIWdldEJ5SWRTdGF0dXMuaXNTaW1wbGUoKQogICAgICAgICB8fCBtX2lubGluZVN0
YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNo
ZSkKICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShtX2N1cnJlbnRJbmRleCwgQmFkV2Vha0NvbnN0YW50Q2FjaGUpKSB7Ci0gICAgICAgIHNldChk
ZXN0aW5hdGlvbk9wZXJhbmQsCisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRp
b25PcGVyYW5kKSwKICAgICAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAgICAgICAgICAgICAgZ2V0
QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkgPyBHZXRCeUlkRmx1c2ggOiBHZXRCeUlkLAogICAgICAg
ICAgICAgICAgIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBi
YXNlKSk7CkBAIC0xODAzLDcgKzE4MDQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVH
ZXRCeUlkKAogICAgIGlmIChnZXRCeUlkU3RhdHVzLnNwZWNpZmljVmFsdWUoKSkgewogICAgICAg
ICBBU1NFUlQoZ2V0QnlJZFN0YXR1cy5zcGVjaWZpY1ZhbHVlKCkuaXNDZWxsKCkpOwogICAgICAg
ICAKLSAgICAgICAgc2V0KGRlc3RpbmF0aW9uT3BlcmFuZCwgY2VsbENvbnN0YW50KGdldEJ5SWRT
dGF0dXMuc3BlY2lmaWNWYWx1ZSgpLmFzQ2VsbCgpKSk7CisgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwgY2VsbENvbnN0YW50KGdldEJ5SWRTdGF0dXMuc3Bl
Y2lmaWNWYWx1ZSgpLmFzQ2VsbCgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBA
IC0xODUwLDcgKzE4NTEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHMucmVzaXplKG1fbnVtQXJndW1lbnRzKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9udW1Bcmd1
bWVudHM7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCi0gICAgICAgICAgICAgICAgYXJndW1lbnRU
b09wZXJhbmQoYXJndW1lbnQpLCBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChhcmd1bWVudFRvT3Bl
cmFuZChhcmd1bWVudCkpKTsKKyAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudCksIG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50KSkpOwogICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlU3RydWN0
dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpOwog
ICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlQ2hlY2tBcnJheUhvaXN0aW5nRmFpbGVkKApAQCAt
MTg5OSw3ICsxOTAwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICBjYXNlIG9wX2VudGVyOgogICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBhbGwg
bG9jYWxzIHRvIHVuZGVmaW5lZC4KICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9p
bmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPm1fbnVtVmFyczsgKytpKQotICAgICAgICAgICAg
ICAgIHNldChsb2NhbFRvT3BlcmFuZChpKSwgY29uc3RhbnRVbmRlZmluZWQoKSwgU2V0T25FbnRy
eSk7CisgICAgICAgICAgICAgICAgc2V0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBjb25z
dGFudFVuZGVmaW5lZCgpLCBTZXRPbkVudHJ5KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2VudGVyKTsKIAogICAgICAgICBjYXNlIG9wX3RvX3RoaXM6IHsKQEAgLTE5MjMsNyArMTkyNCw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBj
YXNlIG9wX2NyZWF0ZV90aGlzOiB7CiAgICAgICAgICAgICBpbnQgY2FsbGVlT3BlcmFuZCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlKiBjYWxsZWUg
PSBnZXQoY2FsbGVlT3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBnZXQoVmly
dHVhbFJlZ2lzdGVyKGNhbGxlZU9wZXJhbmQpKTsKICAgICAgICAgICAgIGJvb2wgYWxyZWFkeUVt
aXR0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChjYWxsZWUtPm9wKCkgPT0gV2Vha0pTQ29u
c3RhbnQpIHsKICAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBjYWxsZWUtPndlYWtDb25z
dGFudCgpOwpAQCAtMTkzNSwxOSArMTkzNiwxOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQWxsb2NhdGlv
blByb2ZpbGVXYXRjaHBvaW50LCBPcEluZm8oZnVuY3Rpb24pKTsKICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIGNhbGxlZSBpcyBzdGlsbCBsaXZlIHVwIHRvIHRoaXMgcG9pbnQuCiAgICAgICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgY2FsbGVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsCisgICAgICAgICAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCksCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5ld09iamVjdCwgT3BJbmZv
KGFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKSkpKTsKICAgICAgICAgICAgICAgICAgICAg
YWxyZWFkeUVtaXR0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmICghYWxyZWFkeUVtaXR0ZWQpCi0gICAgICAgICAgICAgICAgc2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsCisgICAgICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKICAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChDcmVhdGVUaGlzLCBPcEluZm8oY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCksIGNhbGxlZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY3Jl
YXRlX3RoaXMpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9uZXdfb2JqZWN0OiB7Ci0g
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwKKyAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCks
CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOZXdPYmplY3QsCiAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfb2JqZWN0
KTsKQEAgLTE5NTgsMTUgKzE5NTksMTUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgaW50IG51bU9wZXJhbmRzID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgICAgIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHBy
b2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheUFsbG9jYXRpb25Qcm9maWxlOwog
ICAgICAgICAgICAgZm9yIChpbnQgb3BlcmFuZElkeCA9IHN0YXJ0T3BlcmFuZDsgb3BlcmFuZElk
eCA+IHN0YXJ0T3BlcmFuZCAtIG51bU9wZXJhbmRzOyAtLW9wZXJhbmRJZHgpCi0gICAgICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KG9wZXJhbmRJZHgpKTsKLSAgICAgICAgICAgIHNldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywg
TmV3QXJyYXksIE9wSW5mbyhwcm9maWxlLT5zZWxlY3RJbmRleGluZ1R5cGUoKSksIE9wSW5mbygw
KSkpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChWaXJ0dWFsUmVnaXN0ZXIo
b3BlcmFuZElkeCkpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBOZXdBcnJh
eSwgT3BJbmZvKHByb2ZpbGUtPnNlbGVjdEluZGV4aW5nVHlwZSgpKSwgT3BJbmZvKDApKSk7CiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfYXJyYXkpOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOiB7CiAgICAgICAgICAg
ICBpbnQgbGVuZ3RoT3BlcmFuZCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAg
ICAgICAgICAgICBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUuYXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKLSAgICAgICAgICAgIHNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKE5ld0FycmF5V2l0aFNpemUs
IE9wSW5mbyhwcm9maWxlLT5zZWxlY3RJbmRleGluZ1R5cGUoKSksIGdldChsZW5ndGhPcGVyYW5k
KSkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChOZXdBcnJheVdpdGhTaXplLCBPcEluZm8ocHJvZmls
ZS0+c2VsZWN0SW5kZXhpbmdUeXBlKCkpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGxlbmd0aE9wZXJh
bmQpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3X2FycmF5X3dpdGhfc2l6ZSk7
CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTk4OCwxMiArMTk4OSwxMiBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG1fZ3JhcGgubV9uZXdBcnJheUJ1ZmZlckRhdGEuYXBwZW5kKGRh
dGEpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFk
ZFRvR3JhcGgoTmV3QXJyYXlCdWZmZXIsIE9wSW5mbygmbV9ncmFwaC5tX25ld0FycmF5QnVmZmVy
RGF0YS5sYXN0KCkpKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKE5ld0FycmF5QnVmZmVyLCBPcElu
Zm8oJm1fZ3JhcGgubV9uZXdBcnJheUJ1ZmZlckRhdGEubGFzdCgpKSkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfbmV3X2FycmF5X2J1ZmZlcik7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIG9wX25ld19yZWdleHA6IHsKLSAgICAgICAgICAgIHNldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKE5ld1JlZ2V4cCwgT3BJbmZvKGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKE5l
d1JlZ2V4cCwgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7CiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfcmVnZXhwKTsKICAgICAgICAgfQogICAgICAgICAg
ICAgCkBAIC0yMDAyLDEyICsyMDAzLDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgIGlmICghY2FjaGVkRnVuY3Rpb24gCiAgICAgICAgICAg
ICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93
Q2FzZShtX2N1cnJlbnRJbmRleCkKICAgICAgICAgICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRGdW5jdGlvbikp
IHsKLSAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
Z2V0KEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGdldChWaXJ0dWFsUmVnaXN0ZXIo
SlNTdGFjazo6Q2FsbGVlKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBBU1NFUlQoY2FjaGVkRnVuY3Rpb24tPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8oKSkpOwot
ICAgICAgICAgICAgICAgIE5vZGUqIGFjdHVhbENhbGxlZSA9IGdldChKU1N0YWNrOjpDYWxsZWUp
OworICAgICAgICAgICAgICAgIE5vZGUqIGFjdHVhbENhbGxlZSA9IGdldChWaXJ0dWFsUmVnaXN0
ZXIoSlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0Z1
bmN0aW9uLCBPcEluZm8oY2FjaGVkRnVuY3Rpb24pLCBhY3R1YWxDYWxsZWUpOwotICAgICAgICAg
ICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKFdl
YWtKU0NvbnN0YW50LCBPcEluZm8oY2FjaGVkRnVuY3Rpb24pKSk7CisgICAgICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRk
VG9HcmFwaChXZWFrSlNDb25zdGFudCwgT3BJbmZvKGNhY2hlZEZ1bmN0aW9uKSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2NhbGxlZSk7CiAgICAgICAg
IH0KQEAgLTIwMTcsMjEgKzIwMTgsMjEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2JpdGFuZDogewogICAgICAgICAgICAgTm9kZSog
b3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAg
ICAgICAgIE5vZGUqIG9wMiA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
YWRkVG9HcmFwaChCaXRBbmQsIG9wMSwgb3AyKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEJpdEFu
ZCwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2JpdGFuZCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIG9wX2JpdG9yOiB7CiAgICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAg
ICAgTm9kZSogb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRU
b0dyYXBoKEJpdE9yLCBvcDEsIG9wMikpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChCaXRPciwgb3Ax
LCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2JpdG9yKTsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2Ugb3BfYml0eG9yOiB7CiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRU
b0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9k
ZSogb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBo
KEJpdFhvciwgb3AxLCBvcDIpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoQml0WG9yLCBvcDEsIG9w
MikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYml0eG9yKTsKICAgICAgICAgfQogCkBA
IC0yMDQ0LDcgKzIwNDUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb3AxOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGFkZFRvR3JhcGgoQml0UlNoaWZ0LCBvcDEsIG9wMik7Ci0g
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0KTsK
KyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCksIHJlc3VsdCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9yc2hpZnQpOwog
ICAgICAgICB9CiAKQEAgLTIwNTcsNyArMjA1OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvcDE7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChCaXRMU2hpZnQs
IG9wMSwgb3AyKTsKLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kLCByZXN1bHQpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgcmVzdWx0KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX2xzaGlmdCk7CiAgICAgICAgIH0KIApAQCAtMjA4NCw3ICsyMDg1LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGFkZFRvR3JhcGgoQml0VVJTaGlmdCwgb3AxLCBvcDIpOwogICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG1ha2VTYWZlKGFkZFRvR3JhcGgoVUludDMyVG9OdW1iZXIsIHJlc3VsdCkpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IHJlc3VsdCk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpLCByZXN1bHQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
dXJzaGlmdCk7CiAgICAgICAgIH0KIApAQCAtMjA5Miw2MiArMjA5Myw2NCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9pbmM6IHsK
ICAgICAgICAgICAgIGludCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwotICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQoc3JjRHN0KTsKLSAgICAgICAgICAgIHNldChz
cmNEc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9wLCBvbmUoKSkpKTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3RWaXJ0dWFsUmVnaXN0ZXIgPSBWaXJ0dWFsUmVn
aXN0ZXIoc3JjRHN0KTsKKyAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KHNyY0RzdFZpcnR1YWxS
ZWdpc3Rlcik7CisgICAgICAgICAgICBzZXQoc3JjRHN0VmlydHVhbFJlZ2lzdGVyLCBtYWtlU2Fm
ZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9pbmMpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9kZWM6IHsKICAgICAg
ICAgICAgIGludCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
ICAgICAgICAgTm9kZSogb3AgPSBnZXQoc3JjRHN0KTsKLSAgICAgICAgICAgIHNldChzcmNEc3Qs
IG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wLCBvbmUoKSkpKTsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBzcmNEc3RWaXJ0dWFsUmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIo
c3JjRHN0KTsKKyAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KHNyY0RzdFZpcnR1YWxSZWdpc3Rl
cik7CisgICAgICAgICAgICBzZXQoc3JjRHN0VmlydHVhbFJlZ2lzdGVyLCBtYWtlU2FmZShhZGRU
b0dyYXBoKEFyaXRoU3ViLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9kZWMpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gPT09IEFyaXRobWV0aWMgb3BlcmF0aW9u
cyA9PT0KIAogICAgICAgICBjYXNlIG9wX2FkZDogewotICAgICAgICAgICAgTm9kZSogb3AxID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZSog
b3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAg
Tm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGlmIChvcDEtPmhh
c051bWJlclJlc3VsdCgpICYmIG9wMi0+aGFzTnVtYmVyUmVzdWx0KCkpCi0gICAgICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3Jh
cGgoQXJpdGhBZGQsIG9wMSwgb3AyKSkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIG1ha2VTYWZlKGFkZFRvR3Jh
cGgoQXJpdGhBZGQsIG9wMSwgb3AyKSkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dy
YXBoKFZhbHVlQWRkLCBvcDEsIG9wMikpKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBtYWtlU2FmZShhZGRUb0dy
YXBoKFZhbHVlQWRkLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Fk
ZCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3N1YjogewotICAgICAgICAgICAgTm9k
ZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFk
ZFRvR3JhcGgoQXJpdGhTdWIsIG9wMSwgb3AyKSkpOworICAgICAgICAgICAgTm9kZSogb3AxID0g
Z2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Cisg
ICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhT
dWIsIG9wMSwgb3AyKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfc3ViKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbmVnYXRlOiB7Ci0gICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0
aE5lZ2F0ZSwgb3AxKSkpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBtYWtlU2Fm
ZShhZGRUb0dyYXBoKEFyaXRoTmVnYXRlLCBvcDEpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9uZWdhdGUpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9tdWw6IHsKICAgICAg
ICAgICAgIC8vIE11bHRpcGx5IHJlcXVpcmVzIHRoYXQgdGhlIGlucHV0cyBhcmUgbm90IHRydW5j
YXRlZCwgdW5mb3J0dW5hdGVseS4KLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHNldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoTXVsLCBv
cDEsIG9wMikpKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZSogb3Ay
ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7
CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoTXVsLCBvcDEsIG9wMikpKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX211bCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IG9wX21vZDogewotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhNb2QsIG9wMSwgb3AyKSkp
OworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKyAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCks
IG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhNb2QsIG9wMSwgb3AyKSkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfbW9kKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZGl2OiB7
Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgbWFrZURpdlNhZmUoYWRkVG9HcmFwaChBcml0aERpdiwgb3AxLCBvcDIpKSk7CisgICAg
ICAgICAgICBOb2RlKiBvcDEgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgbWFrZURp
dlNhZmUoYWRkVG9HcmFwaChBcml0aERpdiwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9kaXYpOwogICAgICAgICB9CiAKQEAgLTIxNTksNjcgKzIxNjIsNjcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfZGVidWcpOwogI2VuZGlmCiAgICAgICAgIGNhc2Ugb3BfbW92OiB7Ci0gICAgICAg
ICAgICBOb2RlKiBvcCA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBvcCk7CisgICAg
ICAgICAgICBOb2RlKiBvcCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgb3ApOwogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfbW92KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNl
OgotICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0hhc0luc3RhbmNlLCBnZXQoY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0hh
c0luc3RhbmNlLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jaGVja19oYXNfaW5zdGFuY2Up
OwogCiAgICAgICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjogewotICAgICAgICAgICAgTm9kZSogdmFs
dWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBO
b2RlKiBwcm90b3R5cGUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFw
aChJbnN0YW5jZU9mLCB2YWx1ZSwgcHJvdG90eXBlKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1
ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkp
OworICAgICAgICAgICAgTm9kZSogcHJvdG90eXBlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEluc3Rh
bmNlT2YsIHZhbHVlLCBwcm90b3R5cGUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lu
c3RhbmNlb2YpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9pc191
bmRlZmluZWQ6IHsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSXNVbmRlZmluZWQsIHZhbHVlKSk7CisgICAgICAgICAg
ICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChJc1VuZGVmaW5lZCwgdmFsdWUpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX3VuZGVmaW5lZCk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX2lzX2Jvb2xlYW46IHsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoSXNCb29sZWFuLCB2YWx1
ZSkpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoSXNCb29s
ZWFuLCB2YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfYm9vbGVhbik7CiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2lzX251bWJlcjogewotICAgICAgICAgICAgTm9k
ZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAg
ICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChJc051
bWJlciwgdmFsdWUpKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dy
YXBoKElzTnVtYmVyLCB2YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfbnVt
YmVyKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXNfc3RyaW5nOiB7Ci0gICAgICAg
ICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dy
YXBoKElzU3RyaW5nLCB2YWx1ZSkpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKKyAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCks
IGFkZFRvR3JhcGgoSXNTdHJpbmcsIHZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9pc19zdHJpbmcpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pc19vYmplY3Q6IHsK
LSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IGFkZFRvR3JhcGgoSXNPYmplY3QsIHZhbHVlKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwor
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSwgYWRkVG9HcmFwaChJc09iamVjdCwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2lzX29iamVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2lzX2Z1
bmN0aW9uOiB7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCBhZGRUb0dyYXBoKElzRnVuY3Rpb24sIHZhbHVlKSk7CisgICAgICAgICAgICBO
b2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChJc0Z1bmN0aW9uLCB2YWx1ZSkpOwogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfZnVuY3Rpb24pOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9ub3Q6IHsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgdmFsdWUpKTsKKyAgICAg
ICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIHZhbHVl
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9ub3QpOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKLSAgICAgICAgICAgIE5vZGUq
IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoVG9Qcmlt
aXRpdmUsIHZhbHVlKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9H
cmFwaChUb1ByaW1pdGl2ZSwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Rv
X3ByaW1pdGl2ZSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjIzNSw3ICsyMjM4LDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogI2VuZGlmCiAgICAg
ICAgICAgICBhdXRvIHRvU3RyaW5nTm9kZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPE5vZGUqW10+KG51
bU9wZXJhbmRzKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtT3BlcmFuZHM7
IGkrKykKLSAgICAgICAgICAgICAgICB0b1N0cmluZ05vZGVzW2ldID0gYWRkVG9HcmFwaChUb1N0
cmluZywgZ2V0KHN0YXJ0T3BlcmFuZCAtIGkpKTsKKyAgICAgICAgICAgICAgICB0b1N0cmluZ05v
ZGVzW2ldID0gYWRkVG9HcmFwaChUb1N0cmluZywgZ2V0KFZpcnR1YWxSZWdpc3RlcihzdGFydE9w
ZXJhbmQgLSBpKSkpOwogCiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bU9wZXJh
bmRzOyBpKyspCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCB0b1N0cmluZ05v
ZGVzW2ldKTsKQEAgLTIyNTYsMTQxICsyMjU5LDE0MSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgQVNTRVJUKGluZGV4SW5PcGVyYW5k
cyA8IG1heFJvcGVBcmd1bWVudHMpOwogICAgICAgICAgICAgICAgIG9wZXJhbmRzW2luZGV4SW5P
cGVyYW5kcysrXSA9IHRvU3RyaW5nTm9kZXNbb3BlcmFuZElkeF07CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwKKyAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCks
CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChNYWtlUm9wZSwgb3BlcmFuZHNbMF0sIG9wZXJh
bmRzWzFdLCBvcGVyYW5kc1syXSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfc3RyY2F0
KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbGVzczogewotICAgICAgICAgICAgTm9k
ZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGlm
IChjYW5Gb2xkKG9wMSkgJiYgY2FuRm9sZChvcDIpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBhID0gdmFsdWVPZkpTQ29uc3RhbnQob3AxKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGIg
PSB2YWx1ZU9mSlNDb25zdGFudChvcDIpOwogICAgICAgICAgICAgICAgIGlmIChhLmlzTnVtYmVy
KCkgJiYgYi5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLAorICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgZ2V0SlNDb25zdGFudEZvclZhbHVlKGpzQm9vbGVhbihhLmFzTnVtYmVyKCkgPCBi
LmFzTnVtYmVyKCkpKSk7CiAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xlc3Mp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEs
IG9wMikpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xlc3MpOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9sZXNzZXE6IHsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAg
ICAgICAgTm9kZSogb3AyID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBpZiAoY2FuRm9sZChvcDEpICYmIGNhbkZvbGQo
b3AyKSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWUgYSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9w
MSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBiID0gdmFsdWVPZkpTQ29uc3RhbnQob3AyKTsK
ICAgICAgICAgICAgICAgICBpZiAoYS5pc051bWJlcigpICYmIGIuaXNOdW1iZXIoKSkgewotICAg
ICAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwKKyAg
ICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGdldEpTQ29uc3RhbnRGb3JW
YWx1ZShqc0Jvb2xlYW4oYS5hc051bWJlcigpIDw9IGIuYXNOdW1iZXIoKSkpKTsKICAgICAgICAg
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbGVzc2VxKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgYWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEsIG9wMikpOworICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRk
VG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfbGVzc2VxKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZ3JlYXRlcjogewot
ICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBvcDIg
PSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsK
ICAgICAgICAgICAgIGlmIChjYW5Gb2xkKG9wMSkgJiYgY2FuRm9sZChvcDIpKSB7CiAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBhID0gdmFsdWVPZkpTQ29uc3RhbnQob3AxKTsKICAgICAgICAgICAg
ICAgICBKU1ZhbHVlIGIgPSB2YWx1ZU9mSlNDb25zdGFudChvcDIpOwogICAgICAgICAgICAgICAg
IGlmIChhLmlzTnVtYmVyKCkgJiYgYi5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLAorICAgICAgICAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SlNDb25zdGFudEZvclZhbHVlKGpzQm9vbGVhbihh
LmFzTnVtYmVyKCkgPiBiLmFzTnVtYmVyKCkpKSk7CiAgICAgICAgICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2dyZWF0ZXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBo
KENvbXBhcmVHcmVhdGVyLCBvcDEsIG9wMikpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChDb21wYXJl
R3JlYXRlciwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dyZWF0ZXIp
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9ncmVhdGVyZXE6IHsKLSAgICAgICAgICAg
IE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CiAgICAgICAgICAg
ICBpZiAoY2FuRm9sZChvcDEpICYmIGNhbkZvbGQob3AyKSkgewogICAgICAgICAgICAgICAgIEpT
VmFsdWUgYSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBiID0gdmFsdWVPZkpTQ29uc3RhbnQob3AyKTsKICAgICAgICAgICAgICAgICBpZiAoYS5pc051
bWJlcigpICYmIGIuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBzZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwKKyAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldEpTQ29uc3RhbnRGb3JWYWx1ZShqc0Jvb2xlYW4oYS5hc051bWJlcigp
ID49IGIuYXNOdW1iZXIoKSkpKTsKICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
Z3JlYXRlcmVxKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJl
R3JlYXRlckVxLCBvcDEsIG9wMikpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChDb21wYXJlR3JlYXRl
ckVxLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ3JlYXRlcmVxKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZXE6IHsKLSAgICAgICAgICAgIE5vZGUqIG9w
MSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5v
ZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBpZiAoY2Fu
Rm9sZChvcDEpICYmIGNhbkZvbGQob3AyKSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWUgYSA9
IHZhbHVlT2ZKU0NvbnN0YW50KG9wMSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBiID0gdmFs
dWVPZkpTQ29uc3RhbnQob3AyKTsKLSAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAogICAgICAgICAgICAgICAgICAgICBnZXRK
U0NvbnN0YW50Rm9yVmFsdWUoanNCb29sZWFuKEpTVmFsdWU6OmVxdWFsKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBhLCBiKSkpKTsKICAgICAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9lcSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIG9wMSwgb3Ay
KSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKENvbXBhcmVFcSwgb3AxLCBvcDIpKTsKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2VxKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZXFf
bnVsbDogewotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGNvbnN0YW50TnVs
bCgpKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChDb21w
YXJlRXFDb25zdGFudCwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9lcV9udWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfc3RyaWN0
ZXE6IHsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9k
ZSogb3AyID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKSk7CiAgICAgICAgICAgICBpZiAoY2FuRm9sZChvcDEpICYmIGNhbkZvbGQob3AyKSkgewog
ICAgICAgICAgICAgICAgIEpTVmFsdWUgYSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMSk7CiAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSBiID0gdmFsdWVPZkpTQ29uc3RhbnQob3AyKTsKLSAgICAgICAg
ICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwKKyAgICAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
LAogICAgICAgICAgICAgICAgICAgICBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoanNCb29sZWFuKEpT
VmFsdWU6OnN0cmljdEVxdWFsKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCBhLCBiKSkpKTsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdHJpY3RlcSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNDb25zdGFudEZvckNvbXBhcmVTdHJp
Y3RFcShvcDEpKQotICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCBhZGRUb0dyYXBoKENvbXBhcmVTdHJpY3RFcUNvbnN0YW50LCBvcDIsIG9wMSkpOwor
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCksIGFkZFRvR3JhcGgoQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQsIG9wMiwgb3Ax
KSk7CiAgICAgICAgICAgICBlbHNlIGlmIChpc0NvbnN0YW50Rm9yQ29tcGFyZVN0cmljdEVxKG9w
MikpCi0gICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IGFkZFRvR3JhcGgoQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQsIG9wMSwgb3AyKSk7CisgICAgICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSwgYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXFDb25zdGFudCwgb3AxLCBvcDIpKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9wMSwgb3AyKSk7CisgICAg
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSwgYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9wMSwgb3AyKSk7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9zdHJpY3RlcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IG9wX25lcTogewotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAg
ICBOb2RlKiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGlmIChjYW5Gb2xkKG9wMSkgJiYgY2FuRm9sZChvcDIp
KSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhID0gdmFsdWVPZkpTQ29uc3RhbnQob3AxKTsK
ICAgICAgICAgICAgICAgICBKU1ZhbHVlIGIgPSB2YWx1ZU9mSlNDb25zdGFudChvcDIpOwotICAg
ICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLAorICAgICAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCksCiAgICAgICAgICAgICAgICAgICAgIGdldEpTQ29uc3RhbnRGb3JWYWx1ZShqc0Jvb2xl
YW4oIUpTVmFsdWU6OmVxdWFsKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCBhLCBiKSkpKTsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXEpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQsIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIG9wMSwgb3Ay
KSkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVF
cSwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXEpOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBvcF9uZXFfbnVsbDogewotICAgICAgICAgICAgTm9kZSogdmFs
dWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBz
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChMb2dpY2FsTm90
LCBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpKSk7
CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChMb2dpY2FsTm90
LCBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXFfbnVsbCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX25zdHJpY3RlcTogewotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZSogb3AyID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSog
b3AxID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KSk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGlmIChjYW5Gb2xkKG9wMSkg
JiYgY2FuRm9sZChvcDIpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhID0gdmFsdWVPZkpT
Q29uc3RhbnQob3AxKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGIgPSB2YWx1ZU9mSlNDb25z
dGFudChvcDIpOwotICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLAorICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCksCiAgICAgICAgICAgICAgICAgICAgIGdldEpTQ29uc3RhbnRG
b3JWYWx1ZShqc0Jvb2xlYW4oIUpTVmFsdWU6OnN0cmljdEVxdWFsKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBhLCBiKSkpKTsKICAgICAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9uc3RyaWN0ZXEpOwogICAgICAgICAgICAgfQpAQCAtMjQwMSw3ICsyNDA0LDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
ICAgIGludmVydGVkUmVzdWx0ID0gYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXFDb25zdGFudCwg
b3AxLCBvcDIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGludmVydGVkUmVz
dWx0ID0gYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAg
IHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKExvZ2ljYWxO
b3QsIGludmVydGVkUmVzdWx0KSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIGlu
dmVydGVkUmVzdWx0KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uc3RyaWN0ZXEpOwog
ICAgICAgICB9CiAKQEAgLTI0MTAsMjIgKzI0MTMsMjIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsKICAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBBcnJh
eU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlQ29uc2lkZXJpbmdTbG93UGF0aChjdXJyZW50
SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKLSAgICAgICAgICAg
IE5vZGUqIHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIE5vZGUqIGdldEJ5VmFsID0g
YWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhw
cmVkaWN0aW9uKSwgYmFzZSwgcHJvcGVydHkpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldEJ5VmFsKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGdldEJ5VmFsKTsKIAog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBiYXNl
ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7
CiAKICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGVDb25zaWRl
cmluZ1Nsb3dQYXRoKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSwgQXJyYXk6
OldyaXRlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1
ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5v
ZGUqIHByb3BlcnR5ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KHByb3BlcnR5KTsKQEAgLTI0NDEsNyArMjQ0NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOiB7CiAg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmll
clJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRp
Zmllck51bWJlcl07CkBAIC0yNDU5LDggKzI0NjIsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25f
bm9ybWFsOgogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdF9vdXRf
b2ZfbGluZToKICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxfb3V0
X29mX2xpbmU6IHsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAg
ICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZF07CiAgICAgICAgICAgICBib29sIGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVj
dGlvbls4XS51Lm9wZXJhbmQ7CiAKQEAgLTI1NjYsNyArMjU2OSw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bf
aW5pdF9nbG9iYWxfY29uc3Q6IHsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBn
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAgICAgICAgICAgICAgUHV0R2xvYmFsVmFyLAogICAg
ICAgICAgICAgICAgIE9wSW5mbyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmplY3QoY3VycmVudEluc3RydWN0aW9u
WzFdLnUucmVnaXN0ZXJQb2ludGVyKSksCkBAIC0yNTg0LDcgKzI1ODcsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qdHJ1ZTog
ewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9u
ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7
CiAgICAgICAgICAgICBpZiAoY2FuRm9sZChjb25kaXRpb24pKSB7CiAgICAgICAgICAgICAgICAg
VHJpU3RhdGUgc3RhdGUgPSB2YWx1ZU9mSlNDb25zdGFudChjb25kaXRpb24pLnB1cmVUb0Jvb2xl
YW4oKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gVHJ1ZVRyaVN0YXRlKSB7CkBAIC0y
NjAzLDcgKzI2MDYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAKICAgICAgICAgY2FzZSBvcF9qZmFsc2U6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0
aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICAgICAgICAg
IE5vZGUqIGNvbmRpdGlvbiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgaWYgKGNhbkZvbGQoY29u
ZGl0aW9uKSkgewogICAgICAgICAgICAgICAgIFRyaVN0YXRlIHN0YXRlID0gdmFsdWVPZkpTQ29u
c3RhbnQoY29uZGl0aW9uKS5wdXJlVG9Cb29sZWFuKCk7CiAgICAgICAgICAgICAgICAgaWYgKHN0
YXRlID09IEZhbHNlVHJpU3RhdGUpIHsKQEAgLTI2MjIsNyArMjYyNSw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2plcV9udWxs
OiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAg
ICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2
YWx1ZSwgY29uc3RhbnROdWxsKCkpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9w
SW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVudElu
ZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qZXFfbnVsbCkpLCBjb25kaXRpb24pOwogICAgICAgICAg
ICAgTEFTVF9PUENPREUob3BfamVxX251bGwpOwpAQCAtMjYzMCw3ICsyNjMzLDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3Bfam5l
cV9udWxsOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVl
ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7
CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0
YW50LCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFu
Y2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfam5lcV9udWxsKSks
IE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgY29uZGl0aW9uKTsKICAg
ICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puZXFfbnVsbCk7CkBAIC0yNjM4LDggKzI2NDEsOCBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2Fz
ZSBvcF9qbGVzczogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZSogb3Ay
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9k
ZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGlmIChjYW5Gb2xkKG9w
MSkgJiYgY2FuRm9sZChvcDIpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhVmFsdWUgPSB2
YWx1ZU9mSlNDb25zdGFudChvcDEpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUgYlZhbHVlID0g
dmFsdWVPZkpTQ29uc3RhbnQob3AyKTsKQEAgLTI2NjQsOCArMjY2Nyw4IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2psZXNzZXE6
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAg
ICAgICAgICAgTm9kZSogb3AyID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBpZiAoY2FuRm9sZChvcDEpICYmIGNhbkZv
bGQob3AyKSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWUgYVZhbHVlID0gdmFsdWVPZkpTQ29u
c3RhbnQob3AxKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGJWYWx1ZSA9IHZhbHVlT2ZKU0Nv
bnN0YW50KG9wMik7CkBAIC0yNjkwLDggKzI2OTMsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcjogewogICAgICAg
ICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBO
b2RlKiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpKTsKICAgICAgICAgICAgIGlmIChjYW5Gb2xkKG9wMSkgJiYgY2FuRm9sZChvcDIpKSB7
CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChvcDEp
OwogICAgICAgICAgICAgICAgIEpTVmFsdWUgYlZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQob3Ay
KTsKQEAgLTI3MTYsOCArMjcxOSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2pncmVhdGVyZXE6IHsKICAgICAgICAgICAgIHVu
c2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
LSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZSogb3Ay
ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7
CiAgICAgICAgICAgICBpZiAoY2FuRm9sZChvcDEpICYmIGNhbkZvbGQob3AyKSkgewogICAgICAg
ICAgICAgICAgIEpTVmFsdWUgYVZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQob3AxKTsKICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIGJWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMik7CkBAIC0y
NzQyLDggKzI3NDUsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAKICAgICAgICAgY2FzZSBvcF9qbmxlc3M6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0
aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAg
IE5vZGUqIG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIE5vZGUqIG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAg
ICBpZiAoY2FuRm9sZChvcDEpICYmIGNhbkZvbGQob3AyKSkgewogICAgICAgICAgICAgICAgIEpT
VmFsdWUgYVZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQob3AxKTsKICAgICAgICAgICAgICAgICBK
U1ZhbHVlIGJWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMik7CkBAIC0yNzY4LDggKzI3NzEs
OCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAg
Y2FzZSBvcF9qbmxlc3NlcTogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZSogb3Ax
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9k
ZSogb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGlmIChjYW5G
b2xkKG9wMSkgJiYgY2FuRm9sZChvcDIpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhVmFs
dWUgPSB2YWx1ZU9mSlNDb25zdGFudChvcDEpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUgYlZh
bHVlID0gdmFsdWVPZkpTQ29uc3RhbnQob3AyKTsKQEAgLTI3OTQsOCArMjc5Nyw4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2pu
Z3JlYXRlcjogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgTm9kZSogb3AyID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZSog
b3AxID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KSk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIGlmIChjYW5Gb2xkKG9wMSkg
JiYgY2FuRm9sZChvcDIpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBhVmFsdWUgPSB2YWx1
ZU9mSlNDb25zdGFudChvcDEpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUgYlZhbHVlID0gdmFs
dWVPZkpTQ29uc3RhbnQob3AyKTsKQEAgLTI4MjAsOCArMjgyMyw4IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcmVx
OiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBn
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgaWYgKGNhbkZvbGQob3AxKSAmJiBjYW5G
b2xkKG9wMikpIHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGFWYWx1ZSA9IHZhbHVlT2ZKU0Nv
bnN0YW50KG9wMSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBiVmFsdWUgPSB2YWx1ZU9mSlND
b25zdGFudChvcDIpOwpAQCAtMjg1OSw3ICsyODYyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKFN3
aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+
KHRhYmxlLm1pbiArIGkpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBt
X2dyYXBoLm1fc3dpdGNoRGF0YS5hcHBlbmQoZGF0YSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBo
KFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0
Y2gsIE9wSW5mbygmbV9ncmFwaC5tX3N3aXRjaERhdGEubGFzdCgpKSwgZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAgTEFT
VF9PUENPREUob3Bfc3dpdGNoX2ltbSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjg3
OSw3ICsyODgyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICAgICAgICAgICAgICBTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRleChMYXp5SlNW
YWx1ZTo6c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHRhYmxlLm1pbiArIGkpLCB0YXJnZXQpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmFwcGVuZChkYXRh
KTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJm1fZ3JhcGgubV9zd2l0
Y2hEYXRhLmxhc3QoKSksIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Cisg
ICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1fc3dpdGNoRGF0
YS5sYXN0KCkpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9zd2l0Y2hfY2hhcik7CiAgICAg
ICAgIH0KIApAQCAtMjg5OSwxNSArMjkwMiwxNSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIFN3aXRjaENhc2U6OndpdGhCeXRl
Y29kZUluZGV4KExhenlKU1ZhbHVlOjprbm93blN0cmluZ0ltcGwoaXRlci0+a2V5LmdldCgpKSwg
dGFyZ2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0
YS5hcHBlbmQoZGF0YSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZt
X2dyYXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmbV9ncmFw
aC5tX3N3aXRjaERhdGEubGFzdCgpKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNo
X3N0cmluZyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3JldDoKICAgICAgICAgICAg
IGZsdXNoQXJndW1lbnRzQW5kQ2FwdHVyZWRWYXJpYWJsZXMoKTsKICAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNr
VG9wLT5tX3JldHVyblZhbHVlICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICAg
ICAgICAgIHNldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLCBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgICAgIEFTU0VSVCht
X2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLmlzVmFsaWQoKSk7CisgICAgICAgICAgICAg
ICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKICAgICAgICAgICAg
ICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2RpZFJldHVybiA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHJldHVybmluZyBmcm9tIHRoZSBmaXJzdCBi
bG9jaywgdGhlbiB3ZSdyZSBkb25lIHBhcnNpbmcuCkBAIC0yOTI4LDE3ICsyOTMxLDE3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgTEFTVF9PUENPREUob3BfcmV0KTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUmV0dXJuLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChSZXR1cm4sIGdldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKICAgICAgICAgICAgIExB
U1RfT1BDT0RFKG9wX3JldCk7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9lbmQ6CiAg
ICAgICAgICAgICBmbHVzaEFyZ3VtZW50c0FuZENhcHR1cmVkVmFyaWFibGVzKCk7CiAgICAgICAg
ICAgICBBU1NFUlQoIWlubGluZUNhbGxGcmFtZSgpKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgo
UmV0dXJuLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAg
ICAgYWRkVG9HcmFwaChSZXR1cm4sIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCkpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2VuZCk7CiAK
ICAgICAgICAgY2FzZSBvcF90aHJvdzoKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoVGhyb3csIGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBhZGRUb0dy
YXBoKFRocm93LCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpKSk7CiAgICAgICAgICAgICBmbHVzaEFsbEFyZ3VtZW50c0FuZENhcHR1cmVkVmFyaWFi
bGVzSW5JbmxpbmVTdGFjaygpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChVbnJlYWNoYWJsZSk7
CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF90aHJvdyk7CkBAIC0yOTU5LDcgKzI5NjIsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKICAgICAgICAgICAgIEFTU0VSVChpbmxp
bmVDYWxsRnJhbWUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoY3VycmVudEluc3RydWN0aW9uWzRd
LnUub3BlcmFuZCA9PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+YXJndW1lbnRzUmVn
aXN0ZXIoKSk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZCA9PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIo
KS5vZmZzZXQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIW1faW5saW5lU3RhY2tUb3AtPm1fY29k
ZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5zbG93QXJndW1lbnRzKCkpOwogICAgICAgICAgICAgLy8g
SXQgd291bGQgYmUgY29vbCB0byBmdW5uZWwgdGhpcyBpbnRvIGhhbmRsZUNhbGwoKSBzbyB0aGF0
IGl0IGNhbiBoYW5kbGUKICAgICAgICAgICAgIC8vIGlubGluaW5nLiBCdXQgY3VycmVudGx5IHRo
YXQgd29uJ3QgYmUgcHJvZml0YWJsZSBhbnl3YXksIHNpbmNlIG5vbmUgb2YgdGhlCkBAIC0yOTc0
LDEyICsyOTc3LDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIGlmIChKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgYXJnQ291bnQg
PiBtX3BhcmFtZXRlclNsb3RzKQogICAgICAgICAgICAgICAgIG1fcGFyYW1ldGVyU2xvdHMgPSBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgYXJnQ291bnQ7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKSk7IC8vIGNhbGxlZQotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsgLy8gdGhpcworICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KSkpOyAvLyBjYWxsZWUKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpKTsgLy8gdGhpcwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsr
YXJndW1lbnQpCi0gICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGFyZ3VtZW50VG9P
cGVyYW5kKGFyZ3VtZW50KSkpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsCisgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAog
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBDYWxsLCBPcEluZm8oMCks
IE9wSW5mbyhwcmVkaWN0aW9uKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9jYWxsX3ZhcmFyZ3MpOwpAQCAtMjk5Myw3ICsyOTk2LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVG9HcmFwaCgKICAg
ICAgICAgICAgICAgICBDaGVja0Z1bmN0aW9uLAogICAgICAgICAgICAgICAgIE9wSW5mbyhhY3R1
YWxQb2ludGVyRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5zcGVjaWFsUG9pbnRlcikpLAotICAgICAgICAgICAgICAgIGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAg
YWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9w
X2puZXFfcHRyKSkpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5lcV9wdHIpOwogCkBA
IC0zMDExLDExICszMDE0LDExIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBjYXNlIEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICAgICAgc2V0KGRzdCwgY2Vs
bENvbnN0YW50KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
OworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgY2VsbENvbnN0YW50
KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgICAg
ICBzZXQoZHN0LCBnZXRTY29wZShtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bmVlZHNB
Y3RpdmF0aW9uKCksIGRlcHRoKSk7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihkc3QpLCBnZXRTY29wZShtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bmVlZHNBY3Rp
dmF0aW9uKCksIGRlcHRoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIER5bmFtaWM6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTMwNDcsMzQgKzMwNTAsMzQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoKm1fdm0sIHN0cnVjdHVyZSwgdWlkKTsKICAgICAgICAgICAg
ICAgICBpZiAoc3RhdHVzLnRha2VzU2xvd1BhdGgoKSkgewotICAgICAgICAgICAgICAgICAgICBz
ZXQoZHN0LCBhZGRUb0dyYXBoKEdldEJ5SWRGbHVzaCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIp
LCBPcEluZm8ocHJlZGljdGlvbiksIGdldChzY29wZSkpKTsKKyAgICAgICAgICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBhZGRUb0dyYXBoKEdldEJ5SWRGbHVzaCwgT3BJbmZv
KGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUpKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1
cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1
Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IHN0
YXR1cy5zcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgIHNldChkc3QsIGNlbGxD
b25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgY2VsbENvbnN0YW50KHNwZWNpZmljVmFsdWUuYXNDZWxs
KCkpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNldChkc3Qs
IGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIG9w
ZXJhbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBo
YW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBvcGVy
YW5kKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczogewogICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBn
bG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldCh1aWQpOwogICAgICAgICAgICAgICAgIGlm
ICghZW50cnkuY291bGRCZVdhdGNoZWQoKSB8fCAhbV9ncmFwaC53YXRjaHBvaW50cygpLmlzU3Rp
bGxWYWxpZChlbnRyeS53YXRjaHBvaW50U2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNl
dChkc3QsIGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhw
cmVkaWN0aW9uKSkpOworICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksIGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhwcmVk
aWN0aW9uKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdsb2JhbFZhcldhdGNocG9pbnQsIE9wSW5m
byhvcGVyYW5kKSwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpKTsKICAgICAgICAgICAgICAgICBK
U1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0
SW5kZXgoKSkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgc2V0KGRzdCwgY2VsbENvbnN0YW50KHNw
ZWNpZmljVmFsdWUuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGRzdCksIGNlbGxDb25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVW
YXI6CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgot
ICAgICAgICAgICAgICAgIHNldChkc3QsIAorICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZHN0KSwKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChHZXRDbG9zdXJlVmFy
LCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKEdldENsb3N1cmVSZWdpc3RlcnMsIGdldChzY29wZSkpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldENsb3N1cmVSZWdpc3RlcnMsIGdl
dChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMzEwNSwyOSArMzEwOCwyOSBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3Rh
dHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigqbV92bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIHVpZCwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxl
UmVwbGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJ
bmZvKGlkZW50aWZpZXJOdW1iZXIpLCBnZXQoc2NvcGUpLCBnZXQodmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciks
IGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkp
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xv
YmFsT2JqZWN0LCBzdGF0dXMub2xkU3RydWN0dXJlKCkpOwotICAgICAgICAgICAgICAgIGhhbmRs
ZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHN0YXRpY19jYXN0PFByb3BlcnR5
T2Zmc2V0PihvcGVyYW5kKSwgZ2V0KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgaGFuZGxlUHV0
QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgc3RhdGljX2Nhc3Q8UHJvcGVydHlPZmZz
ZXQ+KG9wZXJhbmQpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSkpOwogICAgICAgICAgICAg
ICAgIC8vIEtlZXAgc2NvcGUgYWxpdmUgdW50aWwgYWZ0ZXIgcHV0LgotICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KHNjb3BlKSk7CisgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAg
ICAgICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xU
YWJsZSgpLT5nZXQodWlkKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoIWVudHJ5LmNvdWxkQmVX
YXRjaGVkKCkgfHwgIW1fZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoZW50cnkud2F0
Y2hwb2ludFNldCgpKSk7Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9iYWxWYXIs
IE9wSW5mbyhvcGVyYW5kKSwgZ2V0KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChQdXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSkpKTsKICAgICAgICAgICAgICAgICAvLyBLZWVwIHNjb3BlIGFsaXZlIHVudGlsIGFmdGVyIHB1
dC4KLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChzY29wZSkpOworICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29w
ZSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgICAgICBOb2RlKiBzY29wZU5vZGUgPSBnZXQoc2Nv
cGUpOworICAgICAgICAgICAgICAgIE5vZGUqIHNjb3BlTm9kZSA9IGdldChWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUpKTsKICAgICAgICAgICAgICAgICBOb2RlKiBzY29wZVJlZ2lzdGVycyA9IGFkZFRv
R3JhcGgoR2V0Q2xvc3VyZVJlZ2lzdGVycywgc2NvcGVOb2RlKTsKLSAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dENsb3N1cmVWYXIsIE9wSW5mbyhvcGVyYW5kKSwgc2NvcGVOb2RlLCBzY29w
ZVJlZ2lzdGVycywgZ2V0KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRD
bG9zdXJlVmFyLCBPcEluZm8ob3BlcmFuZCksIHNjb3BlTm9kZSwgc2NvcGVSZWdpc3RlcnMsIGdl
dChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIER5bmFtaWM6CkBAIC0zMTU4LDg2ICszMTYxLDg2
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzogewotICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldEpTQ29uc3RhbnRGb3JW
YWx1ZShKU1ZhbHVlKCkpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGdldEpTQ29uc3RhbnRGb3JWYWx1ZShKU1ZhbHVl
KCkpKTsKICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kSXNMb2NhbChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fbGF6eVZhcnMuc2V0KG9w
ZXJhbmRUb0xvY2FsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAg
ICAgIG1fZ3JhcGgubV9sYXp5VmFycy5zZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpLnRvTG9jYWwoKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9pbml0X2xhenlfcmVnKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
b3BfY3JlYXRlX2FjdGl2YXRpb246IHsKLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENyZWF0ZUFjdGl2YXRpb24sIGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChDcmVhdGVB
Y3RpdmF0aW9uLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY3JlYXRlX2FjdGl2YXRpb24p
OwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1l
bnRzOiB7CiAgICAgICAgICAgICBtX2dyYXBoLm1faGFzQXJndW1lbnRzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIE5vZGUqIGNyZWF0ZUFyZ3VtZW50cyA9IGFkZFRvR3JhcGgoQ3JlYXRlQXJndW1lbnRz
LCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAgICAgICAgICAgc2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNyZWF0ZUFyZ3VtZW50cyk7Ci0gICAg
ICAgICAgICBzZXQodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpLCBjcmVhdGVBcmd1bWVudHMpOworICAgICAgICAgICAgTm9kZSogY3Jl
YXRlQXJndW1lbnRzID0gYWRkVG9HcmFwaChDcmVhdGVBcmd1bWVudHMsIGdldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGNyZWF0
ZUFyZ3VtZW50cyk7CisgICAgICAgICAgICBzZXQodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSksIGNyZWF0
ZUFyZ3VtZW50cyk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jcmVhdGVfYXJndW1lbnRz
KTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0
aXZhdGlvbjogewotICAgICAgICAgICAgYWRkVG9HcmFwaChUZWFyT2ZmQWN0aXZhdGlvbiwgZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIGFkZFRvR3Jh
cGgoVGVhck9mZkFjdGl2YXRpb24sIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RlYXJfb2Zm
X2FjdGl2YXRpb24pOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1
bWVudHM6IHsKICAgICAgICAgICAgIG1fZ3JhcGgubV9oYXNBcmd1bWVudHMgPSB0cnVlOwotICAg
ICAgICAgICAgYWRkVG9HcmFwaChUZWFyT2ZmQXJndW1lbnRzLCBnZXQodW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSwgZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoVGVh
ck9mZkFyZ3VtZW50cywgZ2V0KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKSwgZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfdGVhcl9vZmZfYXJndW1lbnRzKTsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19sZW5ndGg6IHsKICAgICAgICAgICAgIG1f
Z3JhcGgubV9oYXNBcmd1bWVudHMgPSB0cnVlOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZl
KSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSkpOwogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgpOwogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRfYnlfdmFsOiB7CiAg
ICAgICAgICAgICBtX2dyYXBoLm1faGFzQXJndW1lbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIHNl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLAorICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKAogICAgICAgICAgICAgICAgICAgICBHZXRNeUFyZ3VtZW50QnlWYWxT
YWZlLCBPcEluZm8oMCksIE9wSW5mbyhnZXRQcmVkaWN0aW9uKCkpLAotICAgICAgICAgICAgICAg
ICAgICBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9hcmd1bWVudF9ieV92YWwp
OwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9uZXdfZnVuYzogewog
ICAgICAgICAgICAgaWYgKCFjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSB7Ci0gICAg
ICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsCisgICAgICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSwKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOZXdGdW5jdGlvbk5vQ2hlY2ss
IE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpLAogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKAogICAg
ICAgICAgICAgICAgICAgICAgICAgTmV3RnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9uZXdfZnVuYyk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9w
X25ld19mdW5jX2V4cDogewotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsCisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpLAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTmV3RnVuY3Rp
b25FeHByZXNzaW9uLCBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19mdW5jX2V4cCk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX3R5cGVvZjogewotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChUeXBlT2YsIGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOworICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKKyAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFR5cGVPZiwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3R5
cGVvZik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3RvX251bWJlcjogewotICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsCi0gICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChJZGVudGl0eSwgRWRnZShnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCksIE51bWJlclVzZSkpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksCisgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChJZGVudGl0eSwgRWRnZShnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpKSwgTnVtYmVyVXNlKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfdG9fbnVtYmVyKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3Bf
aW46IHsKLSAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLAot
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSW4sIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7CisgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpLAorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSW4sIGdldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfaW4pOwogICAgICAgICB9CiAKQEAgLTMzNjAsNyArMzM2Myw3IEBAIEJ5dGVDb2RlUGFy
c2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICBpZiAobV9jYWxsZXIpIHsKICAgICAg
ICAgLy8gSW5saW5lIGNhc2UuCiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgIT0gYnl0ZUNvZGVQ
YXJzZXItPm1fY29kZUJsb2NrKTsKLSAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZVN0YXJ0
ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZy
YW1lU3RhcnQuaXNWYWxpZCgpKTsKICAgICAgICAgQVNTRVJUKGNhbGxzaXRlQmxvY2tIZWFkKTsK
ICAgICAgICAgCiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gYnl0ZUNvZGVQYXJzZXItPm1f
Z3JhcGgubV9pbmxpbmVDYWxsRnJhbWVzLT5hZGQoKTsKQEAgLTMzNzEsNyArMzM3NCw3IEBAIEJ5
dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgICAgIG1faW5s
aW5lQ2FsbEZyYW1lLAogICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgCiAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpKTsKLSAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ID0gaW5saW5lQ2Fs
bEZyYW1lU3RhcnQgLSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWVTdGFydC5vZmZzZXQo
KSAtIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIGlmIChjYWxsZWUpIHsK
ICAgICAgICAgICAgIGluaXRpYWxpemVMYXp5V3JpdGVCYXJyaWVyRm9ySW5saW5lQ2FsbEZyYW1l
Q2FsbGVlKAogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLm1fcGxhbi53
cml0ZUJhcnJpZXJzLApAQCAtMzM4OSwxOSArMzM5MiwyMCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5s
aW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2Fw
dHVyZWRWYXJzID0gbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPmNh
cHR1cmVkVmFyczsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gYnl0
ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5tX251bVZhcnM7IGktLTspIHsKLSAgICAgICAgICAg
ICAgICBpZiAoYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKGxvY2FsVG9P
cGVyYW5kKGkpKSkKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJs
b2NrLT5pc0NhcHR1cmVkKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKSkKICAgICAgICAgICAg
ICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5zZXQoaSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKGludCBpID0gYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7IGktLTspIHsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmlzQ2FwdHVy
ZWQoYXJndW1lbnRUb09wZXJhbmQoaSkpKQotICAgICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZy
YW1lLT5jYXB0dXJlZFZhcnMuc2V0KG9wZXJhbmRUb0xvY2FsKGFyZ3VtZW50VG9PcGVyYW5kKGkp
ICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXJndW1lbnQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKTsKKyAgICAg
ICAgICAgIGlmIChjb2RlQmxvY2stPmlzQ2FwdHVyZWQoYXJndW1lbnQpKQorICAgICAgICAgICAg
ICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMuc2V0KFZpcnR1YWxSZWdpc3Rlcihh
cmd1bWVudC5vZmZzZXQoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2Nh
bCgpKTsKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0gY29kZUJsb2NrLT5tX251
bVZhcnM7IGktLTspIHsKLSAgICAgICAgICAgIGludCBsb2NhbE9wZXJhbmQgPSBsb2NhbFRvT3Bl
cmFuZChpKTsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmlzQ2FwdHVyZWQobG9jYWxPcGVy
YW5kKSkKLSAgICAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzLnNl
dChvcGVyYW5kVG9Mb2NhbChsb2NhbE9wZXJhbmQgKyBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQpKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGkpOworICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aXNDYXB0dXJlZChs
b2NhbCkpCisgICAgICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5z
ZXQoVmlydHVhbFJlZ2lzdGVyKGxvY2FsLm9mZnNldCgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0KS50b0xvY2FsKCkpOwogICAgICAgICB9CiAKICNpZiBERkdfRU5BQkxFKERFQlVH
X1ZFUkJPU0UpCkBAIC0zNDY1LDggKzM0NjksOCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3Rh
Y2tFbnRyeTo6SW5saW5lCiAgICAgICAgIC8vIE1hY2hpbmUgY29kZSBibG9jayBjYXNlLgogICAg
ICAgICBBU1NFUlQoY29kZUJsb2NrID09IGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jayk7CiAg
ICAgICAgIEFTU0VSVCghY2FsbGVlKTsKLSAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlVlIgPT0g
SW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWVT
dGFydCA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgQVNTRVJUKCFyZXR1cm5W
YWx1ZVZSLmlzVmFsaWQoKSk7CisgICAgICAgIEFTU0VSVCghaW5saW5lQ2FsbEZyYW1lU3RhcnQu
aXNWYWxpZCgpKTsKICAgICAgICAgQVNTRVJUKCFjYWxsc2l0ZUJsb2NrSGVhZCk7CiAKICAgICAg
ICAgbV9pbmxpbmVDYWxsRnJhbWUgPSAwOwpAQCAtMzYxOSw3ICszNjIzLDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2UoKQogI2VuZGlmCiAgICAgCiAgICAgSW5saW5lU3RhY2tFbnRyeSBp
bmxpbmVTdGFja0VudHJ5KAotICAgICAgICB0aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9maWxlZEJs
b2NrLCAwLCAwLCBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyLCBJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
LAorICAgICAgICB0aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9maWxlZEJsb2NrLCAwLCAwLCBWaXJ0
dWFsUmVnaXN0ZXIoKSwgVmlydHVhbFJlZ2lzdGVyKCksCiAgICAgICAgIG1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIENvZGVGb3JDYWxsKTsKICAgICAKICAgICBwYXJzZUNvZGVCbG9jaygp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTEsNyArMzExLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHZv
aWQga2VlcE9wZXJhbmRBbGl2ZShCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogamV0dGlz
b25lZEJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGludCBvcGVyYW5kKQorICAgIHZvaWQg
a2VlcE9wZXJhbmRBbGl2ZShCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogamV0dGlzb25l
ZEJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgTm9kZSogbGl2ZW5lc3NOb2RlID0gamV0dGlzb25lZEJsb2NrLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgaWYgKCFsaXZlbmVzc05vZGUp
CkBAIC0zMjYsOSArMzI2LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGpldHRpc29uQmxvY2soQmFz
aWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jaywgQ29kZU9yaWdpbiBi
b3VuZGFyeUNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsr
aSkKLSAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoYmxvY2ssIGpldHRpc29uZWRCbG9jaywg
Ym91bmRhcnlDb2RlT3JpZ2luLCBhcmd1bWVudFRvT3BlcmFuZChpKSk7CisgICAgICAgICAgICBr
ZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdp
biwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCk7ICsraSkKLSAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoYmxvY2ssIGpldHRpc29uZWRC
bG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBsb2NhbFRvT3BlcmFuZChpKSk7CisgICAgICAgICAg
ICBrZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5Q29kZU9y
aWdpbiwgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOwogICAgICAgICAKICAgICAgICAgZml4
SmV0dGlzb25lZFByZWRlY2Vzc29ycyhibG9jaywgamV0dGlzb25lZEJsb2NrKTsKICAgICB9CkBA
IC0zODAsOSArMzgwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIGRpZmZlcmVudCBwYXRo
IHRoYW4gc2Vjb25kQmxvY2suCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1
bWVudHMoKTsgKytpKQotICAgICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoZmlyc3RCbG9j
aywgamV0dGlzb25lZEJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGFyZ3VtZW50VG9PcGVyYW5k
KGkpKTsKKyAgICAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGZpcnN0QmxvY2ssIGpldHRp
c29uZWRCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChpKSk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9j
ay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkKLSAgICAgICAgICAgICAg
ICBrZWVwT3BlcmFuZEFsaXZlKGZpcnN0QmxvY2ssIGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlD
b2RlT3JpZ2luLCBsb2NhbFRvT3BlcmFuZChpKSk7CisgICAgICAgICAgICAgICAga2VlcE9wZXJh
bmRBbGl2ZShmaXJzdEJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbiwg
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT5waGlzLnNpemUoKTsgKytpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFk
aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsMTAg
KzIxNywxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgY2Fub25pY2FsaXplR2V0TG9jYWwoTm9kZSog
bm9kZSkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KHZh
cmlhYmxlLT5sb2NhbCgpKSkKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFy
Z3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIG9wZXJhbmRUb0FyZ3VtZW50KHZhcmlhYmxl
LT5sb2NhbCgpKSk7CisgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkp
CisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxBcmd1bWVudE9wZXJhbmQ+KG5v
ZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50KCkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+KG5v
ZGUsIHZhcmlhYmxlLCBvcGVyYW5kVG9Mb2NhbCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAg
ICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8TG9jYWxPcGVyYW5kPihub2RlLCB2YXJpYWJs
ZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
YW5vbmljYWxpemVTZXRMb2NhbChOb2RlKiBub2RlKQpAQCAtMjg1LDE3ICsyODUsMTcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwoTm9kZSogbm9k
ZSkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KHZhcmlh
YmxlLT5sb2NhbCgpKSkKLSAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9j
YWxGb3I8bm9kZVR5cGUsIEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIG9wZXJhbmRU
b0FyZ3VtZW50KHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgIGlmICh2YXJpYWJsZS0+bG9j
YWwoKS5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRv
bUxvY2FsRm9yPG5vZGVUeXBlLCBBcmd1bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJp
YWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50KCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
YW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+
KG5vZGUsIHZhcmlhYmxlLCBvcGVyYW5kVG9Mb2NhbCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAg
ICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgTG9j
YWxPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5vbmljYWxpemVTZXRBcmd1bWVudChOb2RlKiBub2Rl
KQogICAgIHsKLSAgICAgICAgaW50IGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKLSAgICAgICAgQVNT
RVJUKG9wZXJhbmRJc0FyZ3VtZW50KGxvY2FsKSk7Ci0gICAgICAgIGludCBhcmd1bWVudCA9IG9w
ZXJhbmRUb0FyZ3VtZW50KGxvY2FsKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0g
bm9kZS0+bG9jYWwoKTsKKyAgICAgICAgQVNTRVJUKGxvY2FsLmlzQXJndW1lbnQoKSk7CisgICAg
ICAgIGludCBhcmd1bWVudCA9IGxvY2FsLnRvQXJndW1lbnQoKTsKICAgICAgICAgbV9ibG9jay0+
dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2RlKTsKICAg
ICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3Vt
ZW50LCBub2RlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsx
OTAsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgfQog
CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZXNB
cmd1bWVudHMoKSAmJiBwY1s0XS51Lm9wZXJhbmQgPT0gY29kZUJsb2NrLT5hcmd1bWVudHNSZWdp
c3RlcigpKQorICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgcGNbNF0u
dS5vcGVyYW5kID09IGNvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSkKICAg
ICAgICAgICAgIHJldHVybiBDYW5JbmxpbmU7CiAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxl
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4NSwyMyArMzg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBjaGFu
Z2VkOwogICAgIH0KLSAgICAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgYm9vbCBpc0NhcHR1
cmVkQXRPckFmdGVyKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIGlu
dCBvcGVyYW5kKQotICAgIHsKLSAgICAgICAgZm9yICg7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5z
aXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmhhc0xvY2FsKG1fZ3Jh
cGgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5vZGUtPmxv
Y2FsKCkgIT0gb3BlcmFuZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAotICAgIAorCiAgICAgdm9pZCBhZGRTdHJ1
Y3R1cmVUcmFuc2l0aW9uQ2hlY2soQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRl
eEluQmxvY2ssIEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIE5vZGUqIHdlYWtDb25zdGFu
dCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNw
cAkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVz
aExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcs
NyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0Rm9yTm9k
ZShOb2RlKiBub2RlLCBpbnQgb3BlcmFuZCwgRmx1c2hGb3JtYXQgbm9kZUZvcm1hdCwgRmx1c2hG
b3JtYXQgbmV3Rm9ybWF0KQorICAgIHZvaWQgc2V0Rm9yTm9kZShOb2RlKiBub2RlLCBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCwgRmx1c2hGb3JtYXQgbm9kZUZvcm1hdCwgRmx1c2hGb3JtYXQgbmV3
Rm9ybWF0KQogICAgIHsKICAgICAgICAgRmx1c2hGb3JtYXQmIGN1cnJlbnRGb3JtYXQgPSBtX2xp
dmUub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNCwxOCArMjM0LDE4IEBA
IHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICBBU1NFUlQobm9k
ZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSA9PSBub2RlLT5oYXNMb2NhbCgqdGhpcykp
OwogICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpKSB7CiAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7Ci0gICAgICAgIGludCBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5v
cGVyYW5kKCk7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAg
ICAgICAgIG91dC5wcmludChjb21tYSwgImFyZyIsIG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQp
LCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSks
ICIpIik7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NE
YXRhLT5sb2NhbCgpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCisgICAgICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJhcmciLCBvcGVyYW5kLnRvQXJndW1lbnQoKSwgIigiLCBW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBvcGVyYW5k
VG9Mb2NhbChvcGVyYW5kKSwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJp
YWJsZUFjY2Vzc0RhdGEpLCAiKSIpOworICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9j
Iiwgb3BlcmFuZC50b0xvY2FsKCksICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcCgqdGhpcywg
dmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc1VubGlu
a2VkTG9jYWwoKSkgewotICAgICAgICBpbnQgb3BlcmFuZCA9IG5vZGUtPnVubGlua2VkTG9jYWwo
KTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiYXJnIiwgb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkpOworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPnVubGlua2VkTG9jYWwoKTsKKyAg
ICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiYXJnIiwgb3BlcmFuZC50b0FyZ3VtZW50KCkpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBvcGVyYW5kVG9Mb2NhbChvcGVyYW5kKSk7Cisg
ICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBvcGVyYW5kLnRvTG9jYWwoKSk7CiAg
ICAgfQogICAgIGlmIChub2RlLT5oYXNDb25zdGFudEJ1ZmZlcigpKSB7CiAgICAgICAgIG91dC5w
cmludChjb21tYSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZp
c2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyOSwxNyArNDI5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGhhc0V4aXRTaXRlKG5vZGUtPmNvZGVPcmlnaW4sIGV4aXRLaW5kKTsKICAgICB9CiAgICAgCi0g
ICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4p
CisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmln
aW4mIGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3Rl
cigpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5l
Q2FsbEZyYW1lKAotICAgICAgICAgICAgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpLT5hcmd1
bWVudHNSZWdpc3RlcigpICsKLSAgICAgICAgICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldDsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihiYXNlbGluZUNv
ZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZSgKKyAgICAgICAgICAgIGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKS0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSArCisgICAgICAgICAgICBj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOwogICAgIH0KICAgICAKLSAg
ICBpbnQgdW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29k
ZU9yaWdpbikKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJG
b3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIGlmICghY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2st
PnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyKCk7CkBAIC00NDcsMTMgKzQ0NywxMyBAQCBwdWJs
aWM6CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJ
bmxpbmVDYWxsRnJhbWUoCiAgICAgICAgICAgICBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7
CiAgICAgICAgIGlmICghY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKKyAgICAgICAgICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIoKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBjb2RlQmxvY2stPmFyZ3VtZW50
c1JlZ2lzdGVyKCkgKwotICAgICAgICAgICAgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0OworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKGNvZGVCbG9jay0+YXJn
dW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSArCisgICAgICAgICAgICBjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOwogICAgIH0KICAgICAKLSAgICBpbnQgdW5jaGVja2Vk
QWN0aXZhdGlvblJlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmlnaW4mKQorICAgIFZpcnR1YWxSZWdp
c3RlciB1bmNoZWNrZWRBY3RpdmF0aW9uUmVnaXN0ZXJGb3IoY29uc3QgQ29kZU9yaWdpbiYpCiAg
ICAgewogICAgICAgICAvLyBUaGlzIHdpbGwgaWdub3JlIENvZGVPcmlnaW4gYmVjYXVzZSB3ZSBk
b24ndCBpbmxpbmUgY29kZSB0aGF0IHVzZXMgYWN0aXZhdGlvbnMuCiAgICAgICAgIC8vIEhlbmNl
IGZvciBpbmxpbmVkIGNhbGwgZnJhbWVzIGl0IHdpbGwgcmV0dXJuIHRoZSBvdXRlcm1vc3QgY29k
ZSBibG9jaydzCkBAIC00NzIsMTQgKzQ3MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4p
OwogICAgICAgICAKICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0QXJndW1lbnQpCi0gICAg
ICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQob3Bl
cmFuZFRvQXJndW1lbnQobm9kZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgcmV0dXJuIHByb2Zp
bGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVu
dCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChub2RlLT5oYXNMb2NhbCgqdGhpcykpIHsKICAg
ICAgICAgICAgIGlmIChtX2Zvcm0gPT0gU1NBKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICAgICAgaWYgKCFvcGVyYW5kSXNBcmd1bWVudChub2RlLT5sb2NhbCgpKSkKKyAgICAg
ICAgICAgIGlmICghbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChu
b2RlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG5vZGUtPmxvY2FsKCku
dG9Bcmd1bWVudCgpOwogICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
ICE9IG1fYXJndW1lbnRzW2FyZ3VtZW50XS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFs
dWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3
IEBAIHZvaWQgSklUQ29kZTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIGludCBvcGVyYW5kID0gcmVz
dWx0Lm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChvcGVyYW5kSXNB
cmd1bWVudChvcGVyYW5kKQotICAgICAgICAgICAgJiYgIW9wZXJhbmRUb0FyZ3VtZW50KG9wZXJh
bmQpCisgICAgICAgICAgICAmJiAhVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQo
KQogICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQog
ICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9y
Q29uc3RydWN0KSB7CiAgICAgICAgICAgICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0
b3IsIHRoZSAndGhpcycgYXJndW1lbnQgbWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE1NjQ3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyAr
MTY0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikK
ICAgICAgICAgLCBjb2RlT3JpZ2luRm9yRXhpdFRhcmdldChjb2RlT3JpZ2luKQogICAgICAgICAs
IGNoaWxkcmVuKGNoaWxkcmVuKQotICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRW
aXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyKCkpCiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihT
cGVjTm9uZSkKICAgICB7CkBAIC0xNzcsNyArMTc3LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjb2RlT3JpZ2luRm9yRXhpdFRh
cmdldChjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVk
LCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQotICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKElu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyKCkpCiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGlj
dGlvbihTcGVjTm9uZSkKICAgICB7CkBAIC0xOTEsNyArMTkxLDcgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjb2RlT3JpZ2luRm9y
RXhpdFRhcmdldChjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6
OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQotICAgICAgICAsIG1fdmlydHVhbFJlZ2lz
dGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1f
cHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92YWx1ZSkKQEAg
LTIwNiw3ICsyMDYsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIDogY29kZU9yaWdpbihjb2Rl
T3JpZ2luKQogICAgICAgICAsIGNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0KGNvZGVPcmlnaW4pCiAg
ICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBj
aGlsZDMpCi0gICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3Rl
cikKKyAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkKICAgICAg
ICAgLCBtX3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAg
ICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKQEAgLTIyMiw3ICsyMjIsNyBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNvZGVP
cmlnaW5Gb3JFeGl0VGFyZ2V0KGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNl
bmN5TGlzdDo6VmFyaWFibGUsIGZpcnN0Q2hpbGQsIG51bUNoaWxkcmVuKQotICAgICAgICAsIG1f
dmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICwgbV92aXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgICwgbV9yZWZDb3VudCgxKQog
ICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAgICAgLCBtX29wSW5mbyhpbW0x
Lm1fdmFsdWUpCkBAIC0zOTAsNyArMzkwLDcgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAg
ICAgbV9vcCA9IEdldExvY2FsVW5saW5rZWQ7CiAgICAgICAgIG1fZmxhZ3MgJj0gfihOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlciB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKLSAgICAg
ICAgbV9vcEluZm8gPSBsb2NhbDsKKyAgICAgICAgbV9vcEluZm8gPSBsb2NhbC5vZmZzZXQoKTsK
ICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKICAgICB9CiAgICAgCkBAIC0xMDU3LDIwICsxMDU3
LDIwIEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBib29sIGhhc1ZpcnR1YWxSZWdpc3Rlcigp
CiAgICAgewotICAgICAgICByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1
YWxSZWdpc3RlcjsKKyAgICAgICAgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKTsK
ICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpCiAgICAg
ewogICAgICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotICAgICAgICBBU1NFUlQobV92aXJ0dWFs
UmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChtX3Zp
cnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gbV92aXJ0dWFsUmVnaXN0
ZXI7CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzUmVzdWx0KCkp
OwotICAgICAgICBBU1NFUlQobV92aXJ0dWFsUmVnaXN0ZXIgPT0gSW52YWxpZFZpcnR1YWxSZWdp
c3Rlcik7CisgICAgICAgIEFTU0VSVCghbV92aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAg
ICAgICAgbV92aXJ0dWFsUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXI7CiAgICAgfQogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9u
IDE1NjQ3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzgsMzQgKzEzOCwzNSBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnko
RXhlY1N0YXRlKiBleGVjLCBDCiAgICAgfQogICAgIAogICAgIGZvciAoc2l6ZV90IGxvY2FsID0g
MDsgbG9jYWwgPCBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5udW1iZXJPZkxvY2FscygpOyArK2xv
Y2FsKSB7CisgICAgICAgIGludCBsb2NhbE9mZnNldCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGxvY2FsKS5vZmZzZXQoKTsKICAgICAgICAgaWYgKGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZERvdWJs
ZS5nZXQobG9jYWwpKSB7Ci0gICAgICAgICAgICBpZiAoIWV4ZWMtPnJlZ2lzdGVycygpW2xvY2Fs
VG9PcGVyYW5kKGxvY2FsKV0uanNWYWx1ZSgpLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGlm
ICghZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxPZmZzZXRdLmpzVmFsdWUoKS5pc051bWJlcigpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBPU1IgZmFp
bGVkIGJlY2F1c2UgdmFyaWFibGUgIiwgbG9jYWxUb09wZXJhbmQobG9jYWwpLCAiIGlzICIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5yZWdpc3RlcnMoKVtsb2NhbFRvT3BlcmFuZChs
b2NhbCldLmpzVmFsdWUoKSwgIiwgZXhwZWN0ZWQgbnVtYmVyLlxuIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAiLCBsb2NhbE9mZnNl
dCwgIiBpcyAiLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+cmVnaXN0ZXJzKClbbG9j
YWxPZmZzZXRdLmpzVmFsdWUoKSwgIiwgZXhwZWN0ZWQgbnVtYmVyLlxuIik7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGVudHJ5LT5tX2xvY2Fsc0Zv
cmNlZE1hY2hpbmVJbnQuZ2V0KGxvY2FsKSkgewotICAgICAgICAgICAgaWYgKCFleGVjLT5yZWdp
c3RlcnMoKVtsb2NhbFRvT3BlcmFuZChsb2NhbCldLmpzVmFsdWUoKS5pc01hY2hpbmVJbnQoKSkg
eworICAgICAgICAgICAgaWYgKCFleGVjLT5yZWdpc3RlcnMoKVtsb2NhbE9mZnNldF0uanNWYWx1
ZSgpLmlzTWFjaGluZUludCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgIiwgbG9jYWxUb09wZXJh
bmQobG9jYWwpLCAiIGlzICIsCi0gICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5yZWdpc3Rl
cnMoKVtsb2NhbFRvT3BlcmFuZChsb2NhbCldLmpzVmFsdWUoKSwgIiwgZXhwZWN0ZWQgIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICIs
IGxvY2FsT2Zmc2V0LCAiIGlzICIsCisgICAgICAgICAgICAgICAgICAgICAgICBleGVjLT5yZWdp
c3RlcnMoKVtsb2NhbE9mZnNldF0uanNWYWx1ZSgpLCAiLCBleHBlY3RlZCAiLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIm1hY2hpbmUgaW50LlxuIik7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2Nh
bChsb2NhbCkudmFsaWRhdGUoZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxUb09wZXJhbmQobG9jYWwp
XS5qc1ZhbHVlKCkpKSB7CisgICAgICAgIGlmICghZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9j
YWwobG9jYWwpLnZhbGlkYXRlKGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsT2Zmc2V0XS5qc1ZhbHVl
KCkpKSB7CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAg
ICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAgICAgIiAgICBPU1IgZmFpbGVkIGJl
Y2F1c2UgdmFyaWFibGUgIiwgbG9jYWxUb09wZXJhbmQobG9jYWwpLCAiIGlzICIsCi0gICAgICAg
ICAgICAgICAgICAgIGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsVG9PcGVyYW5kKGxvY2FsKV0uanNW
YWx1ZSgpLCAiLCBleHBlY3RlZCAiLAorICAgICAgICAgICAgICAgICAgICAiICAgIE9TUiBmYWls
ZWQgYmVjYXVzZSB2YXJpYWJsZSAiLCBsb2NhbE9mZnNldCwgIiBpcyAiLAorICAgICAgICAgICAg
ICAgICAgICBleGVjLT5yZWdpc3RlcnMoKVtsb2NhbE9mZnNldF0uanNWYWx1ZSgpLCAiLCBleHBl
Y3RlZCAiLAogICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2Nh
bChsb2NhbCksICIuXG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiAwOwpA
QCAtMTc5LDcgKzE4MCw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMs
IEMKICAgICAvLyAgICBpdCBzZWVtcyBzaWxseTogeW91J2QgYmUgZGl2ZXJ0aW5nIHRoZSBwcm9n
cmFtIHRvIGVycm9yIGhhbmRsaW5nIHdoZW4gaXQKICAgICAvLyAgICB3b3VsZCBoYXZlIG90aGVy
d2lzZSBqdXN0IGtlcHQgcnVubmluZyBhbGJlaXQgbGVzcyBxdWlja2x5LgogICAgIAotICAgIGlm
ICghdm0tPmludGVycHJldGVyLT5zdGFjaygpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2xvY2Fs
VG9PcGVyYW5kKGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpXSkpIHsKKyAgICBpZiAo
IXZtLT5pbnRlcnByZXRlci0+c3RhY2soKS5ncm93KCZleGVjLT5yZWdpc3RlcnMoKVt2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKS5vZmZzZXQo
KV0pKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBk
YXRhTG9nRigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGggZmFpbGVkLlxuIik7
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTkxLDkgKzE5Miw5IEBAIHZvaWQqIHByZXBhcmVPU1JF
bnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAvLyAzKSBQZXJmb3JtIGRhdGEgZm9ybWF0IGNv
bnZlcnNpb25zLgogICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBlbnRyeS0+bV9l
eHBlY3RlZFZhbHVlcy5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CiAgICAgICAgIGlmIChl
bnRyeS0+bV9sb2NhbHNGb3JjZWREb3VibGUuZ2V0KGxvY2FsKSkKLSAgICAgICAgICAgICpiaXR3
aXNlX2Nhc3Q8ZG91YmxlKj4oZXhlYy0+cmVnaXN0ZXJzKCkgKyBsb2NhbFRvT3BlcmFuZChsb2Nh
bCkpID0gZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxUb09wZXJhbmQobG9jYWwpXS5qc1ZhbHVlKCku
YXNOdW1iZXIoKTsKKyAgICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oZXhlYy0+cmVn
aXN0ZXJzKCkgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbCkub2Zmc2V0KCkpID0gZXhl
Yy0+cmVnaXN0ZXJzKClbdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9jYWwpLm9mZnNldCgpXS5q
c1ZhbHVlKCkuYXNOdW1iZXIoKTsKICAgICAgICAgaWYgKGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZE1h
Y2hpbmVJbnQuZ2V0KGxvY2FsKSkKLSAgICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+
KGV4ZWMtPnJlZ2lzdGVycygpICsgbG9jYWxUb09wZXJhbmQobG9jYWwpKSA9IGV4ZWMtPnJlZ2lz
dGVycygpW2xvY2FsVG9PcGVyYW5kKGxvY2FsKV0uanNWYWx1ZSgpLmFzTWFjaGluZUludCgpIDw8
IEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQ7CisgICAgICAgICAgICAqYml0d2lzZV9jYXN0PGlu
dDY0X3QqPihleGVjLT5yZWdpc3RlcnMoKSArIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGxvY2Fs
KS5vZmZzZXQoKSkgPSBleGVjLT5yZWdpc3RlcnMoKVt2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChs
b2NhbCkub2Zmc2V0KCldLmpzVmFsdWUoKS5hc01hY2hpbmVJbnQoKSA8PCBKU1ZhbHVlOjppbnQ1
MlNoaWZ0QW1vdW50OwogICAgIH0KICAgICAKICAgICAvLyA0KSBGaXggdGhlIGNhbGwgZnJhbWUu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gcHJldmlvdXNIZWFkLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBuZXdSb290LT5hcHBlbmROb2RlKAogICAg
ICAgICAgICAgICAgIG1fZ3JhcGgsIHZhcmlhYmxlLT5wcmVkaWN0aW9uKCksIEV4dHJhY3RPU1JF
bnRyeUxvY2FsLCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+
bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZz
ZXQoKSkpOwogICAgICAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKICAgICAgICAgICAgICAg
ICBtX2dyYXBoLCBTcGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJs
ZSksIEVkZ2Uobm9kZSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuaAkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdHJ1
Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAgICAgdm9pZCBjb252ZXJ0VG9Gb3J3
YXJkKEJhc2ljQmxvY2sqLCBOb2RlKiwgdW5zaWduZWQgbm9kZUluZGV4LCBjb25zdCBWYWx1ZVJl
Y292ZXJ5Jik7CiAKICAgICB1bnNpZ25lZCBtX3N0cmVhbUluZGV4OwotICAgIGludCBtX2xhc3RT
ZXRPcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBtX2xhc3RTZXRPcGVyYW5kOwogICAgIAog
ICAgIFJlZlB0cjxWYWx1ZVJlY292ZXJ5T3ZlcnJpZGU+IG1fdmFsdWVSZWNvdmVyeU92ZXJyaWRl
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
MzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25z
dCAKICAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgogICAgICAgICBjYXNlIEJv
b2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6IHsKICAgICAgICAgICAgIG51bWJlck9mRGlzcGxhY2Vk
VmlydHVhbFJlZ2lzdGVycysrOwotICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRJc0xvY2FsKHJl
Y292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgICAgICAgICBBU1NFUlQocmVjb3Zlcnku
dmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Ly8gU2VlIGlmIHdlIG1pZ2h0IGxpa2UgdG8gc3RvcmUgdG8gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVy
IGJlZm9yZSBkb2luZwogICAgICAgICAgICAgLy8gdmlydHVhbCByZWdpc3RlciBzaHVmZmxpbmcu
IElmIHNvLCB3ZSBzYXkgdGhhdCB0aGUgdmlydHVhbCByZWdpc3RlcgpAQCAtMjEwLDcgKzIxMCw3
IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAg
IC8vIHRvIGVuc3VyZSB0aGlzIGhhcHBlbnMgZWZmaWNpZW50bHkuIE5vdGUgdGhhdCB3ZSBleHBl
Y3QgdGhpcyBjYXNlCiAgICAgICAgICAgICAvLyB0byBiZSByYXJlLCBzbyB0aGUgaGFuZGxpbmcg
b2YgaXQgaXMgb3B0aW1pemVkIGZvciB0aGUgY2FzZXMgaW4KICAgICAgICAgICAgIC8vIHdoaWNo
IGl0IGRvZXMgbm90IGhhcHBlbi4KLSAgICAgICAgICAgIGludCBsb2NhbCA9IG9wZXJhbmRUb0xv
Y2FsKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIGludCBsb2NhbCA9
IHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKTsKICAgICAgICAgICAgIGlmIChs
b2NhbCA8IChpbnQpb3BlcmFuZHMubnVtYmVyT2ZMb2NhbHMoKSkgewogICAgICAgICAgICAgICAg
IHN3aXRjaCAob3BlcmFuZHMubG9jYWwobG9jYWwpLnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAg
ICAgICAgY2FzZSBJbkdQUjoKQEAgLTUzNSwxNyArNTM1LDE5IEBAIHZvaWQgT1NSRXhpdENvbXBp
bGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAvLyA5KSBEdW1wIGFsbCBwb2lzb25lZCB2aXJ0
dWFsIHJlZ2lzdGVycy4KICAgICAKICAgICBpZiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnMpIHsKLSAgICAgICAgZm9yIChpbnQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJl
Z2lzdGVyIDwgKGludClvcGVyYW5kcy5udW1iZXJPZkxvY2FscygpOyArK3ZpcnR1YWxSZWdpc3Rl
cikgewotICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbdmlydHVhbFJl
Z2lzdGVyXSkKKyAgICAgICAgZm9yIChpbnQgbG9jYWxJbmRleCA9IDA7IGxvY2FsSW5kZXggPCAo
aW50KW9wZXJhbmRzLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWxJbmRleCkgeworICAgICAgICAg
ICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbbG9jYWxJbmRleF0pCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHMubG9jYWwodmlydHVhbFJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChsb2NhbEluZGV4KTsKKworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYg
cmVjb3ZlcnkgPSBvcGVyYW5kcy5sb2NhbChsb2NhbEluZGV4KTsKICAgICAgICAgICAgIHN3aXRj
aCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgIGNhc2UgSW5HUFI6CiAgICAg
ICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAgICAgICAgY2FzZSBVbmJveGVk
Qm9vbGVhbkluR1BSOiB7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVyICsgcG9pc29uSW5kZXgodmlydHVhbFJlZ2lz
dGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihH
UFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpbG9jYWxUb09wZXJhbmQodmlydHVhbFJlZ2lzdGVyKSkpOworICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoRGF0YUJ1ZmZlciArIHBv
aXNvbkluZGV4KGxvY2FsSW5kZXgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRG
b3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgICAgICAgICAgdWludDMyX3QgdGFnID0gSlNW
YWx1ZTo6RW1wdHlWYWx1ZVRhZzsKICAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5p
cXVlKCkgPT0gSW5HUFIpCiAgICAgICAgICAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkNlbGxU
YWc7CkBAIC01NTMsMTcgKzU1NSwxNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4
aXQoY29uc3QgCiAgICAgICAgICAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkludDMyVGFnOwog
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6
Qm9vbGVhblRhZzsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKHRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpbG9jYWxUb09wZXJhbmQodmlydHVhbFJlZ2lzdGVyKSkpOworICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIodGFnKSwgQXNzZW1i
bHlIZWxwZXJzOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhc2UgSW5GUFI6CiAgICAgICAgICAg
ICBjYXNlIEluUGFpcjoKICAgICAgICAgICAgIGNhc2UgVUludDMySW5HUFI6Ci0gICAgICAgICAg
ICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVm
ZmVyICsgcG9pc29uSW5kZXgodmlydHVhbFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0
Y2hEYXRhQnVmZmVyICsgcG9pc29uSW5kZXgodmlydHVhbFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZyksIEdQUkluZm86OnJlZ1Qx
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJs
eUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rlcilsb2NhbFRvT3BlcmFuZCh2aXJ0
dWFsUmVnaXN0ZXIpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpy
ZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rlcilsb2NhbFRvT3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVyICsgcG9pc29uSW5kZXgobG9j
YWxJbmRleCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQz
MihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoRGF0YUJ1ZmZlciArIHBvaXNvbkluZGV4
KGxvY2FsSW5kZXgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMudGFnKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcih2aXJ0dWFsUmVn
aXN0ZXIpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBB
c3NlbWJseUhlbHBlcnM6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC03MDYs
OSArNzA4LDkgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAg
IAogICAgIC8vIDE1KSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0
aW9uIGludG8gcmVnVDAuCiAgICAgCi0gICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSB7Ci0gICAgICAgIG1faml0LmxvYWQzMihB
c3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNl
dE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7Ci0gICAgICAgIG1faml0
LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9s
YXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7CisgICAgaWYg
KGV4aXQubV9sYXN0U2V0T3BlcmFuZC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgbV9qaXQubG9hZDMy
KEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJ
bmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJs
eUhlbHBlcnM6OnRhZ0ZvcihleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRS
ZXN1bHRSZWdpc3RlcjIpOwogICAgIH0KICAgICAKICAgICAvLyAxNikgQW5kIGZpbmlzaC4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
NjQuY3BwCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAog
I2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lz
dGVyLmgiCisKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CkBAIC0zOTQsNyArMzk2LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KGNvbnN0IAogCiAgICAgICAgICAgICBpZiAoIW1faml0LmJhc2VsaW5lQ29kZUJs
b2NrRm9yKGlubGluZUNhbGxGcmFtZSktPnVzZXNBcmd1bWVudHMoKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1faml0LmFy
Z3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihp
bmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgaWYgKGRpZENyZWF0ZUFyZ3VtZW50c09iamVj
dC5hZGQoaW5saW5lQ2FsbEZyYW1lKS5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAgICAgLy8g
V2Uga25vdyB0aGlzIGNhbGwgZnJhbWUgb3B0aW1pemVkIG91dCBhbiBhcmd1bWVudHMgb2JqZWN0
IHRoYXQKICAgICAgICAgICAgICAgICAvLyB0aGUgYmFzZWxpbmUgSklUIHdvdWxkIGhhdmUgY3Jl
YXRlZC4gRG8gdGhhdCBjcmVhdGlvbiBub3cuCkBAIC00MjIsNyArNDI0LDcgQEAgdm9pZCBPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIAogICAgIC8vIDEwKSBMb2FkIHRo
ZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCiAgICAg
Ci0gICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKQorICAgIGlmIChleGl0Lm1fbGFzdFNldE9wZXJhbmQuaXNWYWxpZCgpKQogICAg
ICAgICBtX2ppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKGV4aXQubV9sYXN0
U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKICAgICAKICAgICAv
LyAxMSkgQW5kIGZpbmlzaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVn
aXN0ZXJCYW5rLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZWdpc3RlckJhbmsuaAkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdSZWdpc3RlckJhbmsuaAkod29ya2luZyBjb3B5KQpAQCAtODUsMTAgKzg1LDEwIEBA
IHB1YmxpYzoKICAgICAvLyByZXR1cm5zIC0xIChJbnZhbGlkR1BSUmVnIG9yIEludmFsaWRGUFJS
ZWcpLgogICAgIFJlZ0lEIHRyeUFsbG9jYXRlKCkKICAgICB7Ci0gICAgICAgIFZpcnR1YWxSZWdp
c3RlciBpZ25vcmVkOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaWdub3JlZCA9IFZpcnR1YWxS
ZWdpc3RlcigpOwogICAgICAgICAKICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IE5V
TV9SRUdTOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghbV9kYXRhW2ldLmxvY2tDb3VudCAmJiBt
X2RhdGFbaV0ubmFtZSA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgaWYg
KCFtX2RhdGFbaV0ubG9ja0NvdW50ICYmICFtX2RhdGFbaV0ubmFtZS5pc1ZhbGlkKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlSW50ZXJuYWwoaSwgaWdub3JlZCk7CiAgICAgICAg
IH0KICAgICAgICAgCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogCiAgICAgICAgICsrbV9k
YXRhW2luZGV4XS5sb2NrQ291bnQ7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lID0gbmFt
ZUF0SW5kZXgoaW5kZXgpOwotICAgICAgICBpZiAobmFtZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQorICAgICAgICBpZiAobmFtZS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZWxlYXNlQXRJ
bmRleChpbmRleCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbmFtZTsKQEAgLTE2NSw4ICsx
NjUsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChpbmRleCA8IE5VTV9SRUdTKTsKICAgICAg
ICAgQVNTRVJUKG1fZGF0YVtpbmRleF0ubG9ja0NvdW50KTsKICAgICAgICAgLy8gJ2luZGV4JyBz
aG91bGQgbm90IGN1cnJlbnRseSBiZSBuYW1lZCwgdGhlIG5ldyBuYW1lIG11c3QgYmUgdmFsaWQu
Ci0gICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLm5hbWUgPT0gSW52YWxpZFZpcnR1YWxSZWdp
c3Rlcik7Ci0gICAgICAgIEFTU0VSVChuYW1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOwor
ICAgICAgICBBU1NFUlQoIW1fZGF0YVtpbmRleF0ubmFtZS5pc1ZhbGlkKCkpOworICAgICAgICBB
U1NFUlQobmFtZS5pc1ZhbGlkKCkpOwogICAgICAgICAvLyAnaW5kZXgnIHNob3VsZCBub3QgY3Vy
cmVudGx5IGhhdmUgYSBzcGlsbE9yZGVyLgogICAgICAgICBBU1NFUlQobV9kYXRhW2luZGV4XS5z
cGlsbE9yZGVyID09IFNwaWxsSGludEludmFsaWQpOwogCkBAIC0yMDEsNyArMjAxLDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIC8vIEdldCB0aGUgbmFtZSAoVmlydHVhbFJlZ2lzdGVyKSBhc3Nv
Y2lhdGVkIHdpdGggdGhlCi0gICAgLy8gZ2l2ZW4gcmVnaXN0ZXIgKG9yIEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIgZm9yIG5vbmUpLgorICAgIC8vIGdpdmVuIHJlZ2lzdGVyIChvciBkZWZhdWx0IFZp
cnR1YWxSZWdpc3RlcigpIGZvciBub25lKS4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZShSZWdJ
RCByZWcpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbmFtZUF0SW5kZXgoQmFua0luZm86
OnRvSW5kZXgocmVnKSk7CkBAIC0yMDksNyArMjA5LDcgQEAgcHVibGljOgogICAgIAogICAgIGJv
b2wgaXNJblVzZShSZWdJRCByZWcpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaXNMb2Nr
ZWQocmVnKSB8fCBuYW1lKHJlZykgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKKyAgICAgICAg
cmV0dXJuIGlzTG9ja2VkKHJlZykgfHwgbmFtZShyZWcpLmlzVmFsaWQoKTsKICAgICB9CiAgICAg
CiAjaWZuZGVmIE5ERUJVRwpAQCAtMjE3LDggKzIxNyw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIC8vIEZvciBlYWNoIHJlZ2lzdGVyLCBwcmludCB0aGUgVmlydHVhbFJlZ2lzdGVyICduYW1l
Jy4KICAgICAgICAgZm9yICh1aW50MzJfdCBpID0wOyBpIDwgTlVNX1JFR1M7ICsraSkgewotICAg
ICAgICAgICAgaWYgKG1fZGF0YVtpXS5uYW1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0g
ICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlslMDJkXSIsIG1fZGF0YVtpXS5uYW1lKTsKKyAgICAg
ICAgICAgIGlmIChtX2RhdGFbaV0ubmFtZS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIlslMDJkXSIsIG1fZGF0YVtpXS5uYW1lLm9mZnNldCgpKTsKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiWy0tXSIpOwogICAgICAgICB9CkBAIC0zMTIs
MTEgKzMxMiwxMSBAQCBwcml2YXRlOgogICAgICAgICAvLyAnaW5kZXgnIG11c3QgYmUgYSB2YWxp
ZCByZWdpc3Rlci4KICAgICAgICAgQVNTRVJUKGluZGV4IDwgTlVNX1JFR1MpOwogICAgICAgICAv
LyAnaW5kZXgnIHNob3VsZCBjdXJyZW50bHkgYmUgbmFtZWQuCi0gICAgICAgIEFTU0VSVChtX2Rh
dGFbaW5kZXhdLm5hbWUgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIEFTU0VS
VChtX2RhdGFbaW5kZXhdLm5hbWUuaXNWYWxpZCgpKTsKICAgICAgICAgLy8gJ2luZGV4JyBzaG91
bGQgY3VycmVudGx5IGhhdmUgYSB2YWxpZCBzcGlsbCBvcmRlci4KICAgICAgICAgQVNTRVJUKG1f
ZGF0YVtpbmRleF0uc3BpbGxPcmRlciAhPSBTcGlsbEhpbnRJbnZhbGlkKTsKIAotICAgICAgICBt
X2RhdGFbaW5kZXhdLm5hbWUgPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyOworICAgICAgICBtX2Rh
dGFbaW5kZXhdLm5hbWUgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgbV9kYXRhW2luZGV4
XS5zcGlsbE9yZGVyID0gU3BpbGxIaW50SW52YWxpZDsKICAgICB9CiAKQEAgLTMyNyw3ICszMjcs
NyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQoaSA8IE5VTV9SRUdTICYmICFtX2RhdGFbaV0u
bG9ja0NvdW50KTsKIAogICAgICAgICAvLyBSZXR1cm4gdGhlIFZpcnR1YWxSZWdpc3RlciBvZiB0
aGUgbmFtZWQgdmFsdWUgY3VycmVudGx5IHN0b3JlZCBpbgotICAgICAgICAvLyB0aGUgcmVnaXN0
ZXIgYmVpbmcgcmV0dXJuZWQgLSBvciBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyIGlmIG5vbmUuCisg
ICAgICAgIC8vIHRoZSByZWdpc3RlciBiZWluZyByZXR1cm5lZCAtIG9yIGRlZmF1bHQgVmlydHVh
bFJlZ2lzdGVyKCkgaWYgbm9uZS4KICAgICAgICAgc3BpbGxNZSA9IG1fZGF0YVtpXS5uYW1lOwog
CiAgICAgICAgIC8vIENsZWFyIGFueSBuYW1lL3NwaWxsT3JkZXIgY3VycmVudGx5IGFzc29jaWF0
ZWQgd2l0aCB0aGUgcmVnaXN0ZXIsCkBAIC0zNDUsNyArMzQ1LDcgQEAgcHJpdmF0ZToKICAgICAv
LyBjb3VudCwgbmFtZSBhbmQgc3BpbGxPcmRlciBoaW50LgogICAgIHN0cnVjdCBNYXBFbnRyeSB7
CiAgICAgICAgIE1hcEVudHJ5KCkKLSAgICAgICAgICAgIDogbmFtZShJbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKQorICAgICAgICAgICAgOiBuYW1lKFZpcnR1YWxSZWdpc3RlcigpKQogICAgICAgICAg
ICAgLCBzcGlsbE9yZGVyKFNwaWxsSGludEludmFsaWQpCiAgICAgICAgICAgICAsIGxvY2tDb3Vu
dCgwKQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3Jl
Qm9hcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3Jl
Qm9hcmQuaAkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTY29yZUJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDE0ICs4OSwxNCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAvLyBVc2UgY291bnQgbXVzdCBoYXZlIGhpdCB6ZXJvIGZvciBpdCB0byBo
YXZlIGJlZW4gYWRkZWQgdG8gdGhlIGZyZWUgbGlzdCEKICAgICAgICAgICAgIEFTU0VSVCghbV91
c2VkW2luZGV4XSk7CiAgICAgICAgICAgICBtX2hpZ2hXYXRlcm1hcmsgPSBzdGQ6Om1heChtX2hp
Z2hXYXRlcm1hcmssIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgKyAxKTsKLSAgICAgICAg
ICAgIHJldHVybiAoVmlydHVhbFJlZ2lzdGVyKWxvY2FsVG9PcGVyYW5kKGluZGV4KTsKKyAgICAg
ICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpbmRleCk7CiAgICAgICAgIH0K
IAogICAgICAgICAvLyBBbGxvY2F0ZSBhIG5ldyBWaXJ0dWFsUmVnaXN0ZXIsIGFuZCBhZGQgYSBj
b3JyZXNwb25kaW5nIGVudHJ5IHRvIG1fdXNlZC4KICAgICAgICAgc2l6ZV90IG5leHQgPSBtX3Vz
ZWQuc2l6ZSgpOwogICAgICAgICBtX3VzZWQuYXBwZW5kKDApOwogICAgICAgICBtX2hpZ2hXYXRl
cm1hcmsgPSBzdGQ6Om1heChtX2hpZ2hXYXRlcm1hcmssIHN0YXRpY19jYXN0PHVuc2lnbmVkPihu
ZXh0KSArIDEpOwotICAgICAgICByZXR1cm4gKFZpcnR1YWxSZWdpc3Rlcilsb2NhbFRvT3BlcmFu
ZChuZXh0KTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG5leHQpOwog
ICAgIH0KIAogICAgIC8vIEluY3JlbWVudCB0aGUgdXNlY291bnQgZm9yIHRoZSBWaXJ0dWFsUmVn
aXN0ZXIgYXNzb2NpYXRlZCB3aXRoICdjaGlsZCcsCkBAIC0xMDcsNyArMTA3LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIEZpbmQgdGhlIHZpcnR1YWwgcmVn
aXN0ZXIgbnVtYmVyIGZvciB0aGlzIGNoaWxkLCBpbmNyZW1lbnQgaXRzIHVzZSBjb3VudC4KLSAg
ICAgICAgdWludDMyX3QgaW5kZXggPSBvcGVyYW5kVG9Mb2NhbChjaGlsZC0+dmlydHVhbFJlZ2lz
dGVyKCkpOworICAgICAgICB1aW50MzJfdCBpbmRleCA9IGNoaWxkLT52aXJ0dWFsUmVnaXN0ZXIo
KS50b0xvY2FsKCk7CiAgICAgICAgIEFTU0VSVChtX3VzZWRbaW5kZXhdICE9IG1heCgpKTsKICAg
ICAgICAgaWYgKGNoaWxkLT5yZWZDb3VudCgpID09ICsrbV91c2VkW2luZGV4XSkgewogI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU2
NDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDc4MCw3ICs0NzgwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBjcmVhdGVkLCB0aGlzLCBv
cGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgsIHJlc3VsdEdQUiwKLSAgICAgICAgICAgICAgICBt
X2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkpOworICAgICAgICAg
ICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pLm9mZnNl
dCgpKSk7CiAgICAgICAgIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7
CiAgICAgICAgIGJyZWFrOwpAQCAtNDkxOSwxNCArNDkxOSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRJbmxpbmVkQXJndW1lbnRCeVZhbCwgcmVzdWx0R1BS
LCAKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+
Y29kZU9yaWdpbiksCisgICAgICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLm9mZnNldCgpLAogICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgaW5kZXhH
UFIpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgc2xv
d1BhdGgsIHRoaXMsIG9wZXJhdGlvbkdldEFyZ3VtZW50QnlWYWwsIHJlc3VsdEdQUiwgCi0gICAg
ICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmln
aW4pLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LT5jb2RlT3JpZ2luKS5vZmZzZXQoKSwKICAgICAgICAgICAgICAgICAgICAgaW5kZXhHUFIpKTsK
ICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNyArNDgsNyBAQCBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsCiAg
ICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lz
dGVycykKICAgICAsIG1fYXJndW1lbnRzKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
KQogICAgICwgbV92YXJpYWJsZXMoaml0LmdyYXBoKCkubV9sb2NhbFZhcnMpCi0gICAgLCBtX2xh
c3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgLCBtX2xh
c3RTZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcigpKQogICAgICwgbV9zdGF0ZShtX2ppdC5ncmFw
aCgpKQogICAgICwgbV9pbnRlcnByZXRlcihtX2ppdC5ncmFwaCgpLCBtX3N0YXRlKQogICAgICwg
bV9zdHJlYW0oJmppdC5qaXRDb2RlKCktPnZhcmlhYmxlRXZlbnRTdHJlYW0pCkBAIC0xMTgzLDcg
KzExODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0NvbnNpc3RlbmN5KCkKIAogICAg
IGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMu
ZW5kKCk7ICsraXRlcikgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gaXRlci5uYW1lKCk7Ci0gICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gSW52YWxpZFZp
cnR1YWxSZWdpc3RlcikKKyAgICAgICAgaWYgKCF2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBn
ZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKQEAgLTEy
MDksNyArMTIwOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQ29uc2lzdGVuY3koKQog
CiAgICAgZm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1f
ZnBycy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBpdGVyLm5hbWUoKTsKLSAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlciA9PSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICBpZiAoIXZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlk
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwpA
QCAtMTUzOCw3ICsxNTM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQo
Tm9kZQogICAgIGlmIChjaGlsZC0+b3AoKSA9PSBVSW50MzJUb051bWJlcikKICAgICAgICAgbm90
aWNlT1NSQmlydGgoY2hpbGQtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgCi0gICAgbV9zdHJlYW0t
PmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBu
b2RlLT5sb2NhbCgpKSk7CisgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50
Ojptb3ZIaW50KE1pbmlmaWVkSUQoY2hpbGQpLCBub2RlLT5sb2NhbCgpLm9mZnNldCgpKSk7CiB9
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50QW5kQ2hlY2soTm9kZSogbm9k
ZSkKQEAgLTE1NTYsNyArMTU1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbmxp
bmVTdGFydCgKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
SW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKSB7CiAgICAgICAgIFZhbHVlUmVjb3Zl
cnkgcmVjb3Zlcnk7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPmlzQ2FwdHVyZWQoYXJndW1lbnRU
b09wZXJhbmQoaSkpKQorICAgICAgICBpZiAoY29kZUJsb2NrLT5pc0NhcHR1cmVkKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGkpKSkKICAgICAgICAgICAgIHJlY292ZXJ5ID0gVmFsdWVSZWNv
dmVyeTo6YWxyZWFkeUluSlNTdGFjaygpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEFy
Z3VtZW50UG9zaXRpb24mIGFyZ3VtZW50UG9zaXRpb24gPQpAQCAtMTYzOSw3ICsxNjM5LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgVmFsdWVTb3Vy
Y2UgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgIG1f
YXJndW1lbnRzW2ldID0gdmFsdWVTb3VyY2U7Ci0gICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRM
b2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwoYXJndW1lbnRUb09wZXJhbmQoaSksIHZhbHVlU291
cmNlLmRhdGFGb3JtYXQoKSkpOworICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlh
YmxlRXZlbnQ6OnNldExvY2FsKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCB2YWx1ZVNv
dXJjZS5kYXRhRm9ybWF0KCkpKTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0ZS5yZXNldCgpOwpA
QCAtMTY1OSwxMCArMTY1OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVu
dEJsb2NrCiAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlOjpmb3JGbHVzaEZv
cm1hdChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSk7CiAgICAgICAg
IG1fdmFyaWFibGVzW2ldID0gdmFsdWVTb3VyY2U7CiAgICAgICAgIC8vIEZJWE1FOiBEb24ndCBl
bWl0IFNldExvY2FsKERlYWQpLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA4MDE5Ci0gICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6
c2V0TG9jYWwobG9jYWxUb09wZXJhbmQoaSksIHZhbHVlU291cmNlLmRhdGFGb3JtYXQoKSkpOwor
ICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCB2YWx1ZVNvdXJjZS5kYXRhRm9ybWF0KCkpKTsKICAg
ICB9CiAgICAgCi0gICAgbV9sYXN0U2V0T3BlcmFuZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCk7CisgICAgbV9sYXN0U2V0T3BlcmFuZCA9IFZpcnR1YWxSZWdpc3RlcigpOwogICAg
IG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBDb2RlT3JpZ2luKCk7CiAgICAgbV9jb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGUgPSBDb2RlT3JpZ2luKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNTY0NzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJERkdWYWx1ZVNvdXJjZS5oIgog
I2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIK
KyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCkBAIC0xODQsNyArMTg1LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBzcGlsbE1lOwogICAgICAgICBHUFJSZWcgZ3ByID0gbV9ncHJzLmFsbG9j
YXRlKHNwaWxsTWUpOwotICAgICAgICBpZiAoc3BpbGxNZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKSB7CisgICAgICAgIGlmIChzcGlsbE1lLmlzVmFsaWQoKSkgewogI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCiAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZv
RnJvbVZpcnR1YWxSZWdpc3RlcihzcGlsbE1lKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNEb3VibGUpOwpAQCAtMjAxLDcg
KzIwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuYWRkUmVnaXN0ZXJBbGxvY2F0aW9uQXRP
ZmZzZXQobV9qaXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHNwaWxsTWUgPSBtX2dwcnMuYWxsb2NhdGVTcGVjaWZpYyhzcGVjaWZpYyk7Ci0gICAgICAg
IGlmIChzcGlsbE1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgaWYgKHNw
aWxsTWUuaXNWYWxpZCgpKSB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHNw
aWxsTWUpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgp
ICE9IERhdGFGb3JtYXRKU0RvdWJsZSk7CkBAIC0yMjMsNyArMjI0LDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lOwogICAgICAgICBGUFJSZWcgZnBy
ID0gbV9mcHJzLmFsbG9jYXRlKHNwaWxsTWUpOwotICAgICAgICBpZiAoc3BpbGxNZSAhPSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICBpZiAoc3BpbGxNZS5pc1ZhbGlkKCkpCiAgICAg
ICAgICAgICBzcGlsbChzcGlsbE1lKTsKICAgICAgICAgcmV0dXJuIGZwcjsKICAgICB9CkBAIC0z
NjAsNyArMzYxLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQocGxhbnMuaXNFbXB0eSgpKTsK
ICAgICAgICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9
IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gaXRlci5y
ZWdJRCgpOwotICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIgJiYgZ3ByICE9IGV4Y2x1ZGUgJiYgZ3ByICE9IGV4Y2x1ZGUyKSB7CisgICAgICAgICAg
ICBpZiAoaXRlci5uYW1lKCkuaXNWYWxpZCgpICYmIGdwciAhPSBleGNsdWRlICYmIGdwciAhPSBl
eGNsdWRlMikgewogICAgICAgICAgICAgICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gcGxhbiA9
IHNpbGVudFNhdmVQbGFuRm9yR1BSKGl0ZXIubmFtZSgpLCBncHIpOwogICAgICAgICAgICAgICAg
IGlmIChkb1NwaWxsKQogICAgICAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbChwbGFuKTsKQEAg
LTM2OCw3ICszNjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgZm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBy
cy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxp
ZFZpcnR1YWxSZWdpc3RlciAmJiBpdGVyLnJlZ0lEKCkgIT0gZnByRXhjbHVkZSkgeworICAgICAg
ICAgICAgaWYgKGl0ZXIubmFtZSgpLmlzVmFsaWQoKSAmJiBpdGVyLnJlZ0lEKCkgIT0gZnByRXhj
bHVkZSkgewogICAgICAgICAgICAgICAgIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gcGxhbiA9IHNp
bGVudFNhdmVQbGFuRm9yRlBSKGl0ZXIubmFtZSgpLCBpdGVyLnJlZ0lEKCkpOwogICAgICAgICAg
ICAgICAgIGlmIChkb1NwaWxsKQogICAgICAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbChwbGFu
KTsKQEAgLTYwMSwxMyArNjAyLDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGZsdXNoUmVnaXN0ZXJz
KCkKICAgICB7CiAgICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4o
KTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKGl0ZXIu
bmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgIGlmIChpdGVy
Lm5hbWUoKS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgICAgICBzcGlsbChpdGVyLm5hbWUoKSk7
CiAgICAgICAgICAgICAgICAgaXRlci5yZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgZm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVy
ICE9IG1fZnBycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkg
IT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgp
LmlzVmFsaWQoKSkgewogICAgICAgICAgICAgICAgIHNwaWxsKGl0ZXIubmFtZSgpKTsKICAgICAg
ICAgICAgICAgICBpdGVyLnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KQEAgLTYyMCwxMSArNjIx
LDExIEBAIHB1YmxpYzoKICAgICBib29sIGlzRmx1c2hlZCgpCiAgICAgewogICAgICAgICBmb3Ig
KGdwcl9pdGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgp
OyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyKQorICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpLmlzVmFsaWQoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChmcHJfaXRl
cmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytpdGVy
KSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rl
cikKKyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzU5
LDcgKzc2MCw3IEBAIHB1YmxpYzoKICAgICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBD
YWxsRnJhbWUuCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYXJndW1lbnRTbG90KGludCBh
cmd1bWVudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKC1tX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMgKyBhcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkpICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKC1tX2ppdC5jb2RlQmxvY2soKS0+
bV9udW1DYWxsZWVSZWdpc3RlcnMgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVu
dCkub2Zmc2V0KCkpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAg
fQogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgY2FsbEZyYW1lVGFnU2xvdChpbnQgc2xv
dCkKQEAgLTc3NCwxMiArNzc1LDEyIEBAIHB1YmxpYzoKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzIGFyZ3VtZW50VGFnU2xvdChpbnQgYXJndW1lbnQpCiAgICAgewotICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICgt
bV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICsgYXJndW1lbnRUb09wZXJh
bmQoYXJndW1lbnQpKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsICgtbV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICsgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpKSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnRhZykpOwogICAgIH0KIAogICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFy
Z3VtZW50UGF5bG9hZFNsb3QoaW50IGFyZ3VtZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAoLW1faml0
LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIGFyZ3VtZW50VG9PcGVyYW5kKGFy
Z3VtZW50KSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgKC1tX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpICogc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YoUmVnaXN0ZXIpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCkpOwogICAgIH0KIAogICAgIHZvaWQgZW1pdENhbGwoTm9kZSopOwpA
QCAtMjE4OCwxMiArMjE4OSwxMiBAQCBwdWJsaWM6CiAgICAgLy8gVHJhY2tpbmcgZm9yIHdoaWNo
IG5vZGVzIGFyZSBjdXJyZW50bHkgaG9sZGluZyB0aGUgdmFsdWVzIG9mIGFyZ3VtZW50cyBhbmQg
Ynl0ZWNvZGUKICAgICAvLyBvcGVyYW5kLWluZGV4ZWQgdmFyaWFibGVzLgogICAgIAotICAgIFZh
bHVlU291cmNlIHZhbHVlU291cmNlRm9yT3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICBWYWx1ZVNv
dXJjZSB2YWx1ZVNvdXJjZUZvck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAg
ewogICAgICAgICByZXR1cm4gdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldE5vZGVGb3JPcGVyYW5kKE5vZGUqIG5vZGUsIGlu
dCBvcGVyYW5kKQorICAgIHZvaWQgc2V0Tm9kZUZvck9wZXJhbmQoTm9kZSogbm9kZSwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZv
ck9wZXJhbmQob3BlcmFuZCkgPSBWYWx1ZVNvdXJjZShNaW5pZmllZElEKG5vZGUpKTsKICAgICB9
CkBAIC0yMjAyLDIxICsyMjAzLDIxIEBAIHB1YmxpYzoKICAgICAvLyBhbmQgcG90ZW50aWFsbHkg
cmVzaXplcyB0aGUgYXJyYXkuIFNvIGl0IHdvdWxkIG5vdCBiZSByaWdodCB0byBjYWxsIHRoaXMK
ICAgICAvLyB0d2ljZSBhbmQgdGhlbiBwZXJmb3JtIG9wZXJhbmRzIG9uIGJvdGggcmVmZXJlbmNl
cywgc2luY2UgdGhlIG9uZSBmcm9tCiAgICAgLy8gdGhlIGZpcnN0IGNhbGwgbWF5IG5vIGxvbmdl
ciBiZSB2YWxpZC4KLSAgICBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVy
YW5kKGludCBvcGVyYW5kKQorICAgIFZhbHVlU291cmNlJiB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZv
ck9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICBpZiAob3Bl
cmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKLSAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9w
ZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOworICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpIHsKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOwog
ICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50XTsKICAgICAgICAgfQogCi0g
ICAgICAgIGludCBsb2NhbCA9IG9wZXJhbmRUb0xvY2FsKG9wZXJhbmQpOworICAgICAgICBpbnQg
bG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKICAgICAgICAgaWYgKCh1bnNpZ25lZClsb2NhbCA+
PSBtX3ZhcmlhYmxlcy5zaXplKCkpCiAgICAgICAgICAgICBtX3ZhcmlhYmxlcy5yZXNpemUobG9j
YWwgKyAxKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tsb2NhbF07CiAg
ICAgfQogICAgIAotICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoaW50IG9wZXJhbmQsIFZhbHVlU291
cmNlIHZhbHVlU291cmNlKQorICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIFZhbHVlU291cmNlIHZhbHVlU291cmNlKQogICAgIHsKICAgICAgICAgdmFsdWVT
b3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpID0gdmFsdWVTb3VyY2U7CiAgICAgICAg
IG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwob3BlcmFuZCwg
dmFsdWVTb3VyY2UuZGF0YUZvcm1hdCgpKSk7CkBAIC0yMjI0LDcgKzIyMjUsNyBAQCBwdWJsaWM6
CiAKICAgICBHZW5lcmF0aW9uSW5mbyYgZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewotICAgICAgICByZXR1cm4g
bV9nZW5lcmF0aW9uSW5mb1tvcGVyYW5kVG9Mb2NhbCh2aXJ0dWFsUmVnaXN0ZXIpXTsKKyAgICAg
ICAgcmV0dXJuIG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyLnRvTG9jYWwoKV07CiAg
ICAgfQogICAgIAogICAgIEdlbmVyYXRpb25JbmZvJiBnZW5lcmF0aW9uSW5mbyhOb2RlKiBub2Rl
KQpAQCAtMjI2Nyw3ICsyMjY4LDcgQEAgcHVibGljOgogCiAgICAgVmVjdG9yPFZhbHVlU291cmNl
LCAwPiBtX2FyZ3VtZW50czsKICAgICBWZWN0b3I8VmFsdWVTb3VyY2UsIDA+IG1fdmFyaWFibGVz
OwotICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBtX2xhc3RT
ZXRPcGVyYW5kOwogICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldDsKICAg
ICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOwogICAgIApAQCAtMjI4Niw3
ICsyMjg3LDcgQEAgcHVibGljOgogCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNv
dmVyeUZvcihpbnQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRlVmFsdWVS
ZWNvdmVyeUZvcih2YWx1ZVNvdXJjZUZvck9wZXJhbmQob3BlcmFuZCkpOworICAgICAgICByZXR1
cm4gY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IodmFsdWVTb3VyY2VGb3JPcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKSkpOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyAr
NzgsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgYWxsIGxvY2FsIHZhcmlh
YmxlcyBhdCB0aGUgaGVhZCBvZiB0aGUgcm9vdCBibG9jayBhcmUgZGVhZC4KICAgICAgICAgQmFz
aWNCbG9jayogcm9vdCA9IG1fZ3JhcGguYmxvY2soMCk7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByb290LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQot
ICAgICAgICAgICAgVl9FUVVBTCgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihsb2NhbFRv
T3BlcmFuZChpKSksIDApLCBzdGF0aWNfY2FzdDxOb2RlKj4oMCksIHJvb3QtPnZhcmlhYmxlc0F0
SGVhZC5sb2NhbChpKSk7CisgICAgICAgICAgICBWX0VRVUFMKCh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgMCksIHN0YXRpY19jYXN0PE5vZGUqPigwKSwgcm9vdC0+dmFyaWFibGVzQXRIZWFk
LmxvY2FsKGkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIFZhbGlkYXRlIHJlZiBjb3VudHMgYW5k
IHVzZXMuCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewpAQCAtMzE3LDE3ICszMTcs
MTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oYXJndW1lbnRUb09wZXJhbmQoaSkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRIZWFk
LmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSktPmhhc1Zh
cmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRI
ZWFkLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSktPmhh
c1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihhcmd1bWVudFRvT3BlcmFuZChpKSksIGJsb2Nr
KSwgIWJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5hcmd1bWVudChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkp
LCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBo
KSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMu
YXJndW1lbnQoaSkgPSBub3RTZXQ7CiAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMu
YXJndW1lbnQoaSkgPSBub3RTZXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4obG9jYWxUb09wZXJhbmQoaSkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRIZWFk
LmxvY2FsKGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSktPmhhc1ZhcmlhYmxl
QWNjZXNzRGF0YShtX2dyYXBoKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmxvY2Fs
KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNz
RGF0YShtX2dyYXBoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRo
cmVhZGVkQ1BTKQotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihsb2NhbFRvT3BlcmFuZChpKSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubG9jYWwoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpKS0+aGFz
VmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVz
QXRUYWlsLmxvY2FsKGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaSktPmhhc1Zh
cmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAKICAgICAgICAgICAgICAgICBnZXRMb2NhbFBv
c2l0aW9ucy5sb2NhbChpKSA9IG5vdFNldDsKICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0
aW9ucy5sb2NhbChpKSA9IG5vdFNldDsKQEAgLTM4OSwxOCArMzg5LDE4IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBjaGVja09wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrLCBnZXRMb2NhbFBvc2l0
aW9ucywgc2V0TG9jYWxQb3NpdGlvbnMsIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYmxvY2ssIGdldExvY2FsUG9zaXRpb25zLCBzZXRMb2NhbFBvc2l0aW9ucywg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGNoZWNrT3BlcmFuZCgKLSAgICAgICAg
ICAgICAgICAgICAgYmxvY2ssIGdldExvY2FsUG9zaXRpb25zLCBzZXRMb2NhbFBvc2l0aW9ucywg
bG9jYWxUb09wZXJhbmQoaSkpOworICAgICAgICAgICAgICAgICAgICBibG9jaywgZ2V0TG9jYWxQ
b3NpdGlvbnMsIHNldExvY2FsUG9zaXRpb25zLCB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjaGVja09w
ZXJhbmQoCiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrLCBPcGVyYW5kczxzaXplX3Q+JiBnZXRM
b2NhbFBvc2l0aW9ucywKLSAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiYgc2V0TG9jYWxQb3NpdGlv
bnMsIGludCBvcGVyYW5kKQorICAgICAgICBPcGVyYW5kczxzaXplX3Q+JiBzZXRMb2NhbFBvc2l0
aW9ucywgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICBpZiAoZ2V0TG9j
YWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSA9PSBub3RTZXQpCiAgICAgICAgICAgICByZXR1
cm47CkBAIC00MzIsMjMgKzQzMiwyMyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVwb3J0VmFsaWRh
dGlvbkNvbnRleHQoVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBibG9jaykKICAg
ICB7CiAgICAgICAgIGlmICghYmxvY2spIHsKLSAgICAgICAgICAgIGRhdGFMb2coInIiLCBzdGF0
aWNfY2FzdDxpbnQ+KGxvY2FsKSwgIiBpbiBudWxsIEJsb2NrICIpOworICAgICAgICAgICAgZGF0
YUxvZygiciIsIGxvY2FsLCAiIGluIG51bGwgQmxvY2sgIik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAotICAgICAgICBkYXRhTG9nKCJyIiwgc3RhdGljX2Nhc3Q8aW50Pihsb2Nh
bCksICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKKyAgICAgICAgZGF0YUxvZygiciIsIGxvY2FsLCAi
IGluIEJsb2NrICIsICpibG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRh
dGlvbkNvbnRleHQoCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayog
c291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2spCiAgICAgewotICAgICAg
ICBkYXRhTG9nKCJyIiwgc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCksICIgaW4gQmxvY2sgIiwgKnNv
dXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsKKyAgICAgICAgZGF0YUxvZygi
ciIsIGxvY2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRp
b25CbG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ss
IE5vZGUqIHByZXZOb2RlKQogICAgIHsKLSAgICAgICAgZGF0YUxvZyhwcmV2Tm9kZSwgIiBmb3Ig
ciIsIHN0YXRpY19jYXN0PGludD4obG9jYWwpLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7
CisgICAgICAgIGRhdGFMb2cocHJldk5vZGUsICIgZm9yIHIiLCBsb2NhbCwgIiBpbiBCbG9jayAi
LCAqc291cmNlQmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25D
b250ZXh0KE5vZGUqIG5vZGUsIEJhc2ljQmxvY2sqIGJsb2NrKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oCShyZXZp
c2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVjb3Zl
cnlPdmVycmlkZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMyArMzksMTMgQEAgY2xhc3MgVmFs
dWVSZWNvdmVyeU92ZXJyaWRlIDogcHVibGljIFJlZgogcHVibGljOgogICAgIFZhbHVlUmVjb3Zl
cnlPdmVycmlkZSgpIHsgfQogICAgIAotICAgIFZhbHVlUmVjb3ZlcnlPdmVycmlkZShpbnQgb3Bl
cmFuZCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkpCisgICAgVmFsdWVSZWNvdmVyeU92
ZXJyaWRlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSkKICAgICAgICAgOiBvcGVyYW5kKG9wZXJhbmQpCiAgICAgICAgICwgcmVjb3ZlcnkocmVj
b3ZlcnkpCiAgICAgewogICAgIH0KICAgICAKLSAgICBpbnQgb3BlcmFuZDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZDsKICAgICBWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5OwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCwxMiArODAsNyBAQCBwdWJs
aWM6CiAgICAgICAgIEFTU0VSVChtX2xvY2FsID09IGZpbmQoKS0+bV9sb2NhbCk7CiAgICAgICAg
IHJldHVybiBtX2xvY2FsOwogICAgIH0KLSAgICAKLSAgICBpbnQgb3BlcmFuZCgpCi0gICAgewot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCgpKTsKLSAgICB9Ci0gICAgCisK
ICAgICBib29sIG1lcmdlSXNDYXB0dXJlZChib29sIGlzQ2FwdHVyZWQpCiAgICAgewogICAgICAg
ICByZXR1cm4gY2hlY2tBbmRTZXQobV9zaG91bGROZXZlclVuYm94LCBtX3Nob3VsZE5ldmVyVW5i
b3ggfCBpc0NhcHR1cmVkKQpAQCAtMjMwLDcgKzIyNSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBmYWNpbGl0eSBmb3IgYXJndW1lbnRzLCB5ZXQu
CiAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayBmb3IgYXJndW1lbnRzLgotICAgICAg
ICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCgpKSkKKyAgICAgICAgaWYgKGxvY2FsKCku
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAg
ICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBhIG51bWJlciBwcmVkaWN0aW9uLCB0aGVuIHRo
aXMgZG9lc24ndApAQCAtMjc4LDcgKzI3Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFT
U0VSVChpc1Jvb3QoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQo
bG9jYWwoKSkgfHwgc2hvdWxkTmV2ZXJVbmJveCgpKQorICAgICAgICBpZiAobG9jYWwoKS5pc0Fy
Z3VtZW50KCkgfHwgc2hvdWxkTmV2ZXJVbmJveCgpKQogICAgICAgICAgICAgcmV0dXJuIERGRzo6
bWVyZ2VEb3VibGVGb3JtYXRTdGF0ZShtX2RvdWJsZUZvcm1hdFN0YXRlLCBOb3RVc2luZ0RvdWJs
ZUZvcm1hdCk7CiAgICAgICAgIAogICAgICAgICBpZiAobV9kb3VibGVGb3JtYXRTdGF0ZSA9PSBD
YW50VXNlRG91YmxlRm9ybWF0KQpAQCAtMzMzLDcgKzMyOCw3IEBAIHB1YmxpYzoKICAgICAgICAg
aWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAgICAgICAgIHJldHVybiBG
bHVzaGVkSW50MzI7CiAgICAgICAgIAotICAgICAgICBpZiAoZW5hYmxlSW50NTIoKSAmJiAhb3Bl
cmFuZElzQXJndW1lbnQobV9sb2NhbCkgJiYgaXNNYWNoaW5lSW50U3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCisgICAgICAgIGlmIChlbmFibGVJbnQ1MigpICYmICFtX2xvY2FsLmlzQXJndW1lbnQo
KSAmJiBpc01hY2hpbmVJbnRTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAgICAgICAgIHJl
dHVybiBGbHVzaGVkSW50NTI7CiAgICAgICAgIAogICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRp
b24ocHJlZGljdGlvbikpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlRXZlbnQuaAkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBA
QCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChraW5kID09IEJpcnRoVG9TcGlsbCB8fCBraW5kID09
IFNwaWxsKTsKICAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKICAgICAgICAgZXZlbnQubV9p
ZCA9IGlkOwotICAgICAgICBldmVudC51LnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVnaXN0ZXI7Cisg
ICAgICAgIGV2ZW50LnUudmlydHVhbFJlZyA9IHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKICAg
ICAgICAgZXZlbnQubV9raW5kID0ga2luZDsKICAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0ID0g
Zm9ybWF0OwogICAgICAgICByZXR1cm4gZXZlbnQ7CkBAIC0xNTUsMTAgKzE1NSwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBldmVudDsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIFZhcmlh
YmxlRXZlbnQgc2V0TG9jYWwoaW50IG9wZXJhbmQsIERhdGFGb3JtYXQgZm9ybWF0KQorICAgIHN0
YXRpYyBWYXJpYWJsZUV2ZW50IHNldExvY2FsKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIsIERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKICAgICAgICAgVmFyaWFibGVFdmVudCBldmVu
dDsKLSAgICAgICAgZXZlbnQudS52aXJ0dWFsUmVnID0gb3BlcmFuZDsKKyAgICAgICAgZXZlbnQu
dS52aXJ0dWFsUmVnID0gdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOwogICAgICAgICBldmVudC5t
X2tpbmQgPSBTZXRMb2NhbEV2ZW50OwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3Jt
YXQ7CiAgICAgICAgIHJldHVybiBldmVudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMTU2NDcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgVmFyaWFibGVFdmVudFN0
cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgCiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzOwogICAg
IGlmIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgbnVtVmFyaWFibGVzID0g
YmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIG9wZXJhbmRUb0xvY2FsKGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7CisgICAgICAgIG51bVZhcmlhYmxlcyA9IGJh
c2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyBWaXJ0dWFsUmVnaXN0ZXIoY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCk7CiAgICAgZWxzZQogICAgICAg
ICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7
CiAgICAgCkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNv
bnN0cnVjdCgKICAgICAvLyB0aGF0IHRob3NlIHZhbHVlcyBkb24ndCBoYXZlIHRvIGJlIHJlY292
ZXJlZC4gU2lnbmFsIHRoaXMgYnkgdXNpbmcgVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluSlNTdGFj
aygpCiAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOyBpLS07KQotICAgICAgICAg
ICAgdmFsdWVSZWNvdmVyaWVzLnNldExvY2FsKG9wZXJhbmRUb0xvY2FsKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQpIC0gaSAtIDEsIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJbkpTU3RhY2so
KSk7CisgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXMuc2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVy
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSAtIGkgLSAxLCBWYWx1ZVJl
Y292ZXJ5OjphbHJlYWR5SW5KU1N0YWNrKCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVy
QWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgcHVibGljOgogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGlubGluZUNhbGxGcmFtZUNvdW50OyBpKyspIHsKICAgICAgICAgICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9ncmFwaC5tX2lubGluZUNhbGxGcmFtZXMt
PmF0KGkpOwogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVC
bG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICAgICAgdW5z
aWduZWQgcmVxdWlyZWRDYWxsZWVSZWdpc3RlcnMgPSBvcGVyYW5kVG9Mb2NhbChpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0KSArIGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7Cisg
ICAgICAgICAgICB1bnNpZ25lZCByZXF1aXJlZENhbGxlZVJlZ2lzdGVycyA9IFZpcnR1YWxSZWdp
c3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyBjb2RlQmxvY2st
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwogICAgICAgICAgICAgaWYgKHJlcXVpcmVkQ2FsbGVlUmVn
aXN0ZXJzID4gY2FsbGVlUmVnaXN0ZXJzKQogICAgICAgICAgICAgICAgIGNhbGxlZVJlZ2lzdGVy
cyA9IHJlcXVpcmVkQ2FsbGVlUmVnaXN0ZXJzOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaAko
cmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJn
dW1lbnRGb3JPcGVyYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMSBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiBjbGFzcyBFeGl0QXJndW1lbnRGb3JPcGVyYW5k
IHsKIHB1YmxpYzoKICAgICBFeGl0QXJndW1lbnRGb3JPcGVyYW5kKCkKLSAgICAgICAgOiBtX29w
ZXJhbmQoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgOiBtX29wZXJhbmQoVmlydHVh
bFJlZ2lzdGVyKCkpCiAgICAgewogICAgIH0KICAgICAKLSAgICBFeGl0QXJndW1lbnRGb3JPcGVy
YW5kKEV4aXRBcmd1bWVudCBleGl0QXJndW1lbnQsIGludCBvcGVyYW5kKQorICAgIEV4aXRBcmd1
bWVudEZvck9wZXJhbmQoRXhpdEFyZ3VtZW50IGV4aXRBcmd1bWVudCwgVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCiAgICAgICAgIDogbV9leGl0QXJndW1lbnQoZXhpdEFyZ3VtZW50KQogICAgICAg
ICAsIG1fb3BlcmFuZChvcGVyYW5kKQogICAgIHsKQEAgLTUxLDEzICs1MSwxMyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9leGl0QXJndW1lbnQ7IH0K
ICAgICAKICAgICBjb25zdCBFeGl0QXJndW1lbnQmIGV4aXRBcmd1bWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZXhpdEFyZ3VtZW50OyB9Ci0gICAgaW50IG9wZXJhbmQoKSBjb25zdCB7IHJldHVybiBt
X29wZXJhbmQ7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCgpIGNvbnN0IHsgcmV0dXJu
IG1fb3BlcmFuZDsgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owog
ICAgIAogcHJpdmF0ZToKICAgICBFeGl0QXJndW1lbnQgbV9leGl0QXJndW1lbnQ7Ci0gICAgaW50
IG1fb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOwogfTsKIAogaW5saW5l
IGJvb2wgbGVzc2VyQXJndW1lbnRJbmRleCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMaW5rLmNwcAkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUg
IkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJKSVRTdHVicy5oIgogI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvTExWTUhl
YWRlcnMuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewpAQCAtNzUsNyArNzYs
NyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAvLyBQbGFudCBhIGNoZWNrIHRo
YXQgc3VmZmljaWVudCBzcGFjZSBpcyBhdmFpbGFibGUgaW4gdGhlIEpTU3RhY2suCiAgICAgICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyOTEK
ICAgICAgICAgaml0LmFkZFB0cigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKGxvY2FsVG9PcGVyYW5kKGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpICogc2l6
ZW9mKFJlZ2lzdGVyKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKS5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLAogICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IHN0YWNrQ2hlY2sgPSBqaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
Ym92ZSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOCBAQAog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisKICNp
bmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKQEAgLTY5LDcgKzcxLDcgQEAgcHVibGljOgogICAgICAgICAsIG1faGVhcHMoc3RhdGUuY29u
dGV4dCkKICAgICAgICAgLCBtX291dChzdGF0ZS5jb250ZXh0KQogICAgICAgICAsIG1fdmFsdWVT
b3VyY2VzKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVh
ZCkKLSAgICAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCkpCisgICAgICAgICwgbV9sYXN0U2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoKSkKICAg
ICAgICAgLCBtX2V4aXRUaHVua0dlbmVyYXRvcihzdGF0ZSkKICAgICAgICAgLCBtX3N0YXRlKHN0
YXRlLmdyYXBoKQogICAgICAgICAsIG1faW50ZXJwcmV0ZXIoc3RhdGUuZ3JhcGgsIG1fc3RhdGUp
CkBAIC01MjQsNyArNTI2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVu
dCgpCiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSB2YXJpYWJsZS0+
b3BlcmFuZCgpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlLT5s
b2NhbCgpOwogCiAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NG
b3Iob3BlcmFuZCkpOwogCkBAIC01NTQsNyArNTU2LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
ICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+
KAogICAgICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JPU1JFbnRyeSgpLT5lbnRy
eUJ1ZmZlcigpLT5kYXRhQnVmZmVyKCkpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2
NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBvcGVyYW5kVG9Mb2NhbChtX25vZGUtPnVubGlua2Vk
TG9jYWwoKSkpKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29s
dXRlKGJ1ZmZlciArIG1fbm9kZS0+dW5saW5rZWRMb2NhbCgpLnRvTG9jYWwoKSkpKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0TG9jYWwoKQpAQCAtMjAwMyw3ICsyMDA1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBjYWxsZWVGcmFtZSA9IG1fb3V0LmFk
ZCgKICAgICAgICAgICAgIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQ
dHIoc2l6ZW9mKFJlZ2lzdGVyKSAqIGxvY2FsVG9PcGVyYW5kKGNvZGVCbG9jaygpLT5tX251bUNh
bGxlZVJlZ2lzdGVycykpKTsKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihS
ZWdpc3RlcikgKiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChjb2RlQmxvY2soKS0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMpLm9mZnNldCgpKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5zdG9yZTMy
KAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlz
QXJndW1lbnQpLApAQCAtMjAxNiw3ICsyMDE4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAgICAgIG1fb3V0LnN0
b3JlNjQoCiAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMSArIGkpKSwKLSAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKGNhbGxlZUZyYW1lLCBh
cmd1bWVudFRvT3BlcmFuZChpICsgZHVtbXlUaGlzQXJndW1lbnQpKSk7CisgICAgICAgICAgICAg
ICAgYWRkcmVzc0ZvcihjYWxsZWVGcmFtZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSAr
IGR1bW15VGhpc0FyZ3VtZW50KS5vZmZzZXQoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5vcGVyYXRpb24oZnVuY3Rpb24pLCBjYWxsZWVG
cmFtZSkpOwpAQCAtMzM1MSw3ICszMzUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAg
IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKICAgICAgICAgICAg
IGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGVGb3IoaGlnaFZhbHVlKSwKLSAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJn
ZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBtX2xhc3RTZXRPcGVyYW5kLAorICAgICAg
ICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2Zp
bGUsIG1fbGFzdFNldE9wZXJhbmQub2Zmc2V0KCksCiAgICAgICAgICAgICBtX3ZhbHVlU291cmNl
cy5udW1iZXJPZkFyZ3VtZW50cygpLCBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkxvY2FscygpKSk7
CiAgICAgICAgIG1fZnRsU3RhdGUub3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5m
bygpKTsKICAgICAgICAgCkBAIC0zNjI2LDcgKzM2MjgsNyBAQCBwcml2YXRlOgogICAgICAgICBB
U1NFUlQobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpOwogICAgICAgICBBU1NFUlQobm9kZS0+b3Ao
KSAhPSBab21iaWVIaW50KTsKICAgICAgICAgCi0gICAgICAgIGludCBvcGVyYW5kID0gbm9kZS0+
bG9jYWwoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT5sb2NhbCgp
OwogICAgICAgICAKICAgICAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG9wZXJhbmQ7CiAgICAgICAg
IG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQob3BlcmFuZCkgPSBWYWx1ZVNvdXJjZShub2RlLT5jaGls
ZDEoKS5ub2RlKCkpOwpAQCAtMzc0NCwxNCArMzc0NiwyNiBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQpOwogICAgIH0KKyAg
ICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kLm9mZnNldCgp
KTsKKyAgICB9CiAgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCiAgICAg
ewogICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZCk7CiAgICAg
fQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHBheWxvYWRGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQub2Zm
c2V0KCkpOworICAgIH0KICAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKGludCBvcGVyYW5kKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHRhZ0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZCk7CiAgICAgfQor
ICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgewor
ICAgICAgICByZXR1cm4gdGFnRm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kLm9mZnNldCgpKTsKKyAg
ICB9CiAgICAgCiAgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9ncmFwaC5tX3ZtOyB9CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2dyYXBoLm1fY29kZUJsb2NrOyB9CkBAIC0z
NzgxLDcgKzM3OTUsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9w
aGlzOwogICAgIAogICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBtX3ZhbHVlU291cmNlczsKLSAg
ICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9sYXN0U2V0T3Bl
cmFuZDsKICAgICBFeGl0VGh1bmtHZW5lcmF0b3IgbV9leGl0VGh1bmtHZW5lcmF0b3I7CiAgICAg
CiAgICAgSW5QbGFjZUFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUs
NyArNjUsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAgICAgCiAgICAgZm9yIChpbnQgYXJn
dW1lbnQgPSB2YWx1ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoCi0gICAgICAgICAgICBleGVjLT5yKGFyZ3VtZW50VG9PcGVyYW5k
KGFyZ3VtZW50KSkuanNWYWx1ZSgpID09IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkpOworICAg
ICAgICAgICAgZXhlYy0+cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zm
c2V0KCkpLmpzVmFsdWUoKSA9PSB2YWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpKTsKICAgICB9CiAg
ICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQqIHByZXBhcmVP
U1JFbnRyeSgKICAgICAgICAgc2NyYXRjaFtsb2NhbF0gPSBKU1ZhbHVlOjplbmNvZGUodmFsdWVz
LmxvY2FsKGxvY2FsKSk7CiAgICAgCiAgICAgaW50IHN0YWNrRnJhbWVTaXplID0gZW50cnlDb2Rl
QmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwotICAgIGlmICghdm0uaW50ZXJwcmV0ZXItPnN0
YWNrKCkuZ3JvdygmZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxUb09wZXJhbmQoc3RhY2tGcmFtZVNp
emUpXSkpIHsKKyAgICBpZiAoIXZtLmludGVycHJldGVyLT5zdGFjaygpLmdyb3coJmV4ZWMtPnJl
Z2lzdGVycygpW3ZpcnR1YWxSZWdpc3RlckZvckxvY2FsKHN0YWNrRnJhbWVTaXplKS5vZmZzZXQo
KV0pKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiY2F1c2Ugc3RhY2sgZ3Jvd3RoIGZhaWxlZC5cbiIpOwog
ICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0LmNwcAkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsMjMgKzc4LDIzIEBAIHZvaWQgT1NS
RXhpdDo6Y29udmVydFRvRm9yd2FyZCgKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgaW50IG92ZXJyaWRkZW5PcGVyYW5kID0gbGFzdE1vdkhpbnQtPmxvY2FsKCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG92ZXJyaWRkZW5PcGVyYW5kID0gbGFzdE1vdkhpbnQtPmxv
Y2FsKCk7CiAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG92ZXJyaWRkZW5PcGVyYW5kOwogICAgIAog
ICAgIC8vIElzIHRoZSB2YWx1ZSBmb3IgdGhpcyBvcGVyYW5kIGJlaW5nIHBhc3NlZCBhcyBhbiBh
cmd1bWVudCB0byB0aGUgZXhpdCwgb3IgaXMKICAgICAvLyBpdCBzb21ldGhpbmcgZWxzZT8gSWYg
aXQncyBhbiBhcmd1bWVudCBhbHJlYWR5LCB0aGVuIHJlcGxhY2UgdGhhdCBhcmd1bWVudDsKICAg
ICAvLyBvdGhlcndpc2UgYWRkIGFub3RoZXIgYXJndW1lbnQuCi0gICAgaWYgKG1fdmFsdWVzW292
ZXJyaWRkZW5PcGVyYW5kXS5pc0FyZ3VtZW50KCkpIHsKLSAgICAgICAgRXhpdEFyZ3VtZW50IGV4
aXRBcmd1bWVudCA9IG1fdmFsdWVzW292ZXJyaWRkZW5PcGVyYW5kXS5leGl0QXJndW1lbnQoKTsK
KyAgICBpZiAobV92YWx1ZXNbb3ZlcnJpZGRlbk9wZXJhbmQub2Zmc2V0KCldLmlzQXJndW1lbnQo
KSkgeworICAgICAgICBFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50ID0gbV92YWx1ZXNbb3ZlcnJp
ZGRlbk9wZXJhbmQub2Zmc2V0KCldLmV4aXRBcmd1bWVudCgpOwogICAgICAgICBhcmd1bWVudHNb
ZXhpdEFyZ3VtZW50LmFyZ3VtZW50KCldID0gdmFsdWUudmFsdWUoKTsKLSAgICAgICAgbV92YWx1
ZXNbb3ZlcnJpZGRlbk9wZXJhbmRdID0gRXhpdFZhbHVlOjpleGl0QXJndW1lbnQoCisgICAgICAg
IG1fdmFsdWVzW292ZXJyaWRkZW5PcGVyYW5kLm9mZnNldCgpXSA9IEV4aXRWYWx1ZTo6ZXhpdEFy
Z3VtZW50KAogICAgICAgICAgICAgZXhpdEFyZ3VtZW50LndpdGhGb3JtYXQodmFsdWUuZm9ybWF0
KCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBhcmd1bWVu
dCA9IGFyZ3VtZW50cy5zaXplKCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZS52YWx1ZSgp
KTsKLSAgICBtX3ZhbHVlc1ttX2xhc3RTZXRPcGVyYW5kXSA9IEV4aXRWYWx1ZTo6ZXhpdEFyZ3Vt
ZW50KAorICAgIG1fdmFsdWVzW21fbGFzdFNldE9wZXJhbmQub2Zmc2V0KCldID0gRXhpdFZhbHVl
OjpleGl0QXJndW1lbnQoCiAgICAgICAgIEV4aXRBcmd1bWVudCh2YWx1ZS5mb3JtYXQoKSwgYXJn
dW1lbnQpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJ
KHJldmlzaW9uIDE1NjQ3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAi
VmFsdWVQcm9maWxlLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtMTYwLDcgKzE2MSw3IEBAIHN0cnVjdCBPU1JF
eGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJhc2UKICAgICAvLyBPZmZzZXQgd2l0aGluIHRoZSBl
eGl0IHN0dWJzIG9mIHRoZSBzdHViIGZvciB0aGlzIGV4aXQuCiAgICAgdW5zaWduZWQgbV9wYXRj
aGFibGVDb2RlT2Zmc2V0OwogICAgIAotICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworICAgIFZp
cnR1YWxSZWdpc3RlciBtX2xhc3RTZXRPcGVyYW5kOwogICAgIAogICAgIE9wZXJhbmRzPEV4aXRW
YWx1ZT4gbV92YWx1ZXM7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkzLDcgKzkzLDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgICAgIGlmICgh
dmFsdWUuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAg
ICAgICBzb3J0ZWRBcmd1bWVudHMuYXBwZW5kKEV4aXRBcmd1bWVudEZvck9wZXJhbmQodmFsdWUu
ZXhpdEFyZ3VtZW50KCksIG9wZXJhbmQpKTsKKyAgICAgICAgc29ydGVkQXJndW1lbnRzLmFwcGVu
ZChFeGl0QXJndW1lbnRGb3JPcGVyYW5kKHZhbHVlLmV4aXRBcmd1bWVudCgpLCBWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZCkpKTsKICAgICB9CiAgICAgc3RkOjpzb3J0KHNvcnRlZEFyZ3VtZW50cy5i
ZWdpbigpLCBzb3J0ZWRBcmd1bWVudHMuZW5kKCksIGxlc3NlckFyZ3VtZW50SW5kZXgpOwogICAg
IApAQCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIGppdC5w
b3AoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKICAgICBqaXQucG9wKEdQ
UkluZm86Om5vbkFyZ0dQUjApOyAvLyBpZ25vcmUgdGhlIHJlc3VsdC4KICAgICAKLSAgICBpZiAo
ZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkp
IHsKKyAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kLmlzVmFsaWQoKSkgewogICAgICAgICBq
aXQubG9hZDY0KAogICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKGV4aXQu
bV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5o
CShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxOCw3ICsyMTgsNyBAQCBuYW1lc3BhY2Ug
SlNDICB7CiAKICAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZyb20gdGhlIGNvZGVmcmFtZSAo
b3IgY29uc3RhbnQgZnJvbSB0aGUgQ29kZUJsb2NrKS4KICAgICAgICAgUmVnaXN0ZXImIHIoaW50
KTsKLSAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZvciBhIG5vbi1jb25zdGFudCAKKyAgICAg
ICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZvciBhIG5vbi1jb25zdGFudAogICAgICAgICBSZWdpc3Rl
ciYgdW5jaGVja2VkUihpbnQpOwogCiAgICAgICAgIC8vIEFjY2VzcyB0byBhcmd1bWVudHMgYXMg
cGFzc2VkLiAoQWZ0ZXIgY2FwdHVyZSwgYXJndW1lbnRzIG1heSBtb3ZlIHRvIGEgZGlmZmVyZW50
IGxvY2F0aW9uLikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcs
NiArNjcsOCBAQAogI2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAi
U3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgIlZNU3RhY2tCb3VuZHMuaCIKKyNpbmNsdWRlICJW
aXJ0dWFsUmVnaXN0ZXIuaCIKKwogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN0ZGlv
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KQEAgLTMxOCw3ICszMjAsNyBAQCB2b2lk
IEludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFtCiAgICAgd2hpbGUgKGl0ID4gZW5k
KSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGl0LT5qc1ZhbHVlKCk7CiAgICAgICAgIGludCByZWdp
c3Rlck51bWJlciA9IGl0IC0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKTsKLSAgICAgICAgU3RyaW5n
IG5hbWUgPSBjb2RlQmxvY2stPm5hbWVGb3JSZWdpc3RlcihyZWdpc3Rlck51bWJlcik7CisgICAg
ICAgIFN0cmluZyBuYW1lID0gY29kZUJsb2NrLT5uYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyKHJlZ2lzdGVyTnVtYmVyKSk7CiAgICAgICAgIGRhdGFMb2dGKCJbciUgM2QgJTE0c10gICAg
ICB8ICUxMHAgfCAlLTE2cyAweCVsbGQgXG4iLCByZWdpc3Rlck51bWJlciwgbmFtZS5hc2NpaSgp
LmRhdGEoKSwgaXQsIHRvQ1N0cmluZyh2KS5kYXRhKCksIChsb25nIGxvbmcpSlNWYWx1ZTo6ZW5j
b2RlKHYpKTsKICAgICAgICAgaXQrKzsKICAgICB9CkBAIC0zNTIsNyArMzU0LDcgQEAgdm9pZCBJ
bnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgICAgICBkbyB7CiAgICAgICAg
ICAgICBKU1ZhbHVlIHYgPSBpdC0+anNWYWx1ZSgpOwogICAgICAgICAgICAgaW50IHJlZ2lzdGVy
TnVtYmVyID0gaXQgLSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpOwotICAgICAgICAgICAgU3RyaW5n
IG5hbWUgPSBjb2RlQmxvY2stPm5hbWVGb3JSZWdpc3RlcihyZWdpc3Rlck51bWJlcik7CisgICAg
ICAgICAgICBTdHJpbmcgbmFtZSA9IGNvZGVCbG9jay0+bmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlcihyZWdpc3Rlck51bWJlcikpOwogICAgICAgICAgICAgZGF0YUxvZ0YoIltyJSAzZCAl
MTRzXSAgICAgIHwgJTEwcCB8ICUtMTZzIDB4JWxsZCBcbiIsIHJlZ2lzdGVyTnVtYmVyLCBuYW1l
LmFzY2lpKCkuZGF0YSgpLCBpdCwgdG9DU3RyaW5nKHYpLmRhdGEoKSwgKGxvbmcgbG9uZylKU1Zh
bHVlOjplbmNvZGUodikpOwogICAgICAgICAgICAgLS1pdDsKICAgICAgICAgICAgIC0tcmVnaXN0
ZXJDb3VudDsKQEAgLTQwOCwxMyArNDEwLDEzIEBAIHN0YXRpYyBib29sIHVud2luZENhbGxGcmFt
ZShTdGFja1Zpc2l0b3IKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIXZpc2l0b3ItPmlzSW5saW5lZEZyYW1lKCkpOwogI2VuZGlmCi0gICAgICAgIGFjdGl2YXRp
b24gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob2xkQ29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0
ZXIoKSkuanNWYWx1ZSgpOworICAgICAgICBhY3RpdmF0aW9uID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKG9sZENvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUo
KTsKICAgICAgICAgaWYgKGFjdGl2YXRpb24pCiAgICAgICAgICAgICBqc0Nhc3Q8SlNBY3RpdmF0
aW9uKj4oYWN0aXZhdGlvbiktPnRlYXJPZmYoKnNjb3BlLT52bSgpKTsKICAgICB9CiAKICAgICBp
ZiAob2xkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBvbGRDb2RlQmxv
Y2stPnVzZXNBcmd1bWVudHMoKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSBhcmd1bWVudHMgPSB2
aXNpdG9yLT5yKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihvbGRDb2RlQmxvY2stPmFyZ3Vt
ZW50c1JlZ2lzdGVyKCkpKS5qc1ZhbHVlKCkpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgYXJndW1l
bnRzID0gdmlzaXRvci0+cih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIob2xkQ29kZUJsb2Nr
LT5hcmd1bWVudHNSZWdpc3RlcigpKS5vZmZzZXQoKSkuanNWYWx1ZSgpKSB7CiAgICAgICAgICAg
ICBpZiAoYWN0aXZhdGlvbikKICAgICAgICAgICAgICAgICBqc0Nhc3Q8QXJndW1lbnRzKj4oYXJn
dW1lbnRzKS0+ZGlkVGVhck9mZkFjdGl2YXRpb24oY2FsbEZyYW1lLCBqc0Nhc3Q8SlNBY3RpdmF0
aW9uKj4oYWN0aXZhdGlvbikpOwogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtNjg5LDcgKzY5MSw3
IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnUKIAogICAgIC8vIFVu
d2luZCB0aGUgc2NvcGUgY2hhaW4gd2l0aGluIHRoZSBleGNlcHRpb24gaGFuZGxlcidzIGNhbGwg
ZnJhbWUuCiAgICAgaW50IHRhcmdldFNjb3BlRGVwdGggPSBoYW5kbGVyLT5zY29wZURlcHRoOwot
ICAgIGlmIChjb2RlQmxvY2stPm5lZWRzQWN0aXZhdGlvbigpICYmIGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihjb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpCisgICAgaWYg
KGNvZGVCbG9jay0+bmVlZHNBY3RpdmF0aW9uKCkgJiYgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGNv
ZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKSkKICAgICAg
ICAgKyt0YXJnZXRTY29wZURlcHRoOwogCiAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUt
PnNjb3BlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgJKHJldmlzaW9uIDE1NjQ3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCBwdWJsaWM6
CiAgICAgCiAgICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3RlcikpOworICAg
ICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJl
Z2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgfQogICAgIHN0YXRpYyBB
ZGRyZXNzIGFkZHJlc3NGb3IoaW50IG9wZXJhbmQpCiAgICAgewpAQCAtMTY1LDcgKzE2NSw3IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgICAg
ICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lz
dGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7CiAgICAgfQogICAgIHN0YXRpYyBBZGRyZXNz
IHRhZ0ZvcihpbnQgb3BlcmFuZCkKICAgICB7CkBAIC0xNzQsNyArMTc0LDcgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICAgICAg
cmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rl
ci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKICAgICB9CiAgICAgc3RhdGljIEFkZHJl
c3MgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKICAgICB7CkBAIC0zODAsMTYgKzM4MCwxNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2Jhc2VsaW5lQ29kZUJsb2NrOwogICAgIH0KICAgICAK
LSAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXJGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUpCisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyRm9yKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUpCiAgICAgICAgICAgICByZXR1cm4gY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVy
KCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVD
YWxsRnJhbWUoCi0gICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUpLT5hcmd1bWVudHNSZWdpc3Rl
cigpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICAgICAgcmV0dXJuIFZpcnR1
YWxSZWdpc3RlcihiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZSgKKyAgICAgICAg
ICAgIGlubGluZUNhbGxGcmFtZSktPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkgKyBpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKICAgICB9CiAgICAgCi0gICAgaW50IGFyZ3VtZW50
c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4p
CiAgICAgewogICAgICAgICByZXR1cm4gYXJndW1lbnRzUmVnaXN0ZXJGb3IoY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2
aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgzLDggKzU4MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbWl0R2V0SklUU3R1YkFyZyhpbnQgYXJndW1lbnROdW1iZXIsIFJlZ2lzdGVySUQgZHN0KTsK
IAogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJ
RCBkc3QpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRz
dDIpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3Rl
ciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklE
IGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVn
aXN0ZXJJRCBmcm9tID0gcmVnVDApOworICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAgICAg
ICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIC8q
IG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKICAgICAgICAgewogICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHBheWxvYWQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxNTY0NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3
Niw3IEBAIHZvaWQgSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24KICAgICBKdW1w
TGlzdCBzbG93Q2FzZTsKICAgICBKdW1wTGlzdCBlbmQ7CiAgICAgYm9vbCBjYW5PcHRpbWl6ZSA9
IG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkKLSAgICAgICAgJiYgYXJndW1lbnRzID09IG1f
Y29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpCisgICAgICAgICYmIGFyZ3VtZW50cyA9PSBt
X2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKQogICAgICAgICAmJiAhbV9j
b2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKTsKIAogICAgIGlmIChjYW5P
cHRpbWl6ZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJl
dmlzaW9uIDE1NjQ3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NTgsNyArNzU4LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEdldFZpcnR1YWxSZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHNy
YyA9PSBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyICYmIG1fY29kZUJsb2NrLT5pc1RlbXBv
cmFyeVJlZ2lzdGVySW5kZXgob3BlcmFuZFRvTG9jYWwoc3JjKSkgJiYgIWF0SnVtcFRhcmdldCgp
KSB7CisgICAgaWYgKHNyYyA9PSBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyICYmIG9wZXJh
bmRJc0xvY2FsKHNyYykgJiYgbV9jb2RlQmxvY2stPmlzVGVtcG9yYXJ5UmVnaXN0ZXJJbmRleChW
aXJ0dWFsUmVnaXN0ZXIoc3JjKS50b0xvY2FsKCkpICYmICFhdEp1bXBUYXJnZXQoKSkgewogICAg
ICAgICAvLyBUaGUgYXJndW1lbnQgd2Ugd2FudCBpcyBhbHJlYWR5IHN0b3JlZCBpbiBlYXgKICAg
ICAgICAgaWYgKGRzdCAhPSBjYWNoZWRSZXN1bHRSZWdpc3RlcikKICAgICAgICAgICAgIG1vdmUo
Y2FjaGVkUmVzdWx0UmVnaXN0ZXIsIGRzdCk7CkBAIC03NzAsNiArNzcwLDExIEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lz
dGVyKCk7CiB9CiAKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCit7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMub2Zmc2V0KCksIGRzdCk7Cit9CisKIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEs
IGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCiB7CiAgICAgaWYgKHNyYzIgPT0gbV9sYXN0UmVz
dWx0Qnl0ZWNvZGVSZWdpc3RlcikgewpAQCAtNzgxLDYgKzc4NiwxMSBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgfQogfQogCitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVn
aXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQorewor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEub2Zmc2V0KCksIGRzdDEsIHNyYzIub2Zm
c2V0KCksIGRzdDIpOworfQorCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRDb25zdGFu
dE9wZXJhbmRJbW1lZGlhdGVJbnQoaW50IHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuYXNJbnQzMigpOwpAQCAtNzk3LDYgKzgwNywxMSBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlCiAgICAgbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdp
c3RlciA9IChmcm9tID09IGNhY2hlZFJlc3VsdFJlZ2lzdGVyKSA/IGRzdCA6IHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCk7CiB9CiAKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQor
eworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0Lm9mZnNldCgpLCBmcm9tKTsKK30KKwog
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KQogewogICAg
IHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEFk
ZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlz
aW9uIDE1NjQ3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkpTVmFyaWFi
bGVPYmplY3QuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhD
YWxsLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CkBAIC0xMDk2LDcgKzEwOTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihJbnN0cnVjdGlv
biopCiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5u
ZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFz
aW5nIEdDIHByZXNzdXJlLgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm1f
bnVtVmFyczsgKytpKQotICAgICAgICBlbWl0U3RvcmUobG9jYWxUb09wZXJhbmQoaSksIGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICBlbWl0U3RvcmUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSku
b2Zmc2V0KCksIGpzVW5kZWZpbmVkKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVf
YWN0aXZhdGlvbihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNTY0NzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRl
ICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTI1Nyw5ICsyNTgs
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9hcmd1bWVudHMoSW5zCiAgICAgaW50IGFy
Z3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IGFjdGl2
YXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCi0gICAgSnVtcCBhcmdz
Tm90Q3JlYXRlZCA9IGJyYW5jaFRlc3Q2NChaZXJvLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBzaXplb2YoUmVnaXN0ZXIpICogKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVu
dHMpKSkpOworICAgIEp1bXAgYXJnc05vdENyZWF0ZWQgPSBicmFuY2hUZXN0NjQoWmVybywgQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqICh1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cykpLm9mZnNldCgpKSkpOwog
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90ZWFyX29mZl9hcmd1bWVudHMp
OwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihh
cmd1bWVudHMpLCByZWdUMik7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQodW5tb2RpZmllZEFy
Z3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpKS5vZmZzZXQoKSwgcmVn
VDIpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGFjdGl2YXRpb24sIHJlZ1QyKTsKICAgICBz
dHViQ2FsbC5jYWxsKCk7CiAgICAgYXJnc05vdENyZWF0ZWQubGluayh0aGlzKTsKQEAgLTUwNyw3
ICs1MDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcG5hbWVzKEluc3RydWN0aW9uCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgaWYgKCFtX2NvZGVCbG9j
ay0+aXNLbm93bk5vdEltbWVkaWF0ZShiYXNlKSkKICAgICAgICAgaXNOb3RPYmplY3QuYXBwZW5k
KGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApKTsKLSAgICBpZiAoYmFzZSAhPSBtX2NvZGVCbG9j
ay0+dGhpc1JlZ2lzdGVyKCkgfHwgbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CisgICAg
aWYgKGJhc2UgIT0gbV9jb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpLm9mZnNldCgpIHx8IG1fY29k
ZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgICAgIGlzTm90T2JqZWN0
LmFwcGVuZChlbWl0SnVtcElmTm90T2JqZWN0KHJlZ1QyKSk7CiAgICAgfQpAQCAtODMzLDcgKzgz
NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3RydWN0aW9uKikKICAgICAvLyBvYmpl
Y3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50
ID0gbV9jb2RlQmxvY2stPm1fbnVtVmFyczsKICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGNv
dW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIobG9jYWxUb09wZXJhbmQoaikpOwor
ICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopLm9mZnNl
dCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX2FjdGl2YXRpb24oSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg1Miw3ICs4NTMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jcmVhdGVfYXJndW1lbnRzKEluc3RyCiAgICAgSnVtcCBhcmdzQ3JlYXRlZCA9IGJyYW5j
aFRlc3Q2NChOb25aZXJvLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0
ZXIpICogZHN0KSk7CiAgICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX2NyZWF0ZV9hcmd1bWVu
dHMpLmNhbGwoKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoZHN0KSk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyKGRzdCkpKTsKICAgICBhcmdzQ3JlYXRlZC5saW5rKHRoaXMpOwogfQogCkBAIC0x
MTQ1LDcgKzExNDYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3Zh
CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9j
cmVhdGVfYXJndW1lbnRzKS5jYWxsKCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihhcmd1
bWVudHMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIodW5tb2RpZmllZEFyZ3VtZW50c1Jl
Z2lzdGVyKGFyZ3VtZW50cykpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIodW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpKSk7CiAgICAgCiAg
ICAgc2tpcEFyZ3VtZW50c0NyZWF0aW9uLmxpbmsodGhpcyk7CiAgICAgSklUU3R1YkNhbGwgc3R1
YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV92YWxfZ2VuZXJpYyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNDcsNyAr
MTA0Nyw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgo
aSk7CiAgICAgICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKLSAgICAgICAg
ICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAgICAgICAm
JiAhVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvQXJndW1lbnQoKQogICAgICAgICAgICAgICAg
ICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKICAgICAgICAgICAgICAg
ICAmJiBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3Qp
IHsKICAgICAgICAgICAgICAgICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRo
ZSAndGhpcycgYXJndW1lbnQgbWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbApAQCAtMTE1NCw3ICsx
MTU0LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9uZXdfZgogewogICAg
IFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKICAgICAKLSAgICBBU1NFUlQoc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29k
ZSB8fCAhc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNo
YWluKCkgfHwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3RhY2tGcmFtZS5jYWxs
RnJhbWUtPmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsKKyAg
ICBBU1NFUlQoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5jb2RlVHlwZSgpICE9
IEZ1bmN0aW9uQ29kZSB8fCAhc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVk
c0Z1bGxTY29wZUNoYWluKCkgfHwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKS5vZmZz
ZXQoKSkuanNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKHN0YWNrRnJh
bWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uZnVuY3Rpb24oKSwgc3RhY2tGcmFtZS5j
YWxsRnJhbWUtPnNjb3BlKCkpOwogfQogCkBAIC0xOTMxLDcgKzE5MzEsNyBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTihKU09iamVjdCosIG9wX25ld19mCiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uID0gc3RhY2tGcmFtZS5hcmdzWzBdLmZ1bmN0aW9uKCk7CiAgICAgSlNGdW5jdGlv
biogZnVuYyA9IEpTRnVuY3Rpb246OmNyZWF0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLCBjYWxsRnJh
bWUtPnNjb3BlKCkpOwotICAgIEFTU0VSVChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5jb2RlVHlw
ZSgpICE9IEZ1bmN0aW9uQ29kZSB8fCAhY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxs
U2NvcGVDaGFpbigpIHx8IGNhbGxGcmFtZS0+dW5jaGVja2VkUihjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsKKyAgICBBU1NFUlQoY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUgfHwgIWNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSB8fCBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0
KCkpLmpzVmFsdWUoKSk7CiAKICAgICByZXR1cm4gZnVuYzsKIH0KQEAgLTE5NTksNyArMTk1OSw3
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBDYWxsRnJh
bWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIEFTU0VSVChj
YWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5jb2RlVHlwZSgpICE9IEZ1bmN0
aW9uQ29kZQogICAgICAgICB8fCAhY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2so
KS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpCi0gICAgICAgIHx8IGNhbGxGcmFtZS0+Y2FsbGVyRnJh
bWUoKS0+dW5jaGVja2VkUihjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5h
Y3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsKKyAgICAgICAgfHwgY2FsbEZyYW1lLT5j
YWxsZXJGcmFtZSgpLT51bmNoZWNrZWRSKGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJs
b2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCkpOwogCiAgICAg
Y2FsbEZyYW1lLT5zZXRTY29wZShjYWxsZXJGcmFtZS0+c2NvcGUoKSk7CiAgICAgY2FsbEZyYW1l
LT5zZXRSZXR1cm5QQyhzdGF0aWNfY2FzdDxJbnN0cnVjdGlvbio+KChTVFVCX1JFVFVSTl9BRERS
RVNTKS52YWx1ZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE1NjQ3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5Nyw3ICs2
OTcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2FyZ3VtCiAgICAgICAg
IGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKHZtLCBleGVjKTsKICAgICAgICAgTExJTlRf
Q0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIExMSU5UX09QKDIpID0gYXJndW1lbnRzOwotICAg
ICAgICBleGVjLT51bmNoZWNrZWRSKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihwY1syXS51
Lm9wZXJhbmQpKSA9IGFyZ3VtZW50czsKKyAgICAgICAgZXhlYy0+dW5jaGVja2VkUih1bm1vZGlm
aWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHBjWzJdLnUub3BlcmFuZCkpLm9m
ZnNldCgpKSA9IGFyZ3VtZW50czsKICAgICB9CiAgICAgCiAgICAgTExJTlRfUkVUVVJOX1BST0ZJ
TEVEKG9wX2dldF9hcmd1bWVudF9ieV92YWwsIGdldEJ5VmFsKGV4ZWMsIGFyZ3VtZW50cywgTExJ
TlRfT1BfQygzKS5qc1ZhbHVlKCkpKTsKQEAgLTkxNyw3ICs5MTcsNyBAQCBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfbmV3X2Z1bmMpCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBl
eGVjLT5jb2RlQmxvY2soKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5jb2RlVHlwZSgpICE9IEZ1
bmN0aW9uQ29kZQogICAgICAgICAgICB8fCAhY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWlu
KCkKLSAgICAgICAgICAgfHwgZXhlYy0+dW5jaGVja2VkUihjb2RlQmxvY2stPmFjdGl2YXRpb25S
ZWdpc3RlcigpKS5qc1ZhbHVlKCkpOworICAgICAgICAgICB8fCBleGVjLT51bmNoZWNrZWRSKGNv
ZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKSk7CiAjaWYg
TExJTlRfU0xPV19QQVRIX1RSQUNJTkcKICAgICBkYXRhTG9nRigiQ3JlYXRpbmcgZnVuY3Rpb24h
XG4iKTsKICNlbmRpZgpAQCAtMTEyOCw3ICsxMTI4LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX3RlYXJfb2ZmXwogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgQVNTRVJUKGV4
ZWMtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkpOwotICAgIEFyZ3VtZW50cyogYXJndW1l
bnRzID0ganNDYXN0PEFyZ3VtZW50cyo+KGV4ZWMtPnVuY2hlY2tlZFIodW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCkpLmpzVmFsdWUoKSk7CisgICAgQXJndW1lbnRz
KiBhcmd1bWVudHMgPSBqc0Nhc3Q8QXJndW1lbnRzKj4oZXhlYy0+dW5jaGVja2VkUih1bm1vZGlm
aWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCkpLm9m
ZnNldCgpKS5qc1ZhbHVlKCkpOwogICAgIGlmIChKU1ZhbHVlIGFjdGl2YXRpb25WYWx1ZSA9IExM
SU5UX09QX0MoMikuanNWYWx1ZSgpKQogICAgICAgICBhcmd1bWVudHMtPmRpZFRlYXJPZmZBY3Rp
dmF0aW9uKGV4ZWMsIGpzQ2FzdDxKU0FjdGl2YXRpb24qPihhY3RpdmF0aW9uVmFsdWUpKTsKICAg
ICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRl
Y29kZVNlcXVlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkocmV2aXNpb24gMTU2NDczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgQnl0ZWNvZGVTZXF1ZW5jZTo6Qnl0
ZWNvZGVTZXF1ZW5jZShDb2RlQgogICAgICAgICBpZiAoIWRlc2NyaXB0aW9uLmxlbmd0aCgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5yZXNldCgpOwotICAgICAgICBvdXQu
cHJpbnQoImFyZyIsIGksICIgKHIiLCBhcmd1bWVudFRvT3BlcmFuZChpKSwgIik6ICIsIGRlc2Ny
aXB0aW9uKTsKKyAgICAgICAgb3V0LnByaW50KCJhcmciLCBpLCAiIChyIiwgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCksICIpOiAiLCBkZXNjcmlwdGlvbik7CiAgICAgICAg
IG1faGVhZGVyLmFwcGVuZChvdXQudG9DU3RyaW5nKCkpOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoVkFMVUVfUFJPRklMRVIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE1NjQ3MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwNyw3ICsyMDcsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX2FyZ3Vt
ZW50CiAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlKEFyZ3VtZW50czo6Y3JlYXRlKHZt
LCBleGVjKSk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgZXhlYy0+dW5jaGVja2VkUihw
Y1sxXS51Lm9wZXJhbmQpID0gYXJndW1lbnRzOwotICAgIGV4ZWMtPnVuY2hlY2tlZFIodW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCkpID0gYXJndW1lbnRzOworICAg
IGV4ZWMtPnVuY2hlY2tlZFIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlcihwY1sxXS51Lm9wZXJhbmQpKS5vZmZzZXQoKSkgPSBhcmd1bWVudHM7CiAgICAgRU5EKCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0
aW9uLmNwcAkocmV2aXNpb24gMTU2NDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDEzICsyMTgsMTMgQEAg
SlNWYWx1ZSBKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcihFeAogICAgIGlmIChhY3RpdmF0
aW9uLT5pc1Rvcm5PZmYoKSB8fCAhKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnVzZXNBcmd1bWVu
dHMoKSB8fCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT51c2VzRXZhbCgpKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpOwotICAgIGlmIChKU1ZhbHVlIGFy
Z3VtZW50cyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihhcmd1bWVudHNSZWdpc3RlcikuanNWYWx1
ZSgpKQorICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlciA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCk7CisgICAgaWYgKEpTVmFsdWUgYXJndW1l
bnRzID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFyZ3VtZW50c1JlZ2lzdGVyLm9mZnNldCgpKS5q
c1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBhcmd1bWVudHM7Ci0gICAgaW50IHJlYWxBcmd1bWVu
dHNSZWdpc3RlciA9IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rl
cik7CisgICAgaW50IHJlYWxBcmd1bWVudHNSZWdpc3RlciA9IHVubW9kaWZpZWRBcmd1bWVudHNS
ZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcikub2Zmc2V0KCk7CiAKICAgICBKU1ZhbHVlIGFyZ3Vt
ZW50cyA9IEpTVmFsdWUoQXJndW1lbnRzOjpjcmVhdGUoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJh
bWUpKTsKLSAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpID0gYXJn
dW1lbnRzOworICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihhcmd1bWVudHNSZWdpc3Rlci5vZmZz
ZXQoKSkgPSBhcmd1bWVudHM7CiAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHJlYWxBcmd1bWVu
dHNSZWdpc3RlcikgPSBhcmd1bWVudHM7CiAgICAgCiAgICAgQVNTRVJUKGNhbGxGcmFtZS0+dW5j
aGVja2VkUihyZWFsQXJndW1lbnRzUmVnaXN0ZXIpLmpzVmFsdWUoKS5pbmhlcml0cyhBcmd1bWVu
dHM6OmluZm8oKSkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>