<?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>126778</bug_id>
          
          <creation_ts>2014-01-10 13:43:52 -0800</creation_ts>
          <short_desc>DFG should allow Phantoms after terminals</short_desc>
          <delta_ts>2015-05-18 12:49:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>143735</blocked>
    
    <blocked>145134</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>966565</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-10 13:43:52 -0800</bug_when>
    <thetext>This would allow us to get rid of some hacks and would also enable new kinds of CFG simplification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086688</commentid>
    <comment_count>1</comment_count>
      <attachid>251134</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-19 16:26:39 -0700</bug_when>
    <thetext>Created attachment 251134
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086966</commentid>
    <comment_count>2</comment_count>
      <attachid>251209</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-20 18:43:11 -0700</bug_when>
    <thetext>Created attachment 251209
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086967</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-20 18:46:01 -0700</bug_when>
    <thetext>Attachment 251209 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGBasicBlock.h:121:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGValidate.cpp:202:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087187</commentid>
    <comment_count>4</comment_count>
      <attachid>251209</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-21 15:17:38 -0700</bug_when>
    <thetext>Comment on attachment 251209
the patch

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

Please fix style issues.

r=me with suggestions addressed.

&gt; Source/JavaScriptCore/dfg/DFGBasicBlock.h:313
&gt;  private:
&gt; +    
&gt;      friend class InsertionSet;

Unnecessary blank line added here.  Please remove.

&gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:339
&gt; +            size_t upsilonInsertionPoint = block-&gt;findTerminal().index;
&gt; +            NodeOrigin upsilonOrigin = block-&gt;terminal()-&gt;origin;

block-&gt;terminal() will invoke findTerminal() again.  Why not just cache and use the NodeAndIndex result?

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:1932
&gt; -    case MovHint:
&gt; -    case ZombieHint: {
&gt; +    case MovHint: {
&gt;          DFG_CRASH(m_jit.graph(), node, &quot;Unexpected node&quot;);
&gt;          break;
&gt;      }
&gt; +        
&gt; +    case ZombieHint: {
&gt; +        recordSetLocal(m_currentNode-&gt;unlinkedLocal(), VirtualRegister(), DataFormatDead);
&gt; +        break;
&gt; +    }

This part is already in ToT, right?

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:-1449
&gt; -            case ZombieHint: {
&gt; -                recordSetLocal(m_currentNode-&gt;unlinkedLocal(), VirtualRegister(), DataFormatDead);
&gt; -                break;
&gt; -            }
&gt; -

Ditto.  Already in ToT.

&gt; Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp:109
&gt; +            if (block-&gt;terminal()-&gt;op() == Return) {
&gt;                  insertionSet.insertNode(
&gt; -                    block-&gt;size() - 1, SpecNone, CheckTierUpAtReturn, block-&gt;last()-&gt;origin);
&gt; +                    block-&gt;findTerminal().index, SpecNone, CheckTierUpAtReturn,
&gt; +                    block-&gt;terminal()-&gt;origin);

Again, you&apos;re calling findTerminal() 3 times here.  Why not cache and reuse the NodeAndIndex?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087189</commentid>
    <comment_count>5</comment_count>
      <attachid>251209</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-04-21 15:22:31 -0700</bug_when>
    <thetext>Comment on attachment 251209
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp:155
&gt; +                    if (block-&gt;terminal()-&gt;child1()-&gt;hasConstant()) {
&gt; +                        FrozenValue* value = block-&gt;terminal()-&gt;child1()-&gt;constant();

Ditto, can call findTerminal() and cache here.

&gt; Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:465
&gt; +            size_t upsilonInsertionPoint = block-&gt;findTerminal().index;
&gt; +            Node* upsilonWhere = block-&gt;terminal();

Ditto.  Use findTerminal() once?

&gt; Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:712
&gt; +            size_t upsilonInsertionPoint = block-&gt;findTerminal().index;
&gt; +            NodeOrigin upsilonOrigin = block-&gt;terminal()-&gt;origin;

Ditto.  Use findTerminal() once?

&gt; Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:445
&gt; +            size_t upsilonInsertionPoint = block-&gt;findTerminal().index;
&gt; +            NodeOrigin upsilonOrigin = block-&gt;terminal()-&gt;origin;

Ditto.  Use findTerminal() once?

&gt; Source/JavaScriptCore/dfg/DFGStaticExecutionCountEstimationPhase.cpp:66
&gt; +            switch (block-&gt;terminal()-&gt;op()) {

Ditto.  Use findTerminal() once?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087300</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-21 20:22:00 -0700</bug_when>
    <thetext>I fixed all of the repeated terminal() calls locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087301</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-21 20:22:29 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 251209 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251209&amp;action=review
&gt; 
&gt; Please fix style issues.
&gt; 
&gt; r=me with suggestions addressed.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGBasicBlock.h:313
&gt; &gt;  private:
&gt; &gt; +    
&gt; &gt;      friend class InsertionSet;
&gt; 
&gt; Unnecessary blank line added here.  Please remove.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:339
&gt; &gt; +            size_t upsilonInsertionPoint = block-&gt;findTerminal().index;
&gt; &gt; +            NodeOrigin upsilonOrigin = block-&gt;terminal()-&gt;origin;
&gt; 
&gt; block-&gt;terminal() will invoke findTerminal() again.  Why not just cache and
&gt; use the NodeAndIndex result?
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:1932
&gt; &gt; -    case MovHint:
&gt; &gt; -    case ZombieHint: {
&gt; &gt; +    case MovHint: {
&gt; &gt;          DFG_CRASH(m_jit.graph(), node, &quot;Unexpected node&quot;);
&gt; &gt;          break;
&gt; &gt;      }
&gt; &gt; +        
&gt; &gt; +    case ZombieHint: {
&gt; &gt; +        recordSetLocal(m_currentNode-&gt;unlinkedLocal(), VirtualRegister(), DataFormatDead);
&gt; &gt; +        break;
&gt; &gt; +    }
&gt; 
&gt; This part is already in ToT, right?

Correct - this was the part of what I landed in an earlier patch that I needed to write this patch.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:-1449
&gt; &gt; -            case ZombieHint: {
&gt; &gt; -                recordSetLocal(m_currentNode-&gt;unlinkedLocal(), VirtualRegister(), DataFormatDead);
&gt; &gt; -                break;
&gt; &gt; -            }
&gt; &gt; -
&gt; 
&gt; Ditto.  Already in ToT.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp:109
&gt; &gt; +            if (block-&gt;terminal()-&gt;op() == Return) {
&gt; &gt;                  insertionSet.insertNode(
&gt; &gt; -                    block-&gt;size() - 1, SpecNone, CheckTierUpAtReturn, block-&gt;last()-&gt;origin);
&gt; &gt; +                    block-&gt;findTerminal().index, SpecNone, CheckTierUpAtReturn,
&gt; &gt; +                    block-&gt;terminal()-&gt;origin);
&gt; 
&gt; Again, you&apos;re calling findTerminal() 3 times here.  Why not cache and reuse
&gt; the NodeAndIndex?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087306</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-21 20:41:15 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/183094</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251134</attachid>
            <date>2015-04-19 16:26:39 -0700</date>
            <delta_ts>2015-04-20 18:43:11 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>45970</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2
aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTkgQEAgdm9pZCBCYXNpY0Jsb2NrOjpl
bnN1cmVMb2NhbHModW5zaWduZWQgbgogICAgIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVh
ZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpOwog
fQogCit2b2lkIEJhc2ljQmxvY2s6OnJlcGxhY2VUZXJtaW5hbChOb2RlKiBub2RlKQoreworICAg
IE5vZGVBbmRJbmRleCByZXN1bHQgPSBmaW5kVGVybWluYWwoKTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgYXBwZW5kKG5vZGUpOworICAgIGVsc2UgeworICAgICAgICBtX25vZGVzLmluc2Vy
dChyZXN1bHQuaW5kZXggKyAxLCBub2RlKTsKKyAgICAgICAgcmVzdWx0Lm5vZGUtPmNvbnZlcnRU
b1BoYW50b20oKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHRlcm1pbmFsKCkpOworfQorCiBi
b29sIEJhc2ljQmxvY2s6OmlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwaGlzLnNpemUoKTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjMsMTggKzYzLDUxIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRl
ZDxCYXNpY0Jsb2MKICAgICBOb2RlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
c1tpXTsgfQogICAgIE5vZGUqJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBhdChpKTsg
fQogICAgIE5vZGUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9
Ci0gICAgTm9kZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9Ci0gICAg
Tm9kZSogdGFrZUxhc3QoKSB7IHJldHVybiBtX25vZGVzLnRha2VMYXN0KCk7IH0KKworICAgIE5v
ZGVBbmRJbmRleCBmaW5kVGVybWluYWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IGkg
PSBzaXplKCk7CisgICAgICAgIHdoaWxlIChpLS0pIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBhdChpKTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAg
Y2FzZSBKdW1wOgorICAgICAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgICAgICBjYXNlIFN3
aXRjaDoKKyAgICAgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICAgICAgY2FzZSBVbnJlYWNo
YWJsZToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9kZUFuZEluZGV4KG5vZGUsIGkpOworICAg
ICAgICAgICAgLy8gVGhlIGJpdHRlciBlbmQgY2FuIGNvbnRhaW4gUGhhbnRvbXMgYW5kIHRoZSBs
aWtlLiBUaGVyZSB3aWxsIHByb2JhYmx5IG9ubHkgYmUgb25lIG9yIHR3byBub2RlcyBhZnRlciB0
aGUgdGVybWluYWwuCisgICAgICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAgICBjYXNl
IFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBOb2Rl
QW5kSW5kZXgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9k
ZUFuZEluZGV4KCk7CisgICAgfQorICAgIAorICAgIE5vZGUqIHRlcm1pbmFsKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBmaW5kVGVybWluYWwoKS5ub2RlOworICAgIH0KKyAgICAKICAg
ICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSkgeyBtX25vZGVzLnJlc2l6ZShzaXplKTsgfQogICAg
IHZvaWQgZ3JvdyhzaXplX3Qgc2l6ZSkgeyBtX25vZGVzLmdyb3coc2l6ZSk7IH0KICAgICAKICAg
ICB2b2lkIGFwcGVuZChOb2RlKiBub2RlKSB7IG1fbm9kZXMuYXBwZW5kKG5vZGUpOyB9Ci0gICAg
dm9pZCBpbnNlcnRCZWZvcmVMYXN0KE5vZGUqIG5vZGUpCisgICAgdm9pZCBpbnNlcnRCZWZvcmVU
ZXJtaW5hbChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgYXBwZW5kKGxhc3QoKSk7Ci0gICAg
ICAgIGF0KHNpemUoKSAtIDIpID0gbm9kZTsKKyAgICAgICAgTm9kZUFuZEluZGV4IHJlc3VsdCA9
IGZpbmRUZXJtaW5hbCgpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIGFwcGVu
ZChub2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9ub2Rlcy5pbnNlcnQocmVzdWx0
LmluZGV4LCBub2RlKTsKICAgICB9CiAgICAgCisgICAgdm9pZCByZXBsYWNlVGVybWluYWwoTm9k
ZSogbm9kZSk7CisgICAgCiAgICAgc2l6ZV90IG51bU5vZGVzKCkgY29uc3QgeyByZXR1cm4gcGhp
cy5zaXplKCkgKyBzaXplKCk7IH0KICAgICBOb2RlKiBub2RlKHNpemVfdCBpKSBjb25zdAogICAg
IHsKQEAgLTkzLDE1ICsxMjYsMTUgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJh
c2ljQmxvYwogICAgIE5vZGUqIGZpcnN0T3JpZ2luTm9kZSgpOwogICAgIE5vZGVPcmlnaW4gZmly
c3RPcmlnaW4oKTsKICAgICAKLSAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkgeyByZXR1cm4g
bGFzdCgpLT5udW1TdWNjZXNzb3JzKCk7IH0KKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkg
eyByZXR1cm4gdGVybWluYWwoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAgCiAgICAgQmFzaWNC
bG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiBs
YXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7CisgICAgICAgIHJldHVybiB0ZXJtaW5hbCgpLT5zdWNj
ZXNzb3IoaW5kZXgpOwogICAgIH0KICAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yRm9yQ29uZGl0
aW9uKGJvb2wgY29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGxhc3QoKS0+c3VjY2Vz
c29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CisgICAgICAgIHJldHVybiB0ZXJtaW5hbCgpLT5z
dWNjZXNzb3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsKICAgICB9CiAgICAgCiAgICAgY2xhc3Mg
U3VjY2Vzc29yc0l0ZXJhYmxlIHsKQEAgLTE4Myw2ICsyMTYsOSBAQCBzdHJ1Y3QgQmFzaWNCbG9j
ayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gUGFyYW1z
PgogICAgIE5vZGUqIGFwcGVuZE5vblRlcm1pbmFsKEdyYXBoJiwgU3BlY3VsYXRlZFR5cGUsIFBh
cmFtcy4uLik7CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gUGFyYW1zPgorICAgIE5v
ZGUqIHJlcGxhY2VUZXJtaW5hbChHcmFwaCYsIFNwZWN1bGF0ZWRUeXBlLCBQYXJhbXMuLi4pOwor
ICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKICAgICB2
b2lkIGRpZExpbmsoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1
LDcgKzQ1LDE1IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFBhcmFtcz4KIE5vZGUqIEJhc2ljQmxv
Y2s6OmFwcGVuZE5vblRlcm1pbmFsKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlwZSwg
UGFyYW1zLi4uIHBhcmFtcykKIHsKICAgICBOb2RlKiByZXN1bHQgPSBncmFwaC5hZGROb2RlKHR5
cGUsIHBhcmFtcy4uLik7Ci0gICAgaW5zZXJ0QmVmb3JlTGFzdChyZXN1bHQpOworICAgIGluc2Vy
dEJlZm9yZVRlcm1pbmFsKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUuLi4gUGFyYW1zPgorTm9kZSogQmFzaWNCbG9jazo6cmVwbGFjZVRlcm1pbmFs
KEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlwZSwgUGFyYW1zLi4uIHBhcmFtcykKK3sK
KyAgICBOb2RlKiByZXN1bHQgPSBncmFwaC5hZGROb2RlKHR5cGUsIHBhcmFtcy4uLik7CisgICAg
cmVwbGFjZVRlcm1pbmFsKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIC8qCisvKgogICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtNjIyLDQwICs2MjIsNDAgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0
dXJuIGRhdGE7CiAgICAgfQogICAgIAorICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZSogbm9kZSkK
KyAgICB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkp
CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIGFwcGVuZGVkICIsIG5vZGUsICIgIiwgR3Jh
cGg6Om9wTmFtZShub2RlLT5vcCgpKSwgIlxuIik7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmQobm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKyAgICAKICAgICBOb2Rl
KiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIg
PSAwLCBOb2RlKiBjaGlsZDMgPSAwKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9n
cmFwaC5hZGROb2RlKAogICAgICAgICAgICAgU3BlY05vbmUsIG9wLCBjdXJyZW50Tm9kZU9yaWdp
bigpLCBFZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwKICAgICAgICAgICAgIEVkZ2UoY2hpbGQz
KSk7Ci0gICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBh
ZGRUb0dyYXBoKHJlc3VsdCk7CiAgICAgfQogICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUg
b3AsIEVkZ2UgY2hpbGQxLCBFZGdlIGNoaWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdl
KCkpCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCiAgICAg
ICAgICAgICBTcGVjTm9uZSwgb3AsIGN1cnJlbnROb2RlT3JpZ2luKCksIGNoaWxkMSwgY2hpbGQy
LCBjaGlsZDMpOwotICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKLSAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZChyZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBy
ZXR1cm4gYWRkVG9HcmFwaChyZXN1bHQpOwogICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5v
ZGVUeXBlIG9wLCBPcEluZm8gaW5mbywgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0g
MCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3Jh
cGguYWRkTm9kZSgKICAgICAgICAgICAgIFNwZWNOb25lLCBvcCwgY3VycmVudE5vZGVPcmlnaW4o
KSwgaW5mbywgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksCiAgICAgICAgICAgICBFZGdlKGNo
aWxkMykpOwotICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKLSAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZChyZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1
cm4gYWRkVG9HcmFwaChyZXN1bHQpOwogICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVU
eXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZSogY2hpbGQxID0gMCwgTm9k
ZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIE5vZGUqIHJl
c3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKICAgICAgICAgICAgIFNwZWNOb25lLCBvcCwgY3VycmVu
dE5vZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLAogICAgICAgICAgICAgRWRnZShjaGlsZDEpLCBF
ZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7Ci0gICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwot
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKHJlc3VsdCk7CiAgICAgfQogICAgIAog
ICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgT3BJbmZv
IGluZm8xLCBPcEluZm8gaW5mbzIpCkBAIC02NjMsOCArNjYzLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgU3BlY05vbmUs
IE5vZGU6OlZhckFyZywgb3AsIGN1cnJlbnROb2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwKICAg
ICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZh
ckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncyk7Ci0gICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwot
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7CisgICAgICAgIGFkZFRvR3Jh
cGgocmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIG1fbnVtUGFzc2VkVmFyQXJncyA9IDA7CiAg
ICAgICAgIApAQCAtMTM1OSw3ICsxMzU4LDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGlu
ZUNhbGwoTm9kZSogY2EKICAgICAvLyBJZiB0aGVyZSB3YXMgYSByZXR1cm4sIGJ1dCBubyBlYXJs
eSByZXR1cm5zLCB0aGVuIHdlJ3JlIGRvbmUuIFdlIGFsbG93IHBhcnNpbmcgb2YKICAgICAvLyB0
aGUgY2FsbGVyIHRvIGNvbnRpbnVlIGluIHdoYXRldmVyIGJhc2ljIGJsb2NrIHdlJ3JlIGluIHJp
Z2h0IG5vdy4KICAgICBpZiAoIWlubGluZVN0YWNrRW50cnkubV9kaWRFYXJseVJldHVybiAmJiBp
bmxpbmVTdGFja0VudHJ5Lm1fZGlkUmV0dXJuKSB7Ci0gICAgICAgIEFTU0VSVChsYXN0QmxvY2st
PmlzRW1wdHkoKSB8fCAhbGFzdEJsb2NrLT5sYXN0KCktPmlzVGVybWluYWwoKSk7CisgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkpCisgICAgICAgICAgICBk
YXRhTG9nKCIgICAgQWxsb3dpbmcgcGFyc2luZyB0byBjb250aW51ZSBpbiBsYXN0IGlubGluZWQg
YmxvY2suXG4iKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChsYXN0QmxvY2stPmlzRW1wdHko
KSB8fCAhbGFzdEJsb2NrLT50ZXJtaW5hbCgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdl
IGNyZWF0ZWQgbmV3IGJsb2NrcyB0aGVuIHRoZSBsYXN0IGJsb2NrIG5lZWRzIGxpbmtpbmcsIGJ1
dCBpbiB0aGUKICAgICAgICAgLy8gY2FsbGVyLiBJdCBkb2Vzbid0IG5lZWQgdG8gYmUgbGlua2Vk
IHRvLCBidXQgaXQgbmVlZHMgb3V0Z29pbmcgbGlua3MuCkBAIC0xMzY3LDYgKzEzNjksOCBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhCiAgICAgICAgICAgICAvLyBG
b3IgZGVidWdnaW5nIHB1cnBvc2VzLCBzZXQgdGhlIGJ5dGVjb2RlQmVnaW4uIE5vdGUgdGhhdCB0
aGlzIGRvZXNuJ3QgbWF0dGVyCiAgICAgICAgICAgICAvLyBmb3IgcmVsZWFzZSBidWlsZHMgYmVj
YXVzZSB0aGlzIGJsb2NrIHdpbGwgbmV2ZXIgc2VydmUgYXMgYSBwb3RlbnRpYWwgdGFyZ2V0CiAg
ICAgICAgICAgICAvLyBpbiB0aGUgbGlua2VyJ3MgYmluYXJ5IHNlYXJjaC4KKyAgICAgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgICAgICBSZXB1cnBvc2luZyBsYXN0IGJsb2NrIGZyb20gIiwgbGFzdEJs
b2NrLT5ieXRlY29kZUJlZ2luLCAiIHRvICIsIG1fY3VycmVudEluZGV4LCAiXG4iKTsKICAgICAg
ICAgICAgIGxhc3RCbG9jay0+Ynl0ZWNvZGVCZWdpbiA9IG1fY3VycmVudEluZGV4OwogICAgICAg
ICAgICAgaWYgKGNhbGxlckxpbmthYmlsaXR5ID09IENhbGxlckRvZXNOb3JtYWxMaW5raW5nKSB7
CiAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCkBAIC0xMzc5LDggKzEzODMsMTEgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYQogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkp
CisgICAgICAgIGRhdGFMb2coIiAgICBDcmVhdGluZyBuZXcgYmxvY2sgYWZ0ZXIgaW5saW5pbmcu
XG4iKTsKKwogICAgIC8vIElmIHdlIGdldCB0byB0aGlzIHBvaW50IHRoZW4gYWxsIGJsb2NrcyBt
dXN0IGVuZCBpbiBzb21lIHNvcnQgb2YgdGVybWluYWxzLgotICAgIEFTU0VSVChsYXN0QmxvY2st
Pmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKKyAgICBBU1NFUlQobGFzdEJsb2NrLT50ZXJtaW5hbCgp
KTsKIAogICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IGJhc2ljIGJsb2NrIGZvciB0aGUgY29u
dGludWF0aW9uIGF0IHRoZSBjYWxsZXIuCiAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0g
YWRvcHRSZWYobmV3IEJhc2ljQmxvY2sobmV4dE9mZnNldCwgbV9udW1Bcmd1bWVudHMsIG1fbnVt
TG9jYWxzLCBQTmFOKSk7CkBAIC0xMzkxLDcgKzEzOTgsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjppbmxpbmVDYWxsKE5vZGUqIGNhCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2tUb0xpbmsgPSBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3Nb
aV0ubV9ibG9jazsKICAgICAgICAgQVNTRVJUKCFibG9ja1RvTGluay0+aXNMaW5rZWQpOwotICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2tUb0xpbmstPmxhc3QoKTsKKyAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrVG9MaW5rLT50ZXJtaW5hbCgpOwogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9
PSBKdW1wKTsKICAgICAgICAgQVNTRVJUKCFub2RlLT50YXJnZXRCbG9jaygpKTsKICAgICAgICAg
bm9kZS0+dGFyZ2V0QmxvY2soKSA9IGJsb2NrLmdldCgpOwpAQCAtMTgwMiw3ICsxODA5LDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgbV9jdXJyZW50QmxvY2sg
PSBjb250aW51YXRpb25CbG9jay5nZXQoKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBs
YW5kaW5nQmxvY2tzLnNpemUoKTsgaS0tOykKLSAgICAgICAgbGFuZGluZ0Jsb2Nrc1tpXS0+bGFz
dCgpLT50YXJnZXRCbG9jaygpID0gY29udGludWF0aW9uQmxvY2suZ2V0KCk7CisgICAgICAgIGxh
bmRpbmdCbG9ja3NbaV0tPnRlcm1pbmFsKCktPnRhcmdldEJsb2NrKCkgPSBjb250aW51YXRpb25C
bG9jay5nZXQoKTsKICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZE9mZnNldDsKICAgICAK
QEAgLTMxMjUsOSArMzEzMiw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKIAogICAgICAgICBjYXNlIG9wX2ptcDogewogICAgICAgICAgICAgaW50IHJlbGF0aXZl
T2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGFk
ZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKTsK
ICAgICAgICAgICAgIGlmIChyZWxhdGl2ZU9mZnNldCA8PSAwKQogICAgICAgICAgICAgICAgIGZs
dXNoRm9yVGVybWluYWwoKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1f
Y3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RF
KG9wX2ptcCk7CiAgICAgICAgIH0KIApAQCAtMzI0Nyw4ICszMjU0LDggQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlOjp3aXRoQnl0
ZWNvZGVJbmRleChtX2dyYXBoLmZyZWV6ZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0
YWJsZS5taW4gKyBpKSkpLCB0YXJnZXQpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZs
dXNoSWZUZXJtaW5hbChkYXRhKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcElu
Zm8oJmRhdGEpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKSk7CisgICAgICAgICAgICBmbHVzaElmVGVybWluYWwoZGF0YSk7CiAgICAgICAgICAg
ICBMQVNUX09QQ09ERShvcF9zd2l0Y2hfaW1tKTsKICAgICAgICAgfQogICAgICAgICAgICAgCkBA
IC0zMjY3LDggKzMyNzQsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoCiAgICAgICAgICAgICAgICAg
ICAgIFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVlOjpzaW5nbGVDaGFy
YWN0ZXJTdHJpbmcodGFibGUubWluICsgaSksIHRhcmdldCkpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZmx1c2hJZlRlcm1pbmFsKGRhdGEpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChT
d2l0Y2gsIE9wSW5mbygmZGF0YSksIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgIGZsdXNoSWZUZXJtaW5hbChkYXRhKTsK
ICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3N3aXRjaF9jaGFyKTsKICAgICAgICAgfQogCkBA
IC0zMjg3LDE0ICszMjk0LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZCgKICAgICAgICAgICAgICAg
ICAgICAgU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoTGF6eUpTVmFsdWU6Omtub3duU3Ry
aW5nSW1wbChpdGVyLT5rZXkuZ2V0KCkpLCB0YXJnZXQpKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGZsdXNoSWZUZXJtaW5hbChkYXRhKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dp
dGNoLCBPcEluZm8oJmRhdGEpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICBmbHVzaElmVGVybWluYWwoZGF0YSk7CiAg
ICAgICAgICAgICBMQVNUX09QQ09ERShvcF9zd2l0Y2hfc3RyaW5nKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2Ugb3BfcmV0OgotICAgICAgICAgICAgZmx1c2hGb3JSZXR1cm4oKTsKICAgICAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkgeworICAgICAgICAgICAgICAgIGZsdXNoRm9y
UmV0dXJuKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJu
VmFsdWUuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICBzZXREaXJlY3QobV9pbmxpbmVT
dGFja1RvcC0+bV9yZXR1cm5WYWx1ZSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSksIEltbWVkaWF0ZVNldFdpdGhGbHVzaCk7CiAgICAgICAgICAg
ICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9kaWRSZXR1cm4gPSB0cnVlOwpAQCAtMzMxOCwxMiAr
MzMyNSwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICAgICAgTEFTVF9PUENPREUob3BfcmV0KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUmV0dXJuLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICBmbHVzaEZvclJldHVybigpOwogICAg
ICAgICAgICAgTEFTVF9PUENPREUob3BfcmV0KTsKICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IG9wX2VuZDoKLSAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7CiAgICAgICAgICAgICBBU1NF
UlQoIWlubGluZUNhbGxGcmFtZSgpKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoUmV0dXJuLCBn
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSk7Cisg
ICAgICAgICAgICBmbHVzaEZvclJldHVybigpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bf
ZW5kKTsKIAogICAgICAgICBjYXNlIG9wX3Rocm93OgpAQCAtMzg1MCw3ICszODU4LDcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKEJhc2ljQmxvYwogewogICAgIEFTU0VSVCghYmxv
Y2stPmlzTGlua2VkKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0VtcHR5KCkpOwotICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+bGFzdCgpOworICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dGVybWluYWwo
KTsKICAgICBBU1NFUlQobm9kZS0+aXNUZXJtaW5hbCgpKTsKICAgICAKICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKQEAgLTQxMzAsMTAgKzQxMzgsMTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VDb2RlQmxvY2soKQogICAgICAgICAgICAgLy8gYXJlIGF0IHRoZSBlbmQgb2YgYW4gaW5s
aW5lIGZ1bmN0aW9uLCBvciB3ZSByZWFsaXplZCB0aGF0IHdlCiAgICAgICAgICAgICAvLyBzaG91
bGQgc3RvcCBwYXJzaW5nIGJlY2F1c2UgdGhlcmUgd2FzIGEgcmV0dXJuIGluIHRoZSBmaXJzdAog
ICAgICAgICAgICAgLy8gYmFzaWMgYmxvY2suCi0gICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50
QmxvY2stPmlzRW1wdHkoKSB8fCBtX2N1cnJlbnRCbG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkg
fHwgKG1fY3VycmVudEluZGV4ID09IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpICYm
IGlubGluZUNhbGxGcmFtZSgpKSB8fCAhc2hvdWxkQ29udGludWVQYXJzaW5nKTsKKyAgICAgICAg
ICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jay0+aXNFbXB0eSgpIHx8IG1fY3VycmVudEJsb2NrLT50
ZXJtaW5hbCgpIHx8IChtX2N1cnJlbnRJbmRleCA9PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LnNpemUoKSAmJiBpbmxpbmVDYWxsRnJhbWUoKSkgfHwgIXNob3VsZENvbnRpbnVlUGFyc2luZyk7
CiAKLSAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWVQYXJzaW5nKQorICAgICAgICAgICAg
aWYgKCFzaG91bGRDb250aW51ZVBhcnNpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQorICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJEb25lIHBhcnNpbmcgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jayA9IDA7CiAgICAgICAgIH0gd2hpbGUgKG1fY3VycmVudEluZGV4IDwgbGltaXQpOwpA
QCAtNDE0MSw2ICs0MTUyLDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2so
KQogCiAgICAgLy8gU2hvdWxkIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBpbnN0cnVjdGlv
bnMuCiAgICAgQVNTRVJUKG1fY3VycmVudEluZGV4ID09IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFy
c2luZygpKQorICAgICAgICBkYXRhTG9nKCJEb25lIHBhcnNpbmcgIiwgKmNvZGVCbG9jaywgIiAo
ZmVsbCBvZmYgZW5kKVxuIik7CiB9CiAKIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlm
aWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGJsb2NrLT5sYXN0KCktPm9wKCkpIHsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGJsb2NrLT50ZXJtaW5hbCgpLT5vcCgpKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBKdW1wOiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NvciB3
aXRoIG9uZSBwcmVkZWNlc3NvciAtPiBtZXJnZS4KICAgICAgICAgICAgICAgICAgICAgaWYgKGJs
b2NrLT5zdWNjZXNzb3IoMCktPnByZWRlY2Vzc29ycy5zaXplKCkgPT0gMSkgewpAQCAtOTksMTcg
Kzk5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmVt
ZUxvZ2dpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChi
bG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGVPcmlnaW4gYm91bmRhcnlOb2RlT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5sYXN0KCktPmNvbnZlcnRUb1BoYW50
b20oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmxhc3QoKS0+
cmVmQ291bnQoKSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHRlcm1p
bmFsID0gYmxvY2stPnRlcm1pbmFsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHRlcm1pbmFsLT5pc1Rlcm1pbmFsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGVPcmlnaW4gYm91bmRhcnlOb2RlT3JpZ2luID0gdGVybWluYWwtPm9yaWdpbjsKKwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpldHRpc29uQmxvY2soYmxvY2ssIGpldHRpc29uZWRC
bG9jaywgYm91bmRhcnlOb2RlT3JpZ2luKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAorCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmxvY2stPnJlcGxhY2VUZXJtaW5hbCgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJvdW5kYXJ5Tm9kZU9y
aWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRhcmdldEJsb2Nr
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGJsb2NrLT50ZXJtaW5hbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaW5u
ZXJDaGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTI5LDcgKzEzMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgU3dpdGNoOiB7Ci0gICAg
ICAgICAgICAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSBibG9jay0+bGFzdCgpLT5zd2l0Y2hE
YXRhKCk7CisgICAgICAgICAgICAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSBibG9jay0+dGVy
bWluYWwoKS0+c3dpdGNoRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgLy8gUHJ1bmUgb3V0IGNhc2VzIHRoYXQgZW5kIHVwIGp1bXBpbmcgdG8gZGVmYXVs
dC4KICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEtPmNh
c2VzLnNpemUoKTsgKytpKSB7CkBAIC0xNDksOCArMTUxLDggQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAv
LyBTd2l0Y2ggb24gY29uc3RhbnQgLT4gamV0dGlzb24gYWxsIG90aGVyIHRhcmdldHMgYW5kIG1l
cmdlLgotICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS0+Y2hpbGQxKCktPmhh
c0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiB2YWx1
ZSA9IGJsb2NrLT5sYXN0KCktPmNoaWxkMSgpLT5jb25zdGFudCgpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoYmxvY2stPnRlcm1pbmFsKCktPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogdmFsdWUgPSBibG9jay0+dGVybWlu
YWwoKS0+Y2hpbGQxKCktPmNvbnN0YW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBUcmlT
dGF0ZSBmb3VuZCA9IEZhbHNlVHJpU3RhdGU7CiAgICAgICAgICAgICAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiB0YXJnZXRCbG9jayA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBkYXRhLT5jYXNlcy5zaXplKCk7IGZvdW5kID09IEZhbHNlVHJpU3RhdGUgJiYg
aS0tOykgewpAQCAtMTgzLDExICsxODUsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZU9yaWdpbiBib3VuZGFyeU5vZGVPcmlnaW4gPSBi
bG9jay0+bGFzdCgpLT5vcmlnaW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2st
Pmxhc3QoKS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIHRlcm1pbmFsID0gYmxvY2stPnRlcm1pbmFsKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZU9yaWdpbiBib3VuZGFyeU5vZGVPcmlnaW4gPSB0ZXJtaW5hbC0+b3JpZ2lu
OworCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gamV0dGlz
b25lZEJsb2Nrcy5zaXplKCk7IGktLTspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpldHRpc29uQmxvY2soYmxvY2ssIGpldHRpc29uZWRCbG9ja3NbaV0sIGJvdW5kYXJ5Tm9kZU9y
aWdpbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5vZGUoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmxvY2stPnJlcGxhY2VUZXJtaW5hbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJvdW5kYXJ5Tm9kZU9yaWdpbiwgT3BJbmZvKHRhcmdl
dEJsb2NrKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpbm5lckNoYW5nZWQgPSBvdXRlckNoYW5nZWQgPSB0cnVlOwpAQCAtMjUzLDEzICsyNTcs
MTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKICAgICAgICAg
ICAgIG1lcmdlQmxvY2tzKGJsb2NrLCB0YXJnZXRCbG9jaywgbm9CbG9ja3MoKSk7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBOb2RlKiBicmFuY2ggPSBibG9jay0+bGFzdCgpOwotICAg
ICAgICAgICAgQVNTRVJUKGJyYW5jaC0+aXNUZXJtaW5hbCgpKTsKKyAgICAgICAgICAgIE5vZGUq
IGJyYW5jaCA9IGJsb2NrLT50ZXJtaW5hbCgpOwogICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+
b3AoKSA9PSBCcmFuY2ggfHwgYnJhbmNoLT5vcCgpID09IFN3aXRjaCk7Ci0gICAgICAgICAgICBi
cmFuY2gtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgICAgIEFTU0VSVChicmFuY2gtPnJl
ZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJsb2NrLT5hcHBlbmRO
b2RlKAorCisgICAgICAgICAgICBibG9jay0+cmVwbGFjZVRlcm1pbmFsKAogICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBicmFuY2gtPm9yaWdpbiwgT3BJbmZvKHRhcmdl
dEJsb2NrKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTgsMTAgKzMxOSwxMSBAQCBwcml2YXRl
OgogICAgICAgICAKICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZXJtaW5hbCBvZiBmaXJzdEJsb2Nr
IHNpbmNlIHdlIGRvbid0IG5lZWQgaXQgYW55bW9yZS4gV2VsbCwgd2UgZG9uJ3QKICAgICAgICAg
Ly8gcmVhbGx5IHJlbW92ZSBpdDsgd2UgYWN0dWFsbHkgdHVybiBpdCBpbnRvIGEgUGhhbnRvbS4K
LSAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKLSAgICAg
ICAgTm9kZU9yaWdpbiBib3VuZGFyeU5vZGVPcmlnaW4gPSBmaXJzdEJsb2NrLT5sYXN0KCktPm9y
aWdpbjsKLSAgICAgICAgZmlyc3RCbG9jay0+bGFzdCgpLT5jb252ZXJ0VG9QaGFudG9tKCk7Ci0g
ICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT5sYXN0KCktPnJlZkNvdW50KCkgPT0gMSk7CisgICAg
ICAgIE5vZGUqIHRlcm1pbmFsID0gZmlyc3RCbG9jay0+dGVybWluYWwoKTsKKyAgICAgICAgQVNT
RVJUKHRlcm1pbmFsLT5pc1Rlcm1pbmFsKCkpOworICAgICAgICBOb2RlT3JpZ2luIGJvdW5kYXJ5
Tm9kZU9yaWdpbiA9IHRlcm1pbmFsLT5vcmlnaW47CisgICAgICAgIHRlcm1pbmFsLT5jb252ZXJ0
VG9QaGFudG9tKCk7CisgICAgICAgIEFTU0VSVCh0ZXJtaW5hbC0+cmVmQ291bnQoKSA9PSAxKTsK
ICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGpldHRpc29uZWRCbG9ja3Muc2l6
ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sgPSBq
ZXR0aXNvbmVkQmxvY2tzW2ldOwpAQCAtMzQyLDcgKzM0NCw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgZmlyc3RCbG9jay0+YXBwZW5kKHNlY29uZEJsb2NrLT5hdChpKSk7CiAgICAgICAgIAot
ICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOworICAgICAg
ICBBU1NFUlQoZmlyc3RCbG9jay0+dGVybWluYWwoKS0+aXNUZXJtaW5hbCgpKTsKICAgICAgICAg
CiAgICAgICAgIC8vIEZpeCB0aGUgcHJlZGVjZXNzb3JzIG9mIG15IG5ldyBzdWNjZXNzb3JzLiBU
aGlzIGlzIHRyaWNreSwgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHJlc2V0CiAgICAgICAgIC8vIGFs
bCBwcmVkZWNlc3NvcnMgYW55d2F5IGR1ZSB0byByZWFjaGFiaWxpdHkgYW5hbHlzaXMuIEJ1dCB3
ZSBuZWVkIHRvIGZpeCB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BT
UmV0aHJlYWRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYzLDYgKzM2MywxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1f
YXZhaWxhYmxlRm9yT1NSLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG5vZGUtPmNo
aWxkMSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlRm9yT1NS
Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw2ICsyNzQsMjkgQEAgdm9p
ZCBzdGFydENyYXNoaW5nKCk7CiAKIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNDcmFzaGluZygp
OwogCitzdHJ1Y3QgTm9kZUFuZEluZGV4IHsKKyAgICBOb2RlQW5kSW5kZXgoKQorICAgICAgICA6
IG5vZGUobnVsbHB0cikKKyAgICAgICAgLCBpbmRleChVSU5UX01BWCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIE5vZGVBbmRJbmRleChOb2RlKiBub2RlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAg
ICAgOiBub2RlKG5vZGUpCisgICAgICAgICwgaW5kZXgoaW5kZXgpCisgICAgeworICAgICAgICBB
U1NFUlQoIW5vZGUgPT0gKGluZGV4ID09IFVJTlRfTUFYKSk7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbm9kZTsKKyAgICB9
CisgICAgCisgICAgTm9kZSogbm9kZTsKKyAgICB1bnNpZ25lZCBpbmRleDsKK307CisKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0OCwxOCArMTQ4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYg
d2UgaGFkIGp1c3Qga2lsbGVkIGl0LgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+b3AoKSA9PSBQaGFudG9tIHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IENoZWNrKSB7CiAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFpvbWJpZUhpbnQp
OworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgxKTsKICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogewot
ICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBhc3N1bWUgdGhhdCBEQ0UgcnVucyBvbmx5
IG9uY2UuCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAogICAgICAg
ICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9k
ZUhhc1ZhckFyZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElk
eCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBu
b2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxODI4NTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMiw4ICsxMTIsNiBAQCBWZWN0b3I8RGlzYXNzZW1ibGVyOjpEdW1wZWRPcD4gRGlz
YXNzZW1iCiAgICAgICAgIGFwcGVuZChyZXN1bHQsIG91dCwgcHJldmlvdXNPcmlnaW4pOwogICAg
ICAgICBOb2RlKiBsYXN0Tm9kZUZvckRpc2Fzc2VtYmx5ID0gYmxvY2stPmF0KDApOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKCFibG9jay0+YXQoaSktPndpbGxIYXZlQ29kZUdlbk9yT1NSKCkgJiYgIU9wdGlvbnM6
OnNob3dBbGxERkdOb2RlcygpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGN1cnJlbnRMYWJlbDsKICAgICAgICAgICAgIEhhc2hN
YXA8Tm9kZSosIE1hY3JvQXNzZW1ibGVyOjpMYWJlbD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2xhYmVs
Rm9yTm9kZS5maW5kKGJsb2NrLT5hdChpKSk7CiAgICAgICAgICAgICBpZiAoaXRlciAhPSBtX2xh
YmVsRm9yTm9kZS5lbmQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgYWRkUGhhbnRvbXNJZk5lY2Vzc2FyeSgpOwogICAgICAgICAg
ICAgZml4dXBOb2RlKG1fY3VycmVudE5vZGUpOwogICAgICAgICB9Ci0gICAgICAgIGNsZWFyUGhh
bnRvbXNBdEVuZCgpOworICAgICAgICBhZGRQaGFudG9tc0lmTmVjZXNzYXJ5KCk7CiAgICAgICAg
IG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgIH0KICAgICAKQEAgLTcyNSw5ICs3
MjUsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkKICAgICAgICAgICAgICAgICBmaXhFZGdlPE9i
amVjdE9yT3RoZXJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQganVzdCBiZSBhYmxlIHRvIGRvIHNob3VsZFNwZWN1bGF0ZUludDMyT3JCb29sZWFu
KCkgYW5kCi0gICAgICAgICAgICAvLyBzaG91bGRTcGVjdWxhdGVOdW1iZXJPckJvb2xlYW4oKSBo
ZXJlLCBidXQgd2UgY2FuJ3QgYmVjYXVzZSB0aGVuIHRoZSBCcmFuY2gKLSAgICAgICAgICAgIC8v
IGNvdWxkIHNwZWN1bGF0ZSBvbiB0aGUgcmVzdWx0IG9mIGEgbm9uLXNwZWN1bGF0aXZlIGNvbnZl
cnNpb24gbm9kZS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjY3NzgKKyAgICAgICAgICAgIC8vIHNob3VsZFNwZWN1bGF0ZU51bWJlck9y
Qm9vbGVhbigpIGhlcmUgbm93IHRoYXQKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY3NzggaXMgZml4ZWQuCiAgICAgICAgICAgICBlbHNl
IGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSkKICAgICAgICAgICAg
ICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBlbHNl
IGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCkBAIC0xOTk3LDcg
KzE5OTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgdHJ5VG9SZWxheFJlcHJlc2VudGF0aW9u
KG1fY3VycmVudE5vZGUpOwogICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9n
cmFwaCwgbV9jdXJyZW50Tm9kZSwgaW5qZWN0VHlwZUNvbnZlcnNpb25zRm9yRWRnZSk7CiAgICAg
ICAgIH0KLSAgICAgICAgY2xlYXJQaGFudG9tc0F0RW5kKCk7CisgICAgICAgIGFkZFBoYW50b21z
SWZOZWNlc3NhcnkoKTsKICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAg
ICAgfQogICAgIApAQCAtMjE2MiwyMSArMjE2MSw2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fcmVx
dWlyZWRQaGFudG9tcy5yZXNpemUoMCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2xlYXJQaGFu
dG9tc0F0RW5kKCkKLSAgICB7Ci0gICAgICAgIC8vIFRlcm1pbmFsIG5vZGVzIGRvbid0IG5lZWQg
cG9zdC1waGFudG9tcywgYW5kIGluc2VydGluZyB0aGVtIHdvdWxkIHZpb2xhdGUKLSAgICAgICAg
Ly8gdGhlIGN1cnJlbnQgcmVxdWlyZW1lbnQgdGhhdCBhIHRlcm1pbmFsIGlzIHRoZSBsYXN0IHRo
aW5nIGluIGEgYmxvY2suIFdlCi0gICAgICAgIC8vIHNob3VsZCBldmVudHVhbGx5IGNoYW5nZSB0
aGF0IHJlcXVpcmVtZW50LiBDdXJyZW50bHkgd2UgZ2V0IGFyb3VuZCB0aGlzIGJ5Ci0gICAgICAg
IC8vIGVuc3VyaW5nIHRoYXQgYWxsIHRlcm1pbmFscyBhY2NlcHQganVzdCBvbmUgaW5wdXQsIGFu
ZCBpZiB0aGF0IGlucHV0IGlzIGEKLSAgICAgICAgLy8gY29udmVyc2lvbiBub2RlIHRoZW4gbm8g
ZnVydGhlciBzcGVjdWxhdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQuIFNlZQotICAgICAgICAvLyBy
ZWZlcmVuY2VzIHRvIHRoZSBidWcsIGJlbG93LCBmb3IgcGxhY2VzIHdoZXJlIHdlIGhhdmUgdG8g
aGF2ZSBoYWNrcyB0bwotICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlzLgotICAgICAgICAvLyBG
SVhNRTogR2V0IHJpZCBvZiB0aGlzIGJ5IGFsbG93aW5nIFBoYW50b21zIGFmdGVyIHRlcm1pbmFs
cy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
Njc3OAotICAgICAgICAKLSAgICAgICAgbV9yZXF1aXJlZFBoYW50b21zLnJlc2l6ZSgwKTsKLSAg
ICB9Ci0gICAgCiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICB1bnNpZ25lZCBtX2luZGV4
SW5CbG9jazsKICAgICBOb2RlKiBtX2N1cnJlbnROb2RlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OCwxMyArNDgsMTMgQEAgdm9pZCBmb3JBbGxMaXZlTm9kZXNBdFRhaWwoR3JhcGgmIGdyYXBoLAog
ICAgICAgICAgICAgZnVuY3Rvcihub2RlKTsKICAgICB9CiAgICAgCi0gICAgREZHX0FTU0VSVChn
cmFwaCwgYmxvY2stPmxhc3QoKSwgYmxvY2stPmxhc3QoKS0+b3JpZ2luLmZvckV4aXQuaXNTZXQo
KSk7CisgICAgREZHX0FTU0VSVChncmFwaCwgYmxvY2stPnRlcm1pbmFsKCksIGJsb2NrLT50ZXJt
aW5hbCgpLT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpKTsKICAgICAKICAgICBBdmFpbGFiaWxpdHlN
YXAmIGF2YWlsYWJpbGl0eU1hcCA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbDsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHMuc2l6ZSgpOyBpLS07
KSB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2Nh
bHMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaSk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWdy
YXBoLmlzTGl2ZUluQnl0ZWNvZGUocmVnLCBibG9jay0+bGFzdCgpLT5vcmlnaW4uZm9yRXhpdCkp
CisgICAgICAgIGlmICghZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGJsb2NrLT50ZXJtaW5h
bCgpLT5vcmlnaW4uZm9yRXhpdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjUsNiArMzY1LDE1IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QK
ICAgICBvdXQucHJpbnQoIlxuIik7CiB9CiAKK2Jvb2wgR3JhcGg6OnRlcm1pbmFsc0FyZVZhbGlk
KCkKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgeworICAgICAgICBpZiAoIWJsb2NrLT50ZXJtaW5hbCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBHcmFwaDo6ZHVtcEJs
b2NrSGVhZGVyKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmFzaWNCbG9j
ayogYmxvY2ssIFBoaU5vZGVEdW1wTW9kZSBwaGlOb2RlRHVtcE1vZGUsIER1bXBDb250ZXh0KiBj
b250ZXh0KQogewogICAgIG91dC5wcmludChwcmVmaXgsICJCbG9jayAiLCAqYmxvY2ssICIgKCIs
IGluQ29udGV4dChibG9jay0+YXQoMCktPm9yaWdpbi5zZW1hbnRpYywgY29udGV4dCksICIpOiIs
IGJsb2NrLT5pc1JlYWNoYWJsZSA/ICIiIDogIiAoc2tpcHBlZCkiLCBibG9jay0+aXNPU1JUYXJn
ZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIiwgIlxuIik7CkBAIC0zNzUsMTMgKzM4NCwxNiBAQCB2
b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgICAgIG91dC5wcmlu
dCgiICIsICpibG9jay0+cHJlZGVjZXNzb3JzW2ldKTsKICAgICBvdXQucHJpbnQoIlxuIik7CiAg
ICAgb3V0LnByaW50KHByZWZpeCwgIiAgU3VjY2Vzc29yczoiKTsKLSAgICBmb3IgKEJhc2ljQmxv
Y2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKLSAgICAgICAgb3V0LnByaW50
KCIgIiwgKnN1Y2Nlc3Nvcik7Ci0gICAgICAgIGlmIChtX3ByZVBvc3ROdW1iZXJpbmcuaXNWYWxp
ZCgpKQotICAgICAgICAgICAgb3V0LnByaW50KCIgKCIsIG1fcHJlUG9zdE51bWJlcmluZy5lZGdl
S2luZChibG9jaywgc3VjY2Vzc29yKSwgIikiKTsKLSAgICB9CisgICAgaWYgKGJsb2NrLT50ZXJt
aW5hbCgpKSB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1
Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgb3V0LnByaW50KCIgIiwgKnN1Y2Nlc3Nvcik7Cisg
ICAgICAgICAgICBpZiAobV9wcmVQb3N0TnVtYmVyaW5nLmlzVmFsaWQoKSkKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoIiAoIiwgbV9wcmVQb3N0TnVtYmVyaW5nLmVkZ2VLaW5kKGJsb2NrLCBz
dWNjZXNzb3IpLCAiKSIpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIG91dC5wcmlu
dCgiIDxpbnZhbGlkPiIpOwogICAgIG91dC5wcmludCgiXG4iKTsKLSAgICBpZiAobV9kb21pbmF0
b3JzLmlzVmFsaWQoKSkgeworICAgIGlmIChtX2RvbWluYXRvcnMuaXNWYWxpZCgpICYmIHRlcm1p
bmFsc0FyZVZhbGlkKCkpIHsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVk
IGJ5OiAiLCBtX2RvbWluYXRvcnMuZG9taW5hdG9yc09mKGJsb2NrKSwgIlxuIik7CiAgICAgICAg
IG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRlczogIiwgbV9kb21pbmF0b3JzLmJsb2Nrc0Rv
bWluYXRlZEJ5KGJsb2NrKSwgIlxuIik7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERv
bWluYW5jZSBGcm9udGllcjogIiwgbV9kb21pbmF0b3JzLmRvbWluYW5jZUZyb250aWVyT2YoYmxv
Y2spLCAiXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlz
aW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29y
a2luZyBjb3B5KQpAQCAtMTk2LDYgKzE5Niw5IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBDb2Rl
QmxvY2sgaXMgb3B0aW9uYWwsIGJ1dCBtYXkgYWxsb3cgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0
byBiZSBkdW1wZWQgKGUuZy4gSWRlbnRpZmllciBuYW1lcykuCiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSwgRHVtcENvbnRleHQqID0gMCk7CisgICAgCisgICAg
Ym9vbCB0ZXJtaW5hbHNBcmVWYWxpZCgpOworICAgIAogICAgIGVudW0gUGhpTm9kZUR1bXBNb2Rl
IHsgRHVtcExpdmVQaGlzT25seSwgRHVtcEFsbFBoaXMgfTsKICAgICB2b2lkIGR1bXBCbG9ja0hl
YWRlcihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmFzaWNCbG9jayosIFBoaU5v
ZGVEdW1wTW9kZSwgRHVtcENvbnRleHQqKTsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBF
ZGdlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYxLDcgKzM2MSw3IEBAIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2lj
QmwKIAogaW5saW5lIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3Jz
KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCiB7Ci0gICAgTm9kZSogdGVybWluYWwgPSBiYXNpY0Js
b2NrLT5sYXN0KCk7CisgICAgTm9kZSogdGVybWluYWwgPSBiYXNpY0Jsb2NrLT50ZXJtaW5hbCgp
OwogICAgIAogICAgIEFTU0VSVCh0ZXJtaW5hbC0+aXNUZXJtaW5hbCgpKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAJKHJldmlzaW9uIDE4
Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMjgsNyArMTI4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IHByZUhlYWRlciA9IHByZWRlY2Vzc29yOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIHByZUhlYWRlci0+bGFzdCgpLCBwcmVIZWFk
ZXItPmxhc3QoKS0+b3AoKSA9PSBKdW1wKTsKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgcHJlSGVhZGVyLT50ZXJtaW5hbCgpLCBwcmVIZWFkZXItPnRlcm1pbmFsKCktPm9wKCkgPT0g
SnVtcCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGRhdGEucHJlSGVhZGVyID0gcHJlSGVh
ZGVyOwogICAgICAgICB9CkBAIC0yMzcsMTAgKzIzNywxMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICJcbiIpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBkYXRhLnByZUhlYWRl
ci0+aW5zZXJ0QmVmb3JlTGFzdChub2RlKTsKKyAgICAgICAgZGF0YS5wcmVIZWFkZXItPmluc2Vy
dEJlZm9yZVRlcm1pbmFsKG5vZGUpOwogICAgICAgICBub2RlLT5vd25lciA9IGRhdGEucHJlSGVh
ZGVyOwogICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbmFsT3JpZ2luID0gbm9kZS0+b3JpZ2luOwot
ICAgICAgICBub2RlLT5vcmlnaW4uZm9yRXhpdCA9IGRhdGEucHJlSGVhZGVyLT5sYXN0KCktPm9y
aWdpbi5mb3JFeGl0OworICAgICAgICBub2RlLT5vcmlnaW4uZm9yRXhpdCA9IGRhdGEucHJlSGVh
ZGVyLT50ZXJtaW5hbCgpLT5vcmlnaW4uZm9yRXhpdDsKICAgICAgICAgCiAgICAgICAgIC8vIE1v
ZGlmeSB0aGUgc3RhdGVzIGF0IHRoZSBlbmQgb2YgdGhlIHByZUhlYWRlciBvZiB0aGUgbG9vcCB3
ZSBob2lzdGVkIHRvLAogICAgICAgICAvLyBhbmQgYWxsIHByZS1oZWFkZXJzIGluc2lkZSB0aGUg
bG9vcC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlz
aW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgbWFjcm8oR2V0U3RhY2ssIE5vZGVSZXN1bHRKUykgXAogICAgIFwKICAgICBt
YWNybyhNb3ZIaW50LCAwKSBcCi0gICAgbWFjcm8oWm9tYmllSGludCwgMCkgXAorICAgIG1hY3Jv
KFpvbWJpZUhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQaGFudG9tLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oSGFyZFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUp
IC8qIExpa2UgUGhhbnRvbSwgYnV0IHdlIG5ldmVyIHJlbW92ZSBhbnkgb2YgaXRzIGNoaWxkcmVu
LiAqLyBcCiAgICAgbWFjcm8oQ2hlY2ssIE5vZGVNdXN0R2VuZXJhdGUpIC8qIFVzZWQgaWYgd2Ug
d2FudCBqdXN0IGEgdHlwZSBjaGVjayBidXQgbm90IGxpdmVuZXNzLiBOb24tY2hlY2tpbmcgdXNl
cyB3aWxsIGJlIHJlbW92ZWQuICovXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCShy
ZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTIsNyArMzUyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYW5kbGVkIHRoZSBj
YXNlIHdoZXJlIHRoZSBwcmVkZWNlc3NvciBoYXMgbXVsdGlwbGUgc3VjY2Vzc29ycy4KICAgICAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBibG9jaywgYmxvY2stPm51bVN1Y2Nl
c3NvcnMoKSA9PSAxKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGNyZWF0ZU1hdGVyaWFsaXplKGFsbG9jYXRpb24sIGJsb2NrLT5sYXN0KCkpOworICAgICAgICAg
ICAgICAgICAgICBjcmVhdGVNYXRlcmlhbGl6ZShhbGxvY2F0aW9uLCBibG9jay0+dGVybWluYWwo
KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00NjEs
OCArNDYxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBi
bG9jay0+c2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIE5vZGUqIHVwc2lsb25XaGVyZSA9IGJsb2Nr
LT5sYXN0KCk7CisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxv
Y2stPmZpbmRUZXJtaW5hbCgpLmluZGV4OworICAgICAgICAgICAgTm9kZSogdXBzaWxvbldoZXJl
ID0gYmxvY2stPnRlcm1pbmFsKCk7CiAgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25Pcmln
aW4gPSB1cHNpbG9uV2hlcmUtPm9yaWdpbjsKICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
c3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CiAgICAgICAgICAgICAgICAg
Zm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9y
QmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CkBAIC03MDgsOCArNzA4LDggQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gR290dGEgZHJvcCBzb21l
IFVwc2lsb25zLgotICAgICAgICAgICAgc2l6ZV90IHVwc2lsb25JbnNlcnRpb25Qb2ludCA9IGJs
b2NrLT5zaXplKCkgLSAxOwotICAgICAgICAgICAgTm9kZU9yaWdpbiB1cHNpbG9uT3JpZ2luID0g
YmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAgICAgc2l6ZV90IHVwc2lsb25JbnNlcnRp
b25Qb2ludCA9IGJsb2NrLT5maW5kVGVybWluYWwoKS5pbmRleDsKKyAgICAgICAgICAgIE5vZGVP
cmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT50ZXJtaW5hbCgpLT5vcmlnaW47CiAgICAgICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMo
KSkgewogICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBt
X3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2UuY3Bw
CShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50
b21SZW1vdmFsUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCw5IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbGFzdE5vZGUgPSBudWxscHRyOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoc291cmNlSW5kZXggPiAxKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBsYXN0Tm9kZSA9IGJsb2NrLT5hdChzb3VyY2VJbmRleCAtIDIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgbmVl
ZCB0byBzcGVjaWFsaXplIGZvciBQaGFudG9tLiBsYXN0Tm9kZSBjb3VsZCBiZSBhbnkgbm9kZQor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBpc24ndCBzdWJqZWN0IHRvIERDRS4gQnV0
IHdlIGtlZXAgaXQgc2ltcGxlIGZvciBub3cuCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bGFzdE5vZGUtPm9wKCkgIT0gUGhhbnRvbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IGxhc3ROb2RlLT5vcmlnaW4uZm9yRXhpdCAhPSBub2RlLT5vcmlnaW4uZm9yRXhpdCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsYXN0Tm9kZSA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNw
cAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRT
dGFja1NpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgp
IC0gMTsKLSAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0
KCktPm9yaWdpbjsKKyAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBi
bG9jay0+ZmluZFRlcm1pbmFsKCkuaW5kZXg7CisgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2ls
b25PcmlnaW4gPSBibG9jay0+dGVybWluYWwoKS0+b3JpZ2luOwogICAgICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAgICAg
ICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRv
ci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CiAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODI4
NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNSw4ICszMzUsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAvLyBzZWVtcyBkYW5nZXJvdXMgYmVjYXVzZSB0aGUgVXBzaWxvbiB3aWxsIGhhdmUgYSBjaGVj
a2luZyBVc2VLaW5kLiBCdXQsIHdlIHdpbGwgbm90CiAgICAgICAgICAgICAvLyBhY3R1YWxseSBi
ZSBwZXJmb3JtaW5nIHRoZSBjaGVjayBhdCB0aGUgcG9pbnQgb2YgdGhlIFVwc2lsb247IHRoZSBj
aGVjayB3aWxsCiAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmUgYmVlbiBwZXJmb3JtZWQgYXQg
dGhlIHBvaW50IHdoZXJlIHRoZSBvcmlnaW5hbCBTZXRMb2NhbCB3YXMuCi0gICAgICAgICAgICBz
aXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7Ci0gICAgICAg
ICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47Cisg
ICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPmZpbmRUZXJt
aW5hbCgpLmluZGV4OworICAgICAgICAgICAgTm9kZU9yaWdpbiB1cHNpbG9uT3JpZ2luID0gYmxv
Y2stPnRlcm1pbmFsKCktPm9yaWdpbjsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vz
c29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgewog
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrID0gYmxvY2stPnN1Y2Nl
c3NvcihzdWNjZXNzb3JJbmRleCk7CiAgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9y
OjpEZWYqIHBoaURlZiA6IG1fY2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2sp
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
MzIsMTEgKzE4MzIsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgY2FzZSBa
b21iaWVIaW50OiB7CisgICAgY2FzZSBNb3ZIaW50OiB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBab21iaWVIaW50OgorICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxp
bmtlZExvY2FsKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CisgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICBzd2l0Y2ggKG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4
Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MjEsMTEgKzE5MjEsMTUgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAotICAgIGNhc2UgTW92SGludDoKLSAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICBjYXNlIE1v
dkhpbnQ6IHsKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJVbmV4cGVj
dGVkIG5vZGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIFpv
bWJpZUhpbnQ6IHsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5r
ZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOworICAgICAgICBi
cmVhazsKKyAgICB9CiAKICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgIHN3aXRjaCAobm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCkpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAx
ODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ0MiwxMSArMTQ0Miw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgICAgICAgICBjb21waWxlTW92SGludCht
X2N1cnJlbnROb2RlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICAgICAgICAgIHJlY29yZFNl
dExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCks
IERhdGFGb3JtYXREZWFkKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAoYmVsb25nc0luTWlu
aWZpZWRHcmFwaChtX2N1cnJlbnROb2RlLT5vcCgpKSkKICAgICAgICAgICAgICAgICAgICAgbV9t
aW5pZmllZEdyYXBoLT5hcHBlbmQoTWluaWZpZWROb2RlOjpmcm9tTm9kZShtX2N1cnJlbnROb2Rl
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTY4MSw3ICs2ODEsNyBAQCBwdWJsaWM6
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdE5vZGUgaXMgYSBicmFu
Y2ggb24gdGhpcyBub2RlLgotICAgICAgICBOb2RlKiBsYXN0Tm9kZSA9IG1fYmxvY2stPmxhc3Qo
KTsKKyAgICAgICAgTm9kZSogbGFzdE5vZGUgPSBtX2Jsb2NrLT50ZXJtaW5hbCgpOwogICAgICAg
ICByZXR1cm4gbGFzdE5vZGUtPm9wKCkgPT0gQnJhbmNoICYmIGxhc3ROb2RlLT5jaGlsZDEoKSA9
PSBtX2N1cnJlbnROb2RlID8gbV9ibG9jay0+c2l6ZSgpIC0gMSA6IFVJTlRfTUFYOwogICAgIH0K
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhdGljRXhlY3V0aW9u
Q291bnRFc3RpbWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsMTYgKzYzLDE2
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoYmxvY2stPmxhc3QoKS0+
b3AoKSkgeworICAgICAgICAgICAgc3dpdGNoIChibG9jay0+dGVybWluYWwoKS0+b3AoKSkgewog
ICAgICAgICAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgICAgICAgICBCcmFuY2hEYXRhKiBk
YXRhID0gYmxvY2stPmxhc3QoKS0+YnJhbmNoRGF0YSgpOworICAgICAgICAgICAgICAgIEJyYW5j
aERhdGEqIGRhdGEgPSBibG9jay0+dGVybWluYWwoKS0+YnJhbmNoRGF0YSgpOwogICAgICAgICAg
ICAgICAgIGFwcGx5Q291bnRzKGRhdGEtPnRha2VuKTsKICAgICAgICAgICAgICAgICBhcHBseUNv
dW50cyhkYXRhLT5ub3RUYWtlbik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFN3aXRjaDogewotICAgICAg
ICAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSBibG9jay0+bGFzdCgpLT5zd2l0Y2hEYXRhKCk7
CisgICAgICAgICAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IGJsb2NrLT50ZXJtaW5hbCgpLT5z
d2l0Y2hEYXRhKCk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2Fz
ZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgICAgICAgICBhcHBseUNvdW50cyhkYXRhLT5j
YXNlc1tpXS50YXJnZXQpOwogICAgICAgICAgICAgICAgIGFwcGx5Q291bnRzKGRhdGEtPmZhbGxU
aHJvdWdoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJ
bmplY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDMsOSArMTAzLDEwIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKGJsb2NrLT5sYXN0KCktPm9wKCkgPT0gUmV0dXJuKSB7CisgICAgICAgICAgICBpZiAoYmxv
Y2stPnRlcm1pbmFsKCktPm9wKCkgPT0gUmV0dXJuKSB7CiAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrLT5zaXplKCkgLSAx
LCBTcGVjTm9uZSwgQ2hlY2tUaWVyVXBBdFJldHVybiwgYmxvY2stPmxhc3QoKS0+b3JpZ2luKTsK
KyAgICAgICAgICAgICAgICAgICAgYmxvY2stPmZpbmRUZXJtaW5hbCgpLmluZGV4LCBTcGVjTm9u
ZSwgQ2hlY2tUaWVyVXBBdFJldHVybiwKKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnRlcm1p
bmFsKCktPm9yaWdpbik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDEwICsx
ODksMjQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbV9t
eVJlZkNvdW50cy5nZXQobm9kZSksIG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8
IGJsb2NrLT5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIGJvb2wgZm91bmRUZXJtaW5h
bCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgYmxvY2stPnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsK
LSAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5pc1Rlcm1pbmFsKCkpOwor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5pc1Rlcm1pbmFsKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm91bmRUZXJtaW5hbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGogPSBpICsgMTsgaiA8IGJsb2NrLT5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IGJsb2NrLT5hdChqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChub2RlKSwgbm9kZS0+b3AoKSA9PSBQaGFudG9tIHx8IG5vZGUtPm9wKCkgPT0gUGhh
bnRvbUxvY2FsIHx8IG5vZGUtPm9wKCkgPT0gRmx1c2gpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIHNob3VsZE5v
dEhhdmVUeXBlQ2hlY2soZWRnZS51c2VLaW5kKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBWQUxJREFU
RSgoYmxvY2spLCBmb3VuZFRlcm1pbmFsKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NjAsOCArODYwLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCAiVW5yZWNvZ25pemVkIG5vZGUgaW4gRlRMIGJhY2tlbmQiKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX3N0YXRlLmlzVmFs
aWQoKSAmJiAhbV9ub2RlLT5pc1Rlcm1pbmFsKCkpIHsKKyAgICAgICAgCisgICAgICAgIGlmICht
X25vZGUtPmlzVGVybWluYWwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIGlmICghbV9zdGF0ZS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIHNhZmVseUlu
dmFsaWRhdGVBZnRlclRlcm1pbmF0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY2xvc3Vy
ZS1jYWxsLWV4aXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9jbG9zdXJlLWNhbGwtZXhpdC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY2xvc3VyZS1jYWxsLWV4aXQuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNSBAQAorZnVuY3Rpb24gZm9vKG8sIGkpIHsKKyAgICByZXR1cm4gb1tp
XSgpOworfQorCitub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyAr
K2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKFtmdW5jdGlvbigpIHsgcmV0dXJuIDQyOyB9XSwg
MCk7CisgICAgaWYgKHJlc3VsdCAhPSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0OiAiICsgcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vKFtmdW5jdGlvbigpIHsgcmV0
dXJuIDQzOyB9XSwgMCk7CitpZiAocmVzdWx0ICE9IDQzKQorICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251209</attachid>
            <date>2015-04-20 18:43:11 -0700</date>
            <delta_ts>2015-04-21 15:17:38 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>52304</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzMDM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBA
QAorMjAxNS0wNC0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgYWxsb3cgUGhhbnRvbXMgYWZ0ZXIgdGVybWluYWxzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY3NzgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEl0J3MgaW1wb3J0YW50
IGZvciB1cyB0byBiZSBhYmxlIHRvIHBsYWNlIGxpdmVuZXNzLW1hcmtpbmcgbm9kZXMgYWZ0ZXIg
bm9kZXMgdGhhdCBkbworICAgICAgICB0aGluZ3MuIFRoZXNlIGxpdmVuZXNzLW1hcmtpbmcgbm9k
ZXMgYXJlIG5vcHMuIFByZXZpb3VzbHksIHdlIGRpc2FsbG93ZWQgc3VjaCBub2RlcyBhZnRlcgor
ICAgICAgICB0ZXJtaW5hbHMuIFRoYXQgbWFkZSB0aGluZ3MgYXdrd2FyZCwgZXNwZWNpYWxseSBm
b3IgU3dpdGNoIGFuZCBCcmFuY2gsIHdoaWNoIG1heSBkbworICAgICAgICB0aGluZ3MgdGhhdCBu
ZWNlc3NpdGF0ZSBsaXZlbmVzcyBtYXJrZXJzIChmb3IgZXhhbXBsZSB0aGV5IG1pZ2h0IHdhbnQg
dG8gdXNlIGEgY29udmVydGVkCisgICAgICAgIHZlcnNpb24gb2YgYSB2YWx1ZSByYXRoZXIgdGhh
biB0aGUgdmFsdWUgdGhhdCB3YXMgTW92SGludGVkKS4gV2UgcHJldmlvdXNseSBtYWRlIHRoaXMK
KyAgICAgICAgd29yayBieSBkaXNhbGxvd2luZyBjZXJ0YWluIG9wdGltaXphdGlvbnMgb24gU3dp
dGNoIGFuZCBCcmFuY2gsIHdoaWNoIHdhcyBwcm9iYWJseSBhIGJhZAorICAgICAgICB0aGluZy4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgY2hhbmdlcyBvdXIgSVIgdG8gYWxsb3cgZm9yIHRoZSB0
ZXJtaW5hbCB0byBub3QgYmUgdGhlIGxhc3Qgbm9kZSBpbiBhIGJsb2NrLiBBc2tpbmcKKyAgICAg
ICAgZm9yIHRoZSB0ZXJtaW5hbCBpbnZvbHZlcyBhIHNlYXJjaC4gREZHOjp2YWxpZGF0ZSgpIGNo
ZWNrcyB0aGF0IHRoZSBub2RlcyBhZnRlciB0aGUKKyAgICAgICAgdGVybWluYWwgYXJlIGxpdmVu
ZXNzIG1hcmtlcnMgdGhhdCBoYXZlIG5vIGVmZmVjdHMgb3IgY2hlY2tzLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBpcyBwZXJmLW5ldXRyYWwgYnV0IHdpbGwgYWxsb3cgbW9yZSBvcHRpbWl6YXRp
b25zIGluIHRoZSBmdXR1cmUuIEl0IHdpbGwgYWxzbyBtYWtlCisgICAgICAgIGl0IGNsZWFuZXIg
dG8gZml4IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM3MzUuCisK
KyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmFz
aWNCbG9jazo6cmVwbGFjZVRlcm1pbmFsKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5o
OgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmZpbmRUZXJtaW5hbCk6CisgICAgICAg
IChKU0M6OkRGRzo6QmFzaWNCbG9jazo6dGVybWluYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJh
c2ljQmxvY2s6Omluc2VydEJlZm9yZVRlcm1pbmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNp
Y0Jsb2NrOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpz
dWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckZvckNv
bmRpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6bGFzdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6dGFrZUxhc3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6Omluc2VydEJlZm9yZUxhc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OmFwcGVuZE5vblRlcm1pbmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNp
Y0Jsb2NrOjpyZXBsYWNlVGVybWluYWwpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6cGFyc2VDb2RlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpy
dW4pOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OmNvbnZlcnRU
b0p1bXApOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6Om1lcmdl
QmxvY2tzKToKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplTG9jYWxzSW5C
bG9jayk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGVBbmRJbmRleDo6Tm9kZUFuZEluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlQW5kSW5k
ZXg6Om9wZXJhdG9yISk6CisgICAgICAgICogZGZnL0RGR0RDRVBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpEQ0VQaGFzZTo6Zml4dXBCbG9jayk6CisgICAgICAgICogZGZnL0RGR0Rpc2Fz
c2VtYmxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpjcmVhdGVEdW1w
TGlzdCk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkZpeHVwUGhhc2U6OmZpeHVwQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhh
c2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6aW5qZWN0VHlw
ZUNvbnZlcnNpb25zSW5CbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2xl
YXJQaGFudG9tc0F0RW5kKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHRm9yQWxsS2lsbHMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxMaXZlTm9kZXNBdFRhaWwpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnRlcm1pbmFsc0Fy
ZVZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAg
ICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJn
ZVRvU3VjY2Vzc29ycyk6CisgICAgICAgICogZGZnL0RGR0xJQ01QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6TElDTVBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxJQ01QaGFz
ZTo6YXR0ZW1wdEhvaXN0KToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAg
KiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6ZGV0ZXJtaW5lTWF0ZXJpYWxpemF0
aW9uUG9pbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlOjpwbGFjZU1hdGVyaWFsaXphdGlvblBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6T2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6cHJvbW90ZVN1bmtlbkZpZWxkcyk6CisgICAgICAg
ICogZGZnL0RGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBo
YW50b21SZW1vdmFsUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmRldGVjdFBlZXBIb2xlQnJh
bmNoKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlv
blBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdGF0aWNFeGVjdXRpb25Db3VudEVzdGlt
YXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25Q
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZTo6
cnVuKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlZhbGlkYXRlOjp2YWxpZGF0ZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9jbG9zdXJlLWNhbGwtZXhpdC5qczogQWRkZWQuCisgICAgICAg
IChmb28pOgorCiAyMDE1LTA0LTIwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5j
b20+CiAKICAgICAgICAgQ2xlYW51cCBzb21lIFN0cmluZ0J1aWxkZXIgdXNlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDE4Mjg1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcxLDYgKzcxLDE5IEBAIHZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxz
KHVuc2lnbmVkIG4KICAgICBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlTG9j
YWxzKG5ld051bUxvY2FscywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAordm9pZCBC
YXNpY0Jsb2NrOjpyZXBsYWNlVGVybWluYWwoTm9kZSogbm9kZSkKK3sKKyAgICBOb2RlQW5kSW5k
ZXggcmVzdWx0ID0gZmluZFRlcm1pbmFsKCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIGFw
cGVuZChub2RlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ub2Rlcy5pbnNlcnQocmVzdWx0Lmlu
ZGV4ICsgMSwgbm9kZSk7CisgICAgICAgIHJlc3VsdC5ub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7
CisgICAgfQorICAgIAorICAgIEFTU0VSVCh0ZXJtaW5hbCgpKTsKK30KKwogYm9vbCBCYXNpY0Js
b2NrOjppc0luUGhpcyhOb2RlKiBub2RlKSBjb25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcGhpcy5zaXplKCk7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTYzLDE4ICs2Myw2MyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9j
CiAgICAgTm9kZSogYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAg
ICBOb2RlKiYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gYXQoaSk7IH0KICAgICBOb2Rl
KiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQotICAgIE5vZGUq
IGxhc3QoKSBjb25zdCB7IHJldHVybiBhdChzaXplKCkgLSAxKTsgfQotICAgIE5vZGUqIHRha2VM
YXN0KCkgeyByZXR1cm4gbV9ub2Rlcy50YWtlTGFzdCgpOyB9CisgICAgCisgICAgLy8gVXNlIHRo
aXMgdG8gZmluZCBib3RoIHRoZSBpbmRleCBvZiB0aGUgdGVybWluYWwgYW5kIHRoZSB0ZXJtaW5h
bCBpdHNlbGYgaW4gb25lIGdvLiBNYXkKKyAgICAvLyByZXR1cm4gYSBjbGVhciBOb2RlQW5kSW5k
ZXggaWYgdGhlIGJhc2ljIGJsb2NrIGN1cnJlbnRseSBsYWNrcyBhIHRlcm1pbmFsLiBUaGF0IG1h
eSBoYXBwZW4KKyAgICAvLyBpbiB0aGUgbWlkZGxlIG9mIElSIHRyYW5zZm9ybWF0aW9ucyB3aXRo
aW4gYSBwaGFzZSBidXQgc2hvdWxkIG5ldmVyIGJlIHRoZSBjYXNlIGluIGJldHdlZW4KKyAgICAv
LyBwaGFzZXMuCisgICAgLy8KKyAgICAvLyBUaGUgcmVhc29uIHdoeSB0aGlzIGlzIG1vcmUgdGhh
biBqdXN0ICJhdChzaXplKCkgLSAxKSIgaXMgdGhhdCB3ZSBtYXkgcGxhY2Ugbm9uLXRlcm1pbmFs
CisgICAgLy8gbGl2ZW5lc3MgbWFya2luZyBpbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIHRlcm1pbmFs
LiBUaGlzIGlzIHN1cHBvc2VkIHRvIGhhcHBlbiBpbmZyZXF1ZW50bHkKKyAgICAvLyBidXQgc29t
ZSBiYXNpYyBibG9ja3MgLSBtb3N0IG5vdGFibHkgcmV0dXJuIGJsb2NrcyAtIHdpbGwgaGF2ZSBs
aXZlbmVzcyBtYXJrZXJzIGZvciBhbGwgb2YKKyAgICAvLyB0aGUgZmx1c2hlZCB2YXJpYWJsZXMg
cmlnaHQgYWZ0ZXIgdGhlIHJldHVybi4KKyAgICAvLworICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0
IGRvaW5nIHRoaXMgbGluZWFyIHNlYXJjaCBpcyBiYXNpY2FsbHkgcGVyZi1uZXV0cmFsLCBzbyBs
b25nIGFzIHdlIGZvcmNlCisgICAgLy8gdGhlIG1ldGhvZCB0byBiZSBpbmxpbmVkLiBIZW5jZSB0
aGUgQUxXQVlTX0lOTElORS4KKyAgICBBTFdBWVNfSU5MSU5FIE5vZGVBbmRJbmRleCBmaW5kVGVy
bWluYWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IGkgPSBzaXplKCk7CisgICAgICAg
IHdoaWxlIChpLS0pIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhdChpKTsKKyAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBKdW1wOgorICAgICAg
ICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgICAgICBjYXNlIFN3aXRjaDoKKyAgICAgICAgICAg
IGNhc2UgUmV0dXJuOgorICAgICAgICAgICAgY2FzZSBVbnJlYWNoYWJsZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTm9kZUFuZEluZGV4KG5vZGUsIGkpOworICAgICAgICAgICAgLy8gVGhlIGJp
dHRlciBlbmQgY2FuIGNvbnRhaW4gUGhhbnRvbXMgYW5kIHRoZSBsaWtlLiBUaGVyZSB3aWxsIHBy
b2JhYmx5IG9ubHkgYmUgb25lIG9yIHR3byBub2RlcyBhZnRlciB0aGUgdGVybWluYWwuCisgICAg
ICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAg
ICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBOb2RlQW5kSW5kZXgoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9kZUFuZEluZGV4KCk7CisgICAg
fQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgTm9kZSogdGVybWluYWwoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZpbmRUZXJtaW5hbCgpLm5vZGU7CisgICAgfQorICAgIAogICAgIHZv
aWQgcmVzaXplKHNpemVfdCBzaXplKSB7IG1fbm9kZXMucmVzaXplKHNpemUpOyB9CiAgICAgdm9p
ZCBncm93KHNpemVfdCBzaXplKSB7IG1fbm9kZXMuZ3JvdyhzaXplKTsgfQogICAgIAogICAgIHZv
aWQgYXBwZW5kKE5vZGUqIG5vZGUpIHsgbV9ub2Rlcy5hcHBlbmQobm9kZSk7IH0KLSAgICB2b2lk
IGluc2VydEJlZm9yZUxhc3QoTm9kZSogbm9kZSkKKyAgICB2b2lkIGluc2VydEJlZm9yZVRlcm1p
bmFsKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBhcHBlbmQobGFzdCgpKTsKLSAgICAgICAg
YXQoc2l6ZSgpIC0gMikgPSBub2RlOworICAgICAgICBOb2RlQW5kSW5kZXggcmVzdWx0ID0gZmlu
ZFRlcm1pbmFsKCk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgYXBwZW5kKG5v
ZGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX25vZGVzLmluc2VydChyZXN1bHQuaW5k
ZXgsIG5vZGUpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHJlcGxhY2VUZXJtaW5hbChOb2RlKiBu
b2RlKTsKKyAgICAKICAgICBzaXplX3QgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBwaGlzLnNp
emUoKSArIHNpemUoKTsgfQogICAgIE5vZGUqIG5vZGUoc2l6ZV90IGkpIGNvbnN0CiAgICAgewpA
QCAtOTMsMTUgKzEzOCwxNSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNC
bG9jCiAgICAgTm9kZSogZmlyc3RPcmlnaW5Ob2RlKCk7CiAgICAgTm9kZU9yaWdpbiBmaXJzdE9y
aWdpbigpOwogICAgIAotICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSB7IHJldHVybiBsYXN0
KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQorICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSB7IHJl
dHVybiB0ZXJtaW5hbCgpLT5udW1TdWNjZXNzb3JzKCk7IH0KICAgICAKICAgICBCYXNpY0Jsb2Nr
KiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGxhc3Qo
KS0+c3VjY2Vzc29yKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHRlcm1pbmFsKCktPnN1Y2Nlc3Nv
cihpbmRleCk7CiAgICAgfQogICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JGb3JDb25kaXRpb24o
Ym9vbCBjb25kaXRpb24pCiAgICAgewotICAgICAgICByZXR1cm4gbGFzdCgpLT5zdWNjZXNzb3JG
b3JDb25kaXRpb24oY29uZGl0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRlcm1pbmFsKCktPnN1Y2Nl
c3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0KICAgICAKICAgICBjbGFzcyBTdWNj
ZXNzb3JzSXRlcmFibGUgewpAQCAtMTgzLDYgKzIyOCw5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDog
UmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBQYXJhbXM+CiAg
ICAgTm9kZSogYXBwZW5kTm9uVGVybWluYWwoR3JhcGgmLCBTcGVjdWxhdGVkVHlwZSwgUGFyYW1z
Li4uKTsKICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBQYXJhbXM+CisgICAgTm9kZSog
cmVwbGFjZVRlcm1pbmFsKEdyYXBoJiwgU3BlY3VsYXRlZFR5cGUsIFBhcmFtcy4uLik7CisgICAg
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAogICAgIHZvaWQg
ZGlkTGluaygpCkBAIC0yNjEsNiArMzA5LDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3Vu
dGVkPEJhc2ljQmxvYwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTU0FEYXRhPiBzc2E7CiAgICAgCiBw
cml2YXRlOgorICAgIAogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CiAgICAgQmxvY2tO
b2RlTGlzdCBtX25vZGVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00NSw3ICs0NSwxNSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBQYXJhbXM+CiBOb2RlKiBC
YXNpY0Jsb2NrOjphcHBlbmROb25UZXJtaW5hbChHcmFwaCYgZ3JhcGgsIFNwZWN1bGF0ZWRUeXBl
IHR5cGUsIFBhcmFtcy4uLiBwYXJhbXMpCiB7CiAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRk
Tm9kZSh0eXBlLCBwYXJhbXMuLi4pOwotICAgIGluc2VydEJlZm9yZUxhc3QocmVzdWx0KTsKKyAg
ICBpbnNlcnRCZWZvcmVUZXJtaW5hbChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lLi4uIFBhcmFtcz4KK05vZGUqIEJhc2ljQmxvY2s6OnJlcGxhY2VU
ZXJtaW5hbChHcmFwaCYgZ3JhcGgsIFNwZWN1bGF0ZWRUeXBlIHR5cGUsIFBhcmFtcy4uLiBwYXJh
bXMpCit7CisgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZSh0eXBlLCBwYXJhbXMuLi4p
OworICAgIHJlcGxhY2VUZXJtaW5hbChyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSAvKgorLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTYyMiw0MCArNjIyLDQwIEBAIHByaXZhdGU6CiAgICAg
ICAgIHJldHVybiBkYXRhOwogICAgIH0KICAgICAKKyAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGUq
IG5vZGUpCisgICAgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFy
c2luZygpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBhcHBlbmRlZCAiLCBub2RlLCAi
ICIsIEdyYXBoOjpvcE5hbWUobm9kZS0+b3AoKSksICJcbiIpOworICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kKG5vZGUpOworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisgICAgCiAg
ICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSog
Y2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3Vs
dCA9IG1fZ3JhcGguYWRkTm9kZSgKICAgICAgICAgICAgIFNwZWNOb25lLCBvcCwgY3VycmVudE5v
ZGVPcmlnaW4oKSwgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksCiAgICAgICAgICAgICBFZGdl
KGNoaWxkMykpOwotICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKLSAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZChyZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBy
ZXR1cm4gYWRkVG9HcmFwaChyZXN1bHQpOwogICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5v
ZGVUeXBlIG9wLCBFZGdlIGNoaWxkMSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQz
ID0gRWRnZSgpKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2Rl
KAogICAgICAgICAgICAgU3BlY05vbmUsIG9wLCBjdXJyZW50Tm9kZU9yaWdpbigpLCBjaGlsZDEs
IGNoaWxkMiwgY2hpbGQzKTsKLSAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7Ci0gICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgcmV0dXJuIGFkZFRvR3JhcGgocmVzdWx0KTsKICAgICB9CiAgICAgTm9kZSogYWRkVG9H
cmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNo
aWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQg
PSBtX2dyYXBoLmFkZE5vZGUoCiAgICAgICAgICAgICBTcGVjTm9uZSwgb3AsIGN1cnJlbnROb2Rl
T3JpZ2luKCksIGluZm8sIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLAogICAgICAgICAgICAg
RWRnZShjaGlsZDMpKTsKLSAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7Ci0gICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuIGFkZFRvR3JhcGgocmVzdWx0KTsKICAgICB9CiAgICAgTm9kZSogYWRkVG9HcmFw
aChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIsIE5vZGUqIGNoaWxkMSA9
IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgewogICAgICAgICBO
b2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCiAgICAgICAgICAgICBTcGVjTm9uZSwgb3As
IGN1cnJlbnROb2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwKICAgICAgICAgICAgIEVkZ2UoY2hp
bGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwotICAgICAgICBBU1NFUlQob3AgIT0g
UGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChyZXN1bHQpOwogICAgIH0K
ICAgICAKICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZ1RhZywgTm9kZVR5cGUgb3As
IE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yKQpAQCAtNjYzLDggKzY2Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKICAgICAgICAgICAgIFNw
ZWNOb25lLCBOb2RlOjpWYXJBcmcsIG9wLCBjdXJyZW50Tm9kZU9yaWdpbigpLCBpbmZvMSwgaW5m
bzIsCiAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gbV9udW1Q
YXNzZWRWYXJBcmdzLCBtX251bVBhc3NlZFZhckFyZ3MpOwotICAgICAgICBBU1NFUlQob3AgIT0g
UGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOworICAgICAgICBh
ZGRUb0dyYXBoKHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICBtX251bVBhc3NlZFZhckFyZ3Mg
PSAwOwogICAgICAgICAKQEAgLTEzNTksNyArMTM1OCwxMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjppbmxpbmVDYWxsKE5vZGUqIGNhCiAgICAgLy8gSWYgdGhlcmUgd2FzIGEgcmV0dXJuLCBidXQg
bm8gZWFybHkgcmV0dXJucywgdGhlbiB3ZSdyZSBkb25lLiBXZSBhbGxvdyBwYXJzaW5nIG9mCiAg
ICAgLy8gdGhlIGNhbGxlciB0byBjb250aW51ZSBpbiB3aGF0ZXZlciBiYXNpYyBibG9jayB3ZSdy
ZSBpbiByaWdodCBub3cuCiAgICAgaWYgKCFpbmxpbmVTdGFja0VudHJ5Lm1fZGlkRWFybHlSZXR1
cm4gJiYgaW5saW5lU3RhY2tFbnRyeS5tX2RpZFJldHVybikgewotICAgICAgICBBU1NFUlQobGFz
dEJsb2NrLT5pc0VtcHR5KCkgfHwgIWxhc3RCbG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOwor
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQorICAgICAg
ICAgICAgZGF0YUxvZygiICAgIEFsbG93aW5nIHBhcnNpbmcgdG8gY29udGludWUgaW4gbGFzdCBp
bmxpbmVkIGJsb2NrLlxuIik7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobGFzdEJsb2NrLT5p
c0VtcHR5KCkgfHwgIWxhc3RCbG9jay0+dGVybWluYWwoKSk7CiAgICAgICAgIAogICAgICAgICAv
LyBJZiB3ZSBjcmVhdGVkIG5ldyBibG9ja3MgdGhlbiB0aGUgbGFzdCBibG9jayBuZWVkcyBsaW5r
aW5nLCBidXQgaW4gdGhlCiAgICAgICAgIC8vIGNhbGxlci4gSXQgZG9lc24ndCBuZWVkIHRvIGJl
IGxpbmtlZCB0bywgYnV0IGl0IG5lZWRzIG91dGdvaW5nIGxpbmtzLgpAQCAtMTM2Nyw2ICsxMzY5
LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYQogICAgICAgICAg
ICAgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3Nlcywgc2V0IHRoZSBieXRlY29kZUJlZ2luLiBOb3Rl
IHRoYXQgdGhpcyBkb2Vzbid0IG1hdHRlcgogICAgICAgICAgICAgLy8gZm9yIHJlbGVhc2UgYnVp
bGRzIGJlY2F1c2UgdGhpcyBibG9jayB3aWxsIG5ldmVyIHNlcnZlIGFzIGEgcG90ZW50aWFsIHRh
cmdldAogICAgICAgICAgICAgLy8gaW4gdGhlIGxpbmtlcidzIGJpbmFyeSBzZWFyY2guCisgICAg
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgUmVwdXJwb3NpbmcgbGFzdCBibG9jayBmcm9tICIs
IGxhc3RCbG9jay0+Ynl0ZWNvZGVCZWdpbiwgIiB0byAiLCBtX2N1cnJlbnRJbmRleCwgIlxuIik7
CiAgICAgICAgICAgICBsYXN0QmxvY2stPmJ5dGVjb2RlQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsK
ICAgICAgICAgICAgIGlmIChjYWxsZXJMaW5rYWJpbGl0eSA9PSBDYWxsZXJEb2VzTm9ybWFsTGlu
a2luZykgewogICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQpAQCAtMTM3OSw4ICsxMzgzLDEx
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2EKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFy
c2luZygpKQorICAgICAgICBkYXRhTG9nKCIgICAgQ3JlYXRpbmcgbmV3IGJsb2NrIGFmdGVyIGlu
bGluaW5nLlxuIik7CisKICAgICAvLyBJZiB3ZSBnZXQgdG8gdGhpcyBwb2ludCB0aGVuIGFsbCBi
bG9ja3MgbXVzdCBlbmQgaW4gc29tZSBzb3J0IG9mIHRlcm1pbmFscy4KLSAgICBBU1NFUlQobGFz
dEJsb2NrLT5sYXN0KCktPmlzVGVybWluYWwoKSk7CisgICAgQVNTRVJUKGxhc3RCbG9jay0+dGVy
bWluYWwoKSk7CiAKICAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBiYXNpYyBibG9jayBmb3Ig
dGhlIGNvbnRpbnVhdGlvbiBhdCB0aGUgY2FsbGVyLgogICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBi
bG9jayA9IGFkb3B0UmVmKG5ldyBCYXNpY0Jsb2NrKG5leHRPZmZzZXQsIG1fbnVtQXJndW1lbnRz
LCBtX251bUxvY2FscywgUE5hTikpOwpAQCAtMTM5MSw3ICsxMzk4LDcgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrVG9MaW5rID0gaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2Vk
QmxvY2tzW2ldLm1fYmxvY2s7CiAgICAgICAgIEFTU0VSVCghYmxvY2tUb0xpbmstPmlzTGlua2Vk
KTsKLSAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrVG9MaW5rLT5sYXN0KCk7CisgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9ja1RvTGluay0+dGVybWluYWwoKTsKICAgICAgICAgQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gSnVtcCk7CiAgICAgICAgIEFTU0VSVCghbm9kZS0+dGFyZ2V0QmxvY2soKSk7CiAg
ICAgICAgIG5vZGUtPnRhcmdldEJsb2NrKCkgPSBibG9jay5nZXQoKTsKQEAgLTE4MDIsNyArMTgw
OSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgIG1fY3VycmVu
dEJsb2NrID0gY29udGludWF0aW9uQmxvY2suZ2V0KCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbGFuZGluZ0Jsb2Nrcy5zaXplKCk7IGktLTspCi0gICAgICAgIGxhbmRpbmdCbG9ja3Nb
aV0tPmxhc3QoKS0+dGFyZ2V0QmxvY2soKSA9IGNvbnRpbnVhdGlvbkJsb2NrLmdldCgpOworICAg
ICAgICBsYW5kaW5nQmxvY2tzW2ldLT50ZXJtaW5hbCgpLT50YXJnZXRCbG9jaygpID0gY29udGlu
dWF0aW9uQmxvY2suZ2V0KCk7CiAgICAgCiAgICAgbV9jdXJyZW50SW5kZXggPSBvbGRPZmZzZXQ7
CiAgICAgCkBAIC0zMTI1LDkgKzMxMzIsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qbXA6IHsKICAgICAgICAgICAgIGludCBy
ZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zm
c2V0KSk7CiAgICAgICAgICAgICBpZiAocmVsYXRpdmVPZmZzZXQgPD0gMCkKICAgICAgICAgICAg
ICAgICBmbHVzaEZvclRlcm1pbmFsKCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9w
SW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9qbXApOwogICAgICAgICB9CiAKQEAgLTMyNDcsOCArMzI1NCw4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZTo6
d2l0aEJ5dGVjb2RlSW5kZXgobV9ncmFwaC5mcmVlemUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4odGFibGUubWluICsgaSkpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBmbHVzaElmVGVybWluYWwoZGF0YSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRj
aCwgT3BJbmZvKCZkYXRhKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKSkpOworICAgICAgICAgICAgZmx1c2hJZlRlcm1pbmFsKGRhdGEpOwogICAg
ICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX2ltbSk7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtMzI2Nyw4ICszMjc0LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKAogICAgICAgICAg
ICAgICAgICAgICBTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRleChMYXp5SlNWYWx1ZTo6c2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKHRhYmxlLm1pbiArIGkpLCB0YXJnZXQpKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGZsdXNoSWZUZXJtaW5hbChkYXRhKTsKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoU3dpdGNoLCBPcEluZm8oJmRhdGEpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICBmbHVzaElmVGVybWluYWwo
ZGF0YSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9zd2l0Y2hfY2hhcik7CiAgICAgICAg
IH0KIApAQCAtMzI4NywxNCArMzI5NCwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoCiAgICAgICAg
ICAgICAgICAgICAgIFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVlOjpr
bm93blN0cmluZ0ltcGwoaXRlci0+a2V5LmdldCgpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBmbHVzaElmVGVybWluYWwoZGF0YSk7CiAgICAgICAgICAgICBhZGRUb0dy
YXBoKFN3aXRjaCwgT3BJbmZvKCZkYXRhKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOworICAgICAgICAgICAgZmx1c2hJZlRlcm1pbmFsKGRh
dGEpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX3N0cmluZyk7CiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIG9wX3JldDoKLSAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7
CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBm
bHVzaEZvclJldHVybigpOwogICAgICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5t
X3JldHVyblZhbHVlLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgc2V0RGlyZWN0KG1f
aW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLCBJbW1lZGlhdGVTZXRXaXRoRmx1c2gpOwogICAg
ICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZGlkUmV0dXJuID0gdHJ1ZTsKQEAgLTMz
MTgsMTIgKzMzMjUsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkpOworICAgICAgICAgICAgZmx1c2hGb3JSZXR1cm4o
KTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBvcF9lbmQ6Ci0gICAgICAgICAgICBmbHVzaEZvclJldHVybigpOwogICAgICAgICAg
ICAgQVNTRVJUKCFpbmxpbmVDYWxsRnJhbWUoKSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFJl
dHVybiwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KSkpOworICAgICAgICAgICAgZmx1c2hGb3JSZXR1cm4oKTsKICAgICAgICAgICAgIExBU1RfT1BD
T0RFKG9wX2VuZCk7CiAKICAgICAgICAgY2FzZSBvcF90aHJvdzoKQEAgLTM4NTAsNyArMzg1OCw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2MKIHsKICAgICBBU1NF
UlQoIWJsb2NrLT5pc0xpbmtlZCk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNFbXB0eSgpKTsKLSAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmxhc3QoKTsKKyAgICBOb2RlKiBub2RlID0gYmxvY2stPnRl
cm1pbmFsKCk7CiAgICAgQVNTRVJUKG5vZGUtPmlzVGVybWluYWwoKSk7CiAgICAgCiAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CkBAIC00MTMwLDEwICs0MTM4LDEzIEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAgICAgICAgICAgIC8vIGFyZSBhdCB0aGUgZW5kIG9m
IGFuIGlubGluZSBmdW5jdGlvbiwgb3Igd2UgcmVhbGl6ZWQgdGhhdCB3ZQogICAgICAgICAgICAg
Ly8gc2hvdWxkIHN0b3AgcGFyc2luZyBiZWNhdXNlIHRoZXJlIHdhcyBhIHJldHVybiBpbiB0aGUg
Zmlyc3QKICAgICAgICAgICAgIC8vIGJhc2ljIGJsb2NrLgotICAgICAgICAgICAgQVNTRVJUKG1f
Y3VycmVudEJsb2NrLT5pc0VtcHR5KCkgfHwgbV9jdXJyZW50QmxvY2stPmxhc3QoKS0+aXNUZXJt
aW5hbCgpIHx8IChtX2N1cnJlbnRJbmRleCA9PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNp
emUoKSAmJiBpbmxpbmVDYWxsRnJhbWUoKSkgfHwgIXNob3VsZENvbnRpbnVlUGFyc2luZyk7Cisg
ICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSB8fCBtX2N1cnJlbnRC
bG9jay0+dGVybWluYWwoKSB8fCAobV9jdXJyZW50SW5kZXggPT0gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5zaXplKCkgJiYgaW5saW5lQ2FsbEZyYW1lKCkpIHx8ICFzaG91bGRDb250aW51ZVBh
cnNpbmcpOwogCi0gICAgICAgICAgICBpZiAoIXNob3VsZENvbnRpbnVlUGFyc2luZykKKyAgICAg
ICAgICAgIGlmICghc2hvdWxkQ29udGludWVQYXJzaW5nKSB7CisgICAgICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiRG9uZSBwYXJzaW5nICIsICpjb2RlQmxvY2ssICJcbiIpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2sgPSAwOwogICAgICAgICB9IHdoaWxlIChtX2N1cnJlbnRJbmRleCA8IGxp
bWl0KTsKQEAgLTQxNDEsNiArNDE1Miw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29k
ZUJsb2NrKCkKIAogICAgIC8vIFNob3VsZCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaW5z
dHJ1Y3Rpb25zLgogICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA9PSBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKSk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VERkdCeXRl
Q29kZVBhcnNpbmcoKSkKKyAgICAgICAgZGF0YUxvZygiRG9uZSBwYXJzaW5nICIsICpjb2RlQmxv
Y2ssICIgKGZlbGwgb2ZmIGVuZClcbiIpOwogfQogCiBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZH
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChibG9jay0+bGFzdCgpLT5vcCgp
KSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChibG9jay0+dGVybWluYWwoKS0+b3AoKSkgewog
ICAgICAgICAgICAgICAgIGNhc2UgSnVtcDogewogICAgICAgICAgICAgICAgICAgICAvLyBTdWNj
ZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4gbWVyZ2UuCiAgICAgICAgICAgICAgICAgICAg
IGlmIChibG9jay0+c3VjY2Vzc29yKDApLT5wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKQEAg
LTk5LDE3ICs5OSwxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoYmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlT3JpZ2luIGJvdW5kYXJ5Tm9kZU9yaWdpbiA9IGJsb2NrLT5sYXN0KCktPm9y
aWdpbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+bGFzdCgpLT5jb252ZXJ0
VG9QaGFudG9tKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5s
YXN0KCktPnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
KiB0ZXJtaW5hbCA9IGJsb2NrLT50ZXJtaW5hbCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCh0ZXJtaW5hbC0+aXNUZXJtaW5hbCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlT3JpZ2luIGJvdW5kYXJ5Tm9kZU9yaWdpbiA9IHRlcm1pbmFsLT5vcmlnaW47
CisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrLCBqZXR0
aXNvbmVkQmxvY2ssIGJvdW5kYXJ5Tm9kZU9yaWdpbik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5yZXBsYWNlVGVybWluYWwoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBib3VuZGFy
eU5vZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0YXJn
ZXRCbG9jaykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChibG9jay0+dGVybWluYWwoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTEyOSw3ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIFN3aXRjaDog
ewotICAgICAgICAgICAgICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gYmxvY2stPmxhc3QoKS0+
c3dpdGNoRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gYmxv
Y2stPnRlcm1pbmFsKCktPnN3aXRjaERhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIC8vIFBydW5lIG91dCBjYXNlcyB0aGF0IGVuZCB1cCBqdW1waW5nIHRv
IGRlZmF1bHQuCiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
YXRhLT5jYXNlcy5zaXplKCk7ICsraSkgewpAQCAtMTQ5LDggKzE1MSw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgLy8gU3dpdGNoIG9uIGNvbnN0YW50IC0+IGpldHRpc29uIGFsbCBvdGhlciB0YXJnZXRz
IGFuZCBtZXJnZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCktPmNoaWxk
MSgpLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1
ZSogdmFsdWUgPSBibG9jay0+bGFzdCgpLT5jaGlsZDEoKS0+Y29uc3RhbnQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGJsb2NrLT50ZXJtaW5hbCgpLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIHZhbHVlID0gYmxvY2st
PnRlcm1pbmFsKCktPmNoaWxkMSgpLT5jb25zdGFudCgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgVHJpU3RhdGUgZm91bmQgPSBGYWxzZVRyaVN0YXRlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2sgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBmb3VuZCA9PSBGYWxzZVRyaVN0
YXRlICYmIGktLTspIHsKQEAgLTE4MywxMSArMTg1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gYm91bmRhcnlOb2RlT3Jp
Z2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJsb2NrLT5sYXN0KCktPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlKiB0ZXJtaW5hbCA9IGJsb2NrLT50ZXJtaW5hbCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gYm91bmRhcnlOb2RlT3JpZ2luID0gdGVybWluYWwt
Pm9yaWdpbjsKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGpldHRpc29uZWRCbG9ja3Muc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2tzW2ldLCBib3VuZGFy
eU5vZGVPcmlnaW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmRO
b2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLT5yZXBsYWNlVGVybWluYWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBib3VuZGFyeU5vZGVPcmlnaW4sIE9wSW5m
byh0YXJnZXRCbG9jaykpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5uZXJDaGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKQEAgLTI1Mywx
MyArMjU3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAg
ICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9jaywgdGFyZ2V0QmxvY2ssIG5vQmxvY2tzKCkpOwog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTm9kZSogYnJhbmNoID0gYmxvY2stPmxhc3Qo
KTsKLSAgICAgICAgICAgIEFTU0VSVChicmFuY2gtPmlzVGVybWluYWwoKSk7CisgICAgICAgICAg
ICBOb2RlKiBicmFuY2ggPSBibG9jay0+dGVybWluYWwoKTsKICAgICAgICAgICAgIEFTU0VSVChi
cmFuY2gtPm9wKCkgPT0gQnJhbmNoIHx8IGJyYW5jaC0+b3AoKSA9PSBTd2l0Y2gpOwotICAgICAg
ICAgICAgYnJhbmNoLT5jb252ZXJ0VG9QaGFudG9tKCk7Ci0gICAgICAgICAgICBBU1NFUlQoYnJh
bmNoLT5yZWZDb3VudCgpID09IDEpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBibG9jay0+
YXBwZW5kTm9kZSgKKworICAgICAgICAgICAgYmxvY2stPnJlcGxhY2VUZXJtaW5hbCgKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYnJhbmNoLT5vcmlnaW4sIE9wSW5m
byh0YXJnZXRCbG9jaykpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzE4LDEwICszMTksMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIC8vIFJlbW92ZSB0aGUgdGVybWluYWwgb2YgZmly
c3RCbG9jayBzaW5jZSB3ZSBkb24ndCBuZWVkIGl0IGFueW1vcmUuIFdlbGwsIHdlIGRvbid0CiAg
ICAgICAgIC8vIHJlYWxseSByZW1vdmUgaXQ7IHdlIGFjdHVhbGx5IHR1cm4gaXQgaW50byBhIFBo
YW50b20uCi0gICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT5sYXN0KCktPmlzVGVybWluYWwoKSk7
Ci0gICAgICAgIE5vZGVPcmlnaW4gYm91bmRhcnlOb2RlT3JpZ2luID0gZmlyc3RCbG9jay0+bGFz
dCgpLT5vcmlnaW47Ci0gICAgICAgIGZpcnN0QmxvY2stPmxhc3QoKS0+Y29udmVydFRvUGhhbnRv
bSgpOwotICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+bGFzdCgpLT5yZWZDb3VudCgpID09IDEp
OworICAgICAgICBOb2RlKiB0ZXJtaW5hbCA9IGZpcnN0QmxvY2stPnRlcm1pbmFsKCk7CisgICAg
ICAgIEFTU0VSVCh0ZXJtaW5hbC0+aXNUZXJtaW5hbCgpKTsKKyAgICAgICAgTm9kZU9yaWdpbiBi
b3VuZGFyeU5vZGVPcmlnaW4gPSB0ZXJtaW5hbC0+b3JpZ2luOworICAgICAgICB0ZXJtaW5hbC0+
Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICBBU1NFUlQodGVybWluYWwtPnJlZkNvdW50KCkg
PT0gMSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBqZXR0aXNvbmVkQmxv
Y2tzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogamV0dGlzb25lZEJs
b2NrID0gamV0dGlzb25lZEJsb2Nrc1tpXTsKQEAgLTM0Miw3ICszNDQsNyBAQCBwcml2YXRlOgog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT5zaXplKCk7ICsraSkK
ICAgICAgICAgICAgIGZpcnN0QmxvY2stPmFwcGVuZChzZWNvbmRCbG9jay0+YXQoaSkpOwogICAg
ICAgICAKLSAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsK
KyAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPnRlcm1pbmFsKCktPmlzVGVybWluYWwoKSk7CiAg
ICAgICAgIAogICAgICAgICAvLyBGaXggdGhlIHByZWRlY2Vzc29ycyBvZiBteSBuZXcgc3VjY2Vz
c29ycy4gVGhpcyBpcyB0cmlja3ksIHNpbmNlIHdlIGFyZSBnb2luZyB0byByZXNldAogICAgICAg
ICAvLyBhbGwgcHJlZGVjZXNzb3JzIGFueXdheSBkdWUgdG8gcmVhY2hhYmlsaXR5IGFuYWx5c2lz
LiBCdXQgd2UgbmVlZCB0byBmaXggdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4Mjg1NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2Myw2ICszNjMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBtX2F2YWlsYWJsZUZvck9TUi5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBu
b2RlLT5jaGlsZDEoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAgICAgICAgICAgICBtX2F2YWlsYWJs
ZUZvck9TUi5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBFZGdlKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNiArMjc0LDI5
IEBAIHZvaWQgc3RhcnRDcmFzaGluZygpOwogCiBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzQ3Jh
c2hpbmcoKTsKIAorc3RydWN0IE5vZGVBbmRJbmRleCB7CisgICAgTm9kZUFuZEluZGV4KCkKKyAg
ICAgICAgOiBub2RlKG51bGxwdHIpCisgICAgICAgICwgaW5kZXgoVUlOVF9NQVgpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBOb2RlQW5kSW5kZXgoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgp
CisgICAgICAgIDogbm9kZShub2RlKQorICAgICAgICAsIGluZGV4KGluZGV4KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFub2RlID09IChpbmRleCA9PSBVSU5UX01BWCkpOworICAgIH0KKyAgICAK
KyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW5vZGU7
CisgICAgfQorICAgIAorICAgIE5vZGUqIG5vZGU7CisgICAgdW5zaWduZWQgaW5kZXg7Cit9Owor
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9uIDE4Mjg1NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDgsMTggKzE0OCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIENo
ZWNrIGlmIHdlIGhhZCBqdXN0IGtpbGxlZCBpdC4KICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbSB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBDaGVj
aykgewogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhab21i
aWVIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7CiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gRWRnZSgpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFpvbWJpZUhp
bnQ6IHsKLSAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHkgd2UgYXNzdW1lIHRoYXQgRENFIHJ1
bnMgb25seSBvbmNlLgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
ICAgICAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVIYXNWYXJBcmdzKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Y2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGls
ZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTgyODU3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTIsOCArMTEyLDYgQEAgVmVjdG9yPERpc2Fzc2VtYmxlcjo6RHVtcGVk
T3A+IERpc2Fzc2VtYgogICAgICAgICBhcHBlbmQocmVzdWx0LCBvdXQsIHByZXZpb3VzT3JpZ2lu
KTsKICAgICAgICAgTm9kZSogbGFzdE5vZGVGb3JEaXNhc3NlbWJseSA9IGJsb2NrLT5hdCgwKTsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIGlmICghYmxvY2stPmF0KGkpLT53aWxsSGF2ZUNvZGVHZW5Pck9TUigpICYmICFP
cHRpb25zOjpzaG93QWxsREZHTm9kZXMoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBjdXJyZW50TGFiZWw7CiAgICAgICAgICAg
ICBIYXNoTWFwPE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWw+OjppdGVyYXRvciBpdGVyID0g
bV9sYWJlbEZvck5vZGUuZmluZChibG9jay0+YXQoaSkpOwogICAgICAgICAgICAgaWYgKGl0ZXIg
IT0gbV9sYWJlbEZvck5vZGUuZW5kKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFkZFBoYW50b21zSWZOZWNlc3NhcnkoKTsKICAg
ICAgICAgICAgIGZpeHVwTm9kZShtX2N1cnJlbnROb2RlKTsKICAgICAgICAgfQotICAgICAgICBj
bGVhclBoYW50b21zQXRFbmQoKTsKKyAgICAgICAgYWRkUGhhbnRvbXNJZk5lY2Vzc2FyeSgpOwog
ICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9CiAgICAgCkBAIC03
MjUsOSArNzI1LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpCiAgICAgICAgICAgICAgICAgZml4
RWRnZTxPYmplY3RPck90aGVyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGp1c3QgYmUgYWJsZSB0byBkbyBzaG91bGRTcGVjdWxhdGVJbnQzMk9y
Qm9vbGVhbigpIGFuZAotICAgICAgICAgICAgLy8gc2hvdWxkU3BlY3VsYXRlTnVtYmVyT3JCb29s
ZWFuKCkgaGVyZSwgYnV0IHdlIGNhbid0IGJlY2F1c2UgdGhlbiB0aGUgQnJhbmNoCi0gICAgICAg
ICAgICAvLyBjb3VsZCBzcGVjdWxhdGUgb24gdGhlIHJlc3VsdCBvZiBhIG5vbi1zcGVjdWxhdGl2
ZSBjb252ZXJzaW9uIG5vZGUuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI2Nzc4CisgICAgICAgICAgICAvLyBzaG91bGRTcGVjdWxhdGVO
dW1iZXJPckJvb2xlYW4oKSBoZXJlIG5vdyB0aGF0CisgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2Nzc4IGlzIGZpeGVkLgogICAgICAgICAg
ICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludDMyKCkpCiAgICAg
ICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQpAQCAt
MTk5Nyw3ICsxOTk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHRyeVRvUmVsYXhSZXByZXNl
bnRhdGlvbihtX2N1cnJlbnROb2RlKTsKICAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxE
UkVOKG1fZ3JhcGgsIG1fY3VycmVudE5vZGUsIGluamVjdFR5cGVDb252ZXJzaW9uc0ZvckVkZ2Up
OwogICAgICAgICB9Ci0gICAgICAgIGNsZWFyUGhhbnRvbXNBdEVuZCgpOworICAgICAgICBhZGRQ
aGFudG9tc0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxv
Y2spOwogICAgIH0KICAgICAKQEAgLTIxNjIsMjEgKzIxNjEsNiBAQCBwcml2YXRlOgogICAgICAg
ICBtX3JlcXVpcmVkUGhhbnRvbXMucmVzaXplKDApOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNs
ZWFyUGhhbnRvbXNBdEVuZCgpCi0gICAgewotICAgICAgICAvLyBUZXJtaW5hbCBub2RlcyBkb24n
dCBuZWVkIHBvc3QtcGhhbnRvbXMsIGFuZCBpbnNlcnRpbmcgdGhlbSB3b3VsZCB2aW9sYXRlCi0g
ICAgICAgIC8vIHRoZSBjdXJyZW50IHJlcXVpcmVtZW50IHRoYXQgYSB0ZXJtaW5hbCBpcyB0aGUg
bGFzdCB0aGluZyBpbiBhIGJsb2NrLiBXZQotICAgICAgICAvLyBzaG91bGQgZXZlbnR1YWxseSBj
aGFuZ2UgdGhhdCByZXF1aXJlbWVudC4gQ3VycmVudGx5IHdlIGdldCBhcm91bmQgdGhpcyBieQot
ICAgICAgICAvLyBlbnN1cmluZyB0aGF0IGFsbCB0ZXJtaW5hbHMgYWNjZXB0IGp1c3Qgb25lIGlu
cHV0LCBhbmQgaWYgdGhhdCBpbnB1dCBpcyBhCi0gICAgICAgIC8vIGNvbnZlcnNpb24gbm9kZSB0
aGVuIG5vIGZ1cnRoZXIgc3BlY3VsYXRpb25zIHdpbGwgYmUgcGVyZm9ybWVkLiBTZWUKLSAgICAg
ICAgLy8gcmVmZXJlbmNlcyB0byB0aGUgYnVnLCBiZWxvdywgZm9yIHBsYWNlcyB3aGVyZSB3ZSBo
YXZlIHRvIGhhdmUgaGFja3MgdG8KLSAgICAgICAgLy8gd29yayBhcm91bmQgdGhpcy4KLSAgICAg
ICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcyBieSBhbGxvd2luZyBQaGFudG9tcyBhZnRlciB0
ZXJtaW5hbHMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjY3NzgKLSAgICAgICAgCi0gICAgICAgIG1fcmVxdWlyZWRQaGFudG9tcy5yZXNpemUo
MCk7Ci0gICAgfQotICAgIAogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgdW5zaWduZWQg
bV9pbmRleEluQmxvY2s7CiAgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgJKHJldmlzaW9uIDE4Mjg1NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsMTMgKzQ4LDEzIEBAIHZvaWQgZm9yQWxsTGl2ZU5vZGVzQXRUYWlsKEdyYXBoJiBn
cmFwaCwKICAgICAgICAgICAgIGZ1bmN0b3Iobm9kZSk7CiAgICAgfQogICAgIAotICAgIERGR19B
U1NFUlQoZ3JhcGgsIGJsb2NrLT5sYXN0KCksIGJsb2NrLT5sYXN0KCktPm9yaWdpbi5mb3JFeGl0
LmlzU2V0KCkpOworICAgIERGR19BU1NFUlQoZ3JhcGgsIGJsb2NrLT50ZXJtaW5hbCgpLCBibG9j
ay0+dGVybWluYWwoKS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSk7CiAgICAgCiAgICAgQXZhaWxh
YmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRh
aWw7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gYXZhaWxhYmlsaXR5TWFwLm1fbG9jYWxzLnNpemUo
KTsgaS0tOykgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gYXZhaWxhYmlsaXR5TWFw
Lm1fbG9jYWxzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGkpOwogICAgICAgICAKLSAgICAgICAg
aWYgKCFncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKHJlZywgYmxvY2stPmxhc3QoKS0+b3JpZ2luLmZv
ckV4aXQpKQorICAgICAgICBpZiAoIWdyYXBoLmlzTGl2ZUluQnl0ZWNvZGUocmVnLCBibG9jay0+
dGVybWluYWwoKS0+b3JpZ2luLmZvckV4aXQpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIAogICAgICAgICBhdmFpbGFiaWxpdHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODI4NTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzY1LDYgKzM2NSwxNSBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0CiAgICAgb3V0LnByaW50KCJcbiIpOwogfQogCitib29sIEdyYXBoOjp0ZXJtaW5hbHNB
cmVWYWxpZCgpCit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2Nrc0luTmF0dXJh
bE9yZGVyKCkpIHsKKyAgICAgICAgaWYgKCFibG9jay0+dGVybWluYWwoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgR3JhcGg6
OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIEJh
c2ljQmxvY2sqIGJsb2NrLCBQaGlOb2RlRHVtcE1vZGUgcGhpTm9kZUR1bXBNb2RlLCBEdW1wQ29u
dGV4dCogY29udGV4dCkKIHsKICAgICBvdXQucHJpbnQocHJlZml4LCAiQmxvY2sgIiwgKmJsb2Nr
LCAiICgiLCBpbkNvbnRleHQoYmxvY2stPmF0KDApLT5vcmlnaW4uc2VtYW50aWMsIGNvbnRleHQp
LCAiKToiLCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIgKHNraXBwZWQpIiwgYmxvY2stPmlz
T1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIsICJcbiIpOwpAQCAtMzc1LDEzICszODQs
MTYgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogICAgICAgICBv
dXQucHJpbnQoIiAiLCAqYmxvY2stPnByZWRlY2Vzc29yc1tpXSk7CiAgICAgb3V0LnByaW50KCJc
biIpOwogICAgIG91dC5wcmludChwcmVmaXgsICIgIFN1Y2Nlc3NvcnM6Iik7Ci0gICAgZm9yIChC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAgIG91
dC5wcmludCgiICIsICpzdWNjZXNzb3IpOwotICAgICAgICBpZiAobV9wcmVQb3N0TnVtYmVyaW5n
LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIG91dC5wcmludCgiICgiLCBtX3ByZVBvc3ROdW1iZXJp
bmcuZWRnZUtpbmQoYmxvY2ssIHN1Y2Nlc3NvciksICIpIik7Ci0gICAgfQorICAgIGlmIChibG9j
ay0+dGVybWluYWwoKSkgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJs
b2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiICIsICpzdWNjZXNz
b3IpOworICAgICAgICAgICAgaWYgKG1fcHJlUG9zdE51bWJlcmluZy5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICAgICAgb3V0LnByaW50KCIgKCIsIG1fcHJlUG9zdE51bWJlcmluZy5lZGdlS2luZChi
bG9jaywgc3VjY2Vzc29yKSwgIikiKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBv
dXQucHJpbnQoIiA8aW52YWxpZD4iKTsKICAgICBvdXQucHJpbnQoIlxuIik7Ci0gICAgaWYgKG1f
ZG9taW5hdG9ycy5pc1ZhbGlkKCkpIHsKKyAgICBpZiAobV9kb21pbmF0b3JzLmlzVmFsaWQoKSAm
JiB0ZXJtaW5hbHNBcmVWYWxpZCgpKSB7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERv
bWluYXRlZCBieTogIiwgbV9kb21pbmF0b3JzLmRvbWluYXRvcnNPZihibG9jayksICJcbiIpOwog
ICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBEb21pbmF0ZXM6ICIsIG1fZG9taW5hdG9ycy5i
bG9ja3NEb21pbmF0ZWRCeShibG9jayksICJcbiIpOwogICAgICAgICBvdXQucHJpbnQocHJlZml4
LCAiICBEb21pbmFuY2UgRnJvbnRpZXI6ICIsIG1fZG9taW5hdG9ycy5kb21pbmFuY2VGcm9udGll
ck9mKGJsb2NrKSwgIlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ly8gQ29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQgbWF5IGFsbG93IGFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50aWZpZXIgbmFtZXMpLgogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCksIER1bXBDb250ZXh0KiA9IDApOworICAg
IAorICAgIGJvb2wgdGVybWluYWxzQXJlVmFsaWQoKTsKKyAgICAKICAgICBlbnVtIFBoaU5vZGVE
dW1wTW9kZSB7IER1bXBMaXZlUGhpc09ubHksIER1bXBBbGxQaGlzIH07CiAgICAgdm9pZCBkdW1w
QmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIEJhc2ljQmxvY2sq
LCBQaGlOb2RlRHVtcE1vZGUsIER1bXBDb250ZXh0Kik7CiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiwgRWRnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2MSw3ICszNjEsNyBAQCBib29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJn
ZShCYXNpY0JsCiAKIGlubGluZSBib29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3Vj
Y2Vzc29ycyhCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrKQogewotICAgIE5vZGUqIHRlcm1pbmFsID0g
YmFzaWNCbG9jay0+bGFzdCgpOworICAgIE5vZGUqIHRlcm1pbmFsID0gYmFzaWNCbG9jay0+dGVy
bWluYWwoKTsKICAgICAKICAgICBBU1NFUlQodGVybWluYWwtPmlzVGVybWluYWwoKSk7CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCShyZXZp
c2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI4LDcgKzEyOCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBwcmVIZWFkZXIgPSBwcmVkZWNlc3NvcjsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBwcmVIZWFkZXItPmxhc3QoKSwg
cHJlSGVhZGVyLT5sYXN0KCktPm9wKCkgPT0gSnVtcCk7CisgICAgICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIHByZUhlYWRlci0+dGVybWluYWwoKSwgcHJlSGVhZGVyLT50ZXJtaW5hbCgpLT5v
cCgpID09IEp1bXApOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBkYXRhLnByZUhlYWRlciA9
IHByZUhlYWRlcjsKICAgICAgICAgfQpAQCAtMjM3LDEwICsyMzcsMTAgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAiXG4iKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZGF0YS5w
cmVIZWFkZXItPmluc2VydEJlZm9yZUxhc3Qobm9kZSk7CisgICAgICAgIGRhdGEucHJlSGVhZGVy
LT5pbnNlcnRCZWZvcmVUZXJtaW5hbChub2RlKTsKICAgICAgICAgbm9kZS0+b3duZXIgPSBkYXRh
LnByZUhlYWRlcjsKICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW5hbE9yaWdpbiA9IG5vZGUtPm9y
aWdpbjsKLSAgICAgICAgbm9kZS0+b3JpZ2luLmZvckV4aXQgPSBkYXRhLnByZUhlYWRlci0+bGFz
dCgpLT5vcmlnaW4uZm9yRXhpdDsKKyAgICAgICAgbm9kZS0+b3JpZ2luLmZvckV4aXQgPSBkYXRh
LnByZUhlYWRlci0+dGVybWluYWwoKS0+b3JpZ2luLmZvckV4aXQ7CiAgICAgICAgIAogICAgICAg
ICAvLyBNb2RpZnkgdGhlIHN0YXRlcyBhdCB0aGUgZW5kIG9mIHRoZSBwcmVIZWFkZXIgb2YgdGhl
IGxvb3Agd2UgaG9pc3RlZCB0bywKICAgICAgICAgLy8gYW5kIGFsbCBwcmUtaGVhZGVycyBpbnNp
ZGUgdGhlIGxvb3AuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldFN0YWNrLCBOb2RlUmVzdWx0SlMpIFwKICAgICBc
CiAgICAgbWFjcm8oTW92SGludCwgMCkgXAotICAgIG1hY3JvKFpvbWJpZUhpbnQsIDApIFwKKyAg
ICBtYWNybyhab21iaWVIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUGhhbnRv
bSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEhhcmRQaGFudG9tLCBOb2RlTXVzdEdl
bmVyYXRlKSAvKiBMaWtlIFBoYW50b20sIGJ1dCB3ZSBuZXZlciByZW1vdmUgYW55IG9mIGl0cyBj
aGlsZHJlbi4gKi8gXAogICAgIG1hY3JvKENoZWNrLCBOb2RlTXVzdEdlbmVyYXRlKSAvKiBVc2Vk
IGlmIHdlIHdhbnQganVzdCBhIHR5cGUgY2hlY2sgYnV0IG5vdCBsaXZlbmVzcy4gTm9uLWNoZWNr
aW5nIHVzZXMgd2lsbCBiZSByZW1vdmVkLiAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
LmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
YmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUyLDcg
KzM1Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFuZGxl
ZCB0aGUgY2FzZSB3aGVyZSB0aGUgcHJlZGVjZXNzb3IgaGFzIG11bHRpcGxlIHN1Y2Nlc3NvcnMu
CiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgYmxvY2ssIGJsb2NrLT5u
dW1TdWNjZXNzb3JzKCkgPT0gMSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBjcmVhdGVNYXRlcmlhbGl6ZShhbGxvY2F0aW9uLCBibG9jay0+bGFzdCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgY3JlYXRlTWF0ZXJpYWxpemUoYWxsb2NhdGlvbiwgYmxvY2stPnRl
cm1pbmFsKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtNDYxLDggKzQ2MSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBv
aW50ID0gYmxvY2stPnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBOb2RlKiB1cHNpbG9uV2hlcmUg
PSBibG9jay0+bGFzdCgpOworICAgICAgICAgICAgc2l6ZV90IHVwc2lsb25JbnNlcnRpb25Qb2lu
dCA9IGJsb2NrLT5maW5kVGVybWluYWwoKS5pbmRleDsKKyAgICAgICAgICAgIE5vZGUqIHVwc2ls
b25XaGVyZSA9IGJsb2NrLT50ZXJtaW5hbCgpOwogICAgICAgICAgICAgTm9kZU9yaWdpbiB1cHNp
bG9uT3JpZ2luID0gdXBzaWxvbldoZXJlLT5vcmlnaW47CiAgICAgICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgewogICAgICAgICAg
ICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3Iu
cGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewpAQCAtNzA4LDggKzcwOCw4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEdvdHRhIGRy
b3Agc29tZSBVcHNpbG9ucy4KLSAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9p
bnQgPSBibG9jay0+c2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9y
aWdpbiA9IGJsb2NrLT5sYXN0KCktPm9yaWdpbjsKKyAgICAgICAgICAgIHNpemVfdCB1cHNpbG9u
SW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+ZmluZFRlcm1pbmFsKCkuaW5kZXg7CisgICAgICAgICAg
ICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+dGVybWluYWwoKS0+b3JpZ2luOwog
ICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNj
ZXNzb3JzKCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhp
RGVmIDogbV9zc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tUmVtb3ZhbFBo
YXNlLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGxhc3ROb2RlID0gbnVsbHB0cjsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZUluZGV4ID4gMSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgbGFzdE5vZGUgPSBibG9jay0+YXQoc291cmNlSW5kZXggLSAyKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBkb2Vz
bid0IG5lZWQgdG8gc3BlY2lhbGl6ZSBmb3IgUGhhbnRvbS4gbGFzdE5vZGUgY291bGQgYmUgYW55
IG5vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaXNuJ3Qgc3ViamVjdCB0byBE
Q0UuIEJ1dCB3ZSBrZWVwIGl0IHNpbXBsZSBmb3Igbm93LgogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGxhc3ROb2RlLT5vcCgpICE9IFBoYW50b20KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBsYXN0Tm9kZS0+b3JpZ2luLmZvckV4aXQgIT0gbm9kZS0+b3JpZ2luLmZvckV4aXQp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE5vZGUgPSBudWxscHRyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDE4Mjg1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQx
LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2st
PnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9j
ay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBv
aW50ID0gYmxvY2stPmZpbmRUZXJtaW5hbCgpLmluZGV4OworICAgICAgICAgICAgTm9kZU9yaWdp
biB1cHNpbG9uT3JpZ2luID0gYmxvY2stPnRlcm1pbmFsKCktPm9yaWdpbjsKICAgICAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7
CiAgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNh
bGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNp
b24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsOCArMzM1LDggQEAgcHVibGljOgogICAg
ICAgICAgICAgLy8gc2VlbXMgZGFuZ2Vyb3VzIGJlY2F1c2UgdGhlIFVwc2lsb24gd2lsbCBoYXZl
IGEgY2hlY2tpbmcgVXNlS2luZC4gQnV0LCB3ZSB3aWxsIG5vdAogICAgICAgICAgICAgLy8gYWN0
dWFsbHkgYmUgcGVyZm9ybWluZyB0aGUgY2hlY2sgYXQgdGhlIHBvaW50IG9mIHRoZSBVcHNpbG9u
OyB0aGUgY2hlY2sgd2lsbAogICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZlIGJlZW4gcGVyZm9y
bWVkIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgb3JpZ2luYWwgU2V0TG9jYWwgd2FzLgotICAgICAg
ICAgICAgc2l6ZV90IHVwc2lsb25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOwot
ICAgICAgICAgICAgTm9kZU9yaWdpbiB1cHNpbG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3Jp
Z2luOworICAgICAgICAgICAgc2l6ZV90IHVwc2lsb25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5m
aW5kVGVybWluYWwoKS5pbmRleDsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdp
biA9IGJsb2NrLT50ZXJtaW5hbCgpLT5vcmlnaW47CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IHN1Y2Nlc3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgt
LTspIHsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA9IGJsb2Nr
LT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwogICAgICAgICAgICAgICAgIGZvciAoU1NBQ2Fs
Y3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3Nv
ckJsb2NrKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODMyLDExICsxODMyLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBNb3ZIaW50OgotICAg
IGNhc2UgWm9tYmllSGludDogeworICAgIGNhc2UgTW92SGludDogewogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9k
ZS0+dW5saW5rZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwor
ICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgc3dpdGNoIChu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZp
c2lvbiAxODI4NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIxLDExICsxOTIxLDE1IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAKLSAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgY2FzZSBab21iaWVIaW50OiB7CisgICAg
Y2FzZSBNb3ZIaW50OiB7CiAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAi
VW5leHBlY3RlZCBub2RlIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBab21iaWVIaW50OiB7CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUt
PnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICBzd2l0
Y2ggKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NDIsMTEgKzE0NDIsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgICAgICAgICAgY29tcGlsZU1v
dkhpbnQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgICAgICAgICBy
ZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZExvY2FsKCksIFZpcnR1YWxSZWdp
c3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgaWYgKGJlbG9u
Z3NJbk1pbmlmaWVkR3JhcGgobV9jdXJyZW50Tm9kZS0+b3AoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIG1fbWluaWZpZWRHcmFwaC0+YXBwZW5kKE1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUobV9jdXJy
ZW50Tm9kZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODEsNyArNjgxLDcgQEAg
cHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGxhc3ROb2RlIGlz
IGEgYnJhbmNoIG9uIHRoaXMgbm9kZS4KLSAgICAgICAgTm9kZSogbGFzdE5vZGUgPSBtX2Jsb2Nr
LT5sYXN0KCk7CisgICAgICAgIE5vZGUqIGxhc3ROb2RlID0gbV9ibG9jay0+dGVybWluYWwoKTsK
ICAgICAgICAgcmV0dXJuIGxhc3ROb2RlLT5vcCgpID09IEJyYW5jaCAmJiBsYXN0Tm9kZS0+Y2hp
bGQxKCkgPT0gbV9jdXJyZW50Tm9kZSA/IG1fYmxvY2stPnNpemUoKSAtIDEgOiBVSU5UX01BWDsK
ICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4
ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0
aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDE2
ICs2MywxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKGJsb2NrLT5s
YXN0KCktPm9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmxvY2stPnRlcm1pbmFsKCktPm9w
KCkpIHsKICAgICAgICAgICAgIGNhc2UgQnJhbmNoOiB7Ci0gICAgICAgICAgICAgICAgQnJhbmNo
RGF0YSogZGF0YSA9IGJsb2NrLT5sYXN0KCktPmJyYW5jaERhdGEoKTsKKyAgICAgICAgICAgICAg
ICBCcmFuY2hEYXRhKiBkYXRhID0gYmxvY2stPnRlcm1pbmFsKCktPmJyYW5jaERhdGEoKTsKICAg
ICAgICAgICAgICAgICBhcHBseUNvdW50cyhkYXRhLT50YWtlbik7CiAgICAgICAgICAgICAgICAg
YXBwbHlDb3VudHMoZGF0YS0+bm90VGFrZW4pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTd2l0Y2g6IHsK
LSAgICAgICAgICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gYmxvY2stPmxhc3QoKS0+c3dpdGNo
RGF0YSgpOworICAgICAgICAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSBibG9jay0+dGVybWlu
YWwoKS0+c3dpdGNoRGF0YSgpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRh
dGEtPmNhc2VzLnNpemUoKTsgaS0tOykKICAgICAgICAgICAgICAgICAgICAgYXBwbHlDb3VudHMo
ZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKICAgICAgICAgICAgICAgICBhcHBseUNvdW50cyhkYXRh
LT5mYWxsVGhyb3VnaCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJV
cENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4Mjg1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAzLDkgKzEwMywxMCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChibG9jay0+bGFzdCgpLT5vcCgpID09IFJldHVybikgeworICAgICAgICAgICAg
aWYgKGJsb2NrLT50ZXJtaW5hbCgpLT5vcCgpID09IFJldHVybikgewogICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBibG9jay0+c2l6
ZSgpIC0gMSwgU3BlY05vbmUsIENoZWNrVGllclVwQXRSZXR1cm4sIGJsb2NrLT5sYXN0KCktPm9y
aWdpbik7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5maW5kVGVybWluYWwoKS5pbmRleCwg
U3BlY05vbmUsIENoZWNrVGllclVwQXRSZXR1cm4sCisgICAgICAgICAgICAgICAgICAgIGJsb2Nr
LT50ZXJtaW5hbCgpLT5vcmlnaW4pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
OSwxMCArMTg5LDI0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9k
ZSksIG1fbXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MCA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgICAgICBib29sIGZvdW5k
VGVybWluYWwgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IGJs
b2NrLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQoaSk7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+aXNUZXJtaW5h
bCgpKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNUZXJtaW5hbCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZvdW5kVGVybWluYWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBibG9jay0+c2l6ZSgpOyArK2opIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUgPSBibG9jay0+YXQoaik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9wKCkgPT0gUGhhbnRvbSB8fCBub2RlLT5vcCgp
ID09IFBoYW50b21Mb2NhbCB8fCBub2RlLT5vcCgpID09IEZsdXNoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBz
aG91bGROb3RIYXZlVHlwZUNoZWNrKGVkZ2UudXNlS2luZCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAg
VkFMSURBVEUoKGJsb2NrKSwgZm91bmRUZXJtaW5hbCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CiAgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODI4NTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODYwLDggKzg2MCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlVucmVjb2duaXplZCBub2RlIGluIEZUTCBiYWNrZW5k
Iik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAgICAgIGlmICghbV9zdGF0
ZS5pc1ZhbGlkKCkgJiYgIW1fbm9kZS0+aXNUZXJtaW5hbCgpKSB7CisgICAgICAgIAorICAgICAg
ICBpZiAobV9ub2RlLT5pc1Rlcm1pbmFsKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIW1fc3RhdGUuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBz
YWZlbHlJbnZhbGlkYXRlQWZ0ZXJUZXJtaW5hdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2Nsb3N1cmUtY2FsbC1leGl0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvY2xvc3VyZS1jYWxsLWV4aXQuanMJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Nsb3N1cmUtY2FsbC1leGl0LmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUgQEAKK2Z1bmN0aW9uIGZvbyhvLCBpKSB7CisgICAgcmV0
dXJuIG9baV0oKTsKK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhbZnVuY3Rpb24oKSB7IHJldHVybiA0
MjsgfV0sIDApOworICAgIGlmIChyZXN1bHQgIT0gNDIpCisgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbyhbZnVuY3Rpb24o
KSB7IHJldHVybiA0MzsgfV0sIDApOworaWYgKHJlc3VsdCAhPSA0MykKKyAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0Owo=
</data>
<flag name="review"
          id="276005"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>